diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2005-09-28 16:22:43 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2005-09-28 16:22:43 +0000 |
commit | 3db47e694c45af1c0144b325da57e09e72ac0240 (patch) | |
tree | bde49cdd15e066801c3bcbc3533977167d9eb90d /gtk2_ardour/playlist_selector.cc | |
parent | 8e13f13826db95e5d5578b61218f38974fd8ff7b (diff) |
incomplete work on mixer window treeview port
git-svn-id: svn://localhost/trunk/ardour2@45 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/playlist_selector.cc')
-rw-r--r-- | gtk2_ardour/playlist_selector.cc | 88 |
1 files changed, 45 insertions, 43 deletions
diff --git a/gtk2_ardour/playlist_selector.cc b/gtk2_ardour/playlist_selector.cc index d2bd765cce..262890e6cb 100644 --- a/gtk2_ardour/playlist_selector.cc +++ b/gtk2_ardour/playlist_selector.cc @@ -20,7 +20,6 @@ */ #include <gtkmm/button.h> -#include <gtkmm/ctree.h> #include <ardour/session_playlist.h> #include <ardour/diskstream.h> @@ -42,14 +41,8 @@ using namespace sigc; using namespace Gtk; using namespace ARDOUR; -static const gchar *tree_display_titles[] = { - N_("Playlists grouped by track"), - 0 -}; - PlaylistSelector::PlaylistSelector () : ArdourDialog ("playlist selector"), - tree (internationalize (tree_display_titles)), close_button (_("close")) { rui = 0; @@ -61,7 +54,11 @@ PlaylistSelector::PlaylistSelector () add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK); set_size_request (300, 200); - scroller.add_with_viewport (tree); + model = TreeStore::create (columns); + tree.set_model (model); + tree.append_column (_("Playlists grouped by track"), columns.text); + + scroller.add (tree); scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); close_button.signal_clicked().connect (mem_fun(*this, &PlaylistSelector::close_button_click)); @@ -91,11 +88,7 @@ PlaylistSelector::clear_map () void PlaylistSelector::show_for (RouteUI* ruix) { - using namespace CTree_Helpers; vector<const char*> item; - RowList::iterator i; - RowList::iterator tmpi; - RowList::iterator others; DiskStream* this_ds; string str; @@ -109,19 +102,17 @@ PlaylistSelector::show_for (RouteUI* ruix) 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)); + Gtk::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); @@ -132,48 +123,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<Playlist*> *pls = x->second; - + for (list<Playlist*>::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 @@ -221,11 +216,18 @@ 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) { + /* nothing selected */ + return; + } + + if ((playlist = ((*iter)[columns.playlist])) != 0) { AudioTrack* at; AudioPlaylist* apl; @@ -246,4 +248,4 @@ PlaylistSelector::row_selected (Gtk::CTree::Row row, gint col) } } - + |