ocarina: Songlist improvements
- Function pointers for specific tasks - Change label text - Use libsaria namespaces
This commit is contained in:
parent
8cf3caeb27
commit
e8341288b3
|
@ -12,26 +12,29 @@
|
|||
using namespace std;
|
||||
|
||||
static SongList library_list;
|
||||
static void fill_library();
|
||||
void ocarina_library_refresh();
|
||||
static void library_insert(Track &);
|
||||
|
||||
struct SongListFuncs library_funcs;
|
||||
|
||||
void library_init()
|
||||
{
|
||||
library_list.init("Library");
|
||||
library_funcs.for_each = libsaria::library::for_each;
|
||||
library_funcs.insert_track = library_insert;
|
||||
library_funcs.size = libsaria::library::size;
|
||||
|
||||
library_list.init("Library", &library_funcs);
|
||||
add_page(library_list.get_label(), library_list.get_window(), true);
|
||||
fill_library();
|
||||
ocarina_library_refresh();
|
||||
}
|
||||
|
||||
static void fill_library()
|
||||
static void library_insert(Track &track)
|
||||
{
|
||||
list<Track> track_list;
|
||||
libsaria::library_list(track_list);
|
||||
print("track list size: ");
|
||||
println(track_list.size());
|
||||
library_list.insert(track_list);
|
||||
library_list.insert(track);
|
||||
}
|
||||
|
||||
void ocarina_library_refresh()
|
||||
{
|
||||
library_list.clear();
|
||||
fill_library();
|
||||
library_list.fill();
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ static void on_click_add(GtkWidget *b, GdkEvent *e, gpointer d)
|
|||
string dir = ocarina_choose_dir();
|
||||
if (dir != "" ) {
|
||||
println("Scanning dir: " + dir);
|
||||
libsaria::add_library(dir);
|
||||
libsaria::library::add_path(dir);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -38,4 +38,5 @@ void library_settings_init()
|
|||
gtk_widget_show(library_settings);
|
||||
gtk_widget_show(add_button);
|
||||
add_settings_page("Library", library_settings);
|
||||
println(libsaria::library::size());
|
||||
}
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
|
||||
#include <sstream>
|
||||
using namespace std;
|
||||
|
||||
#include <ocarina/gtk.h>
|
||||
#include <libsaria/library.h>
|
||||
#include <libsaria/print.h>
|
||||
|
@ -26,7 +29,7 @@ static void songlist_row_activated(GtkTreeView *treeview, GtkTreePath *path,
|
|||
gtk_tree_model_get(model, &iter, 0, &inode, -1);
|
||||
print("Double click! ");
|
||||
println(inode);
|
||||
libsaria::play_id(inode);
|
||||
libsaria::library::play_id(inode);
|
||||
}
|
||||
|
||||
void SongList::add_column(unsigned int index)
|
||||
|
@ -46,8 +49,11 @@ void SongList::add_column(unsigned int index)
|
|||
* I need an init() function to set up the scrolled window AFTER
|
||||
* the gtk_init() function has been called.
|
||||
*/
|
||||
void SongList::init(string text)
|
||||
void SongList::init(string text, SongListFuncs *funcs)
|
||||
{
|
||||
list_funcs = funcs;
|
||||
name = text;
|
||||
|
||||
window = gtk_scrolled_window_new(NULL, NULL);
|
||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(window),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
|
@ -85,6 +91,18 @@ GtkWidget *SongList::get_label()
|
|||
return label;
|
||||
}
|
||||
|
||||
void SongList::set_label_text()
|
||||
{
|
||||
string res;
|
||||
stringstream stream;
|
||||
|
||||
stream << name << " (";
|
||||
stream << list_funcs->size() << ")";
|
||||
res = stream.str();
|
||||
|
||||
gtk_label_set_text(GTK_LABEL(label), res.c_str());
|
||||
}
|
||||
|
||||
void SongList::freeze()
|
||||
{
|
||||
gtk_widget_freeze_child_notify(treeview);
|
||||
|
@ -104,25 +122,25 @@ void SongList::clear()
|
|||
thaw();
|
||||
}
|
||||
|
||||
void SongList::insert(list<Track> &track_list)
|
||||
void SongList::insert(Track &track)
|
||||
{
|
||||
int ins_next = 0;
|
||||
Track *track;
|
||||
list<Track>::iterator it;
|
||||
|
||||
freeze();
|
||||
for (it = track_list.begin(); it != track_list.end(); it++) {
|
||||
track = &(*it);
|
||||
gtk_list_store_insert_with_values(liststore, NULL, ins_next,
|
||||
0, track->get_inode(),
|
||||
1, track->get_track(),
|
||||
2, track->get_title().c_str(),
|
||||
3, track->get_lenstr().c_str(),
|
||||
4, track->get_artist().c_str(),
|
||||
5, track->get_album().c_str(),
|
||||
6, track->get_year(),
|
||||
-1);
|
||||
ins_next++;
|
||||
}
|
||||
thaw();
|
||||
gtk_list_store_insert_with_values(liststore, NULL, ins_next,
|
||||
0, track.get_inode(),
|
||||
1, track.get_track(),
|
||||
2, track.get_title().c_str(),
|
||||
3, track.get_lenstr().c_str(),
|
||||
4, track.get_artist().c_str(),
|
||||
5, track.get_album().c_str(),
|
||||
6, track.get_year(),
|
||||
-1);
|
||||
ins_next++;
|
||||
}
|
||||
|
||||
void SongList::fill()
|
||||
{
|
||||
freeze();
|
||||
ins_next = 0;
|
||||
list_funcs->for_each(list_funcs->insert_track);
|
||||
thaw();
|
||||
set_label_text();
|
||||
}
|
||||
|
|
|
@ -8,9 +8,21 @@
|
|||
#include <string>
|
||||
using namespace std;
|
||||
|
||||
/* Make this a class to inherit from? */
|
||||
struct SongListFuncs
|
||||
{
|
||||
void (*for_each)(void (*)(Track &));
|
||||
void (*insert_track)(Track &);
|
||||
unsigned int (*size)();
|
||||
};
|
||||
|
||||
class SongList
|
||||
{
|
||||
private:
|
||||
int ins_next;
|
||||
SongListFuncs *list_funcs;
|
||||
string name;
|
||||
|
||||
GtkWidget *window;
|
||||
GtkWidget *label;
|
||||
|
||||
|
@ -18,6 +30,7 @@ class SongList
|
|||
GtkListStore *liststore;
|
||||
GtkCellRenderer *text_cell;
|
||||
|
||||
void set_label_text();
|
||||
void add_column(unsigned int);
|
||||
void freeze();
|
||||
void thaw();
|
||||
|
@ -26,11 +39,12 @@ class SongList
|
|||
SongList();
|
||||
~SongList();
|
||||
|
||||
void init(string);
|
||||
void init(string, SongListFuncs *);
|
||||
GtkWidget *get_window();
|
||||
GtkWidget *get_label();
|
||||
|
||||
void insert(list<Track> &track_list);
|
||||
void insert(Track &);
|
||||
void fill();
|
||||
void clear();
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue