diff src/audacious/ui_preferences.c @ 3437:3092a8b3fe34 trunk

Big plugin system changes (part 1 of who knows, it's still a big mess): - remove plugin_matrix, replacing it with a mowgli.dictionary of all loaded plugins pointing back to their handles - input_is_enabled() craq -> gboolean plugin::enabled (this craq was pointed out by ccr) - consolidate a lot of crap in ui_preferences.c (a LOT more to come) - introduce probably countless loads of bugs and SIGSEGVs. - you WILL need to recompile plugins after this, and some which do not use C99-style struct initialisers will likely fail to build.
author William Pitcock <nenolod@atheme.org>
date Fri, 07 Sep 2007 03:20:28 -0500
parents 8e9f1b1a2d84
children 93584d1b3e7e
line wrap: on
line diff
--- a/src/audacious/ui_preferences.c	Fri Sep 07 02:02:53 2007 -0500
+++ b/src/audacious/ui_preferences.c	Fri Sep 07 03:20:28 2007 -0500
@@ -213,15 +213,14 @@
     GtkTreeModel *model = GTK_TREE_MODEL(data);
     GtkTreeIter iter;
     GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
-    gboolean fixed;
     gint pluginnr;
     gchar *filename, *basename;
+    Plugin *plugin;
     /*GList *diplist, *tmplist; */
 
     /* get toggled iter */
     gtk_tree_model_get_iter(model, &iter, path);
     gtk_tree_model_get(model, &iter,
-                       PLUGIN_VIEW_COL_ACTIVE, &fixed,
                        PLUGIN_VIEW_COL_ID, &pluginnr,
                        PLUGIN_VIEW_COL_FILENAME, &filename,
                        -1);
@@ -229,18 +228,19 @@
     basename = g_path_get_basename(filename);
     g_free(filename);
 
+    /* get our plugin */
+    plugin = plugin_get_plugin(basename);
+
     /* do something with the value */
-    fixed ^= 1;
-
-    g_hash_table_replace(plugin_matrix, basename, GINT_TO_POINTER(fixed));
-    /*  g_hash_table_foreach(pluginmatrix, (GHFunc) disp_matrix, NULL); */
+    plugin->enabled ^= 1;
 
     /* set new value */
     gtk_list_store_set(GTK_LIST_STORE(model), &iter,
-                       PLUGIN_VIEW_COL_ACTIVE, fixed, -1);
+                       PLUGIN_VIEW_COL_ACTIVE, plugin->enabled, -1);
 
     /* clean up */
     gtk_tree_path_free(path);
+    g_free(basename);
 }
 
 
@@ -370,10 +370,10 @@
                      G_CALLBACK(on_output_plugin_cbox_changed), NULL);
 }
 
-
 static void
-on_input_plugin_view_realize(GtkTreeView * treeview,
-                             gpointer data)
+on_plugin_view_realize(GtkTreeView * treeview,
+                       GCallback callback,
+                       gpointer data)
 {
     GtkListStore *store;
     GtkTreeIter iter;
@@ -383,10 +383,9 @@
 
     GList *ilist;
     gchar *description[2];
-    InputPlugin *ip;
     gint id = 0;
 
-    gboolean enabled;
+    GList *list = (GList *) data;
 
     store = gtk_list_store_new(PLUGIN_VIEW_N_COLS,
                                G_TYPE_BOOLEAN, G_TYPE_STRING,
@@ -401,7 +400,7 @@
 
     renderer = gtk_cell_renderer_toggle_new();
     g_signal_connect(renderer, "toggled",
-                     G_CALLBACK(input_plugin_toggle), store);
+                     G_CALLBACK(callback), store);
     gtk_tree_view_column_pack_start(column, renderer, TRUE);
     gtk_tree_view_column_set_attributes(column, renderer, "active",
                                         PLUGIN_VIEW_COL_ACTIVE, NULL);
@@ -435,194 +434,16 @@
 
     gtk_tree_view_append_column(treeview, column);
 
-    for (ilist = get_input_list(); ilist; ilist = g_list_next(ilist)) {
-        ip = INPUT_PLUGIN(ilist->data);
-
-        description[0] = g_strdup(ip->description);
-        description[1] = g_strdup(ip->filename);
-
-        enabled = input_is_enabled(description[1]);
+    MOWGLI_ITER_FOREACH(ilist, list)
+    {
+        Plugin *plugin = PLUGIN(ilist->data);
+
+        description[0] = g_strdup(plugin->description);
+        description[1] = g_strdup(plugin->filename);
 
         gtk_list_store_append(store, &iter);
         gtk_list_store_set(store, &iter,
-                           PLUGIN_VIEW_COL_ACTIVE, enabled,
-                           PLUGIN_VIEW_COL_DESC, description[0],
-                           PLUGIN_VIEW_COL_FILENAME, description[1],
-                           PLUGIN_VIEW_COL_ID, id++, -1);
-
-        g_free(description[1]);
-        g_free(description[0]);
-    }
-
-    gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
-}
-
-
-static void
-on_general_plugin_view_realize(GtkTreeView * treeview,
-                               gpointer data)
-{
-    GtkListStore *store;
-    GtkTreeIter iter;
-
-    GtkCellRenderer *renderer;
-    GtkTreeViewColumn *column;
-
-    GList *ilist /*, *diplist */ ;
-    gchar *description[2];
-    GeneralPlugin *gp;
-    gint id = 0;
-
-    gboolean enabled;
-
-    store = gtk_list_store_new(PLUGIN_VIEW_N_COLS,
-                               G_TYPE_BOOLEAN, G_TYPE_STRING,
-                               G_TYPE_STRING, G_TYPE_INT);
-
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _("Enabled"));
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_spacing(column, 4);
-    gtk_tree_view_column_set_resizable(column, FALSE);
-    gtk_tree_view_column_set_fixed_width(column, 50);
-
-    renderer = gtk_cell_renderer_toggle_new();
-    g_signal_connect(renderer, "toggled",
-                     G_CALLBACK(general_plugin_toggle), store);
-    gtk_tree_view_column_pack_start(column, renderer, TRUE);
-    gtk_tree_view_column_set_attributes(column, renderer, "active",
-                                        PLUGIN_VIEW_COL_ACTIVE, NULL);
-
-    gtk_tree_view_append_column(treeview, column);
-
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _("Description"));
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-    gtk_tree_view_column_set_spacing(column, 4);
-    gtk_tree_view_column_set_resizable(column, TRUE);
-
-
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "text", PLUGIN_VIEW_COL_DESC, NULL);
-
-    gtk_tree_view_append_column(treeview, column);
-
-
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _("Filename"));
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-    gtk_tree_view_column_set_spacing(column, 4);
-    gtk_tree_view_column_set_resizable(column, TRUE);
-
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, TRUE);
-    gtk_tree_view_column_set_attributes(column, renderer, "text",
-                                        PLUGIN_VIEW_COL_FILENAME, NULL);
-
-    gtk_tree_view_append_column(treeview, column);
-
-    for (ilist = get_general_list(); ilist; ilist = g_list_next(ilist)) {
-        gp = GENERAL_PLUGIN(ilist->data);
-
-        description[0] = g_strdup(gp->description);
-        description[1] = g_strdup(gp->filename);
-
-        enabled = general_enabled(id);
-
-        gtk_list_store_append(store, &iter);
-        gtk_list_store_set(store, &iter,
-                           PLUGIN_VIEW_COL_ACTIVE, enabled,
-                           PLUGIN_VIEW_COL_DESC, description[0],
-                           PLUGIN_VIEW_COL_FILENAME, description[1],
-                           PLUGIN_VIEW_COL_ID, id++, -1);
-
-        g_free(description[1]);
-        g_free(description[0]);
-    }
-
-    gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
-}
-
-
-static void
-on_vis_plugin_view_realize(GtkTreeView * treeview,
-                           gpointer data)
-{
-    GtkListStore *store;
-    GtkTreeIter iter;
-
-    GtkCellRenderer *renderer;
-    GtkTreeViewColumn *column;
-
-    GList *vlist;
-    gchar *description[2];
-    VisPlugin *vp;
-    gint id = 0;
-
-    gboolean enabled;
-
-
-    store = gtk_list_store_new(PLUGIN_VIEW_N_COLS,
-                               G_TYPE_BOOLEAN, G_TYPE_STRING,
-                               G_TYPE_STRING, G_TYPE_INT);
-
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _("Enabled"));
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_spacing(column, 4);
-    gtk_tree_view_column_set_resizable(column, FALSE);
-    gtk_tree_view_column_set_fixed_width(column, 50);
-
-    renderer = gtk_cell_renderer_toggle_new();
-    g_signal_connect(renderer, "toggled",
-                     G_CALLBACK(vis_plugin_toggle), store);
-    gtk_tree_view_column_pack_start(column, renderer, TRUE);
-    gtk_tree_view_column_set_attributes(column, renderer, "active",
-                                        PLUGIN_VIEW_COL_ACTIVE, NULL);
-
-    gtk_tree_view_append_column(treeview, column);
-
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _("Description"));
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-    gtk_tree_view_column_set_spacing(column, 4);
-    gtk_tree_view_column_set_resizable(column, TRUE);
-
-
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "text", PLUGIN_VIEW_COL_DESC, NULL);
-
-    gtk_tree_view_append_column(treeview, column);
-
-
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _("Filename"));
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-    gtk_tree_view_column_set_spacing(column, 4);
-    gtk_tree_view_column_set_resizable(column, TRUE);
-
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, TRUE);
-    gtk_tree_view_column_set_attributes(column, renderer, "text",
-                                        PLUGIN_VIEW_COL_FILENAME, NULL);
-
-    gtk_tree_view_append_column(treeview, column);
-
-    for (vlist = get_vis_list(); vlist; vlist = g_list_next(vlist)) {
-        vp = VIS_PLUGIN(vlist->data);
-
-        description[0] = g_strdup(vp->description);
-        description[1] = g_strdup(vp->filename);
-
-        enabled = vis_enabled(id);
-
-        gtk_list_store_append(store, &iter);
-        gtk_list_store_set(store, &iter,
-                           PLUGIN_VIEW_COL_ACTIVE, enabled,
+                           PLUGIN_VIEW_COL_ACTIVE, plugin->enabled,
                            PLUGIN_VIEW_COL_DESC, description[0],
                            PLUGIN_VIEW_COL_FILENAME, description[1],
                            PLUGIN_VIEW_COL_ID, id++, -1);
@@ -635,99 +456,39 @@
 }
 
 static void
-editable_insert_text(GtkEditable * editable,
-                     const gchar * text,
-                     gint * pos)
+on_input_plugin_view_realize(GtkTreeView * treeview,
+                             gpointer data)
 {
-    gtk_editable_insert_text(editable, text, strlen(text), pos);
+    on_plugin_view_realize(treeview, G_CALLBACK(input_plugin_toggle), ip_data.input_list);
 }
 
-
 static void
 on_effect_plugin_view_realize(GtkTreeView * treeview,
                               gpointer data)
 {
-    GtkListStore *store;
-    GtkTreeIter iter;
-
-    GtkCellRenderer *renderer;
-    GtkTreeViewColumn *column;
-
-    GList *elist;
-    gchar *description[2];
-    gint id = 0;
-
-    gboolean enabled;
-
-
-    store = gtk_list_store_new(PLUGIN_VIEW_N_COLS,
-                               G_TYPE_BOOLEAN, G_TYPE_STRING,
-                               G_TYPE_STRING, G_TYPE_INT);
-
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _("Enabled"));
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_spacing(column, 4);
-    gtk_tree_view_column_set_resizable(column, FALSE);
-    gtk_tree_view_column_set_fixed_width(column, 50);
-
-    renderer = gtk_cell_renderer_toggle_new();
-    g_signal_connect(renderer, "toggled",
-                     G_CALLBACK(effect_plugin_toggle), store);
-    gtk_tree_view_column_pack_start(column, renderer, TRUE);
-    gtk_tree_view_column_set_attributes(column, renderer, "active",
-                                        PLUGIN_VIEW_COL_ACTIVE, NULL);
-
-    gtk_tree_view_append_column(treeview, column);
-
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _("Description"));
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-    gtk_tree_view_column_set_spacing(column, 4);
-    gtk_tree_view_column_set_resizable(column, TRUE);
-
-
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "text", PLUGIN_VIEW_COL_DESC, NULL);
-
-    gtk_tree_view_append_column(treeview, column);
-
-
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _("Filename"));
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-    gtk_tree_view_column_set_spacing(column, 4);
-    gtk_tree_view_column_set_resizable(column, TRUE);
-
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, TRUE);
-    gtk_tree_view_column_set_attributes(column, renderer, "text",
-                                        PLUGIN_VIEW_COL_FILENAME, NULL);
-
-    gtk_tree_view_append_column(treeview, column);
-
-    for (elist = get_effect_list(); elist; elist = g_list_next(elist)) {
-        EffectPlugin *ep = EFFECT_PLUGIN(elist->data);
-
-        description[0] = g_strdup(ep->description);
-        description[1] = g_strdup(ep->filename);
-
-        enabled = effect_enabled(id);
-
-        gtk_list_store_append(store, &iter);
-        gtk_list_store_set(store, &iter,
-                           PLUGIN_VIEW_COL_ACTIVE, enabled,
-                           PLUGIN_VIEW_COL_DESC, description[0],
-                           PLUGIN_VIEW_COL_FILENAME, description[1],
-                           PLUGIN_VIEW_COL_ID, id++, -1);
-
-        g_free(description[1]);
-        g_free(description[0]);
-    }
-
-    gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
+    on_plugin_view_realize(treeview, G_CALLBACK(effect_plugin_toggle), ep_data.effect_list);
+}
+
+static void
+on_general_plugin_view_realize(GtkTreeView * treeview,
+                               gpointer data)
+{
+    on_plugin_view_realize(treeview, G_CALLBACK(general_plugin_toggle), gp_data.general_list);
+}
+
+static void
+on_vis_plugin_view_realize(GtkTreeView * treeview,
+                           gpointer data)
+{
+    on_plugin_view_realize(treeview, G_CALLBACK(vis_plugin_toggle), vp_data.vis_list);
+}
+
+static void
+editable_insert_text(GtkEditable * editable,
+                     const gchar * text,
+                     gint * pos)
+{
+    gtk_editable_insert_text(editable, text, strlen(text), pos);
 }
 
 static void