From 40df10d876bcbaaa882663a8311279e42dbe06e2 Mon Sep 17 00:00:00 2001 From: fgerlits Date: Tue, 14 Nov 2006 12:26:29 +0000 Subject: [PATCH] moved the "remove many" code into the ZebraTreeView class (part of #1940) --- .../src/modules/widgets/src/ZebraTreeView.cxx | 46 +++++++++++++------ .../gLiveSupport/src/ScratchpadWindow.cxx | 19 +------- 2 files changed, 34 insertions(+), 31 deletions(-) diff --git a/campcaster/src/modules/widgets/src/ZebraTreeView.cxx b/campcaster/src/modules/widgets/src/ZebraTreeView.cxx index f0033527b..1e088001e 100644 --- a/campcaster/src/modules/widgets/src/ZebraTreeView.cxx +++ b/campcaster/src/modules/widgets/src/ZebraTreeView.cxx @@ -411,10 +411,39 @@ ZebraTreeView :: onDownMenuOption(void) throw () void ZebraTreeView :: onRemoveMenuOption(void) throw () { - Gtk::TreeModel::iterator iter = getSelectedRow(); - - if (iter) { - removeItem(iter); + Glib::RefPtr selection = get_selection(); + Gtk::TreeModel::iterator newSelection; + + if (selection->get_mode() == Gtk::SELECTION_SINGLE) { + Gtk::TreeModel::iterator it = selection->get_selected(); + if (it) { + newSelection = it; + ++newSelection; + removeItem(it); + } + + } else { + std::vector selectedPaths + = selection->get_selected_rows(); + + std::vector selectedIters; + std::vector::iterator pathIt = selectedPaths.begin(); + for ( ; pathIt != selectedPaths.end(); ++pathIt) { + selectedIters.push_back(get_model()->get_iter(*pathIt)); + } + + std::vector::iterator + iterIt = selectedIters.begin(); + for ( ; iterIt != selectedIters.end(); ++iterIt) { + newSelection = *iterIt; + ++newSelection; + removeItem(*iterIt); + } + + } + + if (newSelection) { + selection->select(newSelection); } } @@ -428,15 +457,6 @@ ZebraTreeView :: removeItem(const Gtk::TreeModel::iterator & iter) { Glib::RefPtr treeModel = Glib::RefPtr::cast_dynamic(get_model()); - ZebraTreeModelColumnRecord modelColumns; - - Gtk::TreeModel::iterator later = iter; - - int rowNumber = (*iter)[modelColumns.rowNumberColumn]; - for (++later; later != treeModel->children().end(); ++later) { - (*later)[modelColumns.rowNumberColumn] = rowNumber++; - } - treeModel->erase(iter); } diff --git a/campcaster/src/products/gLiveSupport/src/ScratchpadWindow.cxx b/campcaster/src/products/gLiveSupport/src/ScratchpadWindow.cxx index 8428c7999..fdb27391e 100644 --- a/campcaster/src/products/gLiveSupport/src/ScratchpadWindow.cxx +++ b/campcaster/src/products/gLiveSupport/src/ScratchpadWindow.cxx @@ -303,24 +303,7 @@ ScratchpadWindow :: onClearListButtonClicked (void) throw () void ScratchpadWindow :: onRemoveItemButtonClicked(void) throw () { - Glib::RefPtr - selection = treeView->get_selection(); - std::vector - selectedPaths = selection->get_selected_rows(); - std::vector - selectedRows; - - // the TreePath is just a row number; convert it to a reference to a row - std::vector::iterator iter; - for (iter = selectedPaths.begin(); iter != selectedPaths.end(); ++iter) { - selectedRows.push_back(treeModel->get_iter(*iter)); - } - - // ... and then remove those rows - std::vector::iterator it; - for (it = selectedRows.begin(); it != selectedRows.end(); ++it) { - treeModel->erase(*it); - } + treeView->onRemoveMenuOption(); }