ocarina: Add a random button to playlists
I reused my old dice png from several releases ago. This implements the "switch a playlist from set to queue and back again" feature that I wanted. Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
parent
848faa2bc6
commit
d785b91c46
|
@ -16,6 +16,7 @@ def script(target, source, env):
|
|||
|
||||
extra_files = [
|
||||
("ocarina.xml", "../lib/ocarina/ocarina.xml", copy),
|
||||
("images/random.png", "../lib/ocarina/random.png", copy),
|
||||
("images/ocarina.png", "../lib/ocarina/ocarina.png", copy),
|
||||
("images/thumbs_up.png", "../lib/ocarina/thumbs_up.png", copy),
|
||||
("images/thumbs_down.png", "../lib/ocarina/thumbs_down.png", copy),
|
||||
|
|
|
@ -39,6 +39,7 @@ void on_notify(notify_t event, void *data)
|
|||
case PLAYLIST_DELETE:
|
||||
case PLAYLIST_RENUMBER:
|
||||
case PLAYLIST_DISABLE:
|
||||
case PLAYLIST_RANDOM:
|
||||
update_tabs(event, (libsaria::Playlist *)data);
|
||||
break;
|
||||
case PLAYLIST_ADD:
|
||||
|
|
|
@ -14,6 +14,7 @@ enum ExtraWidgets {
|
|||
NO_EXTRA_WIDGETS = 0,
|
||||
CLOSE_BUTTON = (1 << 0),
|
||||
DISABLE_BUTTON = (1 << 1),
|
||||
RANDOM_BUTTON = (1 << 2),
|
||||
};
|
||||
|
||||
struct PlaylistWidgets {
|
||||
|
@ -27,6 +28,7 @@ struct PlaylistWidgets {
|
|||
GtkLabel *page_label;
|
||||
GtkEntry *entry;
|
||||
GtkToggleButton *disable;
|
||||
GtkToggleButton *random;
|
||||
};
|
||||
|
||||
/* library.cpp */
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Copyright (c) 2012 Bryan Schumaker
|
||||
#include <track.h>
|
||||
#include <library.h>
|
||||
#include <stdlib.h>
|
||||
#include "ocarina.h"
|
||||
|
||||
|
@ -389,6 +390,15 @@ static void playlist_disable(GtkToggleButton *button, gpointer data)
|
|||
playlist->set_disabled(gtk_toggle_button_get_active(button));
|
||||
}
|
||||
|
||||
static void playlist_random(GtkToggleButton *button, gpointer data)
|
||||
{
|
||||
struct libsaria::Playlist *playlist = (libsaria::Playlist *)data;
|
||||
if (playlist == libsaria::library::get_playlist())
|
||||
libsaria::library::set_random(gtk_toggle_button_get_active(button));
|
||||
else
|
||||
playlist->set_random(gtk_toggle_button_get_active(button));
|
||||
}
|
||||
|
||||
void setup_widgets(struct PlaylistWidgets *widgets, libsaria::Playlist *playlist)
|
||||
{
|
||||
unsigned int num_columns = sizeof(types) / sizeof(GType);
|
||||
|
@ -446,6 +456,19 @@ static GtkWidget *setup_disable_button(struct PlaylistWidgets *widgets)
|
|||
return GTK_WIDGET(widgets->disable);
|
||||
}
|
||||
|
||||
static GtkWidget *setup_random_button(struct PlaylistWidgets *widgets)
|
||||
{
|
||||
GtkWidget *image = gtk_image_new_from_file(lib_file("random.png").c_str());
|
||||
widgets->random = GTK_TOGGLE_BUTTON(gtk_toggle_button_new());
|
||||
|
||||
gtk_button_set_image(GTK_BUTTON(widgets->random), image);
|
||||
gtk_widget_set_name(GTK_WIDGET(widgets->random), "ocarina-small-button");
|
||||
gtk_toggle_button_set_active(widgets->random, widgets->playlist->get_random());
|
||||
g_signal_connect(GTK_WIDGET(widgets->random), "toggled", G_CALLBACK(playlist_random), widgets->playlist);
|
||||
|
||||
return GTK_WIDGET(widgets->random);
|
||||
}
|
||||
|
||||
static void add_column(GtkTreeView *treeview, const string &title, int index,
|
||||
GtkTreeViewColumnSizing sizing, unsigned int fixed_width)
|
||||
{
|
||||
|
@ -472,6 +495,8 @@ void setup_playlist_page(struct PlaylistWidgets *widgets, int flags)
|
|||
if (flags & CLOSE_BUTTON)
|
||||
gtk_box_pack_start(GTK_BOX(top_box), setup_close_button(widgets), FALSE, FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(top_box), GTK_WIDGET(widgets->entry), TRUE, TRUE, 0);
|
||||
if (flags & RANDOM_BUTTON)
|
||||
gtk_box_pack_start(GTK_BOX(top_box), setup_random_button(widgets), FALSE, FALSE, 0);
|
||||
if (flags & DISABLE_BUTTON)
|
||||
gtk_box_pack_start(GTK_BOX(top_box), setup_disable_button(widgets), FALSE, FALSE, 0);
|
||||
|
||||
|
|
|
@ -186,19 +186,13 @@ static void make_tab_label(const string &name, struct PlaylistWidgets *widgets)
|
|||
gtk_widget_show_all(GTK_WIDGET(widgets->tab_box));
|
||||
}
|
||||
|
||||
static void init_widgets(struct PlaylistWidgets *widgets, libsaria::Playlist *playlist,
|
||||
int flags)
|
||||
static void init_page(const string &name, struct PlaylistWidgets *widgets,
|
||||
libsaria::Playlist *playlist, int page_num, unsigned int flags)
|
||||
{
|
||||
setup_widgets(widgets, playlist);
|
||||
setup_playlist_page(widgets, flags);
|
||||
}
|
||||
|
||||
static void add_static_page(const string &name, struct PlaylistWidgets *widgets,
|
||||
libsaria::Playlist *playlist)
|
||||
{
|
||||
init_widgets(widgets, playlist, NO_EXTRA_WIDGETS);
|
||||
make_tab_label(name, widgets);
|
||||
add_page(GTK_WIDGET(widgets->page_box), GTK_WIDGET(widgets->tab_box), -1);
|
||||
add_page(GTK_WIDGET(widgets->page_box), GTK_WIDGET(widgets->tab_box), page_num);
|
||||
}
|
||||
|
||||
void init_tabs()
|
||||
|
@ -206,9 +200,9 @@ void init_tabs()
|
|||
tabs = GTK_NOTEBOOK(get_widget("PlaylistTabs"));
|
||||
init_tab_action();
|
||||
|
||||
add_static_page("Library", &library_widgets, libsaria::library::get_playlist());
|
||||
add_static_page("Recent", &recent_widgets, libsaria::deck::get_recent_plist());
|
||||
add_static_page("Banned", &banned_widgets, libsaria::ban::get_banned_plist());
|
||||
init_page("Library", &library_widgets, libsaria::library::get_playlist(), -1, RANDOM_BUTTON);
|
||||
init_page("Recent", &recent_widgets, libsaria::deck::get_recent_plist(), -1, NO_EXTRA_WIDGETS);
|
||||
init_page("Banned", &banned_widgets, libsaria::ban::get_banned_plist(), -1, NO_EXTRA_WIDGETS);
|
||||
|
||||
connect_signal("PlaylistTabs", "switch-page", G_CALLBACK(on_switch_page), NULL);
|
||||
connect_signal("PlaylistTabs", "page-reordered", G_CALLBACK(on_page_reordered), NULL);
|
||||
|
@ -218,11 +212,9 @@ static void new_playlist(libsaria::Playlist *playlist)
|
|||
{
|
||||
struct PlaylistWidgets *widgets = new struct PlaylistWidgets;
|
||||
dynamic_widgets.push_back(widgets);
|
||||
|
||||
init_widgets(widgets, playlist, CLOSE_BUTTON | DISABLE_BUTTON);
|
||||
make_tab_label(playlist->get_name(), widgets);
|
||||
add_page(GTK_WIDGET(widgets->page_box), GTK_WIDGET(widgets->tab_box),
|
||||
libsaria::deck::get_playlist_index(playlist));
|
||||
init_page(playlist->get_name(), widgets, playlist,
|
||||
libsaria::deck::get_playlist_index(playlist),
|
||||
CLOSE_BUTTON | DISABLE_BUTTON | RANDOM_BUTTON);
|
||||
gtk_notebook_set_tab_reorderable(tabs, GTK_WIDGET(widgets->page_box), true);
|
||||
}
|
||||
|
||||
|
@ -260,6 +252,13 @@ static void disable_playlist(libsaria::Playlist *playlist)
|
|||
gtk_widget_set_sensitive(GTK_WIDGET(widgets->tab_box), enabled);
|
||||
}
|
||||
|
||||
static void random_playlist(libsaria::Playlist *playlist)
|
||||
{
|
||||
struct PlaylistWidgets *widgets = find_playlist_widgets(playlist);
|
||||
if (widgets)
|
||||
gtk_toggle_button_set_active(widgets->random, playlist->get_random());
|
||||
}
|
||||
|
||||
void update_tabs(notify_t event, libsaria::Playlist *playlist)
|
||||
{
|
||||
if (event == PLAYLIST_NEW)
|
||||
|
@ -270,4 +269,6 @@ void update_tabs(notify_t event, libsaria::Playlist *playlist)
|
|||
renumber_playlist(playlist);
|
||||
else if (event == PLAYLIST_DISABLE)
|
||||
disable_playlist(playlist);
|
||||
else if (event == PLAYLIST_RANDOM)
|
||||
random_playlist(playlist);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue