ocarina/gui/collection_tab.cpp

100 lines
2.0 KiB
C++

/*
* Copyright 2014 (c) Anna Schumaker.
*/
extern "C" {
#include <core/collection.h>
#include <core/playlist.h>
#include <gui/builder.h>
#include <gui/queue.h>
}
#include <gui/tabs.h>
#include <gui/queue/label.h>
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);
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<unsigned int> 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");
}
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_init,
gui_queue_free,
collection_added,
collection_removed,
collection_cleared,
collection_save,
collection_updated,
};
void init_collection_tab()
{
collection_tab = new CollectionTab;
}