f360611185325a2f70a3e540ff863583760af871
[situare] / src / ui / friendlistitem.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 FRIENDLISTITEM_H
23 #define FRIENDLISTITEM_H
24
25 #include <QWidget>
26 #include <QTreeWidgetItem>
27 #include <QListWidgetItem>
28
29 #include "../user/user.h"
30
31 class QLabel;
32 class ImageButton;
33
34 /**
35 * @brief FriendListItem shows friend data in expandable item.
36 *
37 * @class FriendListItem friendlistitem.h "ui/friendlistitem.h"
38 */
39 class FriendListItem : public QWidget
40 {
41     Q_OBJECT
42
43 public:
44     /**
45     * @brief Construct FriendListItem.
46     *
47     * Initializes layouts and member variables. Sets stylesheet
48     * for this class.
49     * @param parent parent widget
50     */
51     FriendListItem(QWidget *parent = 0);
52
53 /*******************************************************************************
54  * BASE CLASS INHERITED AND REIMPLEMENTED MEMBER FUNCTIONS
55  ******************************************************************************/
56 protected:
57     /**
58     * @brief Set current mouse position to mouse event position.
59     *
60     * @param event QMouseEvent mouse press event
61     */
62     void mousePressEvent(QMouseEvent *event);
63
64     /**
65     * @brief Call toggleHeight if mouse position is unchanged.
66     *
67     * Check if current mouse position is same as mouse release position.
68     * @param event QMouseEvent mouse release event
69     */
70     void mouseReleaseEvent(QMouseEvent *event);
71
72     /**
73     * @brief Draws stylesheet used in this class.
74     *
75     * @param * QPaintEvent unused
76     */
77     void paintEvent(QPaintEvent *);
78
79 /******************************************************************************
80 * MEMBER FUNCTIONS AND SLOTS
81 ******************************************************************************/
82 public:
83     /**
84     * @brief Set data for this item.
85     *
86     * @param user User pointer
87     */
88     void setData(User *user);
89
90 private:
91     /**
92     * @brief Set shortened texts from User data.
93     *
94     * Text length is defined by MAXIMUM_CHARS.
95     */
96     void shortenTexts();
97
98     /**
99     * @brief Set shortened or full-length text to labels.
100     *
101     * @param expanded true if full-length text is set, false otherwise
102     */
103     void setText(bool expanded);
104
105 private slots:
106     /**
107     * @brief Slot for find button click
108     *
109     * @param coordinates friend's geo coordinates
110     */
111     void findButtonClicked();
112
113 /******************************************************************************
114 * SIGNALS
115 ******************************************************************************/
116 signals:
117     /**
118     * @brief Signal for finding friend.
119     *
120     * @param coordinates friend's geo coordinates
121     */
122     void findFriend(const QPointF &coordinates);
123
124 /******************************************************************************
125 * DATA MEMBERS
126 ******************************************************************************/
127 private:
128     QPixmap m_backgroundTopImage;   ///< Top background image
129     QPixmap m_backgroundMiddleImage;   ///< Middle background image
130     QPixmap m_backgroundBottomImage;   ///< Bottom background image
131     bool m_expanded;                ///< Item expanded state
132     QLabel *m_distanceLabel;        ///< Distance to friend label
133     ImageButton *m_findButton;      ///< Friend find button
134     QLabel *m_imageLabel;           ///< Image label
135     QLabel *m_locationLabel;        ///< Location label
136     QPoint m_mousePosition;         ///< Current mouse press position
137     QLabel *m_nameLabel;            ///< Name label
138     QString m_shortenedLocation;    ///< Shortened location text
139     QString m_shortenedName;        ///< Shortened name text
140     QString m_shortenedStatusText;  ///< Shortened status text
141     QString m_shortenedUpdated;     ///< Shortened updated text
142     QLabel *m_statusTextLabel;      ///< Status text label
143     QLabel *m_updatedLabel;         ///< Updated label
144     User *m_user;                    ///< User data
145 };
146
147 const int BACKGROUND_TOP_HEIGHT = 20;
148 const int BACKGROUND_BOTTOM_HEIGHT = 15;
149 const QColor COLOR_GRAY = QColor(152, 152, 152);    ///< Gray color
150 const QFont NOKIA_FONT_NORMAL = QFont("Nokia Sans", 18, QFont::Normal);    ///< Normal font
151 const QFont NOKIA_FONT_SMALL = QFont("Nokia Sans", 13, QFont::Normal);     ///< Small font
152 const int ICON_HEIGHT = 24;     ///< Icon height
153 const int ICON_WIDTH = 24;       ///< Icon width
154 const int IMAGE_HEIGHT = 60; ///< Friend image height
155 const int IMAGE_WIDTH = 60;  ///< Friend image width
156 const int ITEM_MAX_HEIGHT = 240; ///< Maximum height for item
157 const int ITEM_MAX_WIDTH = 368;  ///< Maximum width for item
158 const int ITEM_MIN_HEIGHT = 141; ///< Minimum height for item
159 const int ITEM_MIN_WIDTH = 368;  ///< Minimum width for item
160 const int MARGIN = 5;   ///< Icon margin
161 const int MOUSE_PRESS_AREA_WIDTH = 20;  ///< Area width for item height toggling
162 const int MOUSE_PRESS_AREA_HEIGHT = 20; ///< Area height for item height toggling
163 /**
164 * @var NAME_LABEL_MAX_WIDTH
165 *
166 * @brief Name label's maximum width
167 */
168 const int NAME_LABEL_MAX_WIDTH = ITEM_MIN_WIDTH - 3*MARGIN - IMAGE_WIDTH;
169 /**
170 * @var LABEL_MAX_WIDTH
171 *
172 * @brief All label's maximum width
173 */
174 const int LABEL_MAX_WIDTH = ITEM_MIN_WIDTH - 3*MARGIN - IMAGE_WIDTH - MARGIN - ICON_WIDTH;
175
176 #endif // FRIENDLISTITEM_H