2 Situare - A location system for Facebook
3 Copyright (C) 2010 Ixonos Plc. Authors:
5 Kaj Wallin - kaj.wallin@ixonos.com
6 Henri Lampela - henri.lampela@ixonos.com
7 Jussi Laitinen - jussi.laitinen@ixonos.com
8 Sami Rämö - sami.ramo@ixonos.com
10 Situare is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License
12 version 2 as published by the Free Software Foundation.
14 Situare is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with Situare; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
35 class FacebookAuthentication;
36 class FacebookCredentials;
46 * @brief Engine class for Situare Application
48 * This class handles all the underlaying login of the Situare
51 class SituareEngine : public QObject
60 SituareEngine(QMainWindow *parent = 0);
67 /*******************************************************************************
68 * MEMBER FUNCTIONS AND SLOTS
69 ******************************************************************************/
72 * @brief Slot to intercept error signal from ImageFetcher and SituareService
74 * @param error Error message
76 void error(const int error);
79 * @brief Slot to intercept signal when username is fetched from settings
82 void fetchUsernameFromSettings();
85 * @brief Slot to intercept signal when Login/Logout action is pressed
88 void loginActionPressed();
91 * @brief Slot to intercept signal from successful login
97 * @brief Slot to intercept signal when user has cancelled login process
99 void loginProcessCancelled();
102 * @brief Changes application state when logged out
108 * @brief Calls reverseGeo from SituareService to translate coordinates to street address
111 void requestAddress();
114 * @brief Calls updateLocation from SituareService to send the location update to
117 * @param status Status message
118 * @param publish Publish on Facebook
120 void requestUpdateLocation(const QString &status = QString(), bool publish = false);
123 * @brief Slot to refresh user data
125 void refreshUserData();
128 * @brief Slot to intercept signal from successful location update
131 void updateWasSuccessful();
134 * @brief Slot to intercept signal when new user data is available.
135 * Splits User and friendsList data and emits them as two different signals.
137 * @param user instance of User
138 * @param friendsList list of User instances (friends)
140 void userDataChanged(User *user, QList<User *> &friendsList);
144 * @brief Checks if user is moved enough for position auto update.
146 * @return true if moved engouh, false otherwise
151 * @brief Read settings and determine whether to use GPS and autocentering.
152 * When values does not found on the settings, GPS and autocentering are enabled as a default.
154 void initializeGpsAndAutocentering();
157 * @brief Connect signals coming from Facdebook authenticator
159 void signalsFromFacebookAuthenticator();
162 * @brief Connect signals coming from GPS
164 void signalsFromGPS();
167 * @brief Connect signals coming from MainWindow
169 void signalsFromMainWindow();
172 * @brief Connect signals coming from MapEngine
174 void signalsFromMapEngine();
177 * @brief Connect signals coming from MapView
179 void signalsFromMapView();
182 * @brief Connect signals coming from Situare
184 void signalsFromSituareService();
188 * @brief Automatic update interval timer timeout.
190 * Requests update location if user has moved.
192 void automaticUpdateIntervalTimerTimeout();
195 * @brief Set auto centering feature enabled / disabled
197 * @param enabled true if enabled, false otherwise
199 void changeAutoCenteringSetting(bool enabled);
202 * @brief Slot for disabling automatic centering when map is scrolled manually
204 void disableAutoCentering();
207 * @brief Slot for auto centering enabling.
209 * Calls gps to send last known position
211 * @param enabled true if auto centering was enabled, false otherwise
213 void enableAutoCentering(bool enabled);
216 * @brief Slot for gps enabling.
218 * @param enabled true if gps should be enabled, false otherwise
220 void enableGPS(bool enabled);
223 * @brief Enables automatic location update.
225 * @param enabled true if enabled, false otherwise
226 * @param updateIntervalMsecs update interval in milliseconds
228 void enableAutomaticLocationUpdate(bool enabled, int updateIntervalMsecs = 0);
231 * @brief Sets zoom level to default when first GPS location is received if autocentering
234 * @param latLonCoordinate own location
235 * @param accuracy accuracy of GPS location
237 void setFirstStartZoomLevel(QPointF latLonCoordinate, qreal accuracy);
240 * @brief Saves GPS position.
242 * Saves GPS position if it has changed enough and sets m_userMoved flag.
244 * @param position geo coordinates
246 void saveGPSPosition(QPointF position);
248 /*******************************************************************************
250 ******************************************************************************/
253 * @brief Signals when automatic location update was enabled.
255 * @param enabled true if enabled, false otherwise
257 void automaticLocationUpdateEnabled(bool enabled);
260 * @brief Signal to clear locationUpdateDialog's data
263 void clearUpdateLocationDialogData();
266 * @brief Signals when new friends data is ready
268 * @param friendList List of User instances (friends)
270 void friendsLocationsReady(QList<User *> &friendList);
273 * @brief Signals when new user data is ready
275 * @param user Instance of User
277 void userLocationReady(User *user);
279 /*******************************************************************************
281 ******************************************************************************/
283 bool m_autoCenteringEnabled; ///< Auto centering flag
284 bool m_automaticUpdateFirstStart; ///< Automatic location update first start flag
285 bool m_userMoved; ///< Flag for user moving
287 FacebookAuthentication *m_facebookAuthenticator; ///< Instance for facebook authenticator
288 GPSPosition *m_gps; ///< Instance of the gps position
289 MainWindow *m_ui; ///< Instance of the MainWindow UI
290 MapEngine *m_mapEngine; ///< MapEngine
291 SituareService *m_situareService; ///< Instance of the situare server communication service
293 QTimer *m_automaticUpdateIntervalTimer; ///< Automatic update interval timer
294 QPointF m_lastUpdatedGPSPosition; ///< Last updated GPS position