/* 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 "PlaylistTab.h"
#include "../../PlaybackManager.h"
#include <list>
#include <iostream>
using namespace std;
boost::shared_ptr<PlaylistTab> PlaylistTab::create_from_uri(const std::string& uri)
{
ModPlaySourceRef source(new Playlist());
source->insert_from_uri(0, uri);
boost::shared_ptr<PlaylistTab> tab(new PlaylistTab(source));
tab->m_playlist_name = uri; // TODO take filename, not whole URL
return tab;
}
boost::shared_ptr<PlaylistTab> PlaylistTab::create_blank(const Glib::ustring& name)
{
PlaySourceRef source(new Playlist());
boost::shared_ptr<PlaylistTab> tab(new PlaylistTab(source));
tab->m_playlist_name = name;
return tab;
}
PlaylistTab::PlaylistTab(PlaySourceRef source) : m_source(source)
{
set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
set_shadow_type(Gtk::SHADOW_IN);
add(m_treeview);
m_treemodel = PlaySourceTreeModel::create(source);
m_treeview.set_model(m_treemodel);
m_treeview.set_rules_hint(true);
std::vector<Gtk::TargetEntry> targets;
targets.push_back(Gtk::TargetEntry("PLAYLIST_ITEM", Gtk::TARGET_SAME_APP, 0));
m_treeview.enable_model_drag_source(targets, Gdk::MODIFIER_MASK, Gdk::ACTION_COPY);
//m_treeview.drag_source_set_icon(render_icon(Gtk::Stock::OPEN, Gtk::IconSize(-1)));
// TODO figure out how to set the drag icon
targets.push_back(Gtk::TargetEntry("text/uri-list", Gtk::TARGET_OTHER_APP, 1));
m_treeview.enable_model_drag_dest(targets, Gdk::ACTION_COPY);
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);
m_treeview.signal_row_activated().connect(
sigc::mem_fun(*this, &PlaylistTab::on_row_activated));
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 PlaylistTab::on_row_activated(const Gtk::TreePath& path, Gtk::TreeViewColumn* column)
{
PlaybackManager::play(m_source, path[0]);
}