203cc81f42
* Added the horizontal timeline support
99 lines
2.7 KiB
C++
99 lines
2.7 KiB
C++
#pragma once
|
|
|
|
#ifndef KEYFRAMEMOVER_H
|
|
#define KEYFRAMEMOVER_H
|
|
|
|
#include "xsheetdragtool.h"
|
|
#include "keyframeselection.h"
|
|
#include "keyframedata.h"
|
|
#include "toonz/txshcell.h"
|
|
|
|
class TXsheet;
|
|
|
|
//=============================================================================
|
|
// KeyframeMover
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class KeyframeMover {
|
|
//! Bitmask of qualifiers that change the behaviour of the Mover
|
|
int m_qualifiers;
|
|
|
|
typedef std::pair<int, int> KeyframePosition; // row, col
|
|
|
|
//! Start Selected keyframes
|
|
std::set<KeyframePosition> m_startSelectedKeyframes;
|
|
|
|
//! Store all keyframes position in selected StageObject.
|
|
std::set<KeyframePosition> m_lastKeyframes;
|
|
//! Store all keyframes in selected stageObject.
|
|
TKeyframeData *m_lastKeyframeData;
|
|
|
|
//! Helper method: returns the current xsheet
|
|
TXsheet *getXsheet() const;
|
|
|
|
// m_lastKeyframes and m_lastKeyframeData -> xsheet
|
|
void setKeyframes();
|
|
|
|
// m_lastKeyframes and m_lastKeyframeData <- xsheet
|
|
void getKeyframes();
|
|
|
|
public:
|
|
KeyframeMover();
|
|
~KeyframeMover();
|
|
|
|
enum Qualifier {
|
|
eCopyKeyframes =
|
|
0x1, // leaves a copy of Keyframes block at the starting point
|
|
eMoveKeyframes =
|
|
0x2, // move keyframes only (if the destination keyframes are empty)
|
|
eInsertKeyframes = 0x4,
|
|
eOverwriteKeyframes = 0x8
|
|
};
|
|
|
|
void start(TKeyframeSelection *selection, int qualifiers);
|
|
|
|
int getQualifiers() const { return m_qualifiers; }
|
|
|
|
bool moveKeyframes(int dr,
|
|
std::set<TKeyframeSelection::Position> &newPositions,
|
|
TKeyframeSelection *selection = 0);
|
|
|
|
void undoMoveKeyframe() { setKeyframes(); }
|
|
};
|
|
|
|
//=============================================================================
|
|
// KeyframeMoverTool
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class KeyframeMoverTool final : public XsheetGUI::DragTool {
|
|
TKeyframeSelection m_startSelection;
|
|
int m_offset;
|
|
int m_firstRow, m_firstCol;
|
|
bool m_selecting;
|
|
bool m_justMovement;
|
|
TPointD m_startPos, m_curPos;
|
|
KeyframeMover *m_mover;
|
|
bool m_firstKeyframeMovement;
|
|
|
|
//! Helper method: returns the current keyframe selection
|
|
TKeyframeSelection *getSelection();
|
|
|
|
void ctrlSelect(int row, int col);
|
|
void shiftSelect(int row, int col);
|
|
|
|
void rectSelect(int row, int col);
|
|
|
|
public:
|
|
KeyframeMoverTool(XsheetViewer *viewer, bool justMovement = false);
|
|
|
|
bool canMove(const TPoint &pos);
|
|
|
|
void onCellChange(int row, int col);
|
|
|
|
void onClick(const QMouseEvent *event) override;
|
|
void onDrag(const QMouseEvent *event) override;
|
|
void onRelease(const CellPosition &pos) override;
|
|
void drawCellsArea(QPainter &p) override;
|
|
};
|
|
|
|
#endif
|