diff --git a/src/model/UserphraseModel.cpp b/src/model/UserphraseModel.cpp index e9e8f66..9ab8e84 100644 --- a/src/model/UserphraseModel.cpp +++ b/src/model/UserphraseModel.cpp @@ -52,6 +52,7 @@ UserphraseModel::UserphraseModel(QObject *parent, const char *path) :QAbstractListModel{parent} ,ctx_{chewing_new2(nullptr, path, logger, nullptr), chewing_delete} ,userphrase_{} + ,addResult(1) { if (!ctx_) { // FIXME: Report error here @@ -201,6 +202,8 @@ void UserphraseModel::add(const QString &phrase, const QString &bopomofo) phrase.toUtf8().constData(), bopomofo.toUtf8().constData()); + addResult = ret; + if (ret > 0) { emit beginResetModel(); userphrase_.insert(Userphrase{ diff --git a/src/model/UserphraseModel.h b/src/model/UserphraseModel.h index 7b368c5..62387cb 100644 --- a/src/model/UserphraseModel.h +++ b/src/model/UserphraseModel.h @@ -45,6 +45,7 @@ class UserphraseModel final: public QAbstractListModel { const Userphrase *getUserphrase(const QModelIndex& idx); + int getAddResult() const {return addResult;} signals: void importCompleted( bool result, @@ -71,4 +72,5 @@ public slots: std::unique_ptr ctx_; UserphraseSet userphrase_; + int addResult; }; diff --git a/src/model/UserphraseSortFilterProxyModel.cpp b/src/model/UserphraseSortFilterProxyModel.cpp index 68e7f74..d722085 100644 --- a/src/model/UserphraseSortFilterProxyModel.cpp +++ b/src/model/UserphraseSortFilterProxyModel.cpp @@ -53,3 +53,4 @@ const Userphrase *UserphraseSortFilterProxyModel::getUserphrase(const QModelInde { return sourceModel()->getUserphrase(mapToSource(idx)); } + diff --git a/src/model/UserphraseSortFilterProxyModel.h b/src/model/UserphraseSortFilterProxyModel.h index 1318eb7..9a96573 100644 --- a/src/model/UserphraseSortFilterProxyModel.h +++ b/src/model/UserphraseSortFilterProxyModel.h @@ -41,7 +41,6 @@ class UserphraseSortFilterProxyModel final : public QSortFilterProxyModel { } const Userphrase *getUserphrase(const QModelIndex& idx); - public slots: void add(std::shared_ptr phrase, std::shared_ptr bopomofo); void remove(QModelIndexList indexList); diff --git a/src/view/UserphraseView.cpp b/src/view/UserphraseView.cpp index 9b5eeb8..f18f0e2 100644 --- a/src/view/UserphraseView.cpp +++ b/src/view/UserphraseView.cpp @@ -17,7 +17,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "UserphraseModel.h" #include "UserphraseView.h" #include @@ -26,6 +25,8 @@ UserphraseView::UserphraseView(QWidget *parent) :QListView{parent} ,UserphraseDialog_{new UserphraseDialog{this}} ,menu_(new UserphraseViewMenu{this}) + ,originalPhrase{new QString()} + ,originalBopomofo{new QString()} { setupContextMenu(); setupAddUserphraseDialog(); @@ -56,6 +57,10 @@ void UserphraseView::showModifyUserphraseDialog() UserphraseDialog_->setText(userphrase->phrase_, userphrase->bopomofo_); UserphraseDialog_->setWindowTitle(tr("Modify phrase")); + + *originalPhrase = userphrase->phrase_; + *originalBopomofo = userphrase->bopomofo_; + emit UserphraseDialog_->exec(); } @@ -75,6 +80,12 @@ void UserphraseView::addPhrase(int result) } emit model()->add(phrase, bopomofo); + + if (dialogType_ == DIALOG_MODIFY) { + if (model()->sourceModel()->getAddResult() <= 0) { + emit model()->add(originalPhrase, originalBopomofo); + } + } } void UserphraseView::remove() diff --git a/src/view/UserphraseView.h b/src/view/UserphraseView.h index 4bfdead..b6d5d63 100644 --- a/src/view/UserphraseView.h +++ b/src/view/UserphraseView.h @@ -64,4 +64,7 @@ public slots: UserphraseViewMenu *menu_; bool dialogType_; + + std::shared_ptr originalPhrase; + std::shared_ptr originalBopomofo; };