summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/tab-widgets/maintab.h
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tcanabrava@kde.org>2017-04-04 19:21:30 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-04-06 18:23:25 -0700
commit1fc4fba69fed8607d9b961086a88bcf362a482a5 (patch)
treed063efda90ddcd0324f648ab4be48d2282f5c1ff /desktop-widgets/tab-widgets/maintab.h
parent8a71196e4e58dfb3534fda5f00856a0223726689 (diff)
downloadsubsurface-1fc4fba69fed8607d9b961086a88bcf362a482a5.tar.gz
Break down MainTab into smaller classes
Maintab is one of our most complex classes, and it's something I'm not actually proud of. But it currently works and the idea of splitting it was in my head for quite a while. This is the third or fourth tentative of splitting it, and this time I let the most complex part of it untouched, the Notes and Equipment tab are way too complex to untangle right now on my limited time. A new class 'TabBase' should be used for any new tab that we may create, and added on the MainTab (see the new lines on the MainTab constructor). Also, Extra Info, Information, Photos and Statistics where ported to this new way helping reduce the number of lines and functions on the MainTab quite a bit. Overall this is a step in the right direction for the future. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'desktop-widgets/tab-widgets/maintab.h')
-rw-r--r--desktop-widgets/tab-widgets/maintab.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/desktop-widgets/tab-widgets/maintab.h b/desktop-widgets/tab-widgets/maintab.h
new file mode 100644
index 000000000..a33d6053b
--- /dev/null
+++ b/desktop-widgets/tab-widgets/maintab.h
@@ -0,0 +1,129 @@
+/*
+ * maintab.h
+ *
+ * header file for the main tab of Subsurface
+ *
+ */
+#ifndef MAINTAB_H
+#define MAINTAB_H
+
+#include <QTabWidget>
+#include <QDialog>
+#include <QMap>
+#include <QUuid>
+
+#include "ui_maintab.h"
+#include "qt-models/completionmodels.h"
+#include "qt-models/divelocationmodel.h"
+#include "core/dive.h"
+
+class WeightModel;
+class CylindersModel;
+class ExtraDataModel;
+class DivePictureModel;
+class QCompleter;
+
+struct Completers {
+ QCompleter *divemaster;
+ QCompleter *buddy;
+ QCompleter *suit;
+ QCompleter *tags;
+};
+
+class TabBase;
+class MainTab : public QTabWidget {
+ Q_OBJECT
+public:
+ enum EditMode {
+ NONE,
+ DIVE,
+ TRIP,
+ ADD,
+ MANUALLY_ADDED_DIVE,
+ IGNORE
+ };
+
+ MainTab(QWidget *parent = 0);
+ ~MainTab();
+ void clearTabs();
+ void clearEquipment();
+ void reload();
+ void initialUiSetup();
+ bool isEditing();
+ void updateCoordinatesText(qreal lat, qreal lon);
+ void refreshDisplayedDiveSite();
+ void nextInputField(QKeyEvent *event);
+ void showAndTriggerEditSelective(struct dive_components what);
+
+signals:
+ void addDiveFinished();
+ void dateTimeChanged();
+ void diveSiteChanged(struct dive_site * ds);
+public
+slots:
+ void addCylinder_clicked();
+ void addWeight_clicked();
+ void refreshDiveInfo();
+ void updateDiveInfo(bool clear = false);
+ void updateDepthDuration();
+ void acceptChanges();
+ void rejectChanges();
+ void on_location_diveSiteSelected();
+ void on_location_textChanged();
+ void on_divemaster_textChanged();
+ void on_buddy_textChanged();
+ void on_suit_textChanged(const QString &text);
+ void on_diveTripLocation_textEdited(const QString& text);
+ void on_notes_textChanged();
+ void on_airtemp_textChanged(const QString &text);
+ void on_duration_textChanged(const QString &text);
+ void on_depth_textChanged(const QString &text);
+ void divetype_Changed(int);
+ void on_watertemp_textChanged(const QString &text);
+ void validate_temp_field(QLineEdit *tempField, const QString &text);
+ void on_dateEdit_dateChanged(const QDate &date);
+ void on_timeEdit_timeChanged(const QTime & time);
+ void on_rating_valueChanged(int value);
+ void on_visibility_valueChanged(int value);
+ void on_tagWidget_textChanged();
+ void editCylinderWidget(const QModelIndex &index);
+ void editWeightWidget(const QModelIndex &index);
+ void addDiveStarted();
+ void addMessageAction(QAction *action);
+ void hideMessage();
+ void closeMessage();
+ void displayMessage(QString str);
+ void enableEdition(EditMode newEditMode = NONE);
+ void toggleTriggeredColumn();
+ void updateTextLabels(bool showUnits = true);
+ void escDetected(void);
+ void showLocation();
+ void enableGeoLookupEdition();
+ void disableGeoLookupEdition();
+ void setCurrentLocationIndex();
+ EditMode getEditMode() const;
+private:
+ Ui::MainTab ui;
+ WeightModel *weightModel;
+ CylindersModel *cylindersModel;
+ EditMode editMode;
+ BuddyCompletionModel buddyModel;
+ DiveMasterCompletionModel diveMasterModel;
+ SuitCompletionModel suitModel;
+ TagCompletionModel tagModel;
+ Completers completers;
+ bool modified;
+ bool copyPaste;
+ void resetPallete();
+ void saveTags();
+ void saveTaggedStrings();
+ void diffTaggedStrings(QString currentString, QString displayedString, QStringList &addedList, QStringList &removedList);
+ void markChangedWidget(QWidget *w);
+ dive_trip_t *currentTrip;
+ dive_trip_t displayedTrip;
+ bool acceptingEdit;
+ uint32_t updateDiveSite(uint32_t pickedUuid, int divenr);
+ QList<TabBase*> extraWidgets;
+};
+
+#endif // MAINTAB_H