Archive / / / / / / LibraryTab.cc
2008-10-21 13:38:19 UTC
previous next
/* Echo Media Player * Copyright (C) 2008 Shane O'Connell * * [ The original file includes a copyright header in this location describing * the file as being released under the terms of the GNU General Public * License. It has been removed in order to display the file as part of the * archive. ] */ #include "LibraryTab.h" #include "../../PlaybackManager.h" #include <list> #include <iostream> using namespace std; boost::shared_ptr<LibraryTab> LibraryTab::create(PlaySourceRef source) { boost::shared_ptr<LibraryTab> tab(new LibraryTab(source)); return tab; } LibraryTab::LibraryTab(PlaySourceRef source) : m_source(source) { set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); set_shadow_type(Gtk::SHADOW_IN); add(m_treeview); Gtk::MenuItem* menu_item; menu_item = Gtk::manage(new Gtk::MenuItem("Open Album")); menu_item->signal_activate().connect( sigc::bind(sigc::mem_fun(*this, &LibraryTab::on_open_album), false)); m_popup_menu.append(*menu_item); menu_item = Gtk::manage(new Gtk::MenuItem("Open Album in New Tab")); menu_item->signal_activate().connect( sigc::bind(sigc::mem_fun(*this, &LibraryTab::on_open_album), true)); m_popup_menu.append(*menu_item); menu_item = Gtk::manage(new Gtk::MenuItem("Open Artist")); menu_item->signal_activate().connect( sigc::bind(sigc::mem_fun(*this, &LibraryTab::on_open_artist), false)); m_popup_menu.append(*menu_item); menu_item = Gtk::manage(new Gtk::MenuItem("Open Artist in New Tab")); menu_item->signal_activate().connect( sigc::bind(sigc::mem_fun(*this, &LibraryTab::on_open_artist), true)); m_popup_menu.append(*menu_item); m_popup_menu.show_all(); init_treeview(); m_treeview.set_rules_hint(true); m_treeview.signal_row_activated().connect( sigc::mem_fun(*this, &LibraryTab::on_row_activated)); m_treeview.signal_button_press_event().connect_notify( sigc::mem_fun(*this, &LibraryTab::on_click)); } void LibraryTab::init_treeview() { m_treemodel = PlaySourceTreeModel::create(m_source); m_treeview.set_model(m_treemodel); m_treeview.remove_all_columns(); m_treeview.append_column("Playing", m_treemodel->m_column_records.is_playing); m_treeview.append_column("Track", m_treemodel->m_column_records.track_number); m_treeview.append_column("Artist", m_treemodel->m_column_records.artist); m_treeview.append_column("Title", m_treemodel->m_column_records.title); m_treeview.append_column("Album", m_treemodel->m_column_records.album); list<Gtk::TreeViewColumn*> columns = m_treeview.get_columns(); for (list<Gtk::TreeViewColumn*>::iterator iter = columns.begin(); iter != columns.end(); iter++) { (*iter)->set_reorderable(true); (*iter)->set_resizable(true); (*iter)->set_sizing(Gtk::TREE_VIEW_COLUMN_FIXED); (*iter)->set_fixed_width(60); } m_treeview.set_fixed_height_mode(true); } void LibraryTab::on_row_activated(const Gtk::TreePath& path, Gtk::TreeViewColumn* column) { PlaybackManager::play(m_source, path[0]); } void LibraryTab::on_click(GdkEventButton* event) { if (event->button == 3) { Gtk::TreePath path; Gtk::TreeViewColumn* column; int cell_x, cell_y; if (m_treeview.get_path_at_pos(event->x, event->y, path, column, cell_x, cell_y)) { m_selected_track = m_treemodel->get_track_from_path(path); m_popup_menu.popup(3, event->time); } } } void LibraryTab::on_open_album(bool new_tab) {/* if (new_tab) signal_open_new_tab().emit(m_selected_track->get_album_ref()); else { m_source = m_selected_track->get_album_ref(); init_treeview(); signal_refesh_tab_label().emit(); }*/ } void LibraryTab::on_open_artist(bool new_tab) {/* if (new_tab) signal_open_new_tab().emit(boost::const_pointer_cast(m_selected_track->get_artist_ref())); else { m_source = boost::const_pointer_cast(m_selected_track->get_artist_ref()); init_treeview(); signal_refesh_tab_label().emit(); }*/ }