mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Even though the functionality is seemingly trivial, this is a bit invasive, as the code has to be split into two distinct parts: 1) Post undo command 2) React to changes to the divelist Don't compile that code on mobile. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
#include "command_pictures.h"
|
|
#include "core/subsurface-qt/divelistnotifier.h"
|
|
|
|
namespace Command {
|
|
|
|
static picture *dive_get_picture(const dive *d, const QString &fn)
|
|
{
|
|
int idx = get_picture_idx(&d->pictures, qPrintable(fn));
|
|
return idx < 0 ? nullptr : &d->pictures.pictures[idx];
|
|
}
|
|
|
|
SetPictureOffset::SetPictureOffset(dive *dIn, const QString &filenameIn, offset_t offsetIn) :
|
|
d(dIn), filename(filenameIn), offset(offsetIn)
|
|
{
|
|
if (!dive_get_picture(d, filename))
|
|
d = nullptr;
|
|
setText(Command::Base::tr("Change media time"));
|
|
}
|
|
|
|
void SetPictureOffset::redo()
|
|
{
|
|
picture *pic = dive_get_picture(d, filename);
|
|
if (!pic) {
|
|
fprintf(stderr, "SetPictureOffset::redo(): picture disappeared!");
|
|
return;
|
|
}
|
|
std::swap(pic->offset, offset);
|
|
offset_t newOffset = pic->offset;
|
|
|
|
// Instead of trying to be smart, let's simply resort the picture table.
|
|
// If someone complains about speed, do our usual "smart" thing.
|
|
sort_picture_table(&d->pictures);
|
|
emit diveListNotifier.pictureOffsetChanged(d, filename, newOffset);
|
|
invalidate_dive_cache(d);
|
|
}
|
|
|
|
// Undo and redo do the same thing
|
|
void SetPictureOffset::undo()
|
|
{
|
|
redo();
|
|
}
|
|
|
|
bool SetPictureOffset::workToBeDone()
|
|
{
|
|
return !!d;
|
|
}
|
|
|
|
} // namespace Command
|