moved the "remove many" code into the ZebraTreeView class

(part of #1940)
This commit is contained in:
fgerlits 2006-11-14 12:26:29 +00:00
parent fc76b78a84
commit 40df10d876
2 changed files with 34 additions and 31 deletions

View File

@ -411,10 +411,39 @@ ZebraTreeView :: onDownMenuOption(void) throw ()
void
ZebraTreeView :: onRemoveMenuOption(void) throw ()
{
Gtk::TreeModel::iterator iter = getSelectedRow();
if (iter) {
removeItem(iter);
Glib::RefPtr<Gtk::TreeView::Selection> 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<Gtk::TreePath> selectedPaths
= selection->get_selected_rows();
std::vector<Gtk::TreeModel::iterator> selectedIters;
std::vector<Gtk::TreePath>::iterator pathIt = selectedPaths.begin();
for ( ; pathIt != selectedPaths.end(); ++pathIt) {
selectedIters.push_back(get_model()->get_iter(*pathIt));
}
std::vector<Gtk::TreeModel::iterator>::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<Gtk::ListStore> treeModel
= Glib::RefPtr<Gtk::ListStore>::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);
}

View File

@ -303,24 +303,7 @@ ScratchpadWindow :: onClearListButtonClicked (void) throw ()
void
ScratchpadWindow :: onRemoveItemButtonClicked(void) throw ()
{
Glib::RefPtr<Gtk::TreeView::Selection>
selection = treeView->get_selection();
std::vector<Gtk::TreePath>
selectedPaths = selection->get_selected_rows();
std::vector<Gtk::TreeIter>
selectedRows;
// the TreePath is just a row number; convert it to a reference to a row
std::vector<Gtk::TreePath>::iterator iter;
for (iter = selectedPaths.begin(); iter != selectedPaths.end(); ++iter) {
selectedRows.push_back(treeModel->get_iter(*iter));
}
// ... and then remove those rows
std::vector<Gtk::TreeIter>::iterator it;
for (it = selectedRows.begin(); it != selectedRows.end(); ++it) {
treeModel->erase(*it);
}
treeView->onRemoveMenuOption();
}