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