diff --git a/include/ocarina/songlist.h b/include/ocarina/songlist.h index f85d90db..eecf4d3d 100644 --- a/include/ocarina/songlist.h +++ b/include/ocarina/songlist.h @@ -18,6 +18,8 @@ class MenuItem public: MenuItem(string, void (*)()); ~MenuItem(); + + GtkWidget *get_widget(); }; /* Make this a class to inherit from? */ @@ -57,6 +59,8 @@ class SongList : public libsaria::SourceModel void insert(Track &); void fill(); void clear(); + + gint right_click(guint, guint64); }; #endif /* OCARINA_SONGLIST_H */ diff --git a/ocarina/library.cpp b/ocarina/library.cpp index e2ab65b0..c1731bf6 100644 --- a/ocarina/library.cpp +++ b/ocarina/library.cpp @@ -15,6 +15,11 @@ static SongList library_list; static struct SongListFuncs library_funcs; static list library_menu; +static void test() +{ + println("Test function!"); +} + namespace ocarina { @@ -26,6 +31,7 @@ namespace ocarina void library::init() { + library_menu.push_back(MenuItem("Test", test)); library_funcs.for_each = libsaria::library::for_each; library_funcs.size = libsaria::library::size; diff --git a/ocarina/songlist/menu.cpp b/ocarina/songlist/menu.cpp index 13b76ea8..38a7efa4 100644 --- a/ocarina/songlist/menu.cpp +++ b/ocarina/songlist/menu.cpp @@ -5,13 +5,39 @@ #define BUTTON_RIGHT 3 -MenuItem::MenuItem(string, void (*func)()) -{} +MenuItem::MenuItem(string s, void (*f)()) +{ + text = s; + func = f; +} MenuItem::~MenuItem() {} +GtkWidget *MenuItem::get_widget() +{ + GtkWidget *widget = gtk_menu_item_new_with_label(text.c_str()); + return widget; +} + +gint SongList::right_click(guint button, guint64 time) +{ + list::iterator it; + GtkWidget *menu = gtk_menu_new(); + + for (it = menu_items->begin(); it != menu_items->end(); it++) + gtk_menu_append(GTK_MENU(menu), it->get_widget()); + + gtk_widget_show_all(menu); + gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, button, time); + return TRUE; +} + void songlist_button_click(GtkWidget *widget, GdkEvent *event, gpointer data) { - if (event->button.button == BUTTON_RIGHT) - println("right click!"); + SongList *list = (SongList *)data; + + if (event->button.button != BUTTON_RIGHT) + return; + println("right click!"); + list->right_click(event->button.button, event->button.time); }