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