added base class for own and friend locations. added new class for
[situare] / src / ui / mainwindow.h
1 /*
2    Situare - A location system for Facebook
3    Copyright (C) 2010  Ixonos Plc. Authors:
4
5       Henri Lampela - henri.lampela@ixonos.com
6       Kaj Wallin - kaj.wallin@ixonos.com
7
8    Situare is free software; you can redistribute it and/or
9    modify it under the terms of the GNU General Public License
10    version 2 as published by the Free Software Foundation.
11
12    Situare is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with Situare; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
20    USA.
21 */
22
23
24 #ifndef MAINWINDOW_H
25 #define MAINWINDOW_H
26
27 #include <QtGui/QMainWindow>
28 #include <QWidget>
29 #include <QDebug>
30 #include <QObject>
31 #include "facebookservice/facebookauthentication.h"
32 #include "situareservice/situareservice.h"
33 #include <QNetworkAccessManager>
34 #include "listviewscreen.h"
35 #include "mapviewscreen.h"
36 #include "updatelocation/updatelocationdialog.h"
37 #include "ui/mainwindow.h"
38
39 class QLabel;
40 class QStackedWidget;
41
42 /**
43 * @brief Main Window Class
44 *
45 * @class MainWindow mainwindow.h "src/ui/mainwindow.h"
46 */
47 class MainWindow : public QMainWindow
48 {
49     Q_OBJECT
50
51 public:
52     /**
53     * @brief Constructor
54     *
55     * @param parent Parent
56     */
57     MainWindow(QWidget *parent = 0);
58
59     /**
60     * @brief Destructor
61     */
62     ~MainWindow();
63
64 /*******************************************************************************
65  * MEMBER FUNCTIONS AND SLOTS
66  ******************************************************************************/
67 public slots:
68     /**
69     * @brief Public slot, which open settings dialog
70     */
71      void openSettingsDialog();
72
73     /**
74     * @brief Public slot, which initiates toListViewAct action to switch view
75     */
76     void toListView();
77
78     /**
79     * @brief Public slot, which initiates toMapViewAct action to switch view
80     */
81     void toMapView();
82
83 //    void userLocationReady(User &user);
84 //    void friendsLocationsReady(QList<User *> friendsList);
85
86 private:
87     /**
88     * @brief Private method to create the Menu items
89     */
90     void createMenus();
91
92     /**
93     * @brief Private method to create List and Map views as a stacked widget
94     */
95     void createViews();
96
97     /**
98     * @brief Method used to switch active view.
99     *
100     * @param nextIndex 0 for listview, 1 for mapview
101     */
102     void switchView(int);
103
104 private slots:
105     /**
106     * @brief Slot to change value of m_loggedIn to true
107     */
108     void loginOK();
109
110     /**
111     * @brief Slot to check login status and exits if necessary
112     */
113     void loginScreenClosed();
114
115     /**
116     * @brief Private slot, which starts UpdateLocationDialog
117     *
118     */
119     void openLocationUpdateDialog();
120
121 /*******************************************************************************
122  * SIGNALS
123  ******************************************************************************/
124
125 signals:
126
127     /**
128     * @brief Signal for requesting reverseGeo from SituareEngine
129     *
130     */
131     void requestReverseGeo();
132
133     /**
134     * @brief Signals, when address data is ready
135     *
136     * @param address Street address
137     */
138     void reverseGeoReady(const QString &address);
139
140     /**
141     * @brief Signal for requestLocationUpdate from SituareEngine
142     *
143     * @param status Status message
144     * @param publish Publish on Facebook
145     */
146     void statusUpdate(const QString &status, const bool &publish);
147
148     void userLocationReady(User *user);
149     void friendsLocationsReady(QList<User *> &friendsList);
150
151 /*******************************************************************************
152  * DATA MEMBERS
153  ******************************************************************************/
154
155 private:
156     ListViewScreen *m_listViewScreen;
157     UpdateLocationDialog *m_locationDialog; ///< Message dialog
158     MapViewScreen *m_mapViewScreen;
159     FacebookAuthentication *m_facebookAuthenticator; ///< Instance for facebook authenticator
160     QNetworkAccessManager *m_networkManager; ///< NetworkManager that is passed on to SituareService
161     SituareService *m_situareService; ///< Instance of the situare server communication service
162     bool m_loggedIn; ///< Boolean value to indicate whether login has been successfull or not
163     QStackedWidget *m_situareViews; ///< Stacked widget that hold both view widgets
164     QAction *m_toListViewAct; ///< Action to trigger switch to list view
165     QAction *m_toMapViewAct; ///< Action to trigger switch to map view
166     QAction *m_toSettingsAct; ///< Action to trigger switch to settings dialog
167     QMenu *m_viewMenu; ///< Object that hold the view menu items
168 };
169
170 #endif // MAINWINDOW_H