Fix random error when remove word from bookmark. Fix show all bookmark feature.
[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     void bookmarkModeActive();
85
86 protected:
87 #ifdef Q_WS_MAEMO_5
88     //! Reimplemented standard mouseReleaseEvent to check if user clicked on
89     //! a word or on its star to emit suitable signal
90     void mouseReleaseEvent(QMouseEvent *event);
91
92     //! Resizes the size of columns to assure that stars are always on right
93     //! side next to scroll bar
94     void resizeEvent(QResizeEvent *event);
95
96     //! Checks if user press return and if so displays translation of selected word
97     void keyPressEvent( QKeyEvent * event);
98 #endif
99 private Q_SLOTS:
100 #ifdef Q_WS_MAEMO_5
101     //! Emits signal to show translation of clicked item. Signal is emitted
102     //! only when a word was clicked.
103     void wordClicked(QModelIndex index);
104
105     //! Emits signal to show add or remove word from bookmarks.
106     //! Signal is emitted only when a star was clicked.
107     void wordChecked(QModelIndex index);
108 #else
109     void wordClicked(QString word);
110     void addToBookmarks(QString word);
111     void removeFromBookmarks(QString word);
112 #endif
113
114
115 private:
116     //! Adds word to model. Row is row in the model
117     void addWord(QString word, int row);
118
119     QStandardItemModel* model;
120
121     //! Describes width of a star checkbox in pixels
122     int checkBoxWidth;
123
124     //! Resizes sizes of colums after adding new words or after resize event.
125     void resizeColumns();
126
127     //! Association between words and their translations
128     QHash<QString, QList<Translation*> > searchResult;
129     WordListProxyStyle* proxyStyle;
130
131     bool isBookmarkModeActive;
132
133 #ifndef Q_WS_MAEMO_5
134     QVBoxLayout* verticalLayout;
135     QDeclarativeView* qmlView;
136     QDeclarativeContext* ctxt;
137     WordListModel* listModel;
138 #endif
139 };
140
141 #endif // WORDLISTWIDGET_H