e15e9175093c9dcc185cd792d70a8b178a7276bd
[situare] / src / ui / userinfo.h
1 /*
2    Situare - A location system for Facebook
3    Copyright (C) 2010  Ixonos Plc. Authors:
4
5        Jukka Saastamoinen - jukka.saastamoinen@ixonos.com
6        Jussi Laitinen - jussi.laitinen@ixonos.com
7        Katri Kaikkonen - katri.kaikkonen@ixonos.com
8        Henri Lampela - henri.lampela@ixonos.com
9        Ville Tiensuu - ville.tiensuu@ixonos.com
10
11    Situare is free software; you can redistribute it and/or
12    modify it under the terms of the GNU General Public License
13    version 2 as published by the Free Software Foundation.
14
15    Situare is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with Situare; if not, write to the Free Software
22    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
23    USA.
24 */
25
26 #ifndef USERINFO_H
27 #define USERINFO_H
28
29 #include <QWidget>
30
31 #include "coordinates/geocoordinate.h"
32 #include "updatelocation/updatelocationdialog.h"
33
34 class ImageButton;
35
36 /**
37  * @brief UserInfo shows user's data in expandable item.
38  */
39 class UserInfo : public QWidget
40 {
41     Q_OBJECT
42
43 public:
44     /**
45      * @brief Constructor
46      *
47      * @param parent Parent
48      */
49     UserInfo(QWidget *parent = 0);
50
51     /**
52      * @brief Desctructor
53      * saves unsend user message to settings
54      *
55      */
56     ~UserInfo();
57
58 /*******************************************************************************
59 * BASE CLASS INHERITED AND REIMPLEMENTED MEMBER FUNCTIONS
60 *******************************************************************************/
61 protected:
62     /**
63      * @brief Set current mouse position to mouse event position.
64      *
65      * @param event QMouseEvent mouse press event
66      */
67     void mousePressEvent(QMouseEvent *event);
68
69     /**
70      * @brief Call toggleHeight if mouse position is unchanged.
71      *
72      * Check if current mouse position is same as mouse release position.
73      * @param event QMouseEvent mouse release event
74      */
75     void mouseReleaseEvent(QMouseEvent *event);
76
77     /**
78      * @brief This function is called when the widget is drawn
79      *
80      * @param event Pointer to paint event
81      */
82     void paintEvent(QPaintEvent *event);
83
84 /******************************************************************************
85 * MEMBER FUNCTIONS AND SLOTS
86 ******************************************************************************/
87 public:
88     /**
89      * @brief Sets the users current address
90      *
91      * @param address Reference to users current address
92      */
93     void setAddress(const QString &address);
94
95     /**
96      * @brief Sets the users current coordinates
97      *
98      * @param coordinates Reference to users current coordinates
99      */
100     void setCoordinates(const GeoCoordinate &coordinates);
101
102     /**
103      * @brief Sets the user picture
104      *
105      * @param image Reference to user picture
106      */
107     void setProfileImage(const QPixmap &image);
108
109     /**
110      * @brief Sets the time of updated message
111      *
112      * @param time Reference to time when message was sent.
113      */
114     void setTime(const QString &time);
115
116     /**
117      * @brief Sets the user name
118      *
119      * @param name Reference to user name
120      */
121     void setUserName(const QString &name);
122
123 public slots:
124     /**
125      * @brief Saves status message and Facebook publish setting
126      *
127      * @param status message that user sends. Message is stored to m_backupMessage data member
128      * @param publish setting that determines whether the user status message is published on
129      *        Facebook. This value is stored to m_backupFacebookPublishPolicity data member.
130      */
131     void backupUpdateLocationDialogData(const QString &status, bool publish);
132
133     /**
134      * @brief Clears backups of message and publish on Facebook setting
135      */
136     void clearUpdateLocationDialogData();
137
138     /**
139      * @brief Sets the message text
140      *
141      * @param text Reference to user message
142      */
143     void setMessageText(const QString &text);
144
145 private:
146     /**
147      * @brief reads Unsend message from settings at startup
148      */
149     void restoreUnsendMessage();
150
151     /**
152      * @brief Set shortened or full-length text to labels.
153      *
154      * @param expanded true if full-length text is set, false otherwise
155      */
156     void setExpanded(bool expanded);
157
158 private slots:
159     /**
160      * @brief Slot for collapse user info
161      */
162     void collapse();
163
164     /**
165      * @brief Slot for find button click
166      */
167     void findButtonClicked();
168
169     /**
170      * @brief Slot function to forward messageUpdate launch signal
171      */
172     void messageUpdate();
173
174     /**
175      * @brief Slot function to get indication when dialog is finished
176      */
177     void updateLocationDialogFinished(int reason);
178
179 /******************************************************************************
180 * SIGNALS
181 ******************************************************************************/
182 signals:
183     /**
184      * @brief Signal for finding user.
185      *
186      * @param coordinates user geo coordinates
187      */
188     void findUser(const GeoCoordinate &coordinates);
189
190     /**
191      * @brief Signal that used to inform user that his message/location update tp Situare server
192      *        was failed.
193      *        This signal is originally sended from UserInfo
194      * @param message message for notification
195      * @param modal true if modal notification otherwice false
196      */
197     void notificateUpdateFailing(const QString &message, bool modal);
198
199     /**
200      * @brief Signal for requesting reverseGeo from SituareEngine
201      */
202     void requestReverseGeo();
203
204     /**
205      * @brief Signals, when address data is ready
206      *
207      * @param address Street address
208      */
209     void reverseGeoReady(const QString &address);
210
211     /**
212      * @brief Signal for requestLocationUpdate from SituareEngine via MainWindow class
213      *
214      * @param status Status message
215      * @param publish Publish on Facebook
216      */
217     void statusUpdate(const QString &status, const bool &publish);
218
219 /******************************************************************************
220 * DATA MEMBERS
221 ******************************************************************************/
222 private:
223     bool m_backupFacebookPublishPolicity;   ///< Backup of publish on Facebook checkbox value
224     bool m_expanded;                        ///< Item expanded state
225
226     QLabel *m_locationLabel;                ///< Location label
227     QLabel *m_nameLabel;                    ///< Name label
228     QLabel *m_statusTextLabel;              ///< Status text label
229     QLabel *m_updatedLabel;                 ///< Updated label
230
231     QPixmap m_backgroundBottomImage;        ///< Bottom background image
232     QPixmap m_backgroundMiddleImage;        ///< Middle background image
233     QPixmap m_backgroundTopImage;           ///< Top background image
234
235     QPoint m_mousePosition;                 ///< Current mouse press position
236
237     QString m_backupMessage;                ///< Backup of users message
238     QString m_messageText;                  ///< User's message
239     QString m_userName;                     ///< User's name
240
241     GeoCoordinate m_coordinates;            ///< User current coordinates
242     ImageButton *m_avatar;                  ///< User find button
243     UpdateLocationDialog *m_updateLocation; ///< Update location dialog
244 };
245
246 #endif // USERINFO_H