742cf498252b01b616c008c1e67014bdee7b6276
[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
29     function changeWordState(nr, state) {
30         wordList.currentIndex = nr
31         wordModel.setModelProperty(wordList.currentIndex, state, "isBookmarked")
32     }
33
34     function changeWordStateByIndex() {
35         wordModel.setModelPropertyByIndex(wordList.currentIndex, "isBookmarked")
36     }
37
38     function setEnabled(Boolean) { wordList.enabled = Boolean }
39     function setWordListEmpty(Boolean) { wordList.empty = Boolean }
40     function setFocus() {
41         wordList.setFocus()
42     }
43
44     signal wordSelected(string word);
45     signal wordSelectedByIndex(int nr);
46
47     SystemPalette { id: myPalette; colorGroup: SystemPalette.Active }
48
49     id: rectangle1
50     color: myPalette.base
51     anchors.fill: parent
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                 width: rectangle1.width
73                 height: {
74                     if (wordText.height + 4 > check.height)
75                             return wordText.height + 4;
76                     else
77                             return check.height;
78                 }
79
80                 MouseArea{
81                     anchors.fill: parent
82                     onClicked: {
83                         wordList.currentIndex = index
84                         rectangle1.wordSelected(word)
85                     }
86                 }
87
88
89                 Text {
90                     id: wordText
91                     anchors.verticalCenter: parent.verticalCenter
92                     text: word
93                 }
94
95                 Checkbox{
96                     id: check
97                     width: wordText.height
98                     selected: isBookmarked
99                     pathToCheckedImage: CheckedPath
100                     pathToUncheckedImage: UncheckedPath
101                     anchors.right: parent.right
102                     anchors.rightMargin: 5
103
104                     anchors.verticalCenter: parent.verticalCenter
105                     onChanged: rectangle1.changeWordState(number, selected)
106                 }
107
108             }
109
110         }
111
112         Text {
113             id: emptyText
114             anchors.top: parent.top
115             anchors.left: parent.left
116             text: qsTr("Can't find any matching words")
117         }
118
119         Rectangle {
120             id: shadeDisable
121             anchors.centerIn: parent;
122             color: "grey";
123             opacity: 0
124             width:  parent.width;
125             height: parent.height;
126         }
127
128         model: wordModel
129
130         states: [
131             State {
132                 name: "empty"
133                 when: (wordList.empty == true);
134                 PropertyChanges { target: emptyText; visible: true}
135             },
136             State {
137                 name: "non-empty"
138                 when: (wordList.empty == false);
139                 PropertyChanges { target: emptyText; visible: false}
140             },
141             State {
142                 name: "enabled"
143                 when: (wordList.enabled == true);
144                 PropertyChanges { target: shadeDisable; z: 30; opacity: 0.5 }
145             },
146             State {
147                 name: "disabled"
148                 when: (wordList.enabled == false);
149                 PropertyChanges { target: shadeDisable; z: 30; opacity: 0.0 }
150             }
151         ]
152     }
153 }