Fix bug with app crash on exit. Add keyboard support in wordList, DictTypeSelectDialo...
[mdictionary] / src / mdictionary / qml / WordListWidget.qml
index cb972fa..742cf49 100644 (file)
@@ -29,13 +29,20 @@ Rectangle {
     function changeWordState(nr, state) {
         wordList.currentIndex = nr
         wordModel.setModelProperty(wordList.currentIndex, state, "isBookmarked")
+    }
 
+    function changeWordStateByIndex() {
+        wordModel.setModelPropertyByIndex(wordList.currentIndex, "isBookmarked")
     }
 
     function setEnabled(Boolean) { wordList.enabled = Boolean }
     function setWordListEmpty(Boolean) { wordList.empty = Boolean }
+    function setFocus() {
+        wordList.setFocus()
+    }
 
     signal wordSelected(string word);
+    signal wordSelectedByIndex(int nr);
 
     SystemPalette { id: myPalette; colorGroup: SystemPalette.Active }
 
@@ -51,6 +58,14 @@ Rectangle {
         highlightResizeSpeed: 1000
         property bool empty: false
 
+        Keys.onPressed: {
+            if (event.key == Qt.Key_Space && currentIndex >= 0){
+                rectangle1.changeWordStateByIndex();
+            } else if ((event.key == Qt.Key_Return || event.key == Qt.Key_Enter) && currentIndex >= 0){
+                rectangle1.wordSelectedByIndex(currentIndex)
+            }
+        }
+
         delegate: Component{
             id: wordListDelegate
             Item {
@@ -65,7 +80,7 @@ Rectangle {
                 MouseArea{
                     anchors.fill: parent
                     onClicked: {
-                        wordList.currentIndex = number
+                        wordList.currentIndex = index
                         rectangle1.wordSelected(word)
                     }
                 }
@@ -74,14 +89,7 @@ Rectangle {
                 Text {
                     id: wordText
                     anchors.verticalCenter: parent.verticalCenter
-                    text:
-                    {
-                        if (word == "!@#$%"){
-                            qsTr("Can't find any matching words")
-                        } else {
-                            word
-                        }
-                    }
+                    text: word
                 }
 
                 Checkbox{
@@ -95,13 +103,6 @@ Rectangle {
 
                     anchors.verticalCenter: parent.verticalCenter
                     onChanged: rectangle1.changeWordState(number, selected)
-                    visible: {
-                        if (word == "!@#$%"){
-                            false
-                        } else {
-                            true
-                        }
-                    }
                 }
 
             }
@@ -115,6 +116,15 @@ Rectangle {
             text: qsTr("Can't find any matching words")
         }
 
+        Rectangle {
+            id: shadeDisable
+            anchors.centerIn: parent;
+            color: "grey";
+            opacity: 0
+            width:  parent.width;
+            height: parent.height;
+        }
+
         model: wordModel
 
         states: [
@@ -127,6 +137,16 @@ Rectangle {
                 name: "non-empty"
                 when: (wordList.empty == false);
                 PropertyChanges { target: emptyText; visible: false}
+            },
+            State {
+                name: "enabled"
+                when: (wordList.enabled == true);
+                PropertyChanges { target: shadeDisable; z: 30; opacity: 0.5 }
+            },
+            State {
+                name: "disabled"
+                when: (wordList.enabled == false);
+                PropertyChanges { target: shadeDisable; z: 30; opacity: 0.0 }
             }
         ]
     }