summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2008-11-03 23:32:51 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2008-11-03 23:32:51 +0000
commit36281e03695b974e5b836d9d3e66d1a117dcecf5 (patch)
tree1a614afadfbe1dc99f98e1e7203236fed8f5b4bf
parent75d5211a5ed497021b2e19a66db3116ad4a36e61 (diff)
More the style selector into a menu.
-rw-r--r--src/main.c146
1 files changed, 63 insertions, 83 deletions
diff --git a/src/main.c b/src/main.c
index a81e184..124aa26 100644
--- a/src/main.c
+++ b/src/main.c
@@ -340,69 +340,6 @@ get_language (void)
}
static void
-scheme_changed (GtkComboBox *cb, sphinx_t *sphinx)
-{
- GtkTreeIter iter;
- GtkSourceStyleScheme *scheme = NULL;
-
- if (gtk_combo_box_get_active_iter (cb, &iter)) {
- GtkSourceStyleSchemeManager *manager;
- gchar *id;
-
- gtk_tree_model_get (gtk_combo_box_get_model (cb), &iter, 1, &id, -1);
- manager = gtk_source_style_scheme_manager_get_default ();
- scheme = gtk_source_style_scheme_manager_get_scheme (manager, id);
- g_free (id);
- }
-
- gtk_source_buffer_set_style_scheme (sphinx->buffer, scheme);
- gconf_client_set_string (sphinx->gconf, GCONF_DIR "/scheme",
- gtk_source_style_scheme_get_id (scheme),
- NULL);
-}
-
-static GtkWidget *
-schemes_combo_box (sphinx_t *sphinx)
-{
- GtkSourceStyleSchemeManager *manager;
- const gchar * const *ids;
- GtkListStore *store;
- GtkWidget *w;
- GtkCellRenderer *renderer;
-
- store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
-
- manager = gtk_source_style_scheme_manager_get_default ();
- ids = gtk_source_style_scheme_manager_get_scheme_ids (manager);
- while (*ids) {
- GtkSourceStyleScheme *scheme;
- GtkTreeIter iter;
-
- scheme = gtk_source_style_scheme_manager_get_scheme (manager, *ids);
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- 0, gtk_source_style_scheme_get_name (scheme),
- 1, *ids,
- -1);
- ids++;
- }
-
- w = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
- g_object_unref (store);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (w), renderer, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (w), renderer,
- "text", 1,
- NULL);
-
- g_signal_connect (w, "changed",
- G_CALLBACK (scheme_changed), sphinx);
-
- return w;
-}
-
-static void
open_trace_dlg (GtkAction *action, sphinx_t *sphinx)
{
GtkWidget *dialog;
@@ -722,6 +659,26 @@ _destroy_surface (void *closure,
gtk_window_present (GTK_WINDOW (window));
}
+static void
+view_style_toggled_cb (GtkCheckMenuItem *item,
+ sphinx_t *sphinx)
+{
+ if (gtk_check_menu_item_get_active (item)) {
+ GtkSourceStyleSchemeManager *manager;
+ GtkSourceStyleScheme *scheme;
+ gchar *id;
+
+ id = g_object_get_data (G_OBJECT (item), "id");
+ manager = gtk_source_style_scheme_manager_get_default ();
+ scheme = gtk_source_style_scheme_manager_get_scheme (manager, id);
+
+ gtk_source_buffer_set_style_scheme (sphinx->buffer, scheme);
+ gconf_client_set_string (sphinx->gconf, GCONF_DIR "/scheme",
+ gtk_source_style_scheme_get_id (scheme),
+ NULL);
+ }
+}
+
static sphinx_t *
sphinx_new (void)
{
@@ -741,10 +698,7 @@ sphinx_new (void)
" </menu>"
" <menu action='ViewMenu'>"
" <menuitem action='ViewNumbers'/>"
- " <menu action='ViewStyleMenu'>"
- " <menuitem action='DefaultStyle'/>"
- " <placeholder/>"
- " </menu>"
+ " <menuitem action='ViewStyleMenu'/>"
" </menu>"
" <menu action='DebugMenu'>"
" <menuitem action='Run'/>"
@@ -791,10 +745,13 @@ sphinx_new (void)
};
sphinx_t *sphinx;
- GtkWidget *w, *sw, *notebook;
+ GtkWidget *w, *sw, *menu, *notebook;
+ GtkSourceStyleSchemeManager *manager;
+ const gchar * const *ids;
GtkWidget *vbox;
GtkUIManager *ui_manager;
GtkActionGroup *action_group;
+ GSList *radio_group;
GdkPixbuf *pb;
GdkColor color;
gchar *str;
@@ -848,10 +805,6 @@ sphinx_new (void)
gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);
gtk_widget_show (w);
- w = schemes_combo_box (sphinx);
- gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);
- gtk_widget_show (w);
-
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
@@ -892,17 +845,6 @@ sphinx_new (void)
gtk_source_buffer_set_language (sphinx->buffer, get_language ());
gtk_source_buffer_set_highlight_syntax (sphinx->buffer, TRUE);
- str = gconf_client_get_string (sphinx->gconf, GCONF_DIR "/scheme", NULL);
- if (str != NULL) {
- GtkSourceStyleSchemeManager *manager;
- GtkSourceStyleScheme *scheme;
-
- manager = gtk_source_style_scheme_manager_get_default ();
- scheme = gtk_source_style_scheme_manager_get_scheme (manager, str);
- gtk_source_buffer_set_style_scheme (sphinx->buffer, scheme);
- g_free (str);
- }
-
notebook = gtk_notebook_new ();
gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_BOTTOM);
gtk_box_pack_start (GTK_BOX (vbox), notebook, FALSE, FALSE, 2);
@@ -920,6 +862,44 @@ sphinx_new (void)
gtk_label_new ("Dictionary"));
gtk_widget_show (w);
+
+ str = gconf_client_get_string (sphinx->gconf, GCONF_DIR "/scheme", NULL);
+ if (str != NULL) {
+ GtkSourceStyleSchemeManager *manager;
+ GtkSourceStyleScheme *scheme;
+
+ manager = gtk_source_style_scheme_manager_get_default ();
+ scheme = gtk_source_style_scheme_manager_get_scheme (manager, str);
+ gtk_source_buffer_set_style_scheme (sphinx->buffer, scheme);
+ g_free (str);
+ }
+
+ w = gtk_ui_manager_get_widget (ui_manager,
+ "/MainMenu/ViewMenu/ViewStyleMenu");
+ menu = gtk_menu_new ();
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (w), menu);
+
+ manager = gtk_source_style_scheme_manager_get_default ();
+ ids = gtk_source_style_scheme_manager_get_scheme_ids (manager);
+ radio_group = NULL;
+ while (*ids) {
+ GtkSourceStyleScheme *scheme;
+
+ scheme = gtk_source_style_scheme_manager_get_scheme (manager, *ids);
+ w = gtk_radio_menu_item_new_with_label (radio_group,
+ gtk_source_style_scheme_get_name (scheme));
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w),
+ scheme == gtk_source_buffer_get_style_scheme (sphinx->buffer));
+ g_signal_connect (w, "toggled",
+ G_CALLBACK (view_style_toggled_cb),
+ sphinx);
+ g_object_set_data (G_OBJECT (w), "id", (gchar *) *ids);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), w);
+ gtk_widget_show (w);
+ radio_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (w));
+ ids++;
+ }
+
return sphinx;
}