2017-04-27 20:26:05 +02:00
|
|
|
// SPDX-License-Identifier: GPL-2.0
|
2013-04-13 20:44:02 -07:00
|
|
|
/*
|
|
|
|
* mainwindow.h
|
|
|
|
*
|
|
|
|
* header file for the main window of Subsurface
|
|
|
|
*
|
|
|
|
*/
|
2013-04-07 15:20:43 -07:00
|
|
|
#ifndef MAINWINDOW_H
|
|
|
|
#define MAINWINDOW_H
|
|
|
|
|
|
|
|
#include <QMainWindow>
|
2013-05-12 06:54:34 -07:00
|
|
|
#include <QAction>
|
2013-12-05 14:02:25 +02:00
|
|
|
#include <QUrl>
|
2015-02-11 10:14:45 -08:00
|
|
|
#include <QUuid>
|
2015-09-09 13:02:39 -07:00
|
|
|
#include <QProgressDialog>
|
2013-04-07 15:20:43 -07:00
|
|
|
|
2013-10-03 11:54:24 -07:00
|
|
|
#include "ui_mainwindow.h"
|
2017-11-27 17:36:21 +01:00
|
|
|
#include "ui_plannerDetails.h"
|
2016-04-04 22:02:03 -07:00
|
|
|
#include "desktop-widgets/notificationwidget.h"
|
|
|
|
#include "core/gpslocation.h"
|
2013-10-03 11:54:24 -07:00
|
|
|
|
2017-11-30 11:52:42 +01:00
|
|
|
#define NUM_RECENT_FILES 4
|
|
|
|
|
2013-04-25 20:44:06 -03:00
|
|
|
class QSortFilterProxyModel;
|
2013-04-12 08:24:07 +01:00
|
|
|
class DiveTripModel;
|
2013-05-03 21:49:40 -03:00
|
|
|
class QItemSelection;
|
2013-05-19 00:09:36 -03:00
|
|
|
class DiveListView;
|
|
|
|
class MainTab;
|
2013-08-22 16:20:47 -03:00
|
|
|
class QWebView;
|
2018-08-29 03:08:47 -07:00
|
|
|
class QSettings;
|
2014-04-02 22:41:39 +03:00
|
|
|
class UpdateManager;
|
2014-06-30 17:45:52 -03:00
|
|
|
class UserManual;
|
2015-02-09 19:19:10 -02:00
|
|
|
class DivePlannerWidget;
|
2015-02-09 19:51:31 -02:00
|
|
|
class ProfileWidget2;
|
2015-02-09 20:37:17 -02:00
|
|
|
class PlannerDetails;
|
|
|
|
class PlannerSettingsWidget;
|
2015-02-11 09:26:17 +03:00
|
|
|
class QUndoStack;
|
2015-05-17 16:13:41 -03:00
|
|
|
class LocationInformationWidget;
|
2013-04-07 15:20:43 -07:00
|
|
|
|
2015-08-20 22:24:49 -03:00
|
|
|
typedef std::pair<QByteArray, QVariant> WidgetProperty;
|
|
|
|
typedef QVector<WidgetProperty> PropertyList;
|
|
|
|
|
2014-02-27 20:09:57 -08:00
|
|
|
class MainWindow : public QMainWindow {
|
|
|
|
Q_OBJECT
|
2013-04-07 15:20:43 -07:00
|
|
|
public:
|
2014-02-27 20:09:57 -08:00
|
|
|
enum {
|
|
|
|
COLLAPSED,
|
|
|
|
EXPANDED
|
|
|
|
};
|
2015-02-10 16:15:51 -02:00
|
|
|
|
2014-02-27 20:09:57 -08:00
|
|
|
enum CurrentState {
|
|
|
|
VIEWALL,
|
2017-07-15 01:51:23 +03:00
|
|
|
MAP_MAXIMIZED,
|
2014-02-27 20:09:57 -08:00
|
|
|
INFO_MAXIMIZED,
|
|
|
|
PROFILE_MAXIMIZED,
|
2018-05-03 19:19:54 +02:00
|
|
|
LIST_MAXIMIZED,
|
|
|
|
EDIT
|
2014-02-27 20:09:57 -08:00
|
|
|
};
|
2013-06-12 15:54:55 -03:00
|
|
|
|
2013-04-07 15:20:43 -07:00
|
|
|
MainWindow();
|
2018-07-31 07:41:19 +02:00
|
|
|
~MainWindow();
|
2014-02-12 15:22:54 +01:00
|
|
|
static MainWindow *instance();
|
2013-05-19 00:09:36 -03:00
|
|
|
MainTab *information();
|
2017-11-30 11:52:42 +01:00
|
|
|
void loadRecentFiles();
|
|
|
|
void updateRecentFiles();
|
|
|
|
void updateRecentFilesMenu();
|
|
|
|
void addRecentFile(const QString &file, bool update);
|
2013-05-19 00:09:36 -03:00
|
|
|
DiveListView *dive_list();
|
2015-02-09 19:19:10 -02:00
|
|
|
DivePlannerWidget *divePlannerWidget();
|
2015-02-09 20:37:17 -02:00
|
|
|
PlannerSettingsWidget *divePlannerSettingsWidget();
|
2015-02-11 13:19:35 -02:00
|
|
|
LocationInformationWidget *locationInformationWidget();
|
2017-12-11 17:43:53 +01:00
|
|
|
void setTitle();
|
2013-04-09 09:35:44 +01:00
|
|
|
|
2013-09-09 05:59:03 -03:00
|
|
|
void loadFiles(const QStringList files);
|
|
|
|
void importFiles(const QStringList importFiles);
|
2014-05-28 09:55:46 +03:00
|
|
|
void importTxtFiles(const QStringList fileNames);
|
2013-09-22 22:24:28 -07:00
|
|
|
void cleanUpEmpty();
|
2014-03-11 18:30:58 +02:00
|
|
|
void setToolButtonsEnabled(bool enabled);
|
2014-03-07 12:42:13 -03:00
|
|
|
ProfileWidget2 *graphics() const;
|
2015-02-09 20:14:08 -02:00
|
|
|
PlannerDetails *plannerDetails() const;
|
2014-06-03 10:06:18 +02:00
|
|
|
void printPlan();
|
2017-11-30 15:57:26 +01:00
|
|
|
void checkSurvey();
|
2015-02-09 17:10:08 -02:00
|
|
|
void setApplicationState(const QByteArray& state);
|
2015-08-20 22:24:49 -03:00
|
|
|
void setStateProperties(const QByteArray& state, const PropertyList& tl, const PropertyList& tr, const PropertyList& bl,const PropertyList& br);
|
2015-08-18 10:03:51 +02:00
|
|
|
bool inPlanner();
|
2015-02-11 09:26:17 +03:00
|
|
|
QUndoStack *undoStack;
|
2015-02-26 16:07:39 +02:00
|
|
|
NotificationWidget *getNotificationWidget();
|
2015-06-14 15:42:28 -07:00
|
|
|
void enableDisableCloudActions();
|
2017-10-27 17:52:49 +02:00
|
|
|
void setCheckedActionFilterTags(bool checked);
|
2018-05-03 19:19:54 +02:00
|
|
|
void enterEditState();
|
|
|
|
void exitEditState();
|
2015-11-18 18:52:44 -08:00
|
|
|
|
2014-02-27 20:09:57 -08:00
|
|
|
private
|
|
|
|
slots:
|
2013-04-09 17:26:23 +01:00
|
|
|
/* file menu action */
|
2014-02-13 22:48:07 +01:00
|
|
|
void recentFileTriggered(bool checked);
|
2013-04-09 09:35:44 +01:00
|
|
|
void on_actionNew_triggered();
|
2013-04-09 17:26:23 +01:00
|
|
|
void on_actionOpen_triggered();
|
|
|
|
void on_actionSave_triggered();
|
|
|
|
void on_actionSaveAs_triggered();
|
|
|
|
void on_actionClose_triggered();
|
2015-05-31 22:11:27 -07:00
|
|
|
void on_actionCloudstorageopen_triggered();
|
|
|
|
void on_actionCloudstoragesave_triggered();
|
2018-01-03 11:46:21 +01:00
|
|
|
void on_actionCloudOnline_triggered();
|
2013-04-09 17:26:23 +01:00
|
|
|
void on_actionPrint_triggered();
|
|
|
|
void on_actionPreferences_triggered();
|
|
|
|
void on_actionQuit_triggered();
|
2015-02-26 14:44:27 +01:00
|
|
|
void on_actionHash_images_triggered();
|
2013-04-09 17:26:23 +01:00
|
|
|
|
|
|
|
/* log menu actions */
|
|
|
|
void on_actionDownloadDC_triggered();
|
2013-10-24 23:02:59 -02:00
|
|
|
void on_actionDivelogs_de_triggered();
|
2013-04-09 17:26:23 +01:00
|
|
|
void on_actionEditDeviceNames_triggered();
|
|
|
|
void on_actionAddDive_triggered();
|
2015-03-25 16:07:42 +02:00
|
|
|
void on_actionEditDive_triggered();
|
2013-04-09 17:26:23 +01:00
|
|
|
void on_actionRenumber_triggered();
|
|
|
|
void on_actionAutoGroup_triggered();
|
|
|
|
void on_actionYearlyStatistics_triggered();
|
|
|
|
|
|
|
|
/* view menu actions */
|
|
|
|
void on_actionViewList_triggered();
|
|
|
|
void on_actionViewProfile_triggered();
|
|
|
|
void on_actionViewInfo_triggered();
|
2017-07-15 01:48:53 +03:00
|
|
|
void on_actionViewMap_triggered();
|
2013-04-09 17:26:23 +01:00
|
|
|
void on_actionViewAll_triggered();
|
|
|
|
void on_actionPreviousDC_triggered();
|
|
|
|
void on_actionNextDC_triggered();
|
2014-01-14 18:36:07 +01:00
|
|
|
void on_actionFullScreen_triggered(bool checked);
|
2013-04-09 17:26:23 +01:00
|
|
|
|
|
|
|
/* other menu actions */
|
|
|
|
void on_actionAboutSubsurface_triggered();
|
|
|
|
void on_actionUserManual_triggered();
|
2014-12-17 09:29:41 +05:30
|
|
|
void on_actionUserSurvey_triggered();
|
2013-06-20 18:48:21 -03:00
|
|
|
void on_actionDivePlanner_triggered();
|
2014-08-19 15:03:53 -05:00
|
|
|
void on_actionReplanDive_triggered();
|
2014-04-02 22:41:39 +03:00
|
|
|
void on_action_Check_for_Updates_triggered();
|
2013-04-09 09:35:44 +01:00
|
|
|
|
2015-07-25 12:30:20 -03:00
|
|
|
void on_actionDiveSiteEdit_triggered();
|
2018-07-30 20:41:33 +02:00
|
|
|
void current_dive_changed();
|
2013-06-04 21:40:09 +09:00
|
|
|
void initialUiSetup();
|
2013-05-14 08:18:26 -03:00
|
|
|
|
2013-12-29 18:11:20 +02:00
|
|
|
void on_actionImportDiveLog_triggered();
|
2013-10-16 22:05:19 +03:00
|
|
|
|
2014-02-06 11:38:28 -02:00
|
|
|
/* TODO: Move those slots below to it's own class */
|
2014-05-20 19:33:32 +03:00
|
|
|
void on_actionExport_triggered();
|
2014-08-16 09:32:23 -06:00
|
|
|
void on_copy_triggered();
|
|
|
|
void on_paste_triggered();
|
2014-09-17 14:50:41 -03:00
|
|
|
void on_actionFilterTags_triggered();
|
2014-05-29 18:54:19 +03:00
|
|
|
void on_actionConfigure_Dive_Computer_triggered();
|
2015-02-11 13:58:23 -02:00
|
|
|
void setDefaultState();
|
2015-06-16 06:04:34 -07:00
|
|
|
void setAutomaticTitle();
|
2015-09-09 13:02:39 -07:00
|
|
|
void cancelCloudStorageOperation();
|
2018-03-17 10:48:45 +01:00
|
|
|
void unsetProfHR();
|
|
|
|
void unsetProfTissues();
|
2014-05-29 18:54:19 +03:00
|
|
|
|
2013-04-27 10:09:57 +01:00
|
|
|
protected:
|
|
|
|
void closeEvent(QCloseEvent *);
|
|
|
|
|
2015-08-25 18:27:19 -03:00
|
|
|
signals:
|
|
|
|
void startDiveSiteEdit();
|
2018-01-28 22:08:30 +01:00
|
|
|
void showError(QString message);
|
2015-08-25 18:27:19 -03:00
|
|
|
|
2014-02-27 20:09:57 -08:00
|
|
|
public
|
|
|
|
slots:
|
2014-06-04 13:41:50 -07:00
|
|
|
void turnOffNdlTts();
|
2013-05-26 11:33:45 -07:00
|
|
|
void readSettings();
|
2014-05-18 19:08:58 +09:00
|
|
|
void refreshDisplay(bool doRecreateDiveList = true);
|
|
|
|
void recreateDiveList();
|
2013-06-27 14:48:03 -03:00
|
|
|
void showProfile();
|
2015-09-22 19:55:48 -07:00
|
|
|
void refreshProfile();
|
2013-11-01 11:48:34 -04:00
|
|
|
void editCurrentDive();
|
2014-05-28 15:43:32 -03:00
|
|
|
void planCanceled();
|
2014-05-28 15:54:04 -03:00
|
|
|
void planCreated();
|
2014-08-04 12:58:21 -03:00
|
|
|
void setEnabledToolbar(bool arg1);
|
2015-06-16 14:37:02 +02:00
|
|
|
void setPlanNotes();
|
2015-11-05 11:12:22 -08:00
|
|
|
// Some shortcuts like "change DC" or "copy/paste dive components"
|
|
|
|
// should only be enabled when the profile's visible.
|
|
|
|
void disableShortcuts(bool disablePaste = true);
|
|
|
|
void enableShortcuts();
|
2013-05-26 11:33:45 -07:00
|
|
|
|
2015-11-08 21:50:12 -02:00
|
|
|
void socialNetworkRequestConnect();
|
|
|
|
void socialNetworkRequestUpload();
|
2017-01-01 22:23:39 -08:00
|
|
|
void facebookLoggedIn();
|
|
|
|
void facebookLoggedOut();
|
2017-11-27 17:36:21 +01:00
|
|
|
void updateVariations(QString);
|
|
|
|
|
2017-01-01 22:23:39 -08:00
|
|
|
|
2013-04-07 15:20:43 -07:00
|
|
|
private:
|
2013-10-03 11:54:25 -07:00
|
|
|
Ui::MainWindow ui;
|
2013-05-12 06:54:34 -07:00
|
|
|
QAction *actionNextDive;
|
|
|
|
QAction *actionPreviousDive;
|
2018-05-31 16:36:34 +02:00
|
|
|
#ifndef NO_USERMANUAL
|
2014-06-30 17:45:52 -03:00
|
|
|
UserManual *helpView;
|
2018-05-31 16:36:34 +02:00
|
|
|
#endif
|
2013-11-07 11:37:27 -05:00
|
|
|
CurrentState state;
|
2018-05-03 19:19:54 +02:00
|
|
|
CurrentState stateBeforeEdit;
|
2017-10-27 14:52:27 +02:00
|
|
|
QString filter_open();
|
|
|
|
QString filter_import();
|
2014-02-12 15:22:54 +01:00
|
|
|
static MainWindow *m_Instance;
|
2015-06-12 06:53:00 -07:00
|
|
|
QString displayedFilename(QString fullFilename);
|
2013-04-13 10:17:59 -03:00
|
|
|
bool askSaveChanges();
|
2014-06-08 19:46:43 -07:00
|
|
|
bool okToClose(QString message);
|
|
|
|
void closeCurrentFile();
|
2018-01-03 17:11:52 +01:00
|
|
|
void setCurrentFile(const char *f);
|
|
|
|
void updateCloudOnlineStatus();
|
2015-09-09 13:02:39 -07:00
|
|
|
void showProgressBar();
|
|
|
|
void hideProgressBar();
|
2013-04-27 10:09:57 +01:00
|
|
|
void writeSettings();
|
2014-03-14 10:19:23 -07:00
|
|
|
int file_save();
|
|
|
|
int file_save_as();
|
2013-11-07 11:37:27 -05:00
|
|
|
void beginChangeState(CurrentState s);
|
|
|
|
void saveSplitterSizes();
|
2017-12-29 12:01:21 +01:00
|
|
|
void toggleCollapsible(bool toggle);
|
2014-02-27 20:09:57 -08:00
|
|
|
void updateLastUsedDir(const QString &s);
|
2015-02-10 10:41:15 -08:00
|
|
|
void registerApplicationState(const QByteArray& state, QWidget *topLeft, QWidget *topRight, QWidget *bottomLeft, QWidget *bottomRight);
|
2018-05-03 19:19:54 +02:00
|
|
|
void enterState(CurrentState);
|
2014-03-11 18:54:28 -03:00
|
|
|
bool filesAsArguments;
|
2014-04-02 22:41:39 +03:00
|
|
|
UpdateManager *updateManager;
|
2014-05-25 15:19:36 -03:00
|
|
|
|
|
|
|
bool plannerStateClean();
|
2014-07-04 07:14:16 -07:00
|
|
|
void setupForAddAndPlan(const char *model);
|
2015-10-11 22:24:35 +02:00
|
|
|
void configureToolbar();
|
2015-11-09 18:05:30 -02:00
|
|
|
void setupSocialNetworkMenu();
|
2014-06-13 10:56:46 -07:00
|
|
|
QDialog *survey;
|
2018-06-10 16:40:23 +02:00
|
|
|
QDialog *findMovedImagesDialog;
|
2014-08-16 09:32:23 -06:00
|
|
|
struct dive copyPasteDive;
|
|
|
|
struct dive_components what;
|
2014-09-17 15:39:49 -07:00
|
|
|
QList<QAction *> profileToolbarActions;
|
2017-11-30 11:52:42 +01:00
|
|
|
QStringList recentFiles;
|
2017-11-30 17:44:32 +01:00
|
|
|
QAction *actionsRecent[NUM_RECENT_FILES];
|
2015-02-09 15:35:36 -02:00
|
|
|
|
2015-02-10 10:31:05 -08:00
|
|
|
struct WidgetForQuadrant {
|
2015-02-10 10:41:15 -08:00
|
|
|
WidgetForQuadrant(QWidget *tl = 0, QWidget *tr = 0, QWidget *bl = 0, QWidget *br = 0) :
|
|
|
|
topLeft(tl), topRight(tr), bottomLeft(bl), bottomRight(br) {}
|
2015-02-09 15:35:36 -02:00
|
|
|
QWidget *topLeft;
|
|
|
|
QWidget *topRight;
|
2015-02-10 10:41:15 -08:00
|
|
|
QWidget *bottomLeft;
|
2015-02-09 15:35:36 -02:00
|
|
|
QWidget *bottomRight;
|
|
|
|
};
|
2015-08-20 22:24:49 -03:00
|
|
|
|
|
|
|
struct PropertiesForQuadrant {
|
|
|
|
PropertiesForQuadrant(){}
|
|
|
|
PropertiesForQuadrant(const PropertyList& tl, const PropertyList& tr,const PropertyList& bl,const PropertyList& br) :
|
|
|
|
topLeft(tl), topRight(tr), bottomLeft(bl), bottomRight(br) {}
|
|
|
|
PropertyList topLeft;
|
|
|
|
PropertyList topRight;
|
|
|
|
PropertyList bottomLeft;
|
|
|
|
PropertyList bottomRight;
|
|
|
|
};
|
|
|
|
|
2015-02-10 10:31:05 -08:00
|
|
|
QHash<QByteArray, WidgetForQuadrant> applicationState;
|
2015-08-20 22:24:49 -03:00
|
|
|
QHash<QByteArray, PropertiesForQuadrant> stateProperties;
|
|
|
|
|
2015-11-18 18:52:44 -08:00
|
|
|
GpsLocation *locationProvider;
|
2017-01-01 22:19:08 -08:00
|
|
|
QMenu *connections;
|
2017-04-16 11:41:29 +02:00
|
|
|
QAction *share_on_fb;
|
2013-04-07 15:20:43 -07:00
|
|
|
};
|
|
|
|
|
2014-02-11 19:14:46 +01:00
|
|
|
#endif // MAINWINDOW_H
|