This allows me to change playback order without having to delete old playlists and make new ones. Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
83 lines
2.2 KiB
C++
83 lines
2.2 KiB
C++
// Copyright (c) 2012 Bryan Schumaker
|
|
#include <ocarina/ocarina.h>
|
|
#include <ocarina/chooser.h>
|
|
#include <ocarina/button.h>
|
|
#include <ocarina/body.h>
|
|
|
|
#include <libsaria/libsaria.h>
|
|
#include <libsaria/deck.h>
|
|
|
|
#include <map>
|
|
using namespace std;
|
|
|
|
static GtkWidget *tabs;
|
|
static GtkWidget *action_box;
|
|
static GtkWidget *open_button;
|
|
static map<GtkWidget *, libsaria::Playlist *> tab_mapping;
|
|
|
|
static void on_click_open_file(GtkWidget *b, gpointer d)
|
|
{
|
|
string file = ocarina::choose_file();
|
|
if (file != "") {
|
|
println("Playing file: " + file);
|
|
libsaria::play_outside_song(file);
|
|
}
|
|
}
|
|
|
|
static void on_page_reordered(GtkWidget *t, GtkWidget *page, guint num, gpointer d)
|
|
{
|
|
libsaria::Playlist *plist = tab_mapping[page];
|
|
unsigned int n = libsaria::deck::move_playlist(plist, num);
|
|
if (n != num)
|
|
gtk_notebook_reorder_child(GTK_NOTEBOOK(tabs), page, n);
|
|
}
|
|
|
|
namespace ocarina
|
|
{
|
|
|
|
GtkWidget *body::playlist_init()
|
|
{
|
|
tabs = gtk_notebook_new();
|
|
action_box = gtk_vbox_new(FALSE, 0);
|
|
open_button = make_larger_button(GTK_STOCK_OPEN, on_click_open_file, true);
|
|
|
|
gtk_box_pack_start(GTK_BOX(action_box), open_button, FALSE, FALSE, 0);
|
|
|
|
gtk_notebook_set_scrollable(GTK_NOTEBOOK(tabs), true);
|
|
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tabs), GTK_POS_LEFT);
|
|
gtk_notebook_set_action_widget(GTK_NOTEBOOK(tabs), action_box, GTK_PACK_END);
|
|
g_signal_connect(tabs, "page-reordered", G_CALLBACK(on_page_reordered), NULL);
|
|
g_object_set(tabs, "tab-border", 0, NULL);
|
|
|
|
gtk_widget_show(tabs);
|
|
gtk_widget_show(action_box);
|
|
|
|
|
|
return tabs;
|
|
};
|
|
|
|
void body::add_page(int pg, GtkWidget *page, GtkWidget *label, libsaria::Playlist *p)
|
|
{
|
|
if (pg == -1)
|
|
pg = 0;
|
|
gtk_notebook_insert_page(GTK_NOTEBOOK(tabs), page, label, pg);
|
|
gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(tabs), page, !p->is_static());
|
|
tab_mapping[page] = p;
|
|
}
|
|
|
|
void body::remove_page(GtkWidget *page)
|
|
{
|
|
int pg = gtk_notebook_page_num(GTK_NOTEBOOK(tabs), page);
|
|
gtk_notebook_remove_page(GTK_NOTEBOOK(tabs), pg);
|
|
tab_mapping.erase(page);
|
|
}
|
|
|
|
void body::switch_to_page(GtkWidget *page)
|
|
{
|
|
int pg = gtk_notebook_page_num(GTK_NOTEBOOK(tabs), page);
|
|
println("Switching to page: %d", pg);
|
|
gtk_notebook_set_current_page(GTK_NOTEBOOK(tabs), pg);
|
|
}
|
|
|
|
}; /* Namespace: ocarina */
|