Fix moving the top line of the file down

This commit is contained in:
Thomas Goyne 2014-03-25 07:35:05 -07:00
parent b5a8217fcd
commit e596de03c7
1 changed files with 8 additions and 5 deletions

View File

@ -324,16 +324,19 @@ struct grid_tags_simplify final : public Command {
}; };
template<class T, class U> template<class T, class U>
static bool move_one(T begin, T end, U const& to_move, int step) { static bool move_one(T begin, T end, U const& to_move, bool swap) {
size_t move_count = 0; size_t move_count = 0;
auto prev = end; auto prev = end;
for (auto it = begin; it != end; std::advance(it, step)) { for (auto it = begin; it != end; ++it) {
auto cur = &*it; auto cur = &*it;
if (!to_move.count(cur)) if (!to_move.count(cur))
prev = it; prev = it;
else if (prev != end) { else if (prev != end) {
it->swap_nodes(*prev); it->swap_nodes(*prev);
prev = it; if (swap)
std::swap(prev, it);
else
prev = it;
if (++move_count == to_move.size()) if (++move_count == to_move.size())
break; break;
} }
@ -354,7 +357,7 @@ struct grid_move_up final : public Command {
} }
void operator()(agi::Context *c) override { void operator()(agi::Context *c) override {
if (move_one(c->ass->Events.begin(), c->ass->Events.end(), c->selectionController->GetSelectedSet(), 1)) if (move_one(c->ass->Events.begin(), c->ass->Events.end(), c->selectionController->GetSelectedSet(), false))
c->ass->Commit(_("move lines"), AssFile::COMMIT_ORDER); c->ass->Commit(_("move lines"), AssFile::COMMIT_ORDER);
} }
}; };
@ -371,7 +374,7 @@ struct grid_move_down final : public Command {
} }
void operator()(agi::Context *c) override { void operator()(agi::Context *c) override {
if (move_one(--c->ass->Events.end(), c->ass->Events.begin(), c->selectionController->GetSelectedSet(), -1)) if (move_one(c->ass->Events.rbegin(), c->ass->Events.rend(), c->selectionController->GetSelectedSet(), true))
c->ass->Commit(_("move lines"), AssFile::COMMIT_ORDER); c->ass->Commit(_("move lines"), AssFile::COMMIT_ORDER);
} }
}; };