Merge branch 'qml' of ssh://drop.maemo.org/git/mdictionary into qml
[mdictionary] / src / mdictionary / gui / WordListWidget.h
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 /*! \file WordListwidget.h
22     \brief Displays list of words found in dictionaries
23
24     \author Mateusz Półrola <mateusz.polrola@comarch.pl>
25 */
26
27 #ifndef WORDLISTWIDGET_H
28 #define WORDLISTWIDGET_H
29
30 #include <QtGui>
31 #include <QStringListModel>
32 #include <QVBoxLayout>
33 #include "../backbone/backbone.h"
34 #include "WordListProxyStyle.h"
35 #include "WordListModel.h"
36 #include <QtDeclarative/QDeclarativeView>
37 #include <QtDeclarative/QDeclarativeContext>
38
39 /*!
40     It allows user to select word to see its translation or to mark or unmark
41     it as "star" (add/remove from bookmarks). It inherits from QTreeView
42     to allow to display two columns, one with words and second with stars.
43     Star is normal checkable item. To get effect of star we need to set
44     style (WordListProxyStyle) for this widget.
45   */
46 class WordListWidget : public QTreeView {
47     Q_OBJECT
48 public:
49     explicit WordListWidget(QWidget *parent = 0);
50     ~WordListWidget();
51
52
53 Q_SIGNALS:
54     //! Requests to show translation which is described by passed translations
55     //! objects
56     void showTranslation(QList<Translation*>);
57
58
59     //! Requests to add selected word to bookmarks
60     void addBookmark(QList<Translation*>);
61
62     //! Requests to remove selected word from bookmarks
63     void removeBookmark(QList<Translation*>);
64
65     void setWordListState(QVariant state);
66
67
68 public Q_SLOTS:
69     //! Shows search results
70     /*!
71       \param hash of found words and its translations objects
72     */
73     void showSearchResults(QHash<QString, QList<Translation*> >);
74
75     //! Locks words list, while backbone is doing something in background
76     void lockList();
77
78     //! Unlocks words list
79     void unlockList();
80
81     //! clears list
82     void clear();
83
84 protected:
85 #ifdef Q_WS_MAEMO_5
86     //! Reimplemented standard mouseReleaseEvent to check if user clicked on
87     //! a word or on its star to emit suitable signal
88     void mouseReleaseEvent(QMouseEvent *event);
89
90     //! Resizes the size of columns to assure that stars are always on right
91     //! side next to scroll bar
92     void resizeEvent(QResizeEvent *event);
93
94     //! Checks if user press return and if so displays translation of selected word
95     void keyPressEvent( QKeyEvent * event);
96 #endif
97 private Q_SLOTS:
98 #ifdef Q_WS_MAEMO_5
99     //! Emits signal to show translation of clicked item. Signal is emitted
100     //! only when a word was clicked.
101     void wordClicked(QModelIndex index);
102
103     //! Emits signal to show add or remove word from bookmarks.
104     //! Signal is emitted only when a star was clicked.
105     void wordChecked(QModelIndex index);
106 #else
107     void wordClicked(QString word);
108     void addToBookmarks(QString word);
109     void removeFromBookmarks(QString word);
110 #endif
111
112
113 private:
114     //! Adds word to model. Row is row in the model
115     void addWord(QString word, int row);
116
117     QStandardItemModel* model;
118
119     //! Describes width of a star checkbox in pixels
120     int checkBoxWidth;
121
122     //! Resizes sizes of colums after adding new words or after resize event.
123     void resizeColumns();
124
125     //! Association between words and their translations
126     QHash<QString, QList<Translation*> > searchResult;
127     WordListProxyStyle* proxyStyle;
128
129 #ifndef Q_WS_MAEMO_5
130     QVBoxLayout* verticalLayout;
131     QDeclarativeView* qmlView;
132     QDeclarativeContext* ctxt;
133     WordListModel* listModel;
134 #endif
135 };
136
137 #endif // WORDLISTWIDGET_H