Fix bug with app crash on exit. Add keyboard support in wordList, DictTypeSelectDialo...
[mdictionary] / src / mdictionary / gui / WordListModel.cpp
index ba9a977..5244664 100644 (file)
@@ -8,7 +8,7 @@ WordListModel::WordListModel(QObject *parent) :
     roles[IsBookmarkedRole] = "isBookmarked";
     roles[NumberRole] = "number";
     setRoleNames(roles);
-
+    _isBookmarkModeActive = false;
 
 }
 
@@ -39,6 +39,7 @@ void WordListModel::clear()
     if (!empty){
         endResetModel();
     }
+    _isBookmarkModeActive = false;
 }
 
 QVariant WordListModel::data(const QModelIndex &index, int role) const
@@ -113,14 +114,20 @@ void WordListModel::setModelProperty(int index, const QVariant value, QString ro
     }
 }
 
-int WordListModel::setDataPriv(int index, const QVariant &value, int role)
+void WordListModel::setModelPropertyByIndex(int index, QString role)
 {
-    bool bookmarksOnly = false;
-    if (_wordInBookmarks.values().count(false) == 0){
-        bookmarksOnly = true;
+    if (role.contains("isBookmarked"))
+    {
+        if (index < 0 || index > _translations.count() - 1)
+            return;
+
+        setDataPriv(index, !_wordInBookmarks[_wordList[index]], IsBookmarkedRole);
     }
+}
 
-    if (index < 0 || index > _translations.count())
+int WordListModel::setDataPriv(int index, const QVariant &value, int role)
+{
+    if (index < 0 || index > _translations.count() - 1)
         return 0;
 
     QString word = _wordList[index];
@@ -133,12 +140,11 @@ int WordListModel::setDataPriv(int index, const QVariant &value, int role)
         if (value.type() == QVariant::Bool)
         {
             _wordInBookmarks[word] = value.toBool();
-            Q_EMIT dataChanged(this->index(0), this->index(_translations.count() - 1));
             if (_wordInBookmarks[word] == true){
                 Q_EMIT addToBookmarks(word);
             } else {                
                 Q_EMIT removeFromBookmarks(word);
-                if (bookmarksOnly == true){
+                if (_isBookmarkModeActive == true){
                     beginRemoveRows(QModelIndex(), index, index + 1);
                     this->_translations.remove(_wordList[index]);
                     this->_wordInBookmarks.remove(_wordList[index]);
@@ -146,6 +152,7 @@ int WordListModel::setDataPriv(int index, const QVariant &value, int role)
                     endRemoveRows();
                 }
             }
+            Q_EMIT dataChanged(this->index(0), this->index(_translations.count() - 1));
             return 2;
         }
         else
@@ -155,3 +162,13 @@ int WordListModel::setDataPriv(int index, const QVariant &value, int role)
     }
     return 0;
 }
+
+void WordListModel::setBookmarkModeActive(bool mode)
+{
+    _isBookmarkModeActive = mode;
+}
+
+QString WordListModel::wordOnPosition(int index)
+{
+    return _wordList[index];
+}