Mercurial > audlegacy
diff audacious/general.c @ 0:cb178e5ad177 trunk
[svn] Import audacious source.
author | nenolod |
---|---|
date | Mon, 24 Oct 2005 03:06:47 -0700 |
parents | |
children | f12d7e208b43 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/audacious/general.c Mon Oct 24 03:06:47 2005 -0700 @@ -0,0 +1,167 @@ +/* BMP - Cross-platform multimedia player + * Copyright (C) 2003-2004 BMP development team. + * + * Based on XMMS: + * Copyright (C) 1998-2003 XMMS development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include <glib.h> +#include <string.h> +#include "plugin.h" +#include "general.h" + +GeneralPluginData gp_data = { + NULL, + NULL +}; + +GList * +get_general_list(void) +{ + return gp_data.general_list; +} + +GList * +get_general_enabled_list(void) +{ + return gp_data.enabled_list; +} + +static GeneralPlugin * +get_general_plugin(gint i) +{ + GList *node = g_list_nth(get_general_list(), i); + + if (!node) + return NULL; + + return GENERAL_PLUGIN(node->data); +} + + +void +general_about(gint i) +{ + GeneralPlugin *plugin = get_general_plugin(i); + + if (!plugin || !plugin->about) + return; + + plugin->about(); +} + +void +general_configure(gint i) +{ + GeneralPlugin *plugin = get_general_plugin(i); + + if (!plugin || !plugin->configure) + return; + + plugin->configure(); +} + +static gboolean +general_plugin_is_enabled(GeneralPlugin * plugin) +{ + return (g_list_find(get_general_enabled_list(), plugin) != NULL); +} + +void +enable_general_plugin(gint i, gboolean enable) +{ + GeneralPlugin *plugin = get_general_plugin(i); + + if (!plugin) + return; + + if (enable && !general_plugin_is_enabled(plugin)) { + gp_data.enabled_list = g_list_append(gp_data.enabled_list, plugin); + if (plugin->init) + plugin->init(); + } + else if (!enable && general_plugin_is_enabled(plugin)) { + gp_data.enabled_list = g_list_remove(gp_data.enabled_list, plugin); + if (plugin->cleanup) + plugin->cleanup(); + } +} + +gboolean +general_enabled(gint i) +{ + return (g_list_find(gp_data.enabled_list, + get_general_plugin(i)) != NULL); +} + +gchar * +general_stringify_enabled_list(void) +{ + GString *enable_str; + gchar *name; + GList *node = get_general_enabled_list(); + + if (!node) + return NULL; + + name = g_path_get_basename(GENERAL_PLUGIN(node->data)->filename); + enable_str = g_string_new(name); + g_free(name); + + for (node = g_list_next(node); node; node = g_list_next(node)) { + name = g_path_get_basename(GENERAL_PLUGIN(node->data)->filename); + g_string_append_c(enable_str, ','); + g_string_append(enable_str, name); + g_free(name); + } + + return g_string_free(enable_str, FALSE); +} + +void +general_enable_from_stringified_list(const gchar * list_str) +{ + gchar **list, **str; + GeneralPlugin *plugin; + + if (!list_str || !strcmp(list_str, "")) + return; + + list = g_strsplit(list_str, ",", 0); + + for (str = list; *str; str++) { + GList *node; + + for (node = get_general_list(); node; node = g_list_next(node)) { + gchar *base; + + base = g_path_get_basename(GENERAL_PLUGIN(node->data)->filename); + + if (!strcmp(*str, base)) { + plugin = GENERAL_PLUGIN(node->data); + gp_data.enabled_list = g_list_append(gp_data.enabled_list, + plugin); + if (plugin->init) + plugin->init(); + } + + g_free(base); + } + } + + g_strfreev(list); +}