reimplemented dragging all field types

This commit is contained in:
itsmattkc
2019-03-13 22:34:26 +11:00
parent 06ed5ea05d
commit 933cbb0304
28 changed files with 265 additions and 178 deletions
+26 -16
View File
@@ -607,22 +607,6 @@ void KeyframeDelete::doRedo() {
field->keyframes.removeAt(index);
}
/*
EffectFieldUndo::EffectFieldUndo(EffectField* f, const QVariant& old_data, const QVariant new_data) :
field(f),
old_val(old_data),
new_val(new_data)
{}
void EffectFieldUndo::doUndo() {
field->SetCurrentValue(old_val);
}
void EffectFieldUndo::doRedo() {
field->SetCurrentValue(new_val);
}
*/
SetClipProperty::SetClipProperty(SetClipPropertyType type) : type_(type)
{}
@@ -1169,3 +1153,29 @@ void OliveAction::redo() {
}
}
KeyframeDataChange::KeyframeDataChange(EffectField *field) :
field_(field),
done_(true)
{
old_keys_ = field_->keyframes;
}
void KeyframeDataChange::SetNewKeyframes()
{
new_keys_ = field_->keyframes;
}
void KeyframeDataChange::doUndo()
{
field_->keyframes = old_keys_;
done_ = false;
}
void KeyframeDataChange::doRedo()
{
if (!done_) {
field_->keyframes = new_keys_;
done_ = true;
}
}
+39 -20
View File
@@ -28,15 +28,30 @@
#include <QVariant>
#include <QModelIndex>
#include "project/projectelements.h"
#include "timeline/selection.h"
#include "timeline/clip.h"
#include "timeline/sequence.h"
#include "effects/transition.h"
#include "effects/effectfield.h"
#include "comboaction.h"
#include "ui/labelslider.h"
#include "ui/sourcetable.h"
#include "timeline/marker.h"
#include "timeline/selection.h"
#include "effects/keyframe.h"
class Clip;
using ClipPtr = std::shared_ptr<Clip>;
class Sequence;
using SequencePtr = std::shared_ptr<Sequence>;
class Media;
using MediaPtr = std::shared_ptr<Media>;
class Effect;
using EffectPtr = std::shared_ptr<Effect>;
class Transition;
using TransitionPtr = std::shared_ptr<Transition>;
struct EffectMeta;
class EffectRow;
class EffectField;
namespace olive {
extern QUndoStack UndoStack;
@@ -334,18 +349,6 @@ private:
bool done;
};
class EffectFieldUndo : public OliveAction {
public:
EffectFieldUndo(EffectField* field, const QVariant &old_data, const QVariant new_data);
virtual void doUndo() override;
virtual void doRedo() override;
private:
EffectField* field;
QVariant old_val;
QVariant new_val;
bool done;
};
enum SetClipPropertyType {
kSetClipPropertyAutoscale,
kSetClipPropertyReversed,
@@ -620,4 +623,20 @@ private:
QByteArray old_data;
};
class KeyframeDataChange : public OliveAction {
public:
KeyframeDataChange(EffectField* field);
void SetNewKeyframes();
virtual void doUndo() override;
virtual void doRedo() override;
private:
EffectField* field_;
QVector<EffectKeyframe> old_keys_;
QVector<EffectKeyframe> new_keys_;
bool done_;
};
#endif // UNDO_H