From 98f60c216e61464be87d5574f57bdb12a1b2f69d Mon Sep 17 00:00:00 2001 From: Yuan Liu Date: Fri, 19 May 2017 04:00:40 -0700 Subject: [PATCH] Let undo more complete After modifying, it can restore multiple phrases after restore single phrase. --- src/model/UserphraseModel.cpp | 24 ++++++++++++------------ src/model/UserphraseModel.h | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/model/UserphraseModel.cpp b/src/model/UserphraseModel.cpp index 59f80c2..5768f63 100644 --- a/src/model/UserphraseModel.cpp +++ b/src/model/UserphraseModel.cpp @@ -94,8 +94,7 @@ void UserphraseModel::remove(QModelIndexList indexList) auto last = indexList.first().row(); emit beginRemoveRows(indexList.first().parent(), first, last); - - int remove_cnt = 0; + int remove_cnt = 0; foreach(auto item, indexList) { auto index = item.row(); @@ -115,7 +114,7 @@ void UserphraseModel::remove(QModelIndexList indexList) } // FIXME: Handle chewing_userphrase_remove fails. } - maxundocnt = remove_cnt; + maxundocnt.push_back(remove_cnt); emit endRemoveRows(); emit removePhraseCompleted(indexList.size()); @@ -234,14 +233,15 @@ const Userphrase *UserphraseModel::getUserphrase(const QModelIndex& idx) void UserphraseModel::undo() { - if (!removerecord_.empty() && maxundocnt>0) { - while(maxundocnt--){ - auto last = removerecord_.end() - 1; - const QString phrase = last->display_; - add(last->phrase_, last->bopomofo_); - removerecord_.erase(last); - emit undoCompleted(phrase); - } - maxundocnt = 1; + int cnt = *(maxundocnt.end() -1); + if (!removerecord_.empty() && cnt>0) { + while (cnt--) { + auto last = removerecord_.end() -1; + const QString phrase = last->display_; + add(last->phrase_, last->bopomofo_); + removerecord_.erase(last); + emit undoCompleted(phrase); + } + maxundocnt.pop_back(); } } diff --git a/src/model/UserphraseModel.h b/src/model/UserphraseModel.h index 0236ea7..3ab94ad 100644 --- a/src/model/UserphraseModel.h +++ b/src/model/UserphraseModel.h @@ -76,6 +76,6 @@ public slots: std::unique_ptr ctx_; UserphraseSet userphrase_; std::vector removerecord_; + std::vector maxundocnt; int addresult_; - int maxundocnt; };