st-plugins-preferences-page.c

来自「linux下网络收音机的源码」· C语言 代码 · 共 227 行

C
227
字号
/* * Copyright (c) 2004 Jean-Yves Lefort * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of Jean-Yves Lefort nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */#include "config.h"#include <string.h>#include <glib/gi18n.h>#include "sg-util.h"#include "sgtk-util.h"#include "st-plugins-preferences-page.h"#include "st-plugins.h"#include "st-util-api.h"#include "st-util.h"#include "st-settings.h"#include "st-stock.h"/*** type definitions ********************************************************/enum {  COLUMN_PLUGIN,  COLUMN_ENABLED,  COLUMN_ICON,  COLUMN_LABEL,  N_COLUMNS};    /*** function declarations ***************************************************/static void st_plugins_preferences_page_init (STPluginsPreferencesPage *page);static void st_plugins_preferences_page_toggled_h (GtkCellRendererToggle *renderer,						   const char *path,						   gpointer user_data);/*** implementation **********************************************************/GTypest_plugins_preferences_page_get_type (void){  static GType type = 0;    if (! type)    {      static const GTypeInfo info = {	sizeof(STPluginsPreferencesPageClass),	NULL,	NULL,	NULL,	NULL,	NULL,	sizeof(STPluginsPreferencesPage),	0,	(GInstanceInitFunc) st_plugins_preferences_page_init,      };      type = g_type_register_static(ST_TYPE_PREFERENCES_PAGE,				    "STPluginsPreferencesPage",				    &info,				    0);    }  return type;}static voidst_plugins_preferences_page_init (STPluginsPreferencesPage *page){  STPreferencesPage *ppage = ST_PREFERENCES_PAGE(page);  GtkWidget *label;  GtkListStore *store;  GSList *l;  GtkWidget *view;  GtkTreeViewColumn *column;  GtkCellRenderer *renderer;  GtkWidget *scrolled;  st_preferences_page_set_name(ppage, "plugins");  st_preferences_page_set_stock_id(ppage, ST_STOCK_PLUGIN);  st_preferences_page_set_label(ppage, _("Plugins"));  st_preferences_page_set_help_link_id(ppage, "preferences-plugins");  label = gtk_label_new(_("Choose the plugins to load at startup."));  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);  gtk_widget_show(label);  gtk_box_pack_start(GTK_BOX(page), label, FALSE, FALSE, 0);  store = gtk_list_store_new(N_COLUMNS,			     ST_TYPE_PLUGIN,			     G_TYPE_BOOLEAN,			     GDK_TYPE_PIXBUF,			     G_TYPE_STRING);  SG_LIST_FOREACH(l, st_plugins_list)    {      STPlugin *plugin = l->data;      GdkPixbuf *pixbuf;      GdkPixbuf *scaled;      GtkTreeIter iter;      pixbuf = st_plugin_get_pixbuf(plugin);      scaled = pixbuf ? sgtk_pixbuf_scale(pixbuf, GTK_ICON_SIZE_MENU) : NULL;      gtk_list_store_append(store, &iter);      gtk_list_store_set(store, &iter,			 COLUMN_PLUGIN, plugin,			 COLUMN_ENABLED, ! sg_str_slist_contains(st_settings.disabled_plugins, st_plugin_get_filename(plugin)),			 COLUMN_ICON, scaled,			 COLUMN_LABEL, st_plugin_get_label(plugin),			 -1);      if (scaled)	g_object_unref(scaled);    }  gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store),				       COLUMN_LABEL,				       GTK_SORT_ASCENDING);  view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));  gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE);  gtk_tree_view_set_search_column(GTK_TREE_VIEW(view), COLUMN_LABEL);  renderer = gtk_cell_renderer_toggle_new();  g_signal_connect(renderer, "toggled", G_CALLBACK(st_plugins_preferences_page_toggled_h), store);  column = gtk_tree_view_column_new_with_attributes(NULL, renderer,						    "active", COLUMN_ENABLED,						    NULL);  gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);  column = gtk_tree_view_column_new();  renderer = gtk_cell_renderer_pixbuf_new();  gtk_tree_view_column_pack_start(column, renderer, FALSE);  gtk_tree_view_column_set_attributes(column, renderer, "pixbuf", COLUMN_ICON, NULL);  renderer = gtk_cell_renderer_text_new();  gtk_tree_view_column_pack_start(column, renderer, TRUE);  gtk_tree_view_column_set_attributes(column, renderer, "text", COLUMN_LABEL, NULL);  gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);  g_object_unref(store);  scrolled = gtk_scrolled_window_new(NULL, NULL);  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),				 GTK_POLICY_AUTOMATIC,				 GTK_POLICY_AUTOMATIC);  gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN);  gtk_container_add(GTK_CONTAINER(scrolled), view);  gtk_widget_show_all(scrolled);  gtk_box_pack_start(GTK_BOX(page), scrolled, TRUE, TRUE, 0);}static voidst_plugins_preferences_page_toggled_h (GtkCellRendererToggle *renderer,				       const char *path,				       gpointer user_data){  GtkTreeModel *model = user_data;  STPlugin *plugin;  const char *filename;  GtkTreeIter iter;  gboolean status;  GSList *l;  gboolean disabled = FALSE;    status = gtk_tree_model_get_iter_from_string(model, &iter, path);  g_return_if_fail(status == TRUE);  gtk_tree_model_get(model, &iter, COLUMN_PLUGIN, &plugin, -1);  filename = st_plugin_get_filename(plugin);  SG_LIST_FOREACH(l, st_settings.disabled_plugins)    {      char *disabled_filename = l->data;      if (! strcmp(disabled_filename, filename))	{	  disabled = TRUE;	  g_free(disabled_filename);	  st_settings.disabled_plugins = g_slist_delete_link(st_settings.disabled_plugins, l);	  break;	}    }  if (! disabled)    st_settings.disabled_plugins = g_slist_append(st_settings.disabled_plugins, g_strdup(filename));  gtk_list_store_set(GTK_LIST_STORE(model), &iter, COLUMN_ENABLED, disabled, -1);  g_object_unref(plugin);}STPreferencesPage *st_plugins_preferences_page_new (void){  return g_object_new(ST_TYPE_PLUGINS_PREFERENCES_PAGE, NULL);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?