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

📄 st-shell.c

📁 linux下网络收音机的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
    },    {      "/View/separator2",			NULL,      NULL,					0,      "<Separator>",				NULL    },    {      N_("/View/Stream _Columns"),		NULL,      st_shell_present_stream_columns,		0,      "<StockItem>",				ST_STOCK_STREAM_COLUMNS    },    {      "/View/separator3",			NULL,      NULL,					0,      "<Separator>",				NULL    },    {      N_("/View/_Stop"),			"Escape",      st_shell_stop,				0,      "<StockItem>",				GTK_STOCK_STOP    },    {      N_("/View/_Reload"),			"<Control>R",      st_shell_reload,				0,      "<StockItem>",				ST_STOCK_RELOAD    },    {      N_("/_Directories"),			NULL,      NULL,					0,      "<Branch>",				NULL    },    {      N_("/Directories/_Directory Preferences"), NULL,      st_shell_present_directory_preferences,	0,      "<StockItem>",				ST_STOCK_DIRECTORY_PREFERENCES    },    {      N_("/Directories/_Visit Directory Homepage"), NULL,      st_shell_visit_directory_homepage,	0,      "<StockItem>",				ST_STOCK_VISIT_DIRECTORY_HOMEPAGE    },    {      "/Directories/separator1",		NULL,      NULL,					0,      "<Separator>",				NULL    },    {      N_("/Directories/_Previous Directory"),	"<Control>Page_Up",      st_shell_select_previous_tab,		0,      "<StockItem>",				GTK_STOCK_GO_BACK    },    {      N_("/Directories/_Next Directory"),	"<Control>Page_Down",      st_shell_select_next_tab,			0,      "<StockItem>",				GTK_STOCK_GO_FORWARD    },    {      "/Directories/separator2",		NULL,      NULL,					0,      "<Separator>",				NULL    },    {      N_("/Directories/Move Directory _Left"),	"<Shift><Control>Page_Up",      st_shell_move_tab_left,			0,      "<Item>",					NULL    },    {      N_("/Directories/Move Directory _Right"),	"<Shift><Control>Page_Down",      st_shell_move_tab_right,			0,      "<Item>",					NULL    },    {      N_("/_Help"),				NULL,      NULL,					0,      "<Branch>",				NULL    },    {      N_("/Help/_Contents"),			"F1",      st_shell_help,				0,      "<StockItem>",				GTK_STOCK_HELP    },    {      N_("/Help/_Homepage"),			NULL,      st_shell_homepage,			0,      "<StockItem>",				GTK_STOCK_HOME    },    {      "/Help/separator1",			NULL,      NULL,					0,      "<Separator>",				NULL    },    {      N_("/Help/_About"),			NULL,      st_shell_present_about,			0,      "<StockItem>",				GTK_STOCK_DIALOG_INFO    }  };  GtkWidget *menu;  char *accel_path;  /* create factory */  shell->priv->factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,					      "<streamtuner-Browser>",					      shell->priv->accel_group);  gtk_item_factory_set_translate_func(shell->priv->factory,				      sgtk_translate_func,				      NULL,				      NULL);  gtk_item_factory_create_items(shell->priv->factory,				G_N_ELEMENTS(entries),				entries,				shell);  /* add stream items */  menu = gtk_item_factory_get_widget(shell->priv->factory, N_("/Stream"));  shell->priv->stream_items = st_stream_menu_items_new(shell->priv->accel_group);  st_stream_menu_items_insert_into_shell(shell->priv->stream_items, GTK_MENU_SHELL(menu), 2);  accel_path = g_strdup_printf("<streamtuner-Browser>/Stream/%s", _("Tune in"));  sgtk_accel_map_add_entry(accel_path, "<Control>T");  g_free(accel_path);  accel_path = g_strdup_printf("<streamtuner-Browser>/Stream/%s", _("Delete"));  sgtk_accel_map_add_entry(accel_path, "Delete");  g_free(accel_path);  accel_path = g_strdup_printf("<streamtuner-Browser>/Stream/%s", _("Properties"));  sgtk_accel_map_add_entry(accel_path, "<Alt>Return");  g_free(accel_path);  /* remember the items we'll need later on */  shell->priv->menubar = gtk_item_factory_get_widget(shell->priv->factory, "<streamtuner-Browser>");  shell->priv->select_all_item = gtk_item_factory_get_item(shell->priv->factory, N_("/Edit/Select All"));  shell->priv->find_item = gtk_item_factory_get_item(shell->priv->factory, N_("/Edit/Find..."));  shell->priv->find_next_item = gtk_item_factory_get_item(shell->priv->factory, N_("/Edit/Find Next"));  shell->priv->find_previous_item = gtk_item_factory_get_item(shell->priv->factory, N_("/Edit/Find Previous"));  shell->priv->search_in_all_categories_item = gtk_item_factory_get_item(shell->priv->factory, N_("/Edit/Search in All Categories..."));  shell->priv->stop_item = gtk_item_factory_get_item(shell->priv->factory, N_("/View/Stop"));  shell->priv->reload_item = gtk_item_factory_get_item(shell->priv->factory, N_("/View/Reload"));  shell->priv->view_tab_icons_item = gtk_item_factory_get_item(shell->priv->factory, N_("/View/Tab Icons"));  shell->priv->directories_menu = gtk_item_factory_get_widget(shell->priv->factory, N_("/Directories"));  shell->priv->directory_preferences_item = gtk_item_factory_get_item(shell->priv->factory, N_("/Directories/Directory Preferences"));  shell->priv->directory_homepage_item = gtk_item_factory_get_item(shell->priv->factory, N_("/Directories/Visit Directory Homepage"));  shell->priv->previous_directory_item = gtk_item_factory_get_widget(shell->priv->factory, N_("/Directories/Previous Directory"));  shell->priv->next_directory_item = gtk_item_factory_get_widget(shell->priv->factory, N_("/Directories/Next Directory"));  shell->priv->move_directory_left_item = gtk_item_factory_get_widget(shell->priv->factory, N_("/Directories/Move Directory Left"));  shell->priv->move_directory_right_item = gtk_item_factory_get_widget(shell->priv->factory, N_("/Directories/Move Directory Right"));  /* add directory items */  st_shell_menubar_make_directory_items(shell);  /* configure the view menu items */  st_shell_menubar_init_view_item(shell, N_("/View/Toolbar"), &st_settings.view_toolbar);  st_shell_menubar_init_view_item(shell, N_("/View/Tabs"), &st_settings.view_tabs);  st_shell_menubar_init_view_item(shell, N_("/View/Tab Icons"), &st_settings.view_tab_icons);  st_shell_menubar_init_view_item(shell, N_("/View/Statusbar"), &st_settings.view_statusbar);  st_shell_menubar_init_toolbar_style_item(shell, N_("/View/Toolbar Style/Desktop Default"), ST_SHELL_TOOLBAR_STYLE_GTK);  st_shell_menubar_init_toolbar_style_item(shell, N_("/View/Toolbar Style/Icons Only"), GTK_TOOLBAR_ICONS);  st_shell_menubar_init_toolbar_style_item(shell, N_("/View/Toolbar Style/Text Only"), GTK_TOOLBAR_TEXT);  st_shell_menubar_init_toolbar_style_item(shell, N_("/View/Toolbar Style/Text Below Icons"), GTK_TOOLBAR_BOTH);  st_shell_menubar_init_toolbar_style_item(shell, N_("/View/Toolbar Style/Text Beside Icons"), GTK_TOOLBAR_BOTH_HORIZ);  st_shell_menubar_init_toolbar_size_item(shell, N_("/View/Toolbar Size/Desktop Default"), ST_SHELL_TOOLBAR_SIZE_GTK);  st_shell_menubar_init_toolbar_size_item(shell, N_("/View/Toolbar Size/Small"), GTK_ICON_SIZE_SMALL_TOOLBAR);  st_shell_menubar_init_toolbar_size_item(shell, N_("/View/Toolbar Size/Large"), GTK_ICON_SIZE_LARGE_TOOLBAR);  /* pack the menubar */    gtk_box_pack_start(GTK_BOX(shell->priv->box), shell->priv->menubar, FALSE, FALSE, 0);  gtk_widget_show(shell->priv->menubar);}static voidst_shell_menubar_make_directory_items (STShell *shell){  GtkWidget *separator;  GSList *group = NULL;  GSList *l;  unsigned int num = 0;  g_return_if_fail(ST_IS_SHELL(shell));  /* destroy the old items */  g_slist_foreach(shell->priv->directory_items, (GFunc) gtk_widget_destroy, NULL);  g_slist_free(shell->priv->directory_items);  shell->priv->directory_items = NULL;  separator = gtk_separator_menu_item_new();  gtk_widget_show(separator);  gtk_menu_shell_append(GTK_MENU_SHELL(shell->priv->directories_menu), separator);  shell->priv->directory_items = g_slist_append(shell->priv->directory_items, separator);  SG_LIST_FOREACH(l, st_handlers_list)    {      STHandler *handler = l->data;      const char *label = st_handler_get_label(handler);      GtkWidget *item;      unsigned int hid;      item = gtk_radio_menu_item_new_with_label(group, label);      group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(item));      gtk_widget_show(item);      gtk_menu_shell_append(GTK_MENU_SHELL(shell->priv->directories_menu), item);      if (++num < 10)	{	  char *accel_path;	  char *accelerator;	  accel_path = g_strdup_printf("<streamtuner-Browser>/Directories/%s", label);	  accelerator = g_strdup_printf("<Control>%i", num);	  sgtk_accel_map_change_entry(accel_path, accelerator, TRUE);	  g_free(accel_path);	  g_free(accelerator);	}      hid = g_signal_connect(item, "toggled", G_CALLBACK(st_shell_menubar_directory_toggled_h), shell);      g_object_set_data(G_OBJECT(item), "handler", handler);      g_object_set_data(G_OBJECT(item), "hid", GINT_TO_POINTER(hid));      shell->priv->directory_items = g_slist_append(shell->priv->directory_items, item);    }}/* * Select the menu item corresponding to the currently selected tab. */static voidst_shell_menubar_select_directory_item (STShell *shell){  STBrowserTab *tab;  GSList *l;    g_return_if_fail(ST_IS_SHELL(shell));  tab = st_shell_get_selected_tab(shell);  SG_LIST_FOREACH(l, shell->priv->directory_items)    {      GtkWidget *item = l->data;      STHandler *handler = g_object_get_data(G_OBJECT(item), "handler");      unsigned int hid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(item), "hid"));            if (handler == tab->handler)	{	  g_signal_handler_block(item, hid);	  gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE);	  g_signal_handler_unblock(item, hid);	  	  break;	}    }}static voidst_shell_menubar_init_view_item (STShell *shell,				 const char *path,				 gboolean *var){  GtkWidget *item;  g_return_if_fail(ST_IS_SHELL(shell));  g_return_if_fail(path != NULL);  g_return_if_fail(var != NULL);  item = gtk_item_factory_get_item(shell->priv->factory, path);  gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), *var);  if (var == &st_settings.view_tabs)    gtk_widget_set_sensitive(shell->priv->view_tab_icons_item, st_settings.view_tabs);  g_object_set_data(G_OBJECT(item), "shell", shell);  g_signal_connect(item, "toggled", G_CALLBACK(st_shell_menubar_view_toggled_h), var);}static voidst_shell_menubar_view_toggled_h (GtkCheckMenuItem *item, gpointer user_data){  gboolean *var = user_data;  STShell *shell = g_object_get_data(G_OBJECT(item), "shell");  *var = gtk_check_menu_item_get_active(item);  st_shell_update_visibility(shell);  if (var == &st_settings.view_tabs)    gtk_widget_set_sensitive(shell->priv->view_tab_icons_item, st_settings.view_tabs);}static voidst_shell_menubar_init_toolbar_style_item (STShell *shell,					  const char *path,					  int style){  GtkWidget *item;  g_return_if_fail(ST_IS_SHELL(shell));  g_return_if_fail(path != NULL);  item = gtk_item_factory_get_item(shell->priv->factory, path);  gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), st_settings.toolbar_style == style);  g_object_set_data(G_OBJECT(item), "shell", shell);  g_signal_connect(item, "toggled", G_CALLBACK(st_shell_menubar_toolbar_style_toggled_h), GINT_TO_POINTER(style));}static voidst_shell_menubar_toolbar_style_toggled_h (GtkCheckMenuItem *item,					  gpointer user_data){  if (gtk_check_menu_item_get_active(item))    {      int style = GPOINTER_TO_INT(user_data);      STShell *shell = g_object_get_data(G_OBJECT(item), "shell");      st_settings.toolbar_style = style;      st_shell_update_toolbar_style(shell);    }}static voidst_shell_menubar_init_toolbar_size_item (STShell *shell,					 const char *path,					 int size){  GtkWidget *item;  g_return_if_fail(ST_IS_SHELL(shell));  g_return_if_fail(path != NULL);  item = gtk_item_factory_get_item(shell->priv->factory, path);  gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), st_settings.toolbar_size == size);  g_object_set_data(G_OBJECT(item), "shell", shell);  g_signal_connect(item, "toggled", G_CALLBACK(st_shell_menubar_toolbar_size_toggled_h), GINT_TO_POINTER(size));}static voidst_shell_menubar_toolbar_size_toggled_h (GtkCheckMenuItem *item,					 gpointer user_data){  if (gtk_check_menu_item_get_active(item))    {      int size = GPOINTER_TO_INT(user_data);      STShell *shell = g_object_get_data(G_OBJECT(item), "shell");      st_settings.toolbar_size = size;      st_shell_update_toolbar_size(shell);    }}static voidst_shell_menubar_directory_toggled_h (GtkCheckMenuItem *item,				      gpointer user_data){  if (gtk_check_menu_item_get_active(item))    {      STShell *shell = user_data;      STHandler *handler = g_object_get_data(G_OBJECT(item), "handler");      STBrowserTab *tab = st_shell_get_tab_with_handler(shell, handler);      st_shell_select_tab(shell, tab, FALSE);    }}static voidst_shell_make_toolbar (STShell *shell){  shell->priv->toolbar = gtk_toolbar_new();  shell->priv->tune_in_button = gtk_toolbar_insert_stock(GTK_TOOLBAR(shell->priv->toolbar),							 ST_STOCK_TUNE_IN,							 _("Listen to the selected stream"),							 NULL,							 (GtkSignalFunc) st_shell_toolbar_button_clicked_h,							 shell,							 -1);  shell->priv->record_button = gtk_toolbar_insert_stock(GTK_TOOLBAR(shell->priv->toolbar),							ST_STOCK_RECORD,							_("Record the selected stream"),							NULL,							(GtkSignalFunc) st_shell_toolbar_button_clicked_h,							shell,							-1);  shell->priv->browse_button = gtk_toolbar_insert_stock(GTK_TOOLBAR(shell->priv->toolbar),							ST_STOCK_BROWSE,							_("Browse the selected stream's web page"),							NULL,							(GtkSignalFunc) st_shell_toolbar_button_clicked_h,							shell,							-1);  shell->priv->stop_button = gtk_toolbar_insert_stock(GTK_TOOLBAR(shell->priv->toolbar),						      GTK_STOCK_STOP,						      _("Stop the selected tab"),						      NULL,						      (GtkSignalFunc) st_shell_toolbar_button_clicked_h,						      shell,						      -1);  shell->priv->reload_button = gtk_toolbar_insert_stock(GTK_TOOLBAR(shell->priv->toolbar),							ST_STOCK_RELOAD,							_("Reload the selected category"),							NULL,							(GtkSignalFunc) st_shell_toolbar_button_clicked_h,							shell,							-1);  gtk_toolbar_append_space(GTK_TOOLBAR(shell->priv->toolbar));  shell->priv->link = st_link_new();  gtk_widget_show(shell->priv->link);  gtk_container_set_border_width(GTK_CONTAINER(shell->priv->link), SGTK_HIG_CONTROL_SPACING);  gtk_toolbar_append_widget(GTK_TOOLBAR(shell->priv->toolbar), shell->priv->link, NULL, NULL);  gtk_box_pack_start(GTK_BOX(shell->priv->box), shell->priv->toolbar, FALSE, FALSE, 0);  gtk_widget_show(shell->priv->toolbar);}static voidst_shell_toolbar_button_clicked_h (GtkButton *button, gpointer user_data){  STShell *shell = user_data;  if ((GtkWidget *) button == shell->priv->tune_in_button)

⌨️ 快捷键说明

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