/* * Copyright 2014 (c) Anna Schumaker. */ extern "C" { #include #include #include #include } #include #include class CollectionTab : public Tab { private: CollectionLabel *collection_label; public: CollectionTab() : Tab(collection_get_queue()) { tab_builder->add_from_file(gui :: share_file("QueueLabel.ui")); tab_builder->get_widget_derived("CollectionLabel", collection_label); collection_label->init(tab_pq); tab_label = collection_label; tab_vbox.pack_start(*tab_window, true, true); Glib::wrap(GTK_NOTEBOOK(gui_builder_widget("o_notebook")), false)->insert_page(tab_vbox, *collection_label, 0); } ~CollectionTab() { tab_unmap(); } bool on_key_press_event(const std::string &key) { std::vector ids; if (key != "Delete") return Tab :: on_key_press_event(key); tab_selected_ids(ids); for (unsigned int i = 0; i < ids.size(); i++) collection_ban(track_get(ids[i])); return true; } }; static CollectionTab *collection_tab; static void *collection_init(struct queue *queue) { return gui_queue_alloc(queue, "Collection", GQ_CAN_RANDOM); } static void collection_added(struct queue *queue, unsigned int pos) { if (collection_tab) collection_tab->on_track_added(pos); gui_queue_added(queue, pos); } static bool collection_erase(struct queue *queue, struct track *track) { return false; } static void collection_removed(struct queue *queue, unsigned int pos) { if (collection_tab) collection_tab->on_track_removed(pos); gui_queue_removed(queue, pos); } struct queue_ops collection_ops = { collection_init, gui_queue_free, collection_added, collection_erase, collection_removed, gui_queue_cleared, collection_save, gui_queue_updated, }; void init_collection_tab() { collection_tab = new CollectionTab; }