71284101ce909389d97c4dcfb29850f62fb47585
[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     void setWordListEmpty(QVariant state);
67     void setFocusOnQML();
68
69
70 public Q_SLOTS:
71     //! Shows search results
72     /*!
73       \param hash of found words and its translations objects
74     */
75     void showSearchResults(QHash<QString, QList<Translation*> >);
76
77     //! Locks words list, while backbone is doing something in background
78     void lockList();
79
80     //! Unlocks words list
81     void unlockList();
82
83     //! clears list
84     void clear();
85
86     void bookmarkModeActive();
87
88     void setFocusOnElement();
89
90 protected:
91 #ifdef Q_WS_MAEMO_5
92     //! Reimplemented standard mouseReleaseEvent to check if user clicked on
93     //! a word or on its star to emit suitable signal
94     void mouseReleaseEvent(QMouseEvent *event);
95
96     //! Resizes the size of columns to assure that stars are always on right
97     //! side next to scroll bar
98     void resizeEvent(QResizeEvent *event);
99
100     //! Checks if user press return and if so displays translation of selected word
101     void keyPressEvent( QKeyEvent * event);
102 #endif
103 private Q_SLOTS:
104 #ifdef Q_WS_MAEMO_5
105     //! Emits signal to show translation of clicked item. Signal is emitted
106     //! only when a word was clicked.
107     void wordClicked(QModelIndex index);
108
109     //! Emits signal to show add or remove word from bookmarks.
110     //! Signal is emitted only when a star was clicked.
111     void wordChecked(QModelIndex index);
112 #else
113     void wordClicked(QString word);
114     void addToBookmarks(QString word);
115     void removeFromBookmarks(QString word);
116 #endif
117
118
119 private:
120     //! Adds word to model. Row is row in the model
121     void addWord(QString word, int row);
122
123     QStandardItemModel* model;
124
125     //! Describes width of a star checkbox in pixels
126     int checkBoxWidth;
127
128     //! Resizes sizes of colums after adding new words or after resize event.
129     void resizeColumns();
130
131     //! Association between words and their translations
132     QHash<QString, QList<Translation*> > searchResult;
133     WordListProxyStyle* proxyStyle;
134
135     bool _isBookmarkModeActive;
136
137 #ifndef Q_WS_MAEMO_5
138     QVBoxLayout* verticalLayout;
139     QDeclarativeView* qmlView;
140     QDeclarativeContext* ctxt;
141     WordListModel* listModel;
142 #endif
143 };
144
145 #endif // WORDLISTWIDGET_H