moved the "remove many" code into the ZebraTreeView class
(part of #1940)
This commit is contained in:
parent
fc76b78a84
commit
40df10d876
2 changed files with 34 additions and 31 deletions
|
@ -411,10 +411,39 @@ ZebraTreeView :: onDownMenuOption(void) throw ()
|
||||||
void
|
void
|
||||||
ZebraTreeView :: onRemoveMenuOption(void) throw ()
|
ZebraTreeView :: onRemoveMenuOption(void) throw ()
|
||||||
{
|
{
|
||||||
Gtk::TreeModel::iterator iter = getSelectedRow();
|
Glib::RefPtr<Gtk::TreeView::Selection> selection = get_selection();
|
||||||
|
Gtk::TreeModel::iterator newSelection;
|
||||||
if (iter) {
|
|
||||||
removeItem(iter);
|
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> treeModel
|
||||||
= Glib::RefPtr<Gtk::ListStore>::cast_dynamic(get_model());
|
= 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);
|
treeModel->erase(iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -303,24 +303,7 @@ ScratchpadWindow :: onClearListButtonClicked (void) throw ()
|
||||||
void
|
void
|
||||||
ScratchpadWindow :: onRemoveItemButtonClicked(void) throw ()
|
ScratchpadWindow :: onRemoveItemButtonClicked(void) throw ()
|
||||||
{
|
{
|
||||||
Glib::RefPtr<Gtk::TreeView::Selection>
|
treeView->onRemoveMenuOption();
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue