mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 21:20:19 +00:00
d7d408a99e
This is copying the dive editing code. It uses an OO design with virtual functions for getting and setting the values. It doesn't use templates though, as both fields of strig type. This feels a bit over-engineered, but it is 1) consistent with the dive edit code and 2) the number / types of dive trip fields might increase. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
58 lines
1.8 KiB
C++
58 lines
1.8 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
// Note: this header file is used by the undo-machinery and should not be included elsewhere.
|
|
|
|
#ifndef COMMAND_EDIT_TRIP_H
|
|
#define COMMAND_EDIT_TRIP_H
|
|
|
|
#include "command_base.h"
|
|
#include "core/subsurface-qt/DiveListNotifier.h"
|
|
|
|
#include <QVector>
|
|
|
|
// These are commands that edit individual fields of a a trip.
|
|
// The implementation follows the (rather verbose) OO-style of the dive-edit commands.
|
|
// But here, no template is used as the two fields are both of string type.
|
|
|
|
// We put everything in a namespace, so that we can shorten names without polluting the global namespace
|
|
namespace Command {
|
|
|
|
class EditTripBase : public Base {
|
|
bool workToBeDone() override;
|
|
|
|
dive_trip *trip; // Trip to be edited.
|
|
public:
|
|
EditTripBase(dive_trip *trip, const QString &newValue);
|
|
|
|
protected:
|
|
QString value; // Value to be set
|
|
void undo() override;
|
|
void redo() override;
|
|
|
|
// Get and set functions to be overriden by sub-classes.
|
|
virtual void set(struct dive_trip *t, const QString &) const = 0;
|
|
virtual QString data(struct dive_trip *t) const = 0;
|
|
virtual QString fieldName() const = 0; // Name of the field, used to create the undo menu-entry
|
|
virtual TripField fieldId() const = 0;
|
|
};
|
|
|
|
class EditTripLocation : public EditTripBase {
|
|
public:
|
|
using EditTripBase::EditTripBase; // Use constructor of base class.
|
|
void set(dive_trip *t, const QString &s) const override;
|
|
QString data(dive_trip *t) const override;
|
|
QString fieldName() const override;
|
|
TripField fieldId() const override;
|
|
};
|
|
|
|
class EditTripNotes : public EditTripBase {
|
|
public:
|
|
using EditTripBase::EditTripBase; // Use constructor of base class.
|
|
void set(dive_trip *t, const QString &s) const override;
|
|
QString data(dive_trip *t) const override;
|
|
QString fieldName() const override;
|
|
TripField fieldId() const override;
|
|
};
|
|
|
|
} // namespace Command
|
|
|
|
#endif
|