2013-04-14 03:44:02 +00:00
|
|
|
/*
|
|
|
|
* mainwindow.h
|
|
|
|
*
|
|
|
|
* header file for the main window of Subsurface
|
|
|
|
*
|
|
|
|
*/
|
2013-04-07 22:20:43 +00:00
|
|
|
#ifndef MAINWINDOW_H
|
|
|
|
#define MAINWINDOW_H
|
|
|
|
|
|
|
|
#include <QMainWindow>
|
2013-05-12 13:54:34 +00:00
|
|
|
#include <QAction>
|
2013-12-05 12:02:25 +00:00
|
|
|
#include <QUrl>
|
2015-02-11 18:14:45 +00:00
|
|
|
#include <QUuid>
|
2013-04-07 22:20:43 +00:00
|
|
|
|
2013-10-03 18:54:24 +00:00
|
|
|
#include "ui_mainwindow.h"
|
2015-02-26 14:07:39 +00:00
|
|
|
#include "notificationwidget.h"
|
2015-06-16 13:04:34 +00:00
|
|
|
#include "windowtitleupdate.h"
|
2013-10-03 18:54:24 +00:00
|
|
|
|
2013-05-19 03:09:36 +00:00
|
|
|
struct DiveList;
|
2013-04-25 23:44:06 +00:00
|
|
|
class QSortFilterProxyModel;
|
2013-04-12 07:24:07 +00:00
|
|
|
class DiveTripModel;
|
2013-04-09 08:35:44 +00:00
|
|
|
|
2013-04-07 22:20:43 +00:00
|
|
|
class DiveInfo;
|
|
|
|
class DiveNotes;
|
|
|
|
class Stats;
|
|
|
|
class Equipment;
|
2013-05-04 00:49:40 +00:00
|
|
|
class QItemSelection;
|
2013-05-19 03:09:36 +00:00
|
|
|
class DiveListView;
|
|
|
|
class MainTab;
|
|
|
|
class ProfileGraphicsView;
|
2013-08-22 19:20:47 +00:00
|
|
|
class QWebView;
|
2014-03-17 19:55:50 +00:00
|
|
|
class QSettings;
|
2014-04-02 19:41:39 +00:00
|
|
|
class UpdateManager;
|
2014-06-30 20:45:52 +00:00
|
|
|
class UserManual;
|
2015-02-09 21:19:10 +00:00
|
|
|
class DivePlannerWidget;
|
2015-02-09 21:51:31 +00:00
|
|
|
class ProfileWidget2;
|
2015-02-09 22:37:17 +00:00
|
|
|
class PlannerDetails;
|
|
|
|
class PlannerSettingsWidget;
|
2015-02-11 06:26:17 +00:00
|
|
|
class QUndoStack;
|
2015-05-17 19:13:41 +00:00
|
|
|
class LocationInformationWidget;
|
2013-04-07 22:20:43 +00:00
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
enum MainWindowTitleFormat {
|
|
|
|
MWTF_DEFAULT,
|
|
|
|
MWTF_FILENAME
|
|
|
|
};
|
2013-06-26 12:13:06 +00:00
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
class MainWindow : public QMainWindow {
|
|
|
|
Q_OBJECT
|
2013-04-07 22:20:43 +00:00
|
|
|
public:
|
2014-02-28 04:09:57 +00:00
|
|
|
enum {
|
|
|
|
COLLAPSED,
|
|
|
|
EXPANDED
|
|
|
|
};
|
2015-02-10 18:15:51 +00:00
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
enum CurrentState {
|
|
|
|
VIEWALL,
|
|
|
|
GLOBE_MAXIMIZED,
|
|
|
|
INFO_MAXIMIZED,
|
|
|
|
PROFILE_MAXIMIZED,
|
|
|
|
LIST_MAXIMIZED
|
|
|
|
};
|
2013-06-12 18:54:55 +00:00
|
|
|
|
2013-04-07 22:20:43 +00:00
|
|
|
MainWindow();
|
2014-02-12 14:22:54 +00:00
|
|
|
virtual ~MainWindow();
|
|
|
|
static MainWindow *instance();
|
2013-05-19 03:09:36 +00:00
|
|
|
MainTab *information();
|
2014-02-13 21:48:07 +00:00
|
|
|
void loadRecentFiles(QSettings *s);
|
|
|
|
void addRecentFile(const QStringList &newFiles);
|
2014-02-28 09:04:00 +00:00
|
|
|
void removeRecentFile(QStringList failedFiles);
|
2013-05-19 03:09:36 +00:00
|
|
|
DiveListView *dive_list();
|
2015-02-09 21:19:10 +00:00
|
|
|
DivePlannerWidget *divePlannerWidget();
|
2015-02-09 22:37:17 +00:00
|
|
|
PlannerSettingsWidget *divePlannerSettingsWidget();
|
2015-02-11 15:19:35 +00:00
|
|
|
LocationInformationWidget *locationInformationWidget();
|
2015-06-12 13:48:51 +00:00
|
|
|
void setTitle(enum MainWindowTitleFormat format = MWTF_FILENAME);
|
2013-04-09 08:35:44 +00:00
|
|
|
|
2015-02-03 15:30:08 +00: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-09-09 08:59:03 +00:00
|
|
|
void loadFiles(const QStringList files);
|
|
|
|
void importFiles(const QStringList importFiles);
|
2014-05-28 06:55:46 +00:00
|
|
|
void importTxtFiles(const QStringList fileNames);
|
2013-09-23 05:24:28 +00:00
|
|
|
void cleanUpEmpty();
|
2014-03-11 16:30:58 +00:00
|
|
|
void setToolButtonsEnabled(bool enabled);
|
2014-03-07 15:42:13 +00:00
|
|
|
ProfileWidget2 *graphics() const;
|
2015-02-09 22:14:08 +00:00
|
|
|
PlannerDetails *plannerDetails() const;
|
2014-03-11 21:54:28 +00:00
|
|
|
void setLoadedWithFiles(bool filesFromCommandLine);
|
|
|
|
bool filesFromCommandLine() const;
|
2014-06-03 08:06:18 +00:00
|
|
|
void printPlan();
|
2014-06-13 17:56:46 +00:00
|
|
|
void checkSurvey(QSettings *s);
|
2015-02-09 19:10:08 +00:00
|
|
|
void setApplicationState(const QByteArray& state);
|
2015-02-11 06:26:17 +00:00
|
|
|
QUndoStack *undoStack;
|
2015-02-26 14:07:39 +00:00
|
|
|
NotificationWidget *getNotificationWidget();
|
2015-06-14 22:42:28 +00:00
|
|
|
void enableDisableCloudActions();
|
2014-02-28 04:09:57 +00:00
|
|
|
private
|
|
|
|
slots:
|
2013-04-09 16:26:23 +00:00
|
|
|
/* file menu action */
|
2014-02-13 21:48:07 +00:00
|
|
|
void recentFileTriggered(bool checked);
|
2013-04-09 08:35:44 +00:00
|
|
|
void on_actionNew_triggered();
|
2013-04-09 16:26:23 +00:00
|
|
|
void on_actionOpen_triggered();
|
|
|
|
void on_actionSave_triggered();
|
|
|
|
void on_actionSaveAs_triggered();
|
|
|
|
void on_actionClose_triggered();
|
2015-06-01 05:11:27 +00:00
|
|
|
void on_actionCloudstorageopen_triggered();
|
|
|
|
void on_actionCloudstoragesave_triggered();
|
2013-04-09 16:26:23 +00:00
|
|
|
void on_actionPrint_triggered();
|
|
|
|
void on_actionPreferences_triggered();
|
|
|
|
void on_actionQuit_triggered();
|
2015-02-26 13:44:27 +00:00
|
|
|
void on_actionHash_images_triggered();
|
2013-04-09 16:26:23 +00:00
|
|
|
|
|
|
|
/* log menu actions */
|
|
|
|
void on_actionDownloadDC_triggered();
|
|
|
|
void on_actionDownloadWeb_triggered();
|
2013-10-25 01:02:59 +00:00
|
|
|
void on_actionDivelogs_de_triggered();
|
2013-04-09 16:26:23 +00:00
|
|
|
void on_actionEditDeviceNames_triggered();
|
|
|
|
void on_actionAddDive_triggered();
|
2015-03-25 14:07:42 +00:00
|
|
|
void on_actionEditDive_triggered();
|
2013-04-09 16:26:23 +00: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();
|
2013-06-12 18:54:55 +00:00
|
|
|
void on_actionViewGlobe_triggered();
|
2013-04-09 16:26:23 +00:00
|
|
|
void on_actionViewAll_triggered();
|
|
|
|
void on_actionPreviousDC_triggered();
|
|
|
|
void on_actionNextDC_triggered();
|
2014-01-14 17:36:07 +00:00
|
|
|
void on_actionFullScreen_triggered(bool checked);
|
2013-04-09 16:26:23 +00:00
|
|
|
|
|
|
|
/* other menu actions */
|
|
|
|
void on_actionAboutSubsurface_triggered();
|
|
|
|
void on_actionUserManual_triggered();
|
2014-12-17 03:59:41 +00:00
|
|
|
void on_actionUserSurvey_triggered();
|
2013-06-20 21:48:21 +00:00
|
|
|
void on_actionDivePlanner_triggered();
|
2014-08-19 20:03:53 +00:00
|
|
|
void on_actionReplanDive_triggered();
|
2014-04-02 19:41:39 +00:00
|
|
|
void on_action_Check_for_Updates_triggered();
|
2013-04-09 08:35:44 +00:00
|
|
|
|
2015-07-25 15:30:20 +00:00
|
|
|
void on_actionDiveSiteEdit_triggered();
|
2013-05-14 11:18:26 +00:00
|
|
|
void current_dive_changed(int divenr);
|
2013-06-04 12:40:09 +00:00
|
|
|
void initialUiSetup();
|
2013-05-14 11:18:26 +00:00
|
|
|
|
2013-12-29 16:11:20 +00:00
|
|
|
void on_actionImportDiveLog_triggered();
|
2013-10-16 19:05:19 +00:00
|
|
|
|
2014-02-06 13:38:28 +00:00
|
|
|
/* TODO: Move those slots below to it's own class */
|
2014-08-23 01:26:07 +00:00
|
|
|
void on_profCalcAllTissues_triggered(bool triggered);
|
|
|
|
void on_profCalcCeiling_triggered(bool triggered);
|
|
|
|
void on_profDcCeiling_triggered(bool triggered);
|
|
|
|
void on_profEad_triggered(bool triggered);
|
|
|
|
void on_profIncrement3m_triggered(bool triggered);
|
|
|
|
void on_profMod_triggered(bool triggered);
|
|
|
|
void on_profNdl_tts_triggered(bool triggered);
|
|
|
|
void on_profPO2_triggered(bool triggered);
|
|
|
|
void on_profPhe_triggered(bool triggered);
|
|
|
|
void on_profPn2_triggered(bool triggered);
|
|
|
|
void on_profHR_triggered(bool triggered);
|
|
|
|
void on_profRuler_triggered(bool triggered);
|
|
|
|
void on_profSAC_triggered(bool triggered);
|
|
|
|
void on_profScaled_triggered(bool triggered);
|
|
|
|
void on_profTogglePicture_triggered(bool triggered);
|
|
|
|
void on_profTankbar_triggered(bool triggered);
|
2014-09-15 12:09:00 +00:00
|
|
|
void on_profTissues_triggered(bool triggered);
|
2014-05-20 16:33:32 +00:00
|
|
|
void on_actionExport_triggered();
|
2014-08-16 15:32:23 +00:00
|
|
|
void on_copy_triggered();
|
|
|
|
void on_paste_triggered();
|
2014-09-17 17:50:41 +00:00
|
|
|
void on_actionFilterTags_triggered();
|
2014-05-29 15:54:19 +00:00
|
|
|
void on_actionConfigure_Dive_Computer_triggered();
|
2015-02-11 15:58:23 +00:00
|
|
|
void setDefaultState();
|
2015-06-16 13:04:34 +00:00
|
|
|
void setAutomaticTitle();
|
2014-05-29 15:54:19 +00:00
|
|
|
|
2013-04-27 09:09:57 +00:00
|
|
|
protected:
|
|
|
|
void closeEvent(QCloseEvent *);
|
|
|
|
|
2014-02-28 04:09:57 +00:00
|
|
|
public
|
|
|
|
slots:
|
2014-06-04 20:41:50 +00:00
|
|
|
void turnOffNdlTts();
|
2013-05-26 18:33:45 +00:00
|
|
|
void readSettings();
|
2014-05-18 10:08:58 +00:00
|
|
|
void refreshDisplay(bool doRecreateDiveList = true);
|
|
|
|
void recreateDiveList();
|
2013-06-27 17:48:03 +00:00
|
|
|
void showProfile();
|
2013-11-01 15:48:34 +00:00
|
|
|
void editCurrentDive();
|
2014-05-28 18:43:32 +00:00
|
|
|
void planCanceled();
|
2014-05-28 18:54:04 +00:00
|
|
|
void planCreated();
|
2014-08-04 15:58:21 +00:00
|
|
|
void setEnabledToolbar(bool arg1);
|
2015-06-16 12:37:02 +00:00
|
|
|
void setPlanNotes();
|
|
|
|
|
2013-05-26 18:33:45 +00:00
|
|
|
|
2013-04-07 22:20:43 +00:00
|
|
|
private:
|
2013-10-03 18:54:25 +00:00
|
|
|
Ui::MainWindow ui;
|
2013-05-12 13:54:34 +00:00
|
|
|
QAction *actionNextDive;
|
|
|
|
QAction *actionPreviousDive;
|
2014-06-30 20:45:52 +00:00
|
|
|
UserManual *helpView;
|
2013-11-07 16:37:27 +00:00
|
|
|
CurrentState state;
|
2013-04-13 13:17:59 +00:00
|
|
|
QString filter();
|
2014-02-12 14:22:54 +00:00
|
|
|
static MainWindow *m_Instance;
|
2015-06-12 13:53:00 +00:00
|
|
|
QString displayedFilename(QString fullFilename);
|
2013-04-13 13:17:59 +00:00
|
|
|
bool askSaveChanges();
|
2014-06-09 02:46:43 +00:00
|
|
|
bool okToClose(QString message);
|
|
|
|
void closeCurrentFile();
|
2013-04-27 09:09:57 +00:00
|
|
|
void writeSettings();
|
2014-03-14 17:19:23 +00:00
|
|
|
int file_save();
|
|
|
|
int file_save_as();
|
2013-11-07 16:37:27 +00:00
|
|
|
void beginChangeState(CurrentState s);
|
|
|
|
void saveSplitterSizes();
|
2013-11-14 15:42:26 +00:00
|
|
|
QString lastUsedDir();
|
2014-02-28 04:09:57 +00:00
|
|
|
void updateLastUsedDir(const QString &s);
|
2015-02-10 18:41:15 +00:00
|
|
|
void registerApplicationState(const QByteArray& state, QWidget *topLeft, QWidget *topRight, QWidget *bottomLeft, QWidget *bottomRight);
|
2014-03-11 21:54:28 +00:00
|
|
|
bool filesAsArguments;
|
2014-04-02 19:41:39 +00:00
|
|
|
UpdateManager *updateManager;
|
2014-05-25 18:19:36 +00:00
|
|
|
|
|
|
|
bool plannerStateClean();
|
2014-07-04 14:14:16 +00:00
|
|
|
void setupForAddAndPlan(const char *model);
|
2014-06-13 17:56:46 +00:00
|
|
|
QDialog *survey;
|
2014-08-16 15:32:23 +00:00
|
|
|
struct dive copyPasteDive;
|
|
|
|
struct dive_components what;
|
2014-09-17 22:39:49 +00:00
|
|
|
QList<QAction *> profileToolbarActions;
|
2015-02-09 17:35:36 +00:00
|
|
|
|
2015-02-10 18:31:05 +00:00
|
|
|
struct WidgetForQuadrant {
|
2015-02-10 18:41:15 +00: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 17:35:36 +00:00
|
|
|
QWidget *topLeft;
|
|
|
|
QWidget *topRight;
|
2015-02-10 18:41:15 +00:00
|
|
|
QWidget *bottomLeft;
|
2015-02-09 17:35:36 +00:00
|
|
|
QWidget *bottomRight;
|
|
|
|
};
|
2015-02-10 18:31:05 +00:00
|
|
|
QHash<QByteArray, WidgetForQuadrant> applicationState;
|
2015-02-10 17:22:14 +00:00
|
|
|
QByteArray currentApplicationState;
|
2015-06-16 13:04:34 +00:00
|
|
|
WindowTitleUpdate *wtu;
|
2013-04-07 22:20:43 +00:00
|
|
|
};
|
|
|
|
|
2014-02-11 18:14:46 +00:00
|
|
|
#endif // MAINWINDOW_H
|