Disable temporary playlists
When a playlist is disabled I won't pick songs from it until the user re-enables it. Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
parent
f6cdcae79c
commit
35d71efe58
|
@ -13,6 +13,7 @@ enum PlaylistFlags {
|
|||
PL_NONE = (0),
|
||||
PL_NO_DRAIN = (1 << 0),
|
||||
PL_STATIC = (1 << 1),
|
||||
PL_DISABLED = (1 << 2),
|
||||
};
|
||||
|
||||
enum PlaylistType {
|
||||
|
@ -72,11 +73,14 @@ namespace libsaria
|
|||
|
||||
void save(ofstream &);
|
||||
bool is_static();
|
||||
bool is_disabled();
|
||||
void prepare_for_removal();
|
||||
void reset_iterator();
|
||||
void set_filter_text(string &);
|
||||
bool is_visible(libsaria::Track *);
|
||||
|
||||
void set_disabled(bool);
|
||||
|
||||
virtual Track *next() = 0;
|
||||
string &get_name();
|
||||
void renumber(int);
|
||||
|
|
|
@ -16,6 +16,7 @@ namespace ocarina
|
|||
GtkWidget *box;
|
||||
GtkWidget *entry;
|
||||
GtkWidget *treeview;
|
||||
GtkWidget *disable_button;
|
||||
GtkListStore *liststore;
|
||||
GtkTreeModel *filter;
|
||||
GtkTreeSelection *treesel;
|
||||
|
@ -23,6 +24,7 @@ namespace ocarina
|
|||
void set_label_text();
|
||||
void set_length_label_text();
|
||||
void setup_treeview();
|
||||
GtkWidget *make_disable_button();
|
||||
|
||||
public:
|
||||
Playlist(unsigned int);
|
||||
|
|
|
@ -27,6 +27,18 @@ static void renumber_playlists()
|
|||
(*it)->renumber(n++);
|
||||
}
|
||||
|
||||
static libsaria::Playlist *get_active_playlist()
|
||||
{
|
||||
list<libsaria::Playlist *>::iterator it;
|
||||
|
||||
for (it = playlist_deck.begin(); it != playlist_deck.end(); it++) {
|
||||
if (!(*it)->is_disabled())
|
||||
return *it;
|
||||
}
|
||||
|
||||
return libsaria::library::get_playlist();
|
||||
}
|
||||
|
||||
static bool check_play()
|
||||
{
|
||||
bool ret = true;
|
||||
|
@ -76,15 +88,9 @@ namespace libsaria
|
|||
|
||||
void deck::next()
|
||||
{
|
||||
Playlist *plist;
|
||||
Track *track;
|
||||
Playlist *plist = get_active_playlist();
|
||||
Track *track = plist->next();
|
||||
|
||||
if (playlist_deck.size() == 0)
|
||||
plist = library::get_playlist();
|
||||
else
|
||||
plist = playlist_deck.front();
|
||||
|
||||
track = plist->next();
|
||||
if (track)
|
||||
track->load(check_play());
|
||||
|
||||
|
|
|
@ -27,6 +27,19 @@ namespace libsaria
|
|||
return (flags & PL_STATIC) == PL_STATIC;
|
||||
}
|
||||
|
||||
bool Playlist::is_disabled()
|
||||
{
|
||||
return (flags & PL_DISABLED) == PL_DISABLED;
|
||||
}
|
||||
|
||||
void Playlist::set_disabled(bool disabled)
|
||||
{
|
||||
if (disabled)
|
||||
flags |= PL_DISABLED;
|
||||
else
|
||||
flags &= ~PL_DISABLED;
|
||||
}
|
||||
|
||||
void Playlist::prepare_for_removal()
|
||||
{
|
||||
/*
|
||||
|
|
|
@ -10,6 +10,12 @@
|
|||
#include <sstream>
|
||||
using namespace std;
|
||||
|
||||
static void disable_playlist(GtkWidget *button, gpointer d)
|
||||
{
|
||||
libsaria::Playlist *plist = (libsaria::Playlist *)d;
|
||||
plist->set_disabled(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
|
||||
}
|
||||
|
||||
static void delete_playlist(GtkWidget *button, gpointer d)
|
||||
{
|
||||
libsaria::Playlist *plist = (libsaria::Playlist *)d;
|
||||
|
@ -153,6 +159,7 @@ namespace ocarina
|
|||
void Playlist::set_playlist(libsaria::Playlist *p)
|
||||
{
|
||||
GtkWidget *label_box = gtk_hbox_new(FALSE, 0);
|
||||
GtkWidget *entry_box = gtk_hbox_new(FALSE, 0);
|
||||
GtkWidget *close_button;
|
||||
|
||||
libsaria::PlaylistRenderer::set_playlist(p);
|
||||
|
@ -166,13 +173,23 @@ namespace ocarina
|
|||
|
||||
entry = gtk_entry_new();
|
||||
g_signal_connect(entry, "changed", G_CALLBACK(do_filter), this);
|
||||
gtk_box_pack_start(GTK_BOX(box), entry, FALSE, FALSE, 0);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(entry_box), entry, TRUE, TRUE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(box), entry_box, FALSE, FALSE, 0);
|
||||
|
||||
setup_treeview();
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(label_box), number, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(label_box), name, TRUE, TRUE, 0);
|
||||
|
||||
if (!p->is_static()) {
|
||||
/* Make disable button for playlists */
|
||||
disable_button = make_toggle_button_data(GTK_STOCK_MEDIA_PAUSE,
|
||||
disable_playlist,
|
||||
p, true);
|
||||
gtk_box_pack_start(GTK_BOX(entry_box), disable_button, FALSE, FALSE, 0);
|
||||
|
||||
/* Make close button for tabs */
|
||||
close_button = make_button_data(GTK_STOCK_CLOSE, delete_playlist, p, true);
|
||||
gtk_button_set_relief(GTK_BUTTON(close_button), GTK_RELIEF_NONE);
|
||||
gtk_rc_parse_string(
|
||||
|
@ -186,7 +203,7 @@ namespace ocarina
|
|||
}
|
||||
|
||||
gtk_widget_show_all(label_box);
|
||||
gtk_widget_show(entry);
|
||||
gtk_widget_show_all(entry_box);
|
||||
|
||||
set_label_text();
|
||||
renumbered(p->get_number());
|
||||
|
|
Loading…
Reference in New Issue