/* * Copyright 2014 (c) Anna Schumaker. */ #include #include static Glib::RefPtr model; static class PlaylistColumns : public Gtk::TreeModelColumnRecord { public: PlaylistColumns() { add(plist_col_name); } Gtk::TreeModelColumn plist_col_name; } plist_cols; /* * Basic helper functions */ static inline Playqueue *playlist_pq() { return playlist::get_pq(); } static Gtk::TreeView *get_playlist_treeview() { return get_widget("o_playlist_treeview"); } static Glib::RefPtr get_playlists() { return get_object("o_playlists"); } /* * Gtk signal functions */ static void on_playlist_cursor_changed() { Gtk::TreePath path; Gtk::TreeViewColumn *col; Gtk::TreeModel::Row row; get_playlist_treeview()->get_cursor(path, col); row = *(get_playlists()->get_iter(path)); print("%s\n", row[plist_cols.plist_col_name]); //playlist::select(row[plist_cols.plist_col_name]); } static bool on_playlist_clicked(GdkEventButton *button) { if (button->button != 3) return false; return true; } /* * Functions exposed through a TabFuncs structure */ static void playlist_init_late() {} static void playlist_cleanup() {} static bool playlist_has_queue(Playqueue *pq) { return pq == playlist_pq(); } static void playlist_track_added(Playqueue *pq, unsigned int row) { model->on_row_inserted(row); } static void playlist_track_deleted(Playqueue *pq, unsigned int row) { model->on_row_deleted(row); } static struct TabFuncs playlist_funcs = { .init_late = playlist_init_late, .cleanup = playlist_cleanup, .has_queue = playlist_has_queue, .track_added = playlist_track_added, .track_deleted = playlist_track_deleted, }; /* * Basic tab setup */ struct TabFuncs *init_playlist_tab() { Gtk::TreeView *playlist = get_playlist_treeview(); model = Glib::RefPtr(new PlayqueueModel(playlist_pq())); get_widget("o_playlist_pq_treeview")->set_model(model); playlist->signal_cursor_changed().connect(sigc::ptr_fun(on_playlist_cursor_changed)); playlist->signal_button_press_event().connect(sigc::ptr_fun(on_playlist_clicked)); playlist->set_cursor(Gtk::TreePath("0")); return &playlist_funcs; }