/* * Copyright 2014 (c) Anna Schumaker. */ extern "C" { #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); tab_toolbar->init(tab_pq, collection_label, tab_window, T_RANDOM); collection_label->init(tab_pq); tab_label = collection_label; tab_vbox.pack_start(*tab_window, true, true); gui :: get_widget("o_notebook")->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_added(struct queue *queue, unsigned int pos) { if (collection_tab) collection_tab->on_track_added(pos); } static void collection_removed(struct queue *queue, unsigned int pos) { if (collection_tab) collection_tab->on_track_removed(pos); } static void collection_cleared(struct queue *queue, unsigned int n) { if (collection_tab) collection_tab->on_tracks_cleared(n); } static void collection_updated(struct queue *queue, unsigned int pos) { if (collection_tab) collection_tab->on_track_updated(pos); } struct queue_ops collection_ops = { collection_added, collection_removed, collection_cleared, collection_save, collection_updated, }; void init_collection_tab() { collection_tab = new CollectionTab; }