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

📄 favorites.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{    GtkTreeModel* model;    GtkTreePath* path = gtk_tree_path_new_from_string (path_string);    GtkTreeIter iter;    gint column;    HXFavorite* favorite = NULL;        column = (gint)g_object_get_data (G_OBJECT (cell), "column");    model = (GtkTreeModel*)g_object_get_data (G_OBJECT (cell), "model");    g_return_if_fail(model != NULL);        gtk_tree_model_get_iter(model, &iter, path);        gtk_tree_model_get(GTK_TREE_MODEL(model), &iter,                       COLUMN_FAVORITE, &favorite,                       -1);    g_return_if_fail(favorite != NULL);        switch(column)    {        case COLUMN_TITLE:            g_free(favorite->title);            favorite->title = g_strdup(new_text);            gtk_list_store_set(GTK_LIST_STORE(model), &iter,                               COLUMN_TITLE, favorite->title,                               -1);            break;        case COLUMN_URL:            g_free(favorite->url);            favorite->url = g_strdup(new_text);            gtk_list_store_set(GTK_LIST_STORE(model), &iter,                               COLUMN_URL, favorite->url,                               -1);            break;    }    gtk_tree_path_free(path);}static voidcount_selections(GtkTreeModel* /* model */,                 GtkTreePath*  /* path */,                 GtkTreeIter*  /* iter */,                 gpointer data){    gint* count = (gint*)data;    (*count)++;}void hfd_selection_changed(GtkTreeSelection* selection,                      GtkWidget* delete_button){    gint count = 0;            gtk_tree_selection_selected_foreach(selection, count_selections, &count);    if(count > 0)    {        /* Enable delete button */        gtk_widget_set_sensitive(GTK_WIDGET(delete_button), TRUE);    }    else    {        /* Disable delete button */        gtk_widget_set_sensitive(GTK_WIDGET(delete_button), FALSE);    }}typedef struct{    GladeXML* xml;} HXManageFavoritesDialog;static voidhxplay_manage_favorites_dialog_destroy (GtkWidget* /* widget */,                                        HXManageFavoritesDialog* info){    glade_xml_destroy (info->xml);    g_free(info);}GtkDialog*hxplay_manage_favorites_dialog_new(GList** favorites_list_ptr){    GladeXML* xml;    GtkWidget* dialog;    gchar* filename;    GList* favorites_list = *favorites_list_ptr;    GList* favorites_list_iter;    GtkWidget* tree_view;    GtkWidget* delete_button;    GtkListStore *store;    GtkCellRenderer *renderer;    GtkTreeViewColumn *column;    GtkTreeIter tree_iter;    GtkTreeSelection* selection;    HXManageFavoritesDialog* info;        filename = hxcommon_locate_file("favorites.glade");    xml = glade_xml_new (filename, NULL, NULL);    g_free(filename);    g_return_val_if_fail(xml != NULL, NULL);    dialog = glade_xml_get_widget(xml, "hxplayer_favorites_dialog");        g_return_val_if_fail(dialog != NULL, NULL);    delete_button = glade_xml_get_widget(xml, "hfd_delete_button");        g_return_val_if_fail(delete_button != NULL, NULL);        tree_view = glade_xml_get_widget (xml, "hfd_tree_view");    g_return_val_if_fail(tree_view != NULL, NULL);    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));    gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);        g_signal_connect(G_OBJECT(selection), "changed",                     G_CALLBACK(hfd_selection_changed), delete_button);    /* Populate the store */    store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_POINTER);        favorites_list_iter = favorites_list;    while(favorites_list_iter)    {        HXFavorite* favorite = (HXFavorite*)favorites_list_iter->data;                gtk_list_store_append(store, &tree_iter);	gtk_list_store_set (store, &tree_iter,			    COLUMN_TITLE, favorite->title,                            COLUMN_URL, favorite->url,                            COLUMN_EDITABLE, TRUE,                            COLUMN_FAVORITE, favorite,			    -1);        favorites_list_iter = g_list_next(favorites_list_iter);    }        /* Configure the tree view */    gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view),			    GTK_TREE_MODEL(store));    /* Title column */    renderer = gtk_cell_renderer_text_new();        g_signal_connect(G_OBJECT(renderer), "edited",                     G_CALLBACK(hfd_cell_edited), NULL);    g_object_set_data(G_OBJECT(renderer), "model", store);    g_object_set_data(G_OBJECT(renderer), "column", (gint *)COLUMN_TITLE);        column = gtk_tree_view_column_new_with_attributes(_("Title"),                                                      renderer,                                                      "text", COLUMN_TITLE,                                                      "editable", COLUMN_EDITABLE,                                                      NULL);    gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);    // XXXRGG: How do I set the default (vs minimum) width of a column?    gtk_tree_view_column_set_min_width (column, 80);        /* Url column */    renderer = gtk_cell_renderer_text_new();    g_signal_connect (G_OBJECT (renderer), "edited",                      G_CALLBACK (hfd_cell_edited), NULL);    g_object_set_data(G_OBJECT(renderer), "model", store);    g_object_set_data(G_OBJECT(renderer), "column", (gint *)COLUMN_URL);        column = gtk_tree_view_column_new_with_attributes(_("URI"),                                                      renderer,                                                      "text", COLUMN_URL,                                                      "editable", COLUMN_EDITABLE,                                                      NULL);    gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);        /* Set data for new/delete button handlers */    g_object_set_data(G_OBJECT(dialog), "favorites_list_ptr", (gpointer)favorites_list_ptr);    g_object_set_data(G_OBJECT(dialog), "model",              (gpointer)store);    g_object_set_data(G_OBJECT(dialog), "tree_view",          (gpointer)tree_view);    info = g_new0(HXManageFavoritesDialog, 1);    info->xml = xml;        g_signal_connect (G_OBJECT (dialog), "destroy",                      G_CALLBACK (hxplay_manage_favorites_dialog_destroy),                      info);    return GTK_DIALOG(dialog);}void hfd_new_favorite(GtkWidget* widget){    GList* favorites_list;    GList** favorites_list_ptr;    GtkListStore* list_store;    gpointer model_data;    HXFavorite* favorite;    GtkTreeIter tree_iter;    GtkWidget* tree_view;    GtkTreePath* path;        GtkWidget* dialog = gtk_widget_get_toplevel(widget);        favorites_list_ptr = (GList**)g_object_get_data(G_OBJECT(dialog), "favorites_list_ptr");    favorites_list = *favorites_list_ptr;    model_data = g_object_get_data(G_OBJECT(dialog), "model");    list_store = GTK_LIST_STORE(model_data);    tree_view = (GtkWidget*)g_object_get_data(G_OBJECT(dialog), "tree_view");    favorite = hx_favorite_new();    favorite->title = g_strdup(_("Untitled"));    favorite->url = g_strdup("http://");    favorites_list = g_list_append(favorites_list, favorite);        gtk_list_store_append(list_store, &tree_iter);    gtk_list_store_set (list_store, &tree_iter,                        COLUMN_TITLE, favorite->title,                        COLUMN_URL, favorite->url,                        COLUMN_EDITABLE, TRUE,                        COLUMN_FAVORITE, favorite,                        -1);        path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store),                                   &tree_iter);        gtk_tree_view_set_cursor(GTK_TREE_VIEW(tree_view), path, NULL, FALSE);    gtk_tree_path_free(path);        *favorites_list_ptr = favorites_list;}void hfd_delete_favorite(GtkWidget* widget){    GList* favorites_list;    GList** favorites_list_ptr;    GList* favorites_link;    GtkListStore* list_store;    gpointer model_data;    HXFavorite* favorite;    GtkTreeIter tree_iter;    GtkTreeIter* select_iter = NULL;    GtkTreeIter* last_iter = NULL;    GtkTreeSelection* selection;    GtkWidget* tree_view;    gboolean got_row;    gboolean deleted_row = FALSE;            GtkWidget* dialog = gtk_widget_get_toplevel(widget);        favorites_list_ptr = (GList**)g_object_get_data(G_OBJECT(dialog), "favorites_list_ptr");    favorites_list = *favorites_list_ptr;    tree_view = (GtkWidget*)g_object_get_data(G_OBJECT(dialog), "tree_view");    model_data = g_object_get_data(G_OBJECT(dialog), "model");    list_store = GTK_LIST_STORE(model_data);    g_return_if_fail(list_store != NULL &&                     favorites_list != NULL &&                     model_data != NULL);        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));        got_row = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &tree_iter);    while(got_row)    {        if(gtk_tree_selection_iter_is_selected(selection, &tree_iter))        {            gtk_tree_model_get(GTK_TREE_MODEL(list_store), &tree_iter,                               COLUMN_FAVORITE, &favorite,                               -1);            favorites_link = g_list_find(favorites_list, favorite);            favorites_list = g_list_remove_link(favorites_list, favorites_link);            hx_favorite_free(favorite);            // Gtk 2.2:            // got_row = gtk_list_store_remove(list_store, &tree_iter);            gtk_list_store_remove(list_store, &tree_iter);            got_row = tree_iter.stamp != 0;            if(select_iter)            {                gtk_tree_iter_free(select_iter);                select_iter = NULL;            }            if(got_row)            {                select_iter = gtk_tree_iter_copy(&tree_iter);            }            deleted_row = TRUE;        }        else        {            if(last_iter)            {                gtk_tree_iter_free(last_iter);            }            last_iter = gtk_tree_iter_copy(&tree_iter);            got_row = gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &tree_iter);        }    }    if(deleted_row)    {        GtkTreePath* path;        if(!select_iter)        {            select_iter = last_iter;        }        else        {            gtk_tree_iter_free(last_iter);                    }                if(select_iter)        {            path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store),                                           select_iter);                gtk_tree_view_set_cursor(GTK_TREE_VIEW(tree_view), path, NULL, FALSE);            gtk_tree_path_free(path);            gtk_tree_iter_free(select_iter);            select_iter = NULL;        }    }    *favorites_list_ptr = favorites_list;}

⌨️ 快捷键说明

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