⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 st-preferences-dialog.c

📁 linux下网络收音机的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
  const char *handler_name;  char *page_name;    g_return_val_if_fail(ST_IS_HANDLER(handler), NULL);  g_return_val_if_fail(st_handler_event_is_bound(handler, ST_HANDLER_EVENT_PREFERENCES_WIDGET_NEW), NULL);    widget = st_handler_event_preferences_widget_new(handler);  if (! widget)    return NULL;  page = st_preferences_page_new();  gtk_widget_show(widget);  gtk_box_pack_start(GTK_BOX(page), widget, FALSE, FALSE, 0);  handler_name = st_handler_get_name(handler);  page_name = HANDLER_PAGE_NAME(handler_name);  st_preferences_page_set_name(page, page_name);  g_free(page_name);  st_preferences_page_set_icon(page, st_handler_get_pixbuf(handler));  st_preferences_page_set_label(page, st_handler_get_label(handler));    if (! strcmp(handler_name, "live365"))    st_preferences_page_set_help_link_id(page, "preferences-live365");  else if (! strcmp(handler_name, "shoutcast"))    st_preferences_page_set_help_link_id(page, "preferences-shoutcast");  else if (! strcmp(handler_name, "punkcast.com.py"))    st_preferences_page_set_help_link_id(page, "preferences-punkcast");  return page;}/* takes @page ownership */static voidst_preferences_dialog_append_page (STPreferencesDialog *dialog,				   GtkTreeStore *store,				   GtkTreeIter *iter,				   GtkTreeIter *parent,				   STPreferencesPage *page){  GdkPixbuf *icon;  GdkPixbuf *scaled;  g_return_if_fail(ST_IS_PREFERENCES_DIALOG(dialog));  g_return_if_fail(GTK_IS_TREE_STORE(store));  g_return_if_fail(iter != NULL);  g_return_if_fail(ST_IS_PREFERENCES_PAGE(page));  /* take the page ownership */  g_object_ref(page);  gtk_object_sink(GTK_OBJECT(page));  icon = st_preferences_page_get_icon(page);  scaled = icon ? sgtk_pixbuf_scale(icon, GTK_ICON_SIZE_MENU) : NULL;  gtk_tree_store_append(store, iter, parent);  gtk_tree_store_set(store, iter,		     COLUMN_PAGE, page,		     COLUMN_ICON, scaled,		     COLUMN_STOCK_ID, st_preferences_page_get_stock_id(page),		     COLUMN_LABEL, st_preferences_page_get_label(page),		     -1);  if (scaled)    g_object_unref(scaled);  /* the store now holds a reference to the page */  g_object_unref(page);}static voidst_preferences_dialog_page_changed_h (GtkTreeSelection *selection,				      gpointer user_data){  STPreferencesDialog *dialog = user_data;  if (dialog->priv->current_page)    {      /*       * The list store holds a reference to the page, so it will not       * be destroyed here.       */      gtk_container_remove(GTK_CONTAINER(dialog->priv->hbox),			   GTK_WIDGET(dialog->priv->current_page));      dialog->priv->current_page = NULL;    }  g_free(st_settings.preferences_selected_page);  st_settings.preferences_selected_page = NULL;  dialog->priv->current_page = st_preferences_dialog_get_selected_page(dialog);  if (dialog->priv->current_page)    {      gtk_box_pack_start(GTK_BOX(dialog->priv->hbox),			 GTK_WIDGET(dialog->priv->current_page),			 TRUE,			 TRUE,			 0);      gtk_widget_show(GTK_WIDGET(dialog->priv->current_page));      g_object_unref(dialog->priv->current_page); /* hbox owns it */      st_settings.preferences_selected_page = g_strdup(st_preferences_page_get_name(dialog->priv->current_page));    }}static voidst_preferences_dialog_row_expanded_collapsed_h (GtkTreeView *view,						GtkTreeIter *iter,						GtkTreePath *path,						gpointer user_data){  STPreferencesPage *page;  gtk_tree_model_get(gtk_tree_view_get_model(view), iter, COLUMN_PAGE, &page, -1);  if (! strcmp(st_preferences_page_get_name(page), "plugins"))    st_settings.preferences_plugins_expanded = GPOINTER_TO_INT(user_data);  g_object_unref(page);}static voidst_preferences_dialog_response_h (GtkDialog *dialog,				  int response,				  gpointer data){  STPreferencesDialog *preferences_dialog = ST_PREFERENCES_DIALOG(dialog);  switch (response)    {    case GTK_RESPONSE_HELP:      {	STPreferencesPage *page;	page = st_preferences_dialog_get_selected_page(preferences_dialog);	if (page)	  {	    st_show_help(st_preferences_page_get_help_link_id(page));	    g_object_unref(page);	  }	else	  st_show_help("preferences");	break;      }    case GTK_RESPONSE_DELETE_EVENT:    case GTK_RESPONSE_CLOSE:      {	GSList *l;	gboolean plugins_changed = FALSE;	gtk_widget_destroy(GTK_WIDGET(dialog));	SG_LIST_FOREACH(l, disabled_plugins)	  if (! sg_str_slist_contains(st_settings.disabled_plugins, l->data))	    {	      plugins_changed = TRUE;	      break;	    }	if (! plugins_changed)	  SG_LIST_FOREACH(l, st_settings.disabled_plugins)	    if (! sg_str_slist_contains(disabled_plugins, l->data))	      {		plugins_changed = TRUE;		break;	      }	if (plugins_changed)	  {	    GtkWidget *dialog;	    int response;	    	    dialog = sgtk_message_dialog_new(st_shell ? st_shell_get_window(st_shell) : NULL,					     GTK_STOCK_DIALOG_WARNING,					     _("Restart streamtuner?"),					     _("The plugins settings have changed, and streamtuner must be restarted for these changes to take effect. Would you like to restart streamtuner?"));	    gtk_dialog_add_buttons(GTK_DIALOG(dialog),				   GTK_STOCK_NO, GTK_RESPONSE_NO,				   GTK_STOCK_YES, GTK_RESPONSE_YES,				   NULL);	    gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_YES);	    response = gtk_dialog_run(GTK_DIALOG(dialog));	    gtk_widget_destroy(dialog);	    	    if (response == GTK_RESPONSE_YES)	      {		st_shell_set_restart(st_shell, TRUE);		g_object_unref(st_shell);	      }	  }      }      break;    }}static STPreferencesPage *st_preferences_dialog_get_selected_page (STPreferencesDialog *dialog){  GtkTreeSelection *selection;  GtkTreeModel *model;  GtkTreeIter iter;  STPreferencesPage *page = NULL;  g_return_val_if_fail(ST_IS_PREFERENCES_DIALOG(dialog), NULL);  selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->priv->view));  if (gtk_tree_selection_get_selected(selection, &model, &iter))    gtk_tree_model_get(model, &iter, COLUMN_PAGE, &page, -1);  return page;}static voidst_preferences_dialog_select_page (STPreferencesDialog *dialog,				   const char *name){  GtkTreeModel *model;  GtkTreeIter iter;  g_return_if_fail(ST_IS_PREFERENCES_DIALOG(dialog));  model = gtk_tree_view_get_model(GTK_TREE_VIEW(dialog->priv->view));  if (name)    {      SelectPageInfo info;      info.dialog = dialog;      info.name = name;      info.found = FALSE;      gtk_tree_model_foreach(model, st_preferences_dialog_select_page_cb, &info);      if (info.found)	return;    }  if (gtk_tree_model_get_iter_first(model, &iter))    st_preferences_dialog_select_iter(dialog, &iter);}static gbooleanst_preferences_dialog_select_page_cb (GtkTreeModel *model,				      GtkTreePath *path,				      GtkTreeIter *iter,				      gpointer data){  SelectPageInfo *info = data;  STPreferencesPage *page;  gtk_tree_model_get(model, iter, COLUMN_PAGE, &page, -1);  if (! strcmp(st_preferences_page_get_name(page), info->name))    {      st_preferences_dialog_select_iter(info->dialog, iter);      info->found = TRUE;    }  g_object_unref(page);  return info->found;}static voidst_preferences_dialog_select_iter (STPreferencesDialog *dialog,				   GtkTreeIter *iter){  GtkTreeSelection *selection;  g_return_if_fail(ST_IS_PREFERENCES_DIALOG(dialog));  g_return_if_fail(iter != NULL);  selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->priv->view));  gtk_tree_selection_select_iter(selection, iter);}GtkWidget *st_preferences_dialog_new (GtkWindow *parent){  STPreferencesDialog *dialog;  dialog = g_object_new(ST_TYPE_PREFERENCES_DIALOG, NULL);  if (parent)    gtk_window_set_transient_for(GTK_WINDOW(dialog), parent);  return GTK_WIDGET(dialog);}voidst_preferences_dialog_select_handler (STPreferencesDialog *dialog,				      STHandler *handler){  char *page_name;  g_return_if_fail(ST_IS_PREFERENCES_DIALOG(dialog));  g_return_if_fail(ST_IS_HANDLER(handler));  page_name = HANDLER_PAGE_NAME(st_handler_get_name(handler));  st_preferences_dialog_select_page(dialog, page_name);  g_free(page_name);}

⌨️ 快捷键说明

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