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();
}*/
}