diff --git a/campcaster/src/products/gLiveSupport/src/LiveModeWindow.cxx b/campcaster/src/products/gLiveSupport/src/LiveModeWindow.cxx index b033db405..909819b4b 100644 --- a/campcaster/src/products/gLiveSupport/src/LiveModeWindow.cxx +++ b/campcaster/src/products/gLiveSupport/src/LiveModeWindow.cxx @@ -93,6 +93,7 @@ LiveModeWindow :: LiveModeWindow (Ptr::Ref gLiveSupport, // ... and the tree view: treeView = Gtk::manage(wf->createTreeView(treeModel)); + treeView->get_selection()->set_mode(Gtk::SELECTION_MULTIPLE); treeView->set_reorderable(true); treeView->set_headers_visible(false); treeView->set_enable_search(false); @@ -248,15 +249,32 @@ LiveModeWindow :: popTop(void) throw () } +/*------------------------------------------------------------------------------ + * Find the selected row. + *----------------------------------------------------------------------------*/ +Gtk::TreeModel::iterator +LiveModeWindow :: getSelected(void) throw () +{ + Glib::RefPtr selection + = treeView->get_selection(); + std::vector selectedPaths + = selection->get_selected_rows(); + + Gtk::TreeModel::iterator it; + if (selectedPaths.size() > 0) { + it = treeModel->get_iter(selectedPaths.front()); + } + return it; +} + + /*------------------------------------------------------------------------------ * Signal handler for the output play button clicked. *----------------------------------------------------------------------------*/ void LiveModeWindow :: onOutputPlay(void) throw () { - Glib::RefPtr refSelection = - treeView->get_selection(); - Gtk::TreeModel::iterator iter = refSelection->get_selected(); + Gtk::TreeModel::iterator iter = getSelected(); if (!iter) { iter = treeModel->children().begin(); @@ -340,9 +358,7 @@ bool LiveModeWindow :: onKeyPressed(GdkEventKey * event) throw () { if (event->type == GDK_KEY_PRESS) { - Glib::RefPtr refSelection = - treeView->get_selection(); - Gtk::TreeModel::iterator iter = refSelection->get_selected(); + Gtk::TreeModel::iterator iter = getSelected(); if (iter) { KeyboardShortcut::Action action = gLiveSupport->findAction( @@ -382,9 +398,7 @@ LiveModeWindow :: onKeyPressed(GdkEventKey * event) throw () void LiveModeWindow :: onEditPlaylist(void) throw () { - Glib::RefPtr - refSelection = treeView->get_selection(); - Gtk::TreeModel::iterator iter = refSelection->get_selected(); + Gtk::TreeModel::iterator iter = getSelected(); if (iter) { Ptr::Ref playable = (*iter)[modelColumns.playableColumn]; @@ -408,9 +422,7 @@ LiveModeWindow :: onEditPlaylist(void) throw () void LiveModeWindow :: onSchedulePlaylist(void) throw () { - Glib::RefPtr - refSelection = treeView->get_selection(); - Gtk::TreeModel::iterator iter = refSelection->get_selected(); + Gtk::TreeModel::iterator iter = getSelected(); if (iter) { Ptr::Ref playable = (*iter)[modelColumns.playableColumn]; @@ -433,9 +445,7 @@ LiveModeWindow :: onSchedulePlaylist(void) throw () void LiveModeWindow :: onExportPlaylist(void) throw () { - Glib::RefPtr - refSelection = treeView->get_selection(); - Gtk::TreeModel::iterator iter = refSelection->get_selected(); + Gtk::TreeModel::iterator iter = getSelected(); if (iter) { Ptr::Ref playable = (*iter)[modelColumns.playableColumn]; @@ -459,9 +469,7 @@ LiveModeWindow :: onExportPlaylist(void) throw () void LiveModeWindow :: onAddToPlaylist(void) throw () { - Glib::RefPtr - refSelection = treeView->get_selection(); - Gtk::TreeModel::iterator iter = refSelection->get_selected(); + Gtk::TreeModel::iterator iter = getSelected(); if (iter) { Ptr::Ref playable = (*iter)[modelColumns.playableColumn]; @@ -482,9 +490,7 @@ LiveModeWindow :: onAddToPlaylist(void) throw () void LiveModeWindow :: onUploadToHub(void) throw () { - Glib::RefPtr - refSelection = treeView->get_selection(); - Gtk::TreeModel::iterator iter = refSelection->get_selected(); + Gtk::TreeModel::iterator iter = getSelected(); if (iter) { Ptr::Ref playable = (*iter)[modelColumns.playableColumn]; diff --git a/campcaster/src/products/gLiveSupport/src/LiveModeWindow.h b/campcaster/src/products/gLiveSupport/src/LiveModeWindow.h index 57dbb4f25..f7e3c6992 100644 --- a/campcaster/src/products/gLiveSupport/src/LiveModeWindow.h +++ b/campcaster/src/products/gLiveSupport/src/LiveModeWindow.h @@ -112,6 +112,16 @@ class LiveModeWindow : public GuiWindow Gtk::Menu * constructPlaylistContextMenu(void) throw (); + /** + * Find the selected row. + * If more than one row is selected, it returns the first one. + * + * @return an iterator for the selected row; may be invalid + * if nothing is selected. + */ + Gtk::TreeModel::iterator + getSelected(void) throw (); + protected: