libsaria: Playlist tells renderer where to insert tracks

Now renderers don't need to track this on their own, and renderers will
update as tracks are added.

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-03-04 10:53:49 -05:00
parent 3c423e986a
commit ed3254813c
6 changed files with 21 additions and 16 deletions

View File

@ -20,7 +20,7 @@ namespace libsaria
void playlist_empty();
void fill();
virtual void insert(Track *) = 0;
virtual void insert(Track *, unsigned int) = 0;
virtual void index_removed(int) = 0;
};

View File

@ -26,7 +26,6 @@ class MenuItem
class SongList : public libsaria::PlaylistRenderer
{
private:
int ins_next;
list <MenuItem> *menu_items;
string name;
@ -54,7 +53,7 @@ class SongList : public libsaria::PlaylistRenderer
GtkWidget *init(string, list<MenuItem> *, bool);
void insert(libsaria::Track *);
void insert(libsaria::Track *, unsigned int);
void fill();
void clear();
void refilter();

View File

@ -28,9 +28,4 @@ namespace libsaria
lib_playlist.sort();
}
string library::next_file()
{
libsaria::Track *cur = lib_playlist.next();
return cur->get_filepath();
}
}

View File

@ -68,9 +68,15 @@ namespace libsaria
void Playlist::add_ids(list<sid_t> &ids)
{
Track *track;
list<sid_t>::iterator it;
for (it = ids.begin(); it != ids.end(); it++)
plist.push_back(library::lookup(*it));
for (it = ids.begin(); it != ids.end(); it++) {
track = library::lookup(*it);
plist.push_back(track);
if (renderer)
renderer->insert(track, plist.size() - 1);
}
save();
}
@ -125,11 +131,16 @@ namespace libsaria
void Playlist::for_each_insert()
{
unsigned int i;
list<Track *>::iterator it;
if (renderer == NULL)
return;
for (it = plist.begin(); it != plist.end(); it++)
renderer->insert(*it);
i = 0;
for (it = plist.begin(); it != plist.end(); it++) {
renderer->insert(*it, i);
i++;
}
}
}

View File

@ -3,6 +3,7 @@
#include <libsaria/callback.h>
#include <list>
#include <sstream>
using namespace std;
static list<libsaria::Playlist *> playlist_stack;

View File

@ -28,9 +28,9 @@ void SongList::clear()
thaw();
}
void SongList::insert(libsaria::Track *track)
void SongList::insert(libsaria::Track *track, unsigned int index)
{
gtk_list_store_insert_with_values(liststore, NULL, ins_next,
gtk_list_store_insert_with_values(liststore, NULL, index,
0, track->get_songid(),
1, track->get_track(),
2, track->get_title().c_str(),
@ -40,13 +40,12 @@ void SongList::insert(libsaria::Track *track)
6, track->get_year(),
7, formatted(track->get_filepath()).c_str(),
-1);
ins_next++;
set_label_text();
}
void SongList::fill()
{
freeze();
ins_next = 0;
PlaylistRenderer::fill();
thaw();
set_label_text();