Added filtering by name in ListView.
[situare] / src / ui / listview.h
1 /*
2    Situare - A location system for Facebook
3    Copyright (C) 2010  Ixonos Plc. Authors:
4
5        Jussi Laitinen - jussi.laitinen@ixonos.com
6
7    Situare is free software; you can redistribute it and/or
8    modify it under the terms of the GNU General Public License
9    version 2 as published by the Free Software Foundation.
10
11    Situare is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with Situare; if not, write to the Free Software
18    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
19    USA.
20 */
21
22 #ifndef LISTVIEW_H
23 #define LISTVIEW_H
24
25 #include <QListWidget>
26
27 class GeoCoordinate;
28 class ListItem;
29
30 /**
31 * @brief View for ListItems.
32 *
33 * ListView is used to show ListItems in list view. Items can be added, removed or
34 * filtered.
35 */
36 class ListView : public QListWidget
37 {
38     Q_OBJECT
39
40 public:
41     /**
42     * @brief Constructor.
43     *
44     * @param parent QWidget
45     */
46     ListView(QWidget *parent = 0);
47
48     ~ListView();
49
50 /******************************************************************************
51 * MEMBER FUNCTIONS AND SLOTS
52 ******************************************************************************/
53 public:
54     /**
55     * @brief Add item to view and item list.
56     *
57     * @param key user ID
58     * @param item item to add to view and list
59     */
60     void addListItem(const QString &key, ListItem *item);
61
62     /**
63     * @brief Adds item to view.
64     *
65     * @param item FriendListItem
66     */
67     void addListItemToView(ListItem *item);
68
69     /**
70     * @brief Clear unused items from view.
71     *
72     * Clears items which are not in user ID's list from the view and items list.
73     *
74     * @param userIDs list of new user ID's.
75     */
76     void clearUnused(const QStringList &userIDs);
77
78     /**
79     * @brief Clears filtering from list.
80     *
81     * Shows all items.
82     */
83     void clearFilter();
84
85     /**
86     * @brief Clears list.
87     *
88     * Items are removed from view and item list.
89     */
90     void clearList();
91
92     /**
93     * @brief Checks if view contains item with userID.
94     *
95     * @param userID user's ID
96     * @return true if view contains item, false otherwise
97     */
98     bool contains(const QString &userID);
99
100     /**
101     * @brief Sets filter to list.
102     *
103     * Hide all items that are not in the userIDs list.
104     *
105     * @param userIDs user ID's to items that are shown
106     */
107     void filter(const QList<QString> &userIDs);
108
109     void filter(const QString &pattern);
110
111     /**
112     * @brief Takes item from view.
113     *
114     * Item is not deleted.
115     *
116     * @param userID user's ID
117     * @return ListItem
118     */
119     ListItem *takeListItemFromView(const QString &userID);
120
121     /**
122     * @brief Returns ListItem with userID.
123     *
124     * @param userID user's ID
125     * @return ListItem
126     */
127     ListItem *listItem(const QString &userID);
128
129 private:
130
131 protected slots:
132     /**
133     * @brief Slot for list item clicked.
134     *
135     * Toggles items selection state and emits listItemClicked signal.
136     */
137     virtual void listItemClicked(QListWidgetItem *item);
138
139 /*******************************************************************************
140  * DATA MEMBERS
141  ******************************************************************************/
142 private:
143     QHash<QString, ListItem *> m_listItems; ///< List of items in this view. Key = user ID
144     ListItem *m_previousItem;               ///< Previously selected item
145     QVector<int> m_filteredIndices;
146     QVector<int> m_shownIndices;
147 };
148
149 #endif // LISTVIEW_H