subsurface/desktop-widgets/tab-widgets/maintab.h
Berthold Stoeger 8c89f6fe15 Undo: implement undo of tag editing
The code follows the other edit-commands, but uses its own base
class, because it is distinctly different. Editing the tag field
does not simply mean setting the tag for all dives, but rather
adding and removing individual tags.

This class will be reused for editing of dive buddies and masters.

Modify the tag widget thus that it sends an editingFinished()
signal when it goes out of focus. The editingFinished() signal
was prevented by hooking into the return, enter and tab key-events.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-04-12 18:19:07 +03:00

131 lines
3.4 KiB
C++

// SPDX-License-Identifier: GPL-2.0
/*
* 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"
#include "core/subsurface-qt/DiveListNotifier.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 diveSiteChanged();
public
slots:
void divesEdited(const QVector<dive *> &dives, DiveField field);
void addCylinder_clicked();
void addWeight_clicked();
void updateDiveInfo(bool clear = false);
void updateNotes(const struct dive *d);
void updateMode(struct dive *d);
void updateDateTime(struct dive *d);
void updateDiveSite(struct dive *d);
void updateDepthDuration();
void acceptChanges();
void rejectChanges();
void on_location_diveSiteSelected();
void on_divemaster_textChanged();
void on_buddy_textChanged();
void on_suit_editingFinished();
void on_diveTripLocation_textEdited(const QString& text);
void on_notes_textChanged();
void on_notes_editingFinished();
void on_airtemp_editingFinished();
void on_duration_textChanged(const QString &text);
void on_depth_textChanged(const QString &text);
void divetype_Changed(int);
void on_watertemp_editingFinished();
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_editingFinished();
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);
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;
bool lastSelectedDive;
int lastTabSelectedDive;
int lastTabSelectedDiveTrip;
void resetPallete();
void copyTagsToDisplayedDive();
void saveTaggedStrings(const QVector<dive *> &selectedDives);
int diffTaggedStrings(QString currentString, QString displayedString, QStringList &addedList, QStringList &removedList);
void markChangedWidget(QWidget *w);
dive_trip_t *currentTrip;
dive_trip_t displayedTrip;
bool acceptingEdit;
QList<TabBase*> extraWidgets;
};
#endif // MAINTAB_H