st-handler.c
来自「linux下网络收音机的源码」· C语言 代码 · 共 1,838 行 · 第 1/4 页
C
1,838 行
}STCategoryBag *st_handler_get_stock_category (STHandler *handler, const char *name){ GetStockCategoryInfo info = { name, NULL }; g_return_val_if_fail(ST_IS_HANDLER(handler), NULL); g_return_val_if_fail(name != NULL, NULL); g_node_traverse(handler->priv->stock_categories, G_PRE_ORDER, G_TRAVERSE_ALL, -1, st_handler_get_stock_category_cb, &info); return info.category_bag;}static gbooleanst_handler_get_stock_category_cb (GNode *node, gpointer data){ if (node->data) { GetStockCategoryInfo *info = data; STCategoryBag *bag = node->data; if (ST_CATEGORY_BAG_IS(bag, info->name)) { info->category_bag = bag; return TRUE; /* abort */ } } return FALSE; /* continue */}/* * If no category is selected, select the __main category (if there is * no __main category, abort). */voidst_handler_select_category (STHandler *handler){ STCategoryBag *category_bag = NULL; g_return_if_fail(ST_IS_HANDLER(handler)); category_bag = st_handler_get_selected_category(handler); if (category_bag) g_object_unref(category_bag); /* we're done */ else { category_bag = st_handler_get_stock_category(handler, ST_CATEGORY_BAG_MAIN); g_assert(category_bag != NULL); SG_SET_FLAGS(category_bag->flags, ST_CATEGORY_BAG_SELECTED); }}STCategoryBag *st_handler_get_selected_category (STHandler *handler){ STCategoryBag *selected_category = NULL; g_return_val_if_fail(ST_IS_HANDLER(handler), NULL); st_category_store_foreach(handler->priv->categories, st_handler_get_selected_category_cb, &selected_category); return selected_category;}static gbooleanst_handler_get_selected_category_cb (STCategoryStore *store, STCategoryBag *bag, STCategoryBag *parent, gpointer data){ if (bag->flags & ST_CATEGORY_BAG_SELECTED) { STCategoryBag **selected = data; *selected = g_object_ref(bag); return TRUE; /* stop */ } else return FALSE; /* continue */}gbooleanst_handler_event_is_bound (STHandler *handler, STHandlerEvent event){ g_return_val_if_fail(ST_IS_HANDLER(handler), FALSE); g_return_val_if_fail(event >= 0 && event < ST_HANDLER_N_EVENTS, FALSE); return handler->priv->callbacks[event].cb != NULL;}gbooleanst_handler_is_dummy (STHandler *handler){ g_return_val_if_fail(ST_IS_HANDLER(handler), FALSE); return handler->priv->dummy;}const char *st_handler_get_name (STHandler *handler){ g_return_val_if_fail(ST_IS_HANDLER(handler), NULL); return handler->priv->name;}const char *st_handler_get_label (STHandler *handler){ g_return_val_if_fail(ST_IS_HANDLER(handler), NULL); return handler->priv->label;}const char *st_handler_get_description (STHandler *handler){ g_return_val_if_fail(ST_IS_HANDLER(handler), NULL); return handler->priv->description;}const char *st_handler_get_home (STHandler *handler){ g_return_val_if_fail(ST_IS_HANDLER(handler), NULL); return handler->priv->home;}GdkPixbuf *st_handler_get_pixbuf (STHandler *handler){ g_return_val_if_fail(ST_IS_HANDLER(handler), NULL); return handler->priv->pixbuf;}unsigned intst_handler_get_flags (STHandler *handler){ g_return_val_if_fail(ST_IS_HANDLER(handler), 0); return handler->priv->flags;}intst_handler_get_stream_version (STHandler *handler){ g_return_val_if_fail(ST_IS_HANDLER(handler), 0); return handler->priv->stream_version;}voidst_handler_set_paned_position (STHandler *handler, int paned_position){ g_return_if_fail(ST_IS_HANDLER(handler)); handler->priv->paned_position = paned_position;}intst_handler_get_paned_position (STHandler *handler){ g_return_val_if_fail(ST_IS_HANDLER(handler), -1); return handler->priv->paned_position;}GSList *st_handler_get_fields (STHandler *handler){ g_return_val_if_fail(ST_IS_HANDLER(handler), NULL); return handler->priv->fields;}intst_handler_count_fields (STHandler *handler, unsigned int flags){ int count = 0; GSList *l; SG_LIST_FOREACH(l, handler->priv->fields) if (st_handler_field_get_flags(l->data) & flags) count++; return count;}voidst_handler_set_fields_sort_index (STHandler *handler, int sort_index){ g_return_if_fail(ST_IS_HANDLER(handler)); handler->priv->fields_sort_index = sort_index;}intst_handler_get_fields_sort_index (STHandler *handler){ g_return_val_if_fail(ST_IS_HANDLER(handler), -1); return handler->priv->fields_sort_index;}voidst_handler_set_fields_sort_order (STHandler *handler, int sort_order){ g_return_if_fail(ST_IS_HANDLER(handler)); handler->priv->fields_sort_order = sort_order;}intst_handler_get_fields_sort_order (STHandler *handler){ g_return_val_if_fail(ST_IS_HANDLER(handler), -1); return handler->priv->fields_sort_order;}/*** events ******************************************************************/gbooleanst_handler_event_reload (STHandler *handler, STCategory *category, GNode **categories, GList **streams, GError **err){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_RELOAD]; STHandlerReloadCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, FALSE); return cb(category, categories, streams, callback->data, err);}gbooleanst_handler_event_reload_multiple (STHandler *handler, GNode **categories, GHashTable **streams, GError **err){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_RELOAD_MULTIPLE]; STHandlerReloadMultipleCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, FALSE); return cb(categories, streams, callback->data, err);}STCategory *st_handler_event_category_new (STHandler *handler){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_CATEGORY_NEW]; STCategoryNewCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, NULL); return cb(callback->data);}voidst_handler_event_category_free (STHandler *handler, STCategory *category){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_CATEGORY_FREE]; STCategoryFreeCallback cb = callback->cb; g_return_if_fail(cb != NULL); cb(category, callback->data);}STStream *st_handler_event_stream_new (STHandler *handler){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_STREAM_NEW]; STStreamNewCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, NULL); return cb(callback->data);}voidst_handler_event_stream_field_get (STHandler *handler, STStream *stream, STHandlerField *field, GValue *value){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_STREAM_FIELD_GET]; STStreamFieldGetCallback cb = callback->cb; g_return_if_fail(cb != NULL); cb(stream, field, value, callback->data);}voidst_handler_event_stream_field_set (STHandler *handler, STStream *stream, STHandlerField *field, const GValue *value){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_STREAM_FIELD_SET]; STStreamFieldSetCallback cb = callback->cb; g_return_if_fail(cb != NULL); cb(stream, field, value, callback->data);}voidst_handler_event_stream_stock_field_get (STHandler *handler, STStream *stream, STHandlerStockField stock_field, GValue *value){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_STREAM_STOCK_FIELD_GET]; STStreamStockFieldGetCallback cb = callback->cb; g_return_if_fail(cb != NULL); cb(stream, stock_field, value, callback->data);}gbooleanst_handler_event_stream_modify (STHandler *handler, STStream *stream, GSList *fields, GSList *values, GError **err){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_STREAM_MODIFY]; STStreamModifyCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, FALSE); return cb(stream, fields, values, callback->data, err);}gbooleanst_handler_event_stream_delete (STHandler *handler, STStream *stream, GError **err){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_STREAM_DELETE]; STStreamDeleteCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, FALSE); return cb(stream, callback->data, err);}voidst_handler_event_stream_free (STHandler *handler, STStream *stream){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_STREAM_FREE]; STStreamFreeCallback cb = callback->cb; g_return_if_fail(cb != NULL); cb(stream, callback->data);}gbooleanst_handler_event_stream_resolve (STHandler *handler, STStream *stream, GError **err){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_STREAM_RESOLVE]; STStreamResolveCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, FALSE); return cb(stream, callback->data, err);}gbooleanst_handler_event_stream_tune_in (STHandler *handler, STStream *stream, GError **err){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_STREAM_TUNE_IN]; STStreamTuneInCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, FALSE); return cb(stream, callback->data, err);}gbooleanst_handler_event_stream_tune_in_multiple (STHandler *handler, GSList *streams, GError **err){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_STREAM_TUNE_IN_MULTIPLE]; STStreamTuneInMultipleCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, FALSE); return cb(streams, callback->data, err);}gbooleanst_handler_event_stream_record (STHandler *handler, STStream *stream, GError **err){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_STREAM_RECORD]; STStreamRecordCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, FALSE); return cb(stream, callback->data, err);}gbooleanst_handler_event_stream_browse (STHandler *handler, STStream *stream, GError **err){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_STREAM_BROWSE]; STStreamBrowseCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, FALSE); return cb(stream, callback->data, err);}gpointerst_handler_event_thread_begin (STHandler *handler){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_THREAD_BEGIN]; STThreadBeginCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, NULL); return cb(callback->data);}voidst_handler_event_thread_end (STHandler *handler, gpointer thread_data){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_THREAD_END]; STThreadEndCallback cb = callback->cb; g_return_if_fail(cb != NULL); cb(thread_data, callback->data);}GtkWidget *st_handler_event_preferences_widget_new (STHandler *handler){ STHandlerCallback *callback = &handler->priv->callbacks[ST_HANDLER_EVENT_PREFERENCES_WIDGET_NEW]; STHandlerPreferencesWidgetNewCallback cb = callback->cb; g_return_val_if_fail(cb != NULL, NULL); return cb(callback->data);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?