folding: Also update counterpart for fold operations

This wasn't necessary before since the internal representation of
folds is be checked for consistency after each commit, but after the
switch to extradata fold operations would leave the extradata in an
invalid state. This isn't technically a problem, but it does leave more
extradata entries lying around than necessary, and it can trip up
automation scripts that aren't prepared for inconsistent fold state.
This commit is contained in:
arch1t3cht 2023-06-01 22:53:30 +02:00
parent 64b92a95ac
commit 58d6ab520b
1 changed files with 10 additions and 0 deletions

View File

@ -326,6 +326,10 @@ bool FoldController::HasFolds() {
void FoldController::ClearFoldsAt(std::vector<AssDialogue *> const& lines) {
DoForFoldsAt(lines, [&](AssDialogue &line) {
line.Fold.extraExists = false; line.Fold.valid = false;
if (line.Fold.counterpart) {
line.Fold.counterpart->Fold.extraExists = false;
line.Fold.counterpart->Fold.valid = false;
}
});
context->ass->Commit(_("clear folds"), AssFile::COMMIT_FOLD);
}
@ -333,6 +337,8 @@ void FoldController::ClearFoldsAt(std::vector<AssDialogue *> const& lines) {
void FoldController::OpenFoldsAt(std::vector<AssDialogue *> const& lines) {
DoForFoldsAt(lines, [&](AssDialogue &line) {
line.Fold.collapsed = false;
if (line.Fold.counterpart)
line.Fold.counterpart->Fold.collapsed = line.Fold.collapsed;
});
context->ass->Commit(_("open folds"), AssFile::COMMIT_FOLD);
}
@ -340,6 +346,8 @@ void FoldController::OpenFoldsAt(std::vector<AssDialogue *> const& lines) {
void FoldController::CloseFoldsAt(std::vector<AssDialogue *> const& lines) {
DoForFoldsAt(lines, [&](AssDialogue &line) {
line.Fold.collapsed = true;
if (line.Fold.counterpart)
line.Fold.counterpart->Fold.collapsed = line.Fold.collapsed;
});
context->ass->Commit(_("close folds"), AssFile::COMMIT_FOLD);
}
@ -347,6 +355,8 @@ void FoldController::CloseFoldsAt(std::vector<AssDialogue *> const& lines) {
void FoldController::ToggleFoldsAt(std::vector<AssDialogue *> const& lines) {
DoForFoldsAt(lines, [&](AssDialogue &line) {
line.Fold.collapsed = !line.Fold.collapsed;
if (line.Fold.counterpart)
line.Fold.counterpart->Fold.collapsed = line.Fold.collapsed;
});
context->ass->Commit(_("toggle folds"), AssFile::COMMIT_FOLD);
}