diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2008-11-03 23:32:51 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2008-11-03 23:32:51 +0000 |
commit | 36281e03695b974e5b836d9d3e66d1a117dcecf5 (patch) | |
tree | 1a614afadfbe1dc99f98e1e7203236fed8f5b4bf | |
parent | 75d5211a5ed497021b2e19a66db3116ad4a36e61 (diff) |
More the style selector into a menu.
-rw-r--r-- | src/main.c | 146 |
1 files changed, 63 insertions, 83 deletions
@@ -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; } |