mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
undo: implement undo of setting a picture time by drag&drop
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>
This commit is contained in:
parent
ebdb3e3c30
commit
e61641c79c
11 changed files with 178 additions and 90 deletions
50
commands/command_pictures.cpp
Normal file
50
commands/command_pictures.cpp
Normal file
|
@ -0,0 +1,50 @@
|
|||
// 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
|
Loading…
Add table
Add a link
Reference in a new issue