Henri Lampela - henri.lampela@ixonos.com
Kaj Wallin - kaj.wallin@ixonos.com
+ Sami Rämö - sami.ramo@ixonos.com
Situare is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
USA.
*/
-
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
-#include <QWidget>
-#include <QtWebKit>
-#include <QDebug>
-#include <QObject>
-#include <QNetworkAccessManager>
-#include "facebookservice/facebookauthentication.h"
-#include "situareservice/situareservice.h"
+#include <QUrl>
-#include "updatelocation/updatelocationdialog.h"
-#include "ui/logindialog.h"
+#include "network/networkcookiejar.h"
+#include "panelsidebar.h"
+class QGraphicsScene;
class QLabel;
+class QWebView;
+class QNetworkReply;
+class FacebookAuthentication;
+class FullScreenButton;
class FriendListPanel;
+class MapScale;
class MapScene;
class MapView;
+class SituareService;
+class User;
class UserInfoPanel;
class ZoomButtonPanel;
+class SettingsDialog;
+class QToolButton;
+class QMessageBox;
/**
* @brief Main Window Class
-*
-* @class MainWindow mainwindow.h "src/ui/mainwindow.h"
*/
class MainWindow : public QMainWindow
{
******************************************************************************/
public:
/**
- * @brief Enable / disable auto centering.
+ * @brief Clears cookie jar
+ *
+ */
+ void clearCookieJar();
+
+ /**
+ * @brief
*
- * Connect required actions to autoCenteringToggled() signal.
+ * @param logged
+ */
+ void loggedIn(bool logged);
+
+ /**
+ * @brief Gets the login state (logged in/logged out)
+ *
+ * @return bool Login state
+ */
+ bool loginState();
+
+ /**
+ * @brief Reads automatic location update settings.
+ */
+ void readAutomaticLocationUpdateSettings();
+
+ /**
+ * @brief Enable / disable auto centering button.
*
* @param enabled true if shoud be enabled, false otherwise
*/
- void setAutoCentering(bool enabled);
+ void setAutoCenteringButtonEnabled(bool enabled);
/**
- * @brief Enable / disable GPS.
+ * @brief Enable / disable GPS button.
*
- * Does show message for user and show / hide auto centering menu action.
- * Connect required actions to gpsToggled() signal.
+ * Does set visibilities for manual location cursor and auto centering menu button.
*
* @param enabled true if enabled, false otherwise
*/
- void setGPS(bool enabled);
+ void setGPSButtonEnabled(bool enabled);
/**
* @brief Set scene for MapView
*/
void setMapViewScene(QGraphicsScene *scene);
+ /**
+ * Shows dialog with enable automatic location update question.
+ *
+ * @param text text to show in dialog
+ */
+ void showEnableAutomaticUpdateLocationDialog(const QString &text);
+
+ /**
+ * @brief Gets the username from member variable for saving purposes
+ *
+ * @return QString Username
+ */
+ const QString username();
+
public slots:
/**
- * @brief Slot to intercept signal when user has pressed connect button from loginDialog
+ * @brief Builds information box with message.
*
- * @param email E-mail
- * @param password Password
+ * @param message Information message
+ * @param modal Modal = true, non-modal false
*/
- void loginDialogDone(const QString &email, const QString &password);
+ void buildInformationBox(const QString &message, bool modal=false);
/**
- * @brief Slot to intercept signal when login has failed (loginFailure signal)
+ * @brief Slot for failed login
*
*/
void loginFailed();
/**
+ * @brief Slot to intercept signal when login with cookies is requested
+ *
+ */
+ void loginUsingCookies();
+
+ /**
* @brief Public slot, which open settings dialog
*/
void openSettingsDialog();
- //////////////////////
+ /**
+ * @brief Set own location crosshair visibility
+ *
+ * @param visible
+ */
+ void setOwnLocationCrosshairVisibility(bool visible);
+
+ /**
+ * @brief Sets username to member variable for login dialog
+ *
+ * @param username Username to be set
+ */
+ void setUsername(const QString &username);
+
+ /**
+ * @brief Method to show panels
+ *
+ */
+ void showPanels();
/**
* @brief Public slot to intercept signal when old cerdentials are invalid or credentials
* doesn't exist yet
*
- * @param url Login page url
*/
- void startLoginProcess(const QUrl &url);
+ void startLoginProcess();
/**
* @brief Toggle progress indicator.
*/
void toggleProgressIndicator(bool state);
+ /**
+ * @brief Shows / hides Situare related UI items
+ *
+ */
+ void updateItemVisibility();
+
private:
+ /**
+ * @brief Build fullscreen toggle button and connect slots
+ */
+ void buildFullScreenButton();
+ /**
+ * @brief Build friend list panel and connect slots
+ */
void buildFriendListPanel();
+ /**
+ * @brief Build manual location setting cross hair and connect slots
+ */
void buildManualLocationCrosshair();
+ /**
+ * @brief Build map and connect slots
+ */
void buildMap();
+ /**
+ * @brief Build map scale and connect slots
+ */
+ void buildMapScale();
+
+ /**
+ * @brief Build OSM license and connect slots
+ */
void buildOsmLicense();
+ /**
+ * @brief Build user info panel and connect slots
+ */
void buildUserInfoPanel();
+ /**
+ * @brief Build webview and connect slots
+ *
+ */
+ void buildWebView();
+
+ /**
+ * @brief Build zoom button panel and connect slots
+ */
void buildZoomButtonPanel();
/**
void grabZoomKeys(bool grab);
/**
- * @brief Set own location crosshair visibility
+ * @brief Queues dialog/information box
*
- * @param visibility
+ * @param dialog Dialog to be added into queue
*/
- void setOwnLocationCrosshairVisibility(bool visible);
+ void queueDialog(QDialog *dialog);
+
+ /**
+ * @brief Shows queued error information box
+ *
+ */
+ void showErrorInformationBox();
/**
- * @brief Show Maemo information box with message.
+ * @brief Shows queued information box
*
- * @brief message information message
+ * @fn showInformationBox
*/
- void showMaemoInformationBox(const QString &message);
+ void showInformationBox();
private slots:
- void autoCenteringToggledActions(bool enabled);
+ /**
+ * @brief Slot for automatic update dialog finished.
+ *
+ * @result result code
+ */
+ void automaticUpdateDialogFinished(int result);
+
+ /**
+ * @brief Slot to intercept signal when dialog/information note is processed
+ *
+ * @param status Status of the dialog
+ */
+ void dialogFinished(int status);
+
+ /**
+ * @brief Slot for drawing the fullscreen toggle button
+ *
+ * @param size Size of the screen
+ */
+ void drawFullScreenButton(const QSize &size);
+
+ /**
+ * @brief Slot for drawing the map distance scale
+ *
+ * @param size Size of the screen
+ */
+ void drawMapScale(const QSize &size);
/**
* @brief Slot for drawing the Open Street Map license text
*
- * @param width Width of the viewport
- * @param height Height of the viewport
+ * @param size Size of the screen
*/
- void drawOsmLicense(int width, int height);
+ void drawOsmLicense(const QSize &size);
/**
* @brief Slot for drawing the own location crosshair
*
- * @param width Width of the viewport
- * @param height Height of the viewport
+ * @param size Size of the screen
*/
- void drawOwnLocationCrosshair(int width, int height);
+ void drawOwnLocationCrosshair(const QSize &size);
/**
- * @brief Slot for gps error.
+ * @brief Slot to intercept signal when error dialog/information note is processed
*
- * @param message error message
+ * @param status Status of the dialog
*/
- void gpsError(const QString &message);
+ void errorDialogFinished(int status);
/**
* @brief Slot for gps timeout.
*/
void gpsTimeout();
- void gpsToggledActions(bool enabled);
+ /**
+ * @brief Slot to load cookies from settings
+ *
+ */
+ void loadCookies();
/**
* @brief Slot to intercept signal when webview has finished loading webpage
void loadDone(bool done);
/**
+ * @brief Slot to save cookies to settings
+ *
+ */
+ void saveCookies();
+
+ /**
+ * @brief Slot for settings dialog accepted.
+ */
+ void settingsDialogAccepted();
+
+ /**
* @brief Set correnct view port size to datamembers
*
- * @param width Width of the viewport
- * @param height Height of the viewport
+ * @param size Size of the screen
+ */
+ void setViewPortSize(const QSize &size);
+
+ /**
+ * @brief Toggle between fullscreen and normal window mode
*/
- void setViewPortSize(const int width, const int height);
+ void toggleFullScreen();
+
+ /**
+ * @brief Slot to intercept signal from webview's networkaccessmanager
+ *
+ * @param reply Network reply (contains errors)
+ */
+ void webViewRequestFinished(QNetworkReply* reply);
/*******************************************************************************
* SIGNALS
******************************************************************************/
signals:
/**
- * @brief Signal that indicates when user has cancelled login process
+ * @brief Automatic centering setting changed by user
*
+ * @param enabled True if automatic centering is enabled, otherwise false
*/
- void cancelLoginProcess();
+ void autoCenteringTriggered(bool enabled);
/**
- * @brief Automatic centering setting changed
+ * @brief Signal that indicates when user has cancelled login process
*
- * @param enabled True if automatic centering is enabled, otherwise false
*/
- void autoCenteringToggled(bool enabled);
+ void cancelLoginProcess();
/**
* @brief View should be centered to new location
void centerToSceneCoordinates(QPoint sceneCoordinate);
/**
+ * @brief Signal for enabling automatic location update.
+ *
+ * @param enabled true if enabled, false otherwise
+ * @param updateIntervalMsecs update interval in milliseconds
+ */
+ void enableAutomaticLocationUpdate(bool enabled, int updateIntervalMsecs = 0);
+
+ /**
+ * @brief Signals error
+ *
+ * @param context error context
+ * @param error error code
+ */
+ void error(const int context, const int error);
+
+ /**
+ * @brief Signal for requesting username from settings
+ *
+ */
+ void fetchUsernameFromSettings();
+
+ /**
+ * @brief Signal for finding user.
+ *
+ * @param coordinates user geo coordinates
+ */
+ void findUser(const QPointF &coordinates);
+
+ /**
* @brief GPS setting changed
*
* @param enabled True if GPS is enabled, otherwise false
*/
- void gpsToggled(bool enabled);
-
-// /**
-// * @brief Signal for auto centering enabling.
-// *
-// * @param enabled if auto centering should be enabled
-// */
-// void enableAutoCentering(bool enabled);
+ void gpsTriggered(bool enabled);
/**
* @brief Signal for finding friend.
void friendsLocationsReady(QList<User *> &friendsList);
/**
+ * @brief Signal is emitted when location item is clicked.
+ *
+ * @param userIDs list of friends user IDs in the group
+ */
+ void locationItemClicked(const QList<QString> &userIDs);
+
+ /**
+ * @brief Signals when Login/Logout action is pressed
+ *
+ */
+ void loginActionPressed();
+
+ /**
* @brief MapView has been resized
*
* @param size view size
*/
void mapViewResized(const QSize &size);
+ /**
+ * @brief Forwarding signal from MapView to MapEngine
+ *
+ * @param sceneCoordinate
+ */
void mapViewScrolled(QPoint sceneCoordinate);
+ /**
+ * @brief Forwarding signal from MapEngine to MapView
+ */
void maxZoomLevelReached();
+ /**
+ * @brief Signal that informs that user's message/location failed to update on Situare server
+ * This signal is originally sended from SituareService with name error
+ * Signal is renamed on MainWindow
+ *
+ * @param error error code
+ */
+ void messageSendingFailed(const int error);
+
+ /**
+ * @brief Forwarding signal from MapEngine to MapView
+ */
void minZoomLevelReached();
-// /**
-// * @brief Signal for gps position.
-// *
-// * @param position longitude and latitude values
-// * @param accuracy coordinate accuracy in metres
-// */
-// void positionReceived(QPointF position, qreal accuracy);
+ /**
+ * @brief Forwarding signal from MapEngine to MapScale
+ */
+ void newMapResolution(qreal scale);
/**
* @brief Signal for refreshing user data.
void refreshUserData();
/**
- * @brief Signal from SituareEngine to MapEngine is travelling here
- */
- void requestOwnLocation();
-
- /**
* @brief Signal for requesting reverseGeo from SituareEngine
*
*/
void reverseGeoReady(const QString &address);
/**
+ * @brief Signal to save username to settings
+ *
+ * @param username Username
+ */
+ void saveUsername(const QString &username);
+
+ /**
* @brief Signal for requestLocationUpdate from SituareEngine
*
* @param status Status message
void updateCredentials(const QUrl &url);
/**
- * @brief Map view port content update
+ * @brief Signals when updateLocationDialog's data must be cleared
*
- * @param viewArea visible area of map scene
*/
- void updateMapViewContent(QRect viewArea);
+ void clearUpdateLocationDialogData();
/**
* @brief MapView has finished zooming
*/
void zoomIn();
+ /**
+ * @brief Forwarding signal from MapEngine to MapView
+ */
void zoomLevelChanged(int zoomLevel);
/**
* DATA MEMBERS
******************************************************************************/
private:
-
bool m_drawOwnLocationCrosshair; ///< Flag for making ownLocationCrosshair visible or not
+ bool m_errorShown; ///< Indicates if error dialog/note is shown
+ bool m_loggedIn; ///< Indicates login state
bool m_refresh; ///< Indicates when webpage is refreshed
- int m_viewPortHeight; ///< Height of view port
- int m_viewPortWidth; ///< Width of view port
+ int m_progressIndicatorCount; ///< Indicates the number of progress indicator calls
QAction *m_autoCenteringAct; ///< Action to auto center map using gps position
QAction *m_gpsToggleAct; ///< Action to trigger gps toggle
+ QAction *m_loginAct; ///< Action to Login/Logout
QAction *m_toSettingsAct; ///< Action to trigger switch to settings dialog
QLabel *m_osmLicense; ///< Label for Open Street Map license
QLabel *m_ownLocationCrosshair; ///< Label that show ownLocationCrosshair
+ QList<QDialog *> m_error_queue; ///< QList type error dialog queue
+ QList<QDialog *> m_queue; ///< QList type dialog queue
+
QMenu *m_viewMenu; ///< Object that hold the view menu items
+ QMessageBox *m_automaticUpdateLocationDialog; ///< Automatic update location dialog
+
+ QSize m_viewPortSize; ///< Size of the viewport
+
QString m_email; ///< Placeholder for email
QString m_password; ///< Placeholder for password
- QUrl m_loginUrl; ///< Placeholder for login page url
+ FullScreenButton *m_fullScreenButton; ///< Instance of the fullscreen toggle button
QWebView *m_webView; ///< Shows facebook login page
FriendListPanel *m_friendsListPanel; ///< Instance of friends list panel
- LoginDialog *m_loginDialog; ///< Login dialog
+ MapScale *m_mapScale; ///< Instance of the map scale
MapView *m_mapView; ///< Instance of the map view
- UpdateLocationDialog *m_locationDialog; ///< Message dialog
+ NetworkCookieJar *m_cookieJar; ///< Placeholder for QNetworkCookies
+ PanelSideBar *m_userPanelSidebar; ///< User panel side bar
+ PanelSideBar *m_friendsListPanelSidebar;///< Friends panel side bar
UserInfoPanel *m_userPanel; ///< Instance of the user information panel
ZoomButtonPanel *m_zoomButtonPanel; ///< Instance of zoom button panel
};