Archive / / / / / / PlaylistTab.cc
2008-10-21 13:54:43 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 "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]); }