25#include "pencilerror.h"
34typedef std::function<void()> ProgressCallback;
51 explicit Layer(
int id, LAYER_TYPE eType);
54 int id()
const {
return mId; }
55 void setId(
int layerId) { mId = layerId; }
56 LAYER_TYPE type()
const {
return meType; }
58 void setName(
QString name) { mName = name; }
59 QString name()
const {
return mName; }
61 void switchVisibility() { mVisible = !mVisible; }
63 bool visible()
const {
return mVisible; }
64 void setVisible(
bool b) { mVisible = b; }
73 virtual void loadDomElement(
const QDomElement& element,
QString dataDirPath, ProgressCallback progressForward) = 0;
79 int getMaxKeyFramePosition()
const;
80 int firstKeyFramePosition()
const;
82 bool keyExists(
int position)
const;
83 int getPreviousKeyFramePosition(
int position)
const;
84 int getNextKeyFramePosition(
int position)
const;
85 int getPreviousFrameNumber(
int position,
bool isAbsolute)
const;
86 int getNextFrameNumber(
int position,
bool isAbsolute)
const;
88 int keyFrameCount()
const {
return static_cast<int>(mKeyFrames.size()); }
89 int selectedKeyFrameCount()
const {
return mSelectedFrames_byPosition.
count(); }
90 bool hasAnySelectedFrames()
const {
return !mSelectedFrames_byLast.
empty() && !mSelectedFrames_byPosition.
empty(); }
103 void addOrReplaceKeyFrame(
int position,
KeyFrame* pKeyFrame);
111 virtual bool removeKeyFrame(
int position);
112 bool swapKeyFrames(
int position1,
int position2);
113 bool moveKeyFrame(
int position,
int offset);
114 KeyFrame* getKeyFrameAt(
int position)
const;
115 KeyFrame* getLastKeyFrameAtPosition(
int position)
const;
116 bool keyExistsWhichCovers(
int frameNumber);
117 KeyFrame *getKeyFrameWhichCovers(
int frameNumber)
const;
119 void foreachKeyFrame(std::function<
void(
KeyFrame*)>)
const;
121 void setModified(
int position,
bool isModified)
const;
124 bool isFrameSelected(
int position)
const;
125 void setFrameSelected(
int position,
bool isSelected);
126 void toggleFrameSelected(
int position,
bool allowMultiple =
false);
127 void extendSelectionTo(
int position);
128 void selectAllFramesAfter(
int position);
153 bool moveSelectedFrames(
int offset);
154 QList<int> getSelectedFramesByPos()
const {
return mSelectedFrames_byPosition; }
164 virtual Status presave(
const QString& sDataFolder) { Q_UNUSED(sDataFolder);
return Status::SAFE; }
166 bool isPaintable()
const;
179 virtual KeyFrame* createKeyFrame(
int position) = 0;
183 void removeFromSelectionList(
int position);
185 LAYER_TYPE meType = UNDEFINED;
187 bool mVisible =
true;
190 std::map<int, KeyFrame*, std::greater<int>> mKeyFrames;
void markFrameAsDirty(const int frameNumber)
Mark the frame position as dirty.
bool newSelectionOfConnectedFrames(int position)
Make a selection from specified position until a blank spot appears The search is only looking forwar...
QList< int > dirtyFrames() const
Returns a list of dirty frame positions.
bool addNewKeyFrameAt(int position)
Creates a new keyframe at the given position, unless one already exists.
QList< int > selectedKeyFramesPositions() const
Get selected keyframe positions sorted by position.
bool reverseOrderOfSelection()
Reverse order of selected frames.
virtual bool addKeyFrame(int position, KeyFrame *pKeyFrame)
Adds a keyframe at the given position, unless one already exists.
QList< int > selectedKeyFramesByLast() const
Get selected keyframe positions based on the order they were selected.
void setExposureForSelectedFrames(int offset)
Add or subtract exposure from selected frames.
void clearDirtyFrames()
Clear the list of dirty keyframes.
bool canMoveSelectedFramesToOffset(int offset) const
Predetermines whether the frames can be moved to a new position depending on the offset.
bool insertExposureAt(int position)
Will insert an empty frame (exposure) after the given position.
int count(const T &value) const const