Merge branch 'master' of ssh://drop.maemo.org/git/mdictionary
[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 (event.key == Qt.Key_Space && currentIndex >= 0){
63                 rectangle1.changeWordStateByIndex();
64             } else if ((event.key == Qt.Key_Return || event.key == Qt.Key_Enter) && currentIndex >= 0){
65                 rectangle1.wordSelectedByIndex(currentIndex)
66             }
67         }
68
69         delegate: Component{
70             id: wordListDelegate
71             Item {
72                 onActiveFocusChanged: rectangle1.checkFocus();
73
74                 width: rectangle1.width
75                 height: {
76                     if (wordText.height + 4 > check.height)
77                             return wordText.height + 4;
78                     else
79                             return check.height;
80                 }
81                 MouseArea{
82                     anchors.fill: parent
83                     onClicked: wordList.currentIndex = index 
84                     onDoubleClicked: {
85                         wordList.currentIndex = number
86                         rectangle1.wordSelected(word)
87                     }
88                 }
89
90
91                 Text {
92                     id: wordText
93                     anchors.verticalCenter: parent.verticalCenter
94                     text: word
95                 }
96
97                 Checkbox{
98                     id: check
99                     width: wordText.height
100                     selected: isBookmarked
101                     pathToCheckedImage: CheckedPath
102                     pathToUncheckedImage: UncheckedPath
103                     anchors.right: parent.right
104                     anchors.rightMargin: 5
105                     pathToCheckedDicImage: CheckedPath
106                     pathToUncheckedDicImage: UncheckedPath
107                     anchors.verticalCenter: parent.verticalCenter
108                     onChanged: rectangle1.changeWordState(number, selected)
109                 }
110             }
111         }
112
113         Text {
114             id: emptyText
115             anchors.top: parent.top
116             anchors.left: parent.left
117             text: qsTr("Can't find any matching words")
118         }
119
120         Rectangle {
121             id: shadeDisable
122             anchors.centerIn: parent;
123             color: "grey";
124             opacity: 0
125             width:  parent.width;
126             height: parent.height;
127         }
128
129         model: wordModel
130
131         states: [
132             State {
133                 name: "empty"
134                 when: (wordList.empty == true);
135                 PropertyChanges { target: emptyText; visible: true}
136             },
137             State {
138                 name: "non-empty"
139                 when: (wordList.empty == false);
140                 PropertyChanges { target: emptyText; visible: false}
141             },
142             State {
143                 name: "enabled"
144                 when: (wordList.enabled == true);
145                 PropertyChanges { target: shadeDisable; z: 30; opacity: 0.5 }
146             },
147             State {
148                 name: "disabled"
149                 when: (wordList.enabled == false);
150                 PropertyChanges { target: shadeDisable; z: 30; opacity: 0.0 }
151             }
152         ]
153     }
154
155     states: [
156             State {
157                 name: "noFocus";
158                 when: ((!wordList.focus) && (!rectangle1.focus))
159                 PropertyChanges { target: wordList.highlightItem; opacity:0}
160            }
161     ]
162 }