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;
|
using namespace std;
|
||||||
|
|
||||||
static SongList library_list;
|
static SongList library_list;
|
||||||
static void fill_library();
|
void ocarina_library_refresh();
|
||||||
|
static void library_insert(Track &);
|
||||||
|
|
||||||
|
struct SongListFuncs library_funcs;
|
||||||
|
|
||||||
void library_init()
|
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);
|
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;
|
library_list.insert(track);
|
||||||
libsaria::library_list(track_list);
|
|
||||||
print("track list size: ");
|
|
||||||
println(track_list.size());
|
|
||||||
library_list.insert(track_list);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ocarina_library_refresh()
|
void ocarina_library_refresh()
|
||||||
{
|
{
|
||||||
library_list.clear();
|
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();
|
string dir = ocarina_choose_dir();
|
||||||
if (dir != "" ) {
|
if (dir != "" ) {
|
||||||
println("Scanning dir: " + 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(library_settings);
|
||||||
gtk_widget_show(add_button);
|
gtk_widget_show(add_button);
|
||||||
add_settings_page("Library", library_settings);
|
add_settings_page("Library", library_settings);
|
||||||
|
println(libsaria::library::size());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
#include <ocarina/gtk.h>
|
#include <ocarina/gtk.h>
|
||||||
#include <libsaria/library.h>
|
#include <libsaria/library.h>
|
||||||
#include <libsaria/print.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);
|
gtk_tree_model_get(model, &iter, 0, &inode, -1);
|
||||||
print("Double click! ");
|
print("Double click! ");
|
||||||
println(inode);
|
println(inode);
|
||||||
libsaria::play_id(inode);
|
libsaria::library::play_id(inode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SongList::add_column(unsigned int index)
|
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
|
* I need an init() function to set up the scrolled window AFTER
|
||||||
* the gtk_init() function has been called.
|
* 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);
|
window = gtk_scrolled_window_new(NULL, NULL);
|
||||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(window),
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(window),
|
||||||
GTK_POLICY_AUTOMATIC,
|
GTK_POLICY_AUTOMATIC,
|
||||||
|
@ -85,6 +91,18 @@ GtkWidget *SongList::get_label()
|
||||||
return 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()
|
void SongList::freeze()
|
||||||
{
|
{
|
||||||
gtk_widget_freeze_child_notify(treeview);
|
gtk_widget_freeze_child_notify(treeview);
|
||||||
|
@ -104,25 +122,25 @@ void SongList::clear()
|
||||||
thaw();
|
thaw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SongList::insert(list<Track> &track_list)
|
void SongList::insert(Track &track)
|
||||||
{
|
{
|
||||||
int ins_next = 0;
|
gtk_list_store_insert_with_values(liststore, NULL, ins_next,
|
||||||
Track *track;
|
0, track.get_inode(),
|
||||||
list<Track>::iterator it;
|
1, track.get_track(),
|
||||||
|
2, track.get_title().c_str(),
|
||||||
freeze();
|
3, track.get_lenstr().c_str(),
|
||||||
for (it = track_list.begin(); it != track_list.end(); it++) {
|
4, track.get_artist().c_str(),
|
||||||
track = &(*it);
|
5, track.get_album().c_str(),
|
||||||
gtk_list_store_insert_with_values(liststore, NULL, ins_next,
|
6, track.get_year(),
|
||||||
0, track->get_inode(),
|
-1);
|
||||||
1, track->get_track(),
|
ins_next++;
|
||||||
2, track->get_title().c_str(),
|
}
|
||||||
3, track->get_lenstr().c_str(),
|
|
||||||
4, track->get_artist().c_str(),
|
void SongList::fill()
|
||||||
5, track->get_album().c_str(),
|
{
|
||||||
6, track->get_year(),
|
freeze();
|
||||||
-1);
|
ins_next = 0;
|
||||||
ins_next++;
|
list_funcs->for_each(list_funcs->insert_track);
|
||||||
}
|
thaw();
|
||||||
thaw();
|
set_label_text();
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,9 +8,21 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
using namespace std;
|
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
|
class SongList
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
int ins_next;
|
||||||
|
SongListFuncs *list_funcs;
|
||||||
|
string name;
|
||||||
|
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
GtkWidget *label;
|
GtkWidget *label;
|
||||||
|
|
||||||
|
@ -18,6 +30,7 @@ class SongList
|
||||||
GtkListStore *liststore;
|
GtkListStore *liststore;
|
||||||
GtkCellRenderer *text_cell;
|
GtkCellRenderer *text_cell;
|
||||||
|
|
||||||
|
void set_label_text();
|
||||||
void add_column(unsigned int);
|
void add_column(unsigned int);
|
||||||
void freeze();
|
void freeze();
|
||||||
void thaw();
|
void thaw();
|
||||||
|
@ -26,11 +39,12 @@ class SongList
|
||||||
SongList();
|
SongList();
|
||||||
~SongList();
|
~SongList();
|
||||||
|
|
||||||
void init(string);
|
void init(string, SongListFuncs *);
|
||||||
GtkWidget *get_window();
|
GtkWidget *get_window();
|
||||||
GtkWidget *get_label();
|
GtkWidget *get_label();
|
||||||
|
|
||||||
void insert(list<Track> &track_list);
|
void insert(Track &);
|
||||||
|
void fill();
|
||||||
void clear();
|
void clear();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue