[gnome-builder] prefs: add GbSourceStyleSchemeButton and GbSourceStyleSchemeWidget
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] prefs: add GbSourceStyleSchemeButton and GbSourceStyleSchemeWidget
- Date: Thu, 16 Oct 2014 21:38:10 +0000 (UTC)
commit d9c127148b025c6bf50e95cb7d34c55eda7b85e1
Author: Christian Hergert <christian hergert me>
Date: Thu Oct 16 14:37:42 2014 -0700
prefs: add GbSourceStyleSchemeButton and GbSourceStyleSchemeWidget
This are convenience classes for selecting a style scheme in a more visual
way than just from a list of scheme names. This shows a bit of a preview
of the style-scheme using C as the language in the buffer.
This could probably use a bunch of work, but I think it's better than just
a list even at this point.
src/editor/gb-source-style-scheme-button.c | 262 +++++++++++++++++++++++++++
src/editor/gb-source-style-scheme-button.h | 61 +++++++
src/editor/gb-source-style-scheme-widget.c | 264 ++++++++++++++++++++++++++++
src/editor/gb-source-style-scheme-widget.h | 59 ++++++
src/gnome-builder.mk | 4 +
5 files changed, 650 insertions(+), 0 deletions(-)
---
diff --git a/src/editor/gb-source-style-scheme-button.c b/src/editor/gb-source-style-scheme-button.c
new file mode 100644
index 0000000..94ff515
--- /dev/null
+++ b/src/editor/gb-source-style-scheme-button.c
@@ -0,0 +1,262 @@
+/* gb-source-style-scheme-button.c
+ *
+ * Copyright (C) 2014 Christian Hergert <christian hergert me>
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glib/gi18n.h>
+
+#include "gb-source-style-scheme-button.h"
+#include "gb-source-style-scheme-widget.h"
+
+struct _GbSourceStyleSchemeButtonPrivate
+{
+ gchar *style_scheme_name;
+
+ GtkLabel *label;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (GbSourceStyleSchemeButton,
+ gb_source_style_scheme_button,
+ GTK_TYPE_TOGGLE_BUTTON)
+
+enum {
+ PROP_0,
+ PROP_STYLE_SCHEME,
+ PROP_STYLE_SCHEME_NAME,
+ LAST_PROP
+};
+
+static GParamSpec *gParamSpecs [LAST_PROP];
+
+GtkWidget *
+gb_source_style_scheme_button_new (void)
+{
+ return g_object_new (GB_TYPE_SOURCE_STYLE_SCHEME_BUTTON, NULL);
+}
+
+const gchar *
+gb_source_style_scheme_button_get_style_scheme_name (GbSourceStyleSchemeButton *button)
+{
+ g_return_val_if_fail (GB_IS_SOURCE_STYLE_SCHEME_BUTTON (button), NULL);
+
+ return button->priv->style_scheme_name;
+}
+
+static void
+gb_source_style_scheme_button_update_label (GbSourceStyleSchemeButton *button)
+{
+ GtkSourceStyleScheme *scheme;
+ const gchar *label;
+
+ g_return_if_fail (GB_IS_SOURCE_STYLE_SCHEME_BUTTON (button));
+
+ scheme = gb_source_style_scheme_button_get_style_scheme (button);
+ if (!scheme)
+ g_return_if_reached ();
+
+ label = gtk_source_style_scheme_get_name (scheme);
+ gtk_label_set_label (button->priv->label, label);
+}
+
+void
+gb_source_style_scheme_button_set_style_scheme_name (GbSourceStyleSchemeButton *button,
+ const gchar *style_scheme_name)
+{
+ g_return_if_fail (GB_IS_SOURCE_STYLE_SCHEME_BUTTON (button));
+
+ if (!style_scheme_name)
+ style_scheme_name = "tango";
+
+ if (style_scheme_name != button->priv->style_scheme_name)
+ {
+ g_free (button->priv->style_scheme_name);
+ button->priv->style_scheme_name = g_strdup (style_scheme_name);
+ gb_source_style_scheme_button_update_label (button);
+ g_object_notify_by_pspec (G_OBJECT (button),
+ gParamSpecs [PROP_STYLE_SCHEME_NAME]);
+ g_object_notify_by_pspec (G_OBJECT (button),
+ gParamSpecs [PROP_STYLE_SCHEME]);
+ }
+}
+
+/**
+ * gb_source_style_scheme_button_get_style_scheme:
+ *
+ * Returns: (transfer none): A #GtkSourceStyleScheme.
+ */
+GtkSourceStyleScheme *
+gb_source_style_scheme_button_get_style_scheme (GbSourceStyleSchemeButton *button)
+{
+ GtkSourceStyleSchemeManager *manager;
+
+ g_return_val_if_fail (GB_IS_SOURCE_STYLE_SCHEME_BUTTON (button), NULL);
+
+ manager = gtk_source_style_scheme_manager_get_default ();
+
+ return gtk_source_style_scheme_manager_get_scheme (manager,
+ button->priv->style_scheme_name);
+}
+
+static void
+gb_source_style_scheme_button_toggled (GtkToggleButton *button)
+{
+ GbSourceStyleSchemeButton *self = (GbSourceStyleSchemeButton *)button;
+ GtkDialog *dialog;
+ GtkWidget *toplevel;
+ GbSourceStyleSchemeWidget *chooser;
+ GtkWidget *content_area;
+
+ g_return_if_fail (GB_IS_SOURCE_STYLE_SCHEME_BUTTON (button));
+
+ if (!gtk_toggle_button_get_active (button))
+ return;
+
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button));
+ dialog = g_object_new (GTK_TYPE_DIALOG,
+ "transient-for", toplevel,
+ "title", _("Select a Style"),
+ "use-header-bar", TRUE,
+ NULL);
+ gtk_dialog_add_buttons (dialog,
+ _("Cancel"), GTK_RESPONSE_CANCEL,
+ _("Select"), GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response (dialog, GTK_RESPONSE_OK);
+
+ chooser = g_object_new (GB_TYPE_SOURCE_STYLE_SCHEME_WIDGET,
+ "height-request", 325,
+ "style-scheme-name", self->priv->style_scheme_name,
+ "visible", TRUE,
+ "width-request", 450,
+ NULL);
+
+ content_area = gtk_dialog_get_content_area (dialog);
+ gtk_container_add (GTK_CONTAINER (content_area), GTK_WIDGET (chooser));
+
+ if (gtk_dialog_run (dialog) == GTK_RESPONSE_OK)
+ {
+ gchar *name;
+
+ g_object_get (chooser, "style-scheme-name", &name, NULL);
+ gb_source_style_scheme_button_set_style_scheme_name (self, name);
+ g_free (name);
+ }
+
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ gtk_toggle_button_set_active (button, FALSE);
+}
+
+static void
+gb_source_style_scheme_button_finalize (GObject *object)
+{
+ GbSourceStyleSchemeButtonPrivate *priv = GB_SOURCE_STYLE_SCHEME_BUTTON (object)->priv;
+
+ g_clear_pointer (&priv->style_scheme_name, g_free);
+
+ G_OBJECT_CLASS (gb_source_style_scheme_button_parent_class)->finalize (object);
+}
+
+static void
+gb_source_style_scheme_button_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GbSourceStyleSchemeButton *self = GB_SOURCE_STYLE_SCHEME_BUTTON (object);
+
+ switch (prop_id)
+ {
+ case PROP_STYLE_SCHEME:
+ g_value_set_object (value,
+ gb_source_style_scheme_button_get_style_scheme (self));
+ break;
+
+ case PROP_STYLE_SCHEME_NAME:
+ g_value_set_string (value, self->priv->style_scheme_name);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gb_source_style_scheme_button_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GbSourceStyleSchemeButton *self = GB_SOURCE_STYLE_SCHEME_BUTTON (object);
+
+ switch (prop_id)
+ {
+ case PROP_STYLE_SCHEME_NAME:
+ gb_source_style_scheme_button_set_style_scheme_name (self,
+ g_value_get_string (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gb_source_style_scheme_button_class_init (GbSourceStyleSchemeButtonClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkToggleButtonClass *toggle_class = GTK_TOGGLE_BUTTON_CLASS (klass);
+
+ object_class->finalize = gb_source_style_scheme_button_finalize;
+ object_class->get_property = gb_source_style_scheme_button_get_property;
+ object_class->set_property = gb_source_style_scheme_button_set_property;
+
+ toggle_class->toggled = gb_source_style_scheme_button_toggled;
+
+ gParamSpecs [PROP_STYLE_SCHEME_NAME] =
+ g_param_spec_string ("style-scheme-name",
+ _("Style Scheme Name"),
+ _("THe name of the GtkSourceStyleScheme."),
+ "tango",
+ (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (object_class, PROP_STYLE_SCHEME_NAME,
+ gParamSpecs [PROP_STYLE_SCHEME_NAME]);
+
+ gParamSpecs [PROP_STYLE_SCHEME] =
+ g_param_spec_object ("style-scheme",
+ _("Style Scheme"),
+ _("The style scheme as an object."),
+ GTK_SOURCE_TYPE_STYLE_SCHEME,
+ (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (object_class, PROP_STYLE_SCHEME,
+ gParamSpecs [PROP_STYLE_SCHEME]);
+}
+
+static void
+gb_source_style_scheme_button_init (GbSourceStyleSchemeButton *self)
+{
+ self->priv = gb_source_style_scheme_button_get_instance_private (self);
+
+ self->priv->label = g_object_new (GTK_TYPE_LABEL,
+ "halign", GTK_ALIGN_CENTER,
+ "valign", GTK_ALIGN_BASELINE,
+ "visible", TRUE,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->priv->label));
+
+ self->priv->style_scheme_name = g_strdup ("tango");
+ gb_source_style_scheme_button_update_label (self);
+}
diff --git a/src/editor/gb-source-style-scheme-button.h b/src/editor/gb-source-style-scheme-button.h
new file mode 100644
index 0000000..4ec8804
--- /dev/null
+++ b/src/editor/gb-source-style-scheme-button.h
@@ -0,0 +1,61 @@
+/* gb-source-style-scheme-button.h
+ *
+ * Copyright (C) 2014 Christian Hergert <christian hergert me>
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GB_SOURCE_STYLE_SCHEME_BUTTON_H
+#define GB_SOURCE_STYLE_SCHEME_BUTTON_H
+
+#include <gtk/gtk.h>
+#include <gtksourceview/gtksource.h>
+
+G_BEGIN_DECLS
+
+#define GB_TYPE_SOURCE_STYLE_SCHEME_BUTTON (gb_source_style_scheme_button_get_type())
+#define GB_SOURCE_STYLE_SCHEME_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
GB_TYPE_SOURCE_STYLE_SCHEME_BUTTON, GbSourceStyleSchemeButton))
+#define GB_SOURCE_STYLE_SCHEME_BUTTON_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
GB_TYPE_SOURCE_STYLE_SCHEME_BUTTON, GbSourceStyleSchemeButton const))
+#define GB_SOURCE_STYLE_SCHEME_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
GB_TYPE_SOURCE_STYLE_SCHEME_BUTTON, GbSourceStyleSchemeButtonClass))
+#define GB_IS_SOURCE_STYLE_SCHEME_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
GB_TYPE_SOURCE_STYLE_SCHEME_BUTTON))
+#define GB_IS_SOURCE_STYLE_SCHEME_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
GB_TYPE_SOURCE_STYLE_SCHEME_BUTTON))
+#define GB_SOURCE_STYLE_SCHEME_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
GB_TYPE_SOURCE_STYLE_SCHEME_BUTTON, GbSourceStyleSchemeButtonClass))
+
+typedef struct _GbSourceStyleSchemeButton GbSourceStyleSchemeButton;
+typedef struct _GbSourceStyleSchemeButtonClass GbSourceStyleSchemeButtonClass;
+typedef struct _GbSourceStyleSchemeButtonPrivate GbSourceStyleSchemeButtonPrivate;
+
+struct _GbSourceStyleSchemeButton
+{
+ GtkToggleButton parent;
+
+ /*< private >*/
+ GbSourceStyleSchemeButtonPrivate *priv;
+};
+
+struct _GbSourceStyleSchemeButtonClass
+{
+ GtkToggleButtonClass parent;
+};
+
+GType gb_source_style_scheme_button_get_type (void);
+GtkWidget *gb_source_style_scheme_button_new (void);
+GtkSourceStyleScheme *gb_source_style_scheme_button_get_style_scheme (GbSourceStyleSchemeButton
*button);
+const gchar *gb_source_style_scheme_button_get_style_scheme_name (GbSourceStyleSchemeButton
*button);
+void gb_source_style_scheme_button_set_style_scheme_name (GbSourceStyleSchemeButton *button,
+ const gchar
*style_scheme_name);
+
+G_END_DECLS
+
+#endif /* GB_SOURCE_STYLE_SCHEME_BUTTON_H */
diff --git a/src/editor/gb-source-style-scheme-widget.c b/src/editor/gb-source-style-scheme-widget.c
new file mode 100644
index 0000000..71f0392
--- /dev/null
+++ b/src/editor/gb-source-style-scheme-widget.c
@@ -0,0 +1,264 @@
+/* gb-source-style-scheme-widget.c
+ *
+ * Copyright (C) 2014 Christian Hergert <christian hergert me>
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glib/gi18n.h>
+#include <gtksourceview/gtksource.h>
+
+#include "gb-source-style-scheme-widget.h"
+
+struct _GbSourceStyleSchemeWidgetPrivate
+{
+ GtkBox *vbox;
+ GtkListBox *list_box;
+ GtkScrolledWindow *scroller;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (GbSourceStyleSchemeWidget,
+ gb_source_style_scheme_widget,
+ GTK_TYPE_BIN)
+
+enum {
+ PROP_0,
+ PROP_STYLE_SCHEME_NAME,
+ LAST_PROP
+};
+
+static GParamSpec *gParamSpecs [LAST_PROP];
+
+GtkWidget *
+gb_source_style_scheme_widget_new (void)
+{
+ return g_object_new (GB_TYPE_SOURCE_STYLE_SCHEME_WIDGET, NULL);
+}
+
+const gchar *
+gb_source_style_scheme_widget_get_style_scheme_name (GbSourceStyleSchemeWidget *widget)
+{
+ GtkListBoxRow *row;
+
+ g_return_val_if_fail (GB_IS_SOURCE_STYLE_SCHEME_WIDGET (widget), NULL);
+
+ row = gtk_list_box_get_selected_row (widget->priv->list_box);
+
+ if (row)
+ return g_object_get_data (G_OBJECT (row), "scheme_id");
+
+ return NULL;
+}
+
+void
+gb_source_style_scheme_widget_set_style_scheme_name (GbSourceStyleSchemeWidget *widget,
+ const gchar *style_scheme_name)
+{
+ GList *children;
+ GList *iter;
+
+ g_return_if_fail (GB_IS_SOURCE_STYLE_SCHEME_WIDGET (widget));
+
+ children = gtk_container_get_children (GTK_CONTAINER (widget->priv->list_box));
+
+ for (iter = children; iter; iter = iter->next)
+ {
+ const gchar *cur;
+
+ cur = g_object_get_data (G_OBJECT (iter->data), "scheme_id");
+
+ if (0 == g_strcmp0 (cur, style_scheme_name))
+ {
+ gtk_list_box_select_row (widget->priv->list_box, iter->data);
+ break;
+ }
+ }
+
+ g_list_free (children);
+}
+
+static GtkListBoxRow *
+make_row (GtkSourceStyleScheme *scheme,
+ GtkSourceLanguage *language,
+ PangoFontDescription *font_desc)
+{
+ GtkListBoxRow *row;
+ GtkSourceBuffer *buffer;
+ GtkSourceView *view;
+ const gchar *scheme_id;
+ gchar *text;
+
+ g_return_val_if_fail (GTK_SOURCE_IS_STYLE_SCHEME (scheme), NULL);
+ g_return_val_if_fail (GTK_SOURCE_IS_LANGUAGE (language), NULL);
+ g_return_val_if_fail (font_desc, NULL);
+
+ row = g_object_new (GTK_TYPE_LIST_BOX_ROW,
+ "visible", TRUE,
+ NULL);
+
+ scheme_id = gtk_source_style_scheme_get_id (scheme);
+ g_object_set_data_full (G_OBJECT (row), "scheme_id",
+ g_strdup (scheme_id), g_free);
+
+ buffer = g_object_new (GTK_SOURCE_TYPE_BUFFER,
+ "highlight-matching-brackets", FALSE,
+ "language", language,
+ "style-scheme", scheme,
+ NULL);
+
+ text = g_strdup_printf ("/* %s */\n#include <gnome-builder.h>",
+ gtk_source_style_scheme_get_name (scheme));
+ gtk_text_buffer_set_text (GTK_TEXT_BUFFER (buffer), text, -1);
+
+ view = g_object_new (GTK_SOURCE_TYPE_VIEW,
+ "buffer", buffer,
+ "can-focus", FALSE,
+ "cursor-visible", FALSE,
+ "editable", FALSE,
+ "visible", TRUE,
+ "show-line-numbers", TRUE,
+ "right-margin-position", 30,
+ "show-right-margin", TRUE,
+ NULL);
+ gtk_widget_override_font (GTK_WIDGET (view), font_desc);
+ gtk_container_add (GTK_CONTAINER (row), GTK_WIDGET (view));
+
+ return row;
+}
+
+static void
+gb_source_style_scheme_widget_populate (GbSourceStyleSchemeWidget *widget)
+{
+ GtkSourceLanguageManager *lm;
+ GtkSourceLanguage *lang;
+ GtkSourceStyleSchemeManager *manager;
+ PangoFontDescription *font_desc;
+ const gchar * const *scheme_ids;
+ guint i;
+
+ g_assert (GB_IS_SOURCE_STYLE_SCHEME_WIDGET (widget));
+
+ manager = gtk_source_style_scheme_manager_get_default ();
+ scheme_ids = gtk_source_style_scheme_manager_get_scheme_ids (manager);
+
+ lm = gtk_source_language_manager_get_default ();
+ lang = gtk_source_language_manager_get_language (lm, "c");
+
+ font_desc = pango_font_description_from_string ("Monospace");
+
+ for (i = 0; scheme_ids [i]; i++)
+ {
+ GtkListBoxRow *row;
+ GtkSourceStyleScheme *scheme;
+
+ scheme = gtk_source_style_scheme_manager_get_scheme (manager, scheme_ids [i]);
+ row = make_row (scheme, lang, font_desc);
+ gtk_container_add (GTK_CONTAINER (widget->priv->list_box), GTK_WIDGET (row));
+ }
+
+ pango_font_description_free (font_desc);
+}
+
+static void
+gb_source_style_scheme_widget_constructed (GObject *object)
+{
+ G_OBJECT_CLASS (gb_source_style_scheme_widget_parent_class)->constructed (object);
+
+ gb_source_style_scheme_widget_populate (GB_SOURCE_STYLE_SCHEME_WIDGET (object));
+}
+
+static void
+gb_source_style_scheme_widget_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GbSourceStyleSchemeWidget *self = GB_SOURCE_STYLE_SCHEME_WIDGET (object);
+
+ switch (prop_id)
+ {
+ case PROP_STYLE_SCHEME_NAME:
+ g_value_set_string (value,
+ gb_source_style_scheme_widget_get_style_scheme_name (self));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gb_source_style_scheme_widget_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GbSourceStyleSchemeWidget *self = GB_SOURCE_STYLE_SCHEME_WIDGET (object);
+
+ switch (prop_id)
+ {
+ case PROP_STYLE_SCHEME_NAME:
+ gb_source_style_scheme_widget_set_style_scheme_name (self,
+ g_value_get_string (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gb_source_style_scheme_widget_class_init (GbSourceStyleSchemeWidgetClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->constructed = gb_source_style_scheme_widget_constructed;
+ object_class->get_property = gb_source_style_scheme_widget_get_property;
+ object_class->set_property = gb_source_style_scheme_widget_set_property;
+
+ gParamSpecs [PROP_STYLE_SCHEME_NAME] =
+ g_param_spec_string ("style-scheme-name",
+ _("Style Scheme Name"),
+ _("The style scheme name that is selected."),
+ NULL,
+ (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (object_class, PROP_STYLE_SCHEME_NAME,
+ gParamSpecs [PROP_STYLE_SCHEME_NAME]);
+}
+
+static void
+gb_source_style_scheme_widget_init (GbSourceStyleSchemeWidget *self)
+{
+ self->priv = gb_source_style_scheme_widget_get_instance_private (self);
+
+ self->priv->vbox = g_object_new (GTK_TYPE_BOX,
+ "orientation", GTK_ORIENTATION_VERTICAL,
+ "spacing", 3,
+ "visible", TRUE,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->priv->vbox));
+
+ self->priv->scroller = g_object_new (GTK_TYPE_SCROLLED_WINDOW,
+ "visible", TRUE,
+ "vexpand", TRUE,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (self->priv->vbox),
+ GTK_WIDGET (self->priv->scroller));
+
+ self->priv->list_box = g_object_new (GTK_TYPE_LIST_BOX,
+ "visible", TRUE,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (self->priv->scroller),
+ GTK_WIDGET (self->priv->list_box));
+}
diff --git a/src/editor/gb-source-style-scheme-widget.h b/src/editor/gb-source-style-scheme-widget.h
new file mode 100644
index 0000000..33803c9
--- /dev/null
+++ b/src/editor/gb-source-style-scheme-widget.h
@@ -0,0 +1,59 @@
+/* gb-source-style-scheme-widget.h
+ *
+ * Copyright (C) 2014 Christian Hergert <christian hergert me>
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GB_SOURCE_STYLE_SCHEME_WIDGET_H
+#define GB_SOURCE_STYLE_SCHEME_WIDGET_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GB_TYPE_SOURCE_STYLE_SCHEME_WIDGET (gb_source_style_scheme_widget_get_type())
+#define GB_SOURCE_STYLE_SCHEME_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
GB_TYPE_SOURCE_STYLE_SCHEME_WIDGET, GbSourceStyleSchemeWidget))
+#define GB_SOURCE_STYLE_SCHEME_WIDGET_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
GB_TYPE_SOURCE_STYLE_SCHEME_WIDGET, GbSourceStyleSchemeWidget const))
+#define GB_SOURCE_STYLE_SCHEME_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
GB_TYPE_SOURCE_STYLE_SCHEME_WIDGET, GbSourceStyleSchemeWidgetClass))
+#define GB_IS_SOURCE_STYLE_SCHEME_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
GB_TYPE_SOURCE_STYLE_SCHEME_WIDGET))
+#define GB_IS_SOURCE_STYLE_SCHEME_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
GB_TYPE_SOURCE_STYLE_SCHEME_WIDGET))
+#define GB_SOURCE_STYLE_SCHEME_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
GB_TYPE_SOURCE_STYLE_SCHEME_WIDGET, GbSourceStyleSchemeWidgetClass))
+
+typedef struct _GbSourceStyleSchemeWidget GbSourceStyleSchemeWidget;
+typedef struct _GbSourceStyleSchemeWidgetClass GbSourceStyleSchemeWidgetClass;
+typedef struct _GbSourceStyleSchemeWidgetPrivate GbSourceStyleSchemeWidgetPrivate;
+
+struct _GbSourceStyleSchemeWidget
+{
+ GtkBin parent;
+
+ /*< private >*/
+ GbSourceStyleSchemeWidgetPrivate *priv;
+};
+
+struct _GbSourceStyleSchemeWidgetClass
+{
+ GtkBinClass parent;
+};
+
+GType gb_source_style_scheme_widget_get_type (void);
+GtkWidget *gb_source_style_scheme_widget_new (void);
+const gchar *gb_source_style_scheme_widget_get_style_scheme_name (GbSourceStyleSchemeWidget *widget);
+void gb_source_style_scheme_widget_set_style_scheme_name (GbSourceStyleSchemeWidget *widget,
+ const gchar
*style_scheme_name);
+
+G_END_DECLS
+
+#endif /* GB_SOURCE_STYLE_SCHEME_WIDGET_H */
diff --git a/src/gnome-builder.mk b/src/gnome-builder.mk
index 795e42c..76e1d82 100644
--- a/src/gnome-builder.mk
+++ b/src/gnome-builder.mk
@@ -71,6 +71,10 @@ libgnome_builder_la_SOURCES = \
src/editor/gb-source-highlight-menu.h \
src/editor/gb-source-search-highlighter.h \
src/editor/gb-source-search-highlighter.c \
+ src/editor/gb-source-style-scheme-button.c \
+ src/editor/gb-source-style-scheme-button.h \
+ src/editor/gb-source-style-scheme-widget.c \
+ src/editor/gb-source-style-scheme-widget.h \
src/markdown/gs-markdown.c \
src/markdown/gs-markdown.h \
src/markdown/gb-markdown-preview.c \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]