Add keyboard support to comboBox, HistoryList. Fix some issues with keyboard support.
[mdictionary] / src / mdictionary / qml / WordListWidget.qml
1 /*******************************************************************************
2
3     This file is part of mDictionary.
4
5     mDictionary is free software: you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation, either version 3 of the License, or
8     (at your option) any later version.
9
10     mDictionary is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with mDictionary.  If not, see <http://www.gnu.org/licenses/>.
17
18     Copyright 2010 Comarch S.A.
19
20 *******************************************************************************/
21 /*!
22     author: Marcin Kaźmierczak <marcin.kazmierczak@comarch.pl>
23 */
24
25 import Qt 4.7
26
27 Rectangle {
28     id: rectangle1
29     color: myPalette.base
30     anchors.fill: parent
31
32     function changeWordState(nr, state) {
33         wordList.currentIndex = nr
34         wordModel.setModelProperty(wordList.currentIndex, state, "isBookmarked")
35     }
36
37     function changeWordStateByIndex() {
38         wordModel.setModelPropertyByIndex(wordList.currentIndex, "isBookmarked")
39     }
40
41     function setEnabled(Boolean) { wordList.enabled = Boolean }
42     function setWordListEmpty(Boolean) { wordList.empty = Boolean }
43     function setFocus() {
44         wordList.setFocus()
45     }
46
47     signal wordSelected(string word);
48     signal wordSelectedByIndex(int nr);
49     signal checkFocus();
50
51     SystemPalette { id: myPalette; colorGroup: SystemPalette.Active }
52
53     ElementsListView{
54         id: wordList
55         width: rectangle1.width
56
57         anchors.fill: parent
58         highlightResizeSpeed: 1000
59         property bool empty: false
60
61         Keys.onPressed: {
62             if ((currentIndex < 0 || currentIndex >= count) && (event.key == Qt.Key_Up || event.key == Qt.Key_Down)){
63                 currentIndex = 0
64             }
65             if (event.key == Qt.Key_Space && currentIndex >= 0){
66                 rectangle1.changeWordStateByIndex();
67             } else if ((event.key == Qt.Key_Return || event.key == Qt.Key_Enter) && currentIndex >= 0){
68                 rectangle1.wordSelectedByIndex(currentIndex)
69             }
70         }
71
72         delegate: Component{
73             id: wordListDelegate
74             Item {
75                 onActiveFocusChanged: rectangle1.checkFocus();
76
77                 width: rectangle1.width
78                 height: {
79                     if (wordText.height + 4 > check.height)
80                             return wordText.height + 4;
81                     else
82                             return check.height;
83                 }
84                 MouseArea{
85                     anchors.fill: parent
86                     onClicked: wordList.currentIndex = index 
87                     onDoubleClicked: {
88                         wordList.currentIndex = number
89                         rectangle1.wordSelected(word)
90                     }
91                 }
92
93
94                 Text {
95                     id: wordText
96                     anchors.verticalCenter: parent.verticalCenter
97                     text: word
98                 }
99
100                 Checkbox{
101                     id: check
102                     width: wordText.height
103                     selected: isBookmarked
104                     pathToCheckedImage: CheckedPath
105                     pathToUncheckedImage: UncheckedPath
106                     anchors.right: parent.right
107                     anchors.rightMargin: 5
108                     pathToCheckedDicImage: CheckedPath
109                     pathToUncheckedDicImage: UncheckedPath
110                     anchors.verticalCenter: parent.verticalCenter
111                     onChanged: rectangle1.changeWordState(number, selected)
112                 }
113             }
114         }
115
116         Text {
117             id: emptyText
118             anchors.top: parent.top
119             anchors.left: parent.left
120             text: qsTr("Can't find any matching words")
121         }
122
123         Rectangle {
124             id: shadeDisable
125             anchors.centerIn: parent;
126             color: "grey";
127             opacity: 0
128             width:  parent.width;
129             height: parent.height;
130         }
131
132         model: wordModel
133
134         states: [
135             State {
136                 name: "empty"
137                 when: (wordList.empty == true);
138                 PropertyChanges { target: emptyText; visible: true}
139             },
140             State {
141                 name: "non-empty"
142                 when: (wordList.empty == false);
143                 PropertyChanges { target: emptyText; visible: false}
144             },
145             State {
146                 name: "enabled"
147                 when: (wordList.enabled == true);
148                 PropertyChanges { target: shadeDisable; z: 30; opacity: 0.5 }
149             },
150             State {
151                 name: "disabled"
152                 when: (wordList.enabled == false);
153                 PropertyChanges { target: shadeDisable; z: 30; opacity: 0.0 }
154             }
155         ]
156     }
157
158     states: [
159             State {
160                 name: "noFocus";
161                 when: ((!wordList.focus) && (!rectangle1.focus))
162                 PropertyChanges { target: wordList.highlightItem; opacity:0}
163            }
164     ]
165 }