X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fplaylist_selector.cc;h=68227d193c281fb0f07dc2de54643dd247a9bfa9;hb=1ae094813858a2b8cf5b08569edcb9b15d910729;hp=d2bd765cce199ac66f5afcdbe582ab913cce68b2;hpb=d38e2213d79b1c8952c776a3b60f7709457edc0c;p=ardour.git diff --git a/gtk2_ardour/playlist_selector.cc b/gtk2_ardour/playlist_selector.cc index d2bd765cce..68227d193c 100644 --- a/gtk2_ardour/playlist_selector.cc +++ b/gtk2_ardour/playlist_selector.cc @@ -20,10 +20,9 @@ */ #include -#include #include -#include +#include #include #include #include @@ -41,37 +40,36 @@ using namespace std; using namespace sigc; using namespace Gtk; using namespace ARDOUR; - -static const gchar *tree_display_titles[] = { - N_("Playlists grouped by track"), - 0 -}; +using namespace PBD; PlaylistSelector::PlaylistSelector () - : ArdourDialog ("playlist selector"), - tree (internationalize (tree_display_titles)), - close_button (_("close")) + : ArdourDialog ("playlist selector") { rui = 0; - set_position (Gtk::WIN_POS_MOUSE); + set_position (WIN_POS_MOUSE); set_name ("PlaylistSelectorWindow"); set_title (_("ardour: playlists")); set_modal(true); add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK); set_size_request (300, 200); - scroller.add_with_viewport (tree); - scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); + model = TreeStore::create (columns); + tree.set_model (model); + tree.append_column (_("Playlists grouped by track"), columns.text); + + scroller.add (tree); + scroller.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC); + + // GTK2FIX do we need this stuff or is GTK applying some policy now? + //set_border_width (6); + // set_spacing (12); - close_button.signal_clicked().connect (mem_fun(*this, &PlaylistSelector::close_button_click)); + get_vbox()->pack_start (scroller); - vpacker.set_border_width (6); - vpacker.set_spacing (12); - vpacker.pack_start (scroller); - vpacker.pack_start (close_button, false, false); + Button* b = add_button (_("close"), RESPONSE_CANCEL); + b->signal_clicked().connect (mem_fun(*this, &PlaylistSelector::close_button_click)); - add (vpacker); } PlaylistSelector::~PlaylistSelector () @@ -91,40 +89,34 @@ PlaylistSelector::clear_map () void PlaylistSelector::show_for (RouteUI* ruix) { - using namespace CTree_Helpers; vector item; - RowList::iterator i; - RowList::iterator tmpi; - RowList::iterator others; - DiskStream* this_ds; + boost::shared_ptr this_ds; string str; rui = ruix; str = _("ardour: playlist for "); - str += rui->route().name(); + str += rui->route()->name(); set_title (str); clear_map (); select_connection.disconnect (); - /* ---------------------------------------- */ - /* XXX MAKE ME A FUNCTION (no CTree::clear() in gtkmm 1.2) */ - gtk_ctree_remove_node (tree.gobj(), NULL); - /* ---------------------------------------- */ + model->clear (); session->foreach_playlist (this, &PlaylistSelector::add_playlist_to_map); this_ds = rui->get_diskstream(); - item.clear(); - item.push_back (_("Other tracks")); - others = tree.rows().insert (tree.rows().begin(), Element (item)); + TreeModel::Row others = *(model->append ()); + others[columns.text] = _("Other tracks"); + others[columns.playlist] = 0; + for (DSPL_Map::iterator x = dspl_map.begin(); x != dspl_map.end(); ++x) { - DiskStream* ds = session->diskstream_by_id (x->first); + boost::shared_ptr ds = session->diskstream_by_id (x->first); if (ds == 0) { continue; @@ -132,48 +124,52 @@ PlaylistSelector::show_for (RouteUI* ruix) /* add a node for the diskstream */ - item.clear (); + string nodename; if (ds->name().empty()) { - item.push_back (_("unassigned")); + nodename = _("unassigned"); } else { - item.push_back (ds->name().c_str()); + nodename = ds->name().c_str(); } + + TreeModel::Row row; + TreeModel::Row* selected_row = 0; + TreePath this_path; if (ds == this_ds) { - i = tree.rows().insert (tree.rows().begin(), - Gtk::CTree_Helpers::Element (item)); + row = *(model->prepend()); + row[columns.text] = nodename; + row[columns.playlist] = 0; } else { - i = others->subtree().insert (others->subtree().end(), - Gtk::CTree_Helpers::Element (item)); + row = *(model->append (others.children())); + row[columns.text] = nodename; + row[columns.playlist] = 0; } - + /* Now insert all the playlists for this diskstream/track in a subtree */ list *pls = x->second; - + for (list::iterator p = pls->begin(); p != pls->end(); ++p) { - item.clear (); - item.push_back ((*p)->name().c_str()); + TreeModel::Row child_row; - tmpi = i->subtree().insert (i->subtree().end(), Element (item)); + child_row = *(model->append (row.children())); + child_row[columns.text] = (*p)->name(); + child_row[columns.playlist] = *p; if (*p == this_ds->playlist()) { - (*tmpi).select (); + selected_row = &child_row; } - - (*tmpi).set_data (*p); - } - - if (ds == this_ds) { - i->expand (); + + if (selected_row != 0) { + tree.get_selection()->select (*selected_row); } } show_all (); - select_connection = tree.tree_select_row.connect (mem_fun(*this, &PlaylistSelector::row_selected)); + select_connection = tree.get_selection()->signal_changed().connect (mem_fun(*this, &PlaylistSelector::selection_changed)); } void @@ -193,7 +189,7 @@ PlaylistSelector::add_playlist_to_map (Playlist *pl) if ((x = dspl_map.find (apl->get_orig_diskstream_id())) == dspl_map.end()) { - pair*> newp (apl->get_orig_diskstream_id(), new list); + pair*> newp (apl->get_orig_diskstream_id(), new list); x = dspl_map.insert (dspl_map.end(), newp); } @@ -221,16 +217,23 @@ PlaylistSelector::close_button_click () } void -PlaylistSelector::row_selected (Gtk::CTree::Row row, gint col) +PlaylistSelector::selection_changed () { Playlist *playlist; - - if ((playlist = (Playlist *) row.get_data()) != 0) { + + TreeModel::iterator iter = tree.get_selection()->get_selected(); + + if (!iter || rui == 0) { + /* nothing selected */ + return; + } + + if ((playlist = ((*iter)[columns.playlist])) != 0) { AudioTrack* at; AudioPlaylist* apl; - if ((at = dynamic_cast (&rui->route())) == 0) { + if ((at = rui->audio_track()) == 0) { /* eh? */ return; } @@ -240,10 +243,10 @@ PlaylistSelector::row_selected (Gtk::CTree::Row row, gint col) return; } - at->disk_stream().use_playlist (apl); + at->diskstream()->use_playlist (apl); hide (); } } - +