|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzLib includes
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobjectcmd.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txsheethandle.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tobjecthandle.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tcolumnhandle.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tfxhandle.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txsheet.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/toonzscene.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobjectspline.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobjecttree.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tcamera.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tcolumnfxset.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/fxdag.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzBase includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tdoublekeyframe.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tfx.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzCore includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tundo.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tconvert.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "historytypes.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Qt includes
|
|
Toshihiro Shimizu |
890ddd |
#include <qmap></qmap>
|
|
Toshihiro Shimizu |
890ddd |
#include <qstring></qstring>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace {
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bool canRemoveFx(const std::set<tfx *=""> &leaves, TFx *fx) {</tfx>
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < fx->getInputPortCount(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TFx *inputFx = fx->getInputPort(i)->getFx();
|
|
Shinya Kitaoka |
120a6e |
if (!inputFx) continue;
|
|
Shinya Kitaoka |
120a6e |
if (leaves.count(inputFx) > 0) continue;
|
|
Shinya Kitaoka |
120a6e |
if (!canRemoveFx(leaves, inputFx)) return false;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return fx->getInputPortCount() > 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// NewCameraUndo
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class NewCameraUndo final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId m_cameraId, m_oldCurrentId;
|
|
Shinya Kitaoka |
120a6e |
TStageObject *m_stageObject;
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *m_objHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
NewCameraUndo(const TStageObjectId &cameraId, TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *objHandle)
|
|
Shinya Kitaoka |
120a6e |
: m_cameraId(cameraId)
|
|
Shinya Kitaoka |
120a6e |
, m_stageObject(0)
|
|
Shinya Kitaoka |
120a6e |
, m_xshHandle(xshHandle)
|
|
Shinya Kitaoka |
120a6e |
, m_objHandle(objHandle) {
|
|
Shinya Kitaoka |
120a6e |
assert(cameraId.isCamera());
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
m_stageObject = xsh->getStageObject(m_cameraId);
|
|
Shinya Kitaoka |
120a6e |
m_stageObject->addRef();
|
|
Shinya Kitaoka |
120a6e |
m_oldCurrentId = m_objHandle->getObjectId();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
~NewCameraUndo() { m_stageObject->release(); }
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
if (m_cameraId == m_objHandle->getObjectId())
|
|
Shinya Kitaoka |
120a6e |
m_objHandle->setObjectId(m_oldCurrentId);
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->removeStageObject(m_cameraId);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->insertStageObject(m_stageObject);
|
|
Shinya Kitaoka |
120a6e |
m_objHandle->setObjectId(m_cameraId);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
int getSize() const override { return sizeof(*this); }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
QString getHistoryString() override {
|
|
Shinya Kitaoka |
120a6e |
return QObject::tr("New Camera %1")
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::fromStdString(m_cameraId.toString()));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
int getHistoryType() override { return HistoryType::Schematic; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
// not implemented
|
|
Shinya Kitaoka |
120a6e |
NewCameraUndo(const NewCameraUndo &);
|
|
Shinya Kitaoka |
120a6e |
NewCameraUndo &operator=(const NewCameraUndo &);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// NewPegbarUndo
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class NewPegbarUndo final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId m_id, m_oldCurrentId;
|
|
Shinya Kitaoka |
120a6e |
TStageObject *m_stageObject;
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *m_objHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
NewPegbarUndo(const TStageObjectId &id, TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *objHandle)
|
|
Shinya Kitaoka |
120a6e |
: m_id(id)
|
|
Shinya Kitaoka |
120a6e |
, m_stageObject(0)
|
|
Shinya Kitaoka |
120a6e |
, m_xshHandle(xshHandle)
|
|
Shinya Kitaoka |
120a6e |
, m_objHandle(objHandle) {
|
|
Shinya Kitaoka |
120a6e |
assert(!id.isTable());
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
m_stageObject = xsh->getStageObject(m_id);
|
|
Shinya Kitaoka |
120a6e |
m_stageObject->addRef();
|
|
Shinya Kitaoka |
120a6e |
m_oldCurrentId = m_objHandle->getObjectId();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~NewPegbarUndo() { m_stageObject->release(); }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
if (m_id == m_objHandle->getObjectId())
|
|
Shinya Kitaoka |
120a6e |
m_objHandle->setObjectId(m_oldCurrentId);
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->removeStageObject(m_id);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->insertStageObject(m_stageObject);
|
|
Shinya Kitaoka |
120a6e |
m_objHandle->setObjectId(m_id);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
int getSize() const override { return sizeof(*this); }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
QString getHistoryString() override {
|
|
Shinya Kitaoka |
120a6e |
return QObject::tr("New Pegbar %1")
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::fromStdString(m_id.toString()));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
int getHistoryType() override { return HistoryType::Schematic; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
// not implemented
|
|
Shinya Kitaoka |
120a6e |
NewPegbarUndo(const NewPegbarUndo &);
|
|
Shinya Kitaoka |
120a6e |
NewPegbarUndo &operator=(const NewPegbarUndo &);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// SetActiveCameraUndo
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class SetActiveCameraUndo final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId m_oldCameraId, m_newCameraId;
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
SetActiveCameraUndo(const TStageObjectId &oldCameraId,
|
|
Shinya Kitaoka |
120a6e |
const TStageObjectId &newCameraId,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle)
|
|
Shinya Kitaoka |
120a6e |
: m_oldCameraId(oldCameraId)
|
|
Shinya Kitaoka |
120a6e |
, m_newCameraId(newCameraId)
|
|
Shinya Kitaoka |
120a6e |
, m_xshHandle(xshHandle) {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->setCurrentCameraId(m_oldCameraId);
|
|
Shinya Kitaoka |
120a6e |
// make the preview camera same as the final camera
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->setCurrentPreviewCameraId(m_oldCameraId);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->setCurrentCameraId(m_newCameraId);
|
|
Shinya Kitaoka |
120a6e |
// make the preview camera same as the final camera
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->setCurrentPreviewCameraId(m_newCameraId);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
int getSize() const override { return sizeof(*this); }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
QString getHistoryString() override {
|
|
Shinya Kitaoka |
120a6e |
return QObject::tr("Set Active Camera %1 > %2")
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::fromStdString(m_oldCameraId.toString()))
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::fromStdString(m_newCameraId.toString()));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
int getHistoryType() override { return HistoryType::Schematic; }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// RemoveSplineUndo
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class RemoveSplineUndo final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId m_id;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *m_spline;
|
|
Shinya Kitaoka |
120a6e |
std::vector<tstageobjectid> m_ids;</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
RemoveSplineUndo(TStageObjectSpline *spline, TXsheetHandle *xshHandle)
|
|
Shinya Kitaoka |
120a6e |
: m_spline(spline), m_xshHandle(xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
m_spline->addRef();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegbarTree =
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < pegbarTree->getStageObjectCount(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = pegbarTree->getStageObject(i);
|
|
Shinya Kitaoka |
120a6e |
if (pegbar->getSpline() == m_spline) m_ids.push_back(pegbar->getId());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
~RemoveSplineUndo() { m_spline->release(); }
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->insertSpline(m_spline);
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < (int)m_ids.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = xsh->getStageObject(m_ids[i]);
|
|
Shinya Kitaoka |
120a6e |
assert(pegbar);
|
|
Shinya Kitaoka |
120a6e |
pegbar->setSpline(m_spline);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < (int)m_ids.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = xsh->getStageObject(m_ids[i]);
|
|
Shinya Kitaoka |
120a6e |
assert(pegbar);
|
|
Shinya Kitaoka |
120a6e |
pegbar->setSpline(0);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->removeSpline(m_spline);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
int getSize() const override {
|
|
Shinya Kitaoka |
120a6e |
return sizeof *this + sizeof(TStageObjectSpline) +
|
|
Shinya Kitaoka |
120a6e |
sizeof(TStageObjectId) * m_ids.size();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
QString getHistoryString() override {
|
|
Shinya Kitaoka |
120a6e |
return QObject::tr("Remove Spline %1")
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::fromStdString(m_id.toString()));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
int getHistoryType() override { return HistoryType::Schematic; }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// NewSplineUndo
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class NewSplineUndo final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId m_id;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *m_spline;
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
NewSplineUndo(const TStageObjectId &id, TStageObjectSpline *spline,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle)
|
|
Shinya Kitaoka |
120a6e |
: m_id(id), m_spline(spline), m_xshHandle(xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
m_spline->addRef();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
~NewSplineUndo() { m_spline->release(); }
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = xsh->getStageObject(m_id);
|
|
Shinya Kitaoka |
120a6e |
assert(pegbar);
|
|
Shinya Kitaoka |
120a6e |
pegbar->setSpline(0);
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->removeSpline(m_spline);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->insertSpline(m_spline);
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = xsh->getStageObject(m_id);
|
|
Shinya Kitaoka |
120a6e |
assert(pegbar);
|
|
Shinya Kitaoka |
120a6e |
pegbar->setSpline(m_spline);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
38fd86 |
int getSize() const override {
|
|
Shinya Kitaoka |
38fd86 |
return sizeof *this + sizeof(TStageObjectSpline);
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
QString getHistoryString() override {
|
|
Shinya Kitaoka |
120a6e |
return QObject::tr("New Motion Path %1")
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::fromStdString(m_spline->getName()));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
int getHistoryType() override { return HistoryType::Schematic; }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// SplineLinkUndo
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class SplineLinkUndo final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId m_id;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *m_spline;
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
SplineLinkUndo(const TStageObjectId &id, TStageObjectSpline *spline,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle)
|
|
Shinya Kitaoka |
120a6e |
: m_id(id), m_spline(spline), m_xshHandle(xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
m_spline->addRef();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~SplineLinkUndo() { m_spline->release(); }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *object = m_xshHandle->getXsheet()->getStageObject(m_id);
|
|
Shinya Kitaoka |
120a6e |
object->setSpline(0);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *object = m_xshHandle->getXsheet()->getStageObject(m_id);
|
|
Shinya Kitaoka |
120a6e |
object->setSpline(m_spline);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
38fd86 |
int getSize() const override {
|
|
Shinya Kitaoka |
38fd86 |
return sizeof *this + sizeof(TStageObjectSpline);
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
QString getHistoryString() override {
|
|
Shinya Kitaoka |
120a6e |
return QObject::tr("Link Motion Path %1 > %2")
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::fromStdString(m_spline->getName()))
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::fromStdString(m_id.toString()));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
int getHistoryType() override { return HistoryType::Schematic; }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// DeleteSplineLinkUndo
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class RemoveSplineLinkUndo final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId m_id;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *m_spline;
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *m_objHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
RemoveSplineLinkUndo(const TStageObjectId &id, TStageObjectSpline *spline,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle, TObjectHandle *objHandle)
|
|
Shinya Kitaoka |
120a6e |
: m_id(id)
|
|
Shinya Kitaoka |
120a6e |
, m_spline(spline)
|
|
Shinya Kitaoka |
120a6e |
, m_xshHandle(xshHandle)
|
|
Shinya Kitaoka |
120a6e |
, m_objHandle(objHandle) {
|
|
Shinya Kitaoka |
120a6e |
m_spline->addRef();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~RemoveSplineLinkUndo() { m_spline->release(); }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *objTree = xsh->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
TStageObject *object = objTree->getStageObject(m_id, false);
|
|
Shinya Kitaoka |
120a6e |
if (!object) return;
|
|
Shinya Kitaoka |
120a6e |
object->setSpline(m_spline);
|
|
Shinya Kitaoka |
120a6e |
if (m_objHandle->getObjectId() == m_id) m_objHandle->setIsSpline(true);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *objTree = xsh->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
TStageObject *object = objTree->getStageObject(m_id, false);
|
|
Shinya Kitaoka |
120a6e |
if (!object) return;
|
|
Shinya Kitaoka |
120a6e |
object->setSpline(0);
|
|
Shinya Kitaoka |
120a6e |
if (m_objHandle->getObjectId() == m_id) m_objHandle->setIsSpline(false);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
38fd86 |
int getSize() const override {
|
|
Shinya Kitaoka |
38fd86 |
return sizeof *this + sizeof(TStageObjectSpline);
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// RemovePegbarNodeUndo
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class RemovePegbarNodeUndo final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId m_objId;
|
|
Shinya Kitaoka |
120a6e |
TXshColumnP m_column;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectParams *m_params;
|
|
Shinya Kitaoka |
120a6e |
QList<tstageobjectid> m_linkedObj;</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
RemovePegbarNodeUndo(TStageObjectId id, TXsheetHandle *xshHandle)
|
|
Shinya Kitaoka |
120a6e |
: TUndo(), m_objId(id), m_xshHandle(xshHandle), m_column(0) {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = xsh->getStageObject(id);
|
|
Shinya Kitaoka |
120a6e |
assert(obj);
|
|
shun-iwasawa |
4a3868 |
m_params = obj->getParams();
|
|
Shinya Kitaoka |
120a6e |
if (id.isColumn()) m_column = xsh->getColumn(id.getIndex());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~RemovePegbarNodeUndo() { delete m_params; }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void setLinkedObjects(const QList<tstageobjectid> &linkedObj) {</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
m_linkedObj = linkedObj;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
// reinsert Object
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
if (m_objId.isColumn() && m_column)
|
|
Shinya Kitaoka |
120a6e |
xsh->insertColumn(m_objId.getIndex(), m_column.getPointer());
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = xsh->getStageObject(m_objId);
|
|
Shinya Kitaoka |
120a6e |
obj->assignParams(m_params);
|
|
Shinya Kitaoka |
120a6e |
obj->setParent(m_params->m_parentId);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int i, linkCount = m_linkedObj.size();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < linkCount; i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *linkedObj = xsh->getStageObject(m_linkedObj[i]);
|
|
Shinya Kitaoka |
120a6e |
assert(linkedObj);
|
|
Shinya Kitaoka |
120a6e |
linkedObj->setParent(m_objId);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
shun-iwasawa |
4a3868 |
xsh->notifyStageObjectAdded(m_objId);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
int pegbarsCount = xsh->getStageObjectTree()->getStageObjectCount();
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < pegbarsCount; ++i) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *other = xsh->getStageObjectTree()->getStageObject(i);
|
|
Shinya Kitaoka |
120a6e |
if (other->getId() == m_objId) continue;
|
|
Shinya Kitaoka |
120a6e |
if (other->getParent() == m_objId)
|
|
Shinya Kitaoka |
120a6e |
other->setParent(xsh->getStageObjectParent(m_objId));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (m_objId.isColumn())
|
|
Shinya Kitaoka |
120a6e |
xsh->removeColumn(m_objId.getIndex());
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->removeStageObject(m_objId);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
int getSize() const override {
|
|
Shinya Kitaoka |
120a6e |
return sizeof *this + sizeof(TStageObjectParams) + sizeof(m_xshHandle);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
QString getHistoryString() override {
|
|
Shinya Kitaoka |
120a6e |
return QObject::tr("Remove Object %1")
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::fromStdString(m_objId.toString()));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
int getHistoryType() override { return HistoryType::Schematic; }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// RemoveColumnsUndo
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class RemoveColumnsUndo final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
std::vector<tfx *=""> m_deletedFx;</tfx>
|
|
Shinya Kitaoka |
120a6e |
std::vector<tfx *=""> m_terminalFx;</tfx>
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectid, *="" qlist<tfxport="">> m_columnFxConnections;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
QList<tfx *=""> m_notTerminalColumns;</tfx>
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
RemoveColumnsUndo(
|
|
Shinya Kitaoka |
120a6e |
const std::vector<tfx *=""> &deletedFx, const std::vector<tfx *=""> &terminalFx,</tfx></tfx>
|
|
Shinya Kitaoka |
120a6e |
const QMap<tstageobjectid, *="" qlist<tfxport="">> columnFxConnections,</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
const QList<tfx *=""> ¬TerminalColumns, TXsheetHandle *xshHandle)</tfx>
|
|
Shinya Kitaoka |
120a6e |
: TUndo()
|
|
Shinya Kitaoka |
120a6e |
, m_deletedFx(deletedFx)
|
|
Shinya Kitaoka |
120a6e |
, m_terminalFx(terminalFx)
|
|
Shinya Kitaoka |
120a6e |
, m_columnFxConnections(columnFxConnections)
|
|
Shinya Kitaoka |
120a6e |
, m_notTerminalColumns(notTerminalColumns)
|
|
Shinya Kitaoka |
120a6e |
, m_xshHandle(xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)m_deletedFx.size(); i++) m_deletedFx[i]->addRef();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~RemoveColumnsUndo() {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)m_deletedFx.size(); i++) m_deletedFx[i]->release();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TFxSet *terminalFxs = xsh->getFxDag()->getTerminalFxs();
|
|
Shinya Kitaoka |
120a6e |
TFxSet *internalFxs = xsh->getFxDag()->getInternalFxs();
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)m_deletedFx.size(); i++)
|
|
Shinya Kitaoka |
120a6e |
internalFxs->addFx(m_deletedFx[i]);
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)m_terminalFx.size(); i++)
|
|
Shinya Kitaoka |
120a6e |
terminalFxs->addFx(m_terminalFx[i]);
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectid, *="" qlist<tfxport="">>::const_iterator it;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
for (it = m_columnFxConnections.begin(); it != m_columnFxConnections.end();
|
|
Shinya Kitaoka |
120a6e |
it++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = it.key();
|
|
Shinya Kitaoka |
120a6e |
QList<tfxport *=""> ports = it.value();</tfxport>
|
|
Shinya Kitaoka |
120a6e |
TXshColumnP column = xsh->getColumn(id.getIndex());
|
|
Shinya Kitaoka |
120a6e |
assert(column);
|
|
Shinya Kitaoka |
120a6e |
int j;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < ports.size(); j++) ports[j]->setFx(column->getFx());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < m_notTerminalColumns.size(); i++)
|
|
Shinya Kitaoka |
120a6e |
terminalFxs->removeFx(m_notTerminalColumns[i]);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
shun-iwasawa |
4a3868 |
xsh->notifyFxAdded(m_deletedFx);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TFxSet *terminalFxs = xsh->getFxDag()->getTerminalFxs();
|
|
Shinya Kitaoka |
120a6e |
TFxSet *internalFxs = xsh->getFxDag()->getInternalFxs();
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)m_deletedFx.size(); i++)
|
|
Shinya Kitaoka |
120a6e |
internalFxs->removeFx(m_deletedFx[i]);
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)m_terminalFx.size(); i++)
|
|
Shinya Kitaoka |
120a6e |
terminalFxs->removeFx(m_terminalFx[i]);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
int getSize() const override {
|
|
Shinya Kitaoka |
120a6e |
return sizeof *this + m_deletedFx.size() * sizeof(TFx) +
|
|
Shinya Kitaoka |
120a6e |
m_terminalFx.size() * sizeof(TFx) +
|
|
Shinya Kitaoka |
120a6e |
m_columnFxConnections.size() *
|
|
Shinya Kitaoka |
120a6e |
(sizeof(TStageObjectId) + 10 * sizeof(TFxPort)) +
|
|
Shinya Kitaoka |
120a6e |
m_notTerminalColumns.size() * sizeof(TFx) + sizeof(TXsheetHandle);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
QString getHistoryString() override {
|
|
Shinya Kitaoka |
120a6e |
QString str = QObject::tr("Remove Column ");
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectid, *="" qlist<tfxport="">>::const_iterator it;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
for (it = m_columnFxConnections.begin(); it != m_columnFxConnections.end();
|
|
Shinya Kitaoka |
120a6e |
it++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = it.key();
|
|
Shinya Kitaoka |
120a6e |
if (it != m_columnFxConnections.begin())
|
|
Shinya Kitaoka |
120a6e |
str += QString::fromStdString(", ");
|
|
Shinya Kitaoka |
120a6e |
str += QString::fromStdString(id.toString());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return str;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
int getHistoryType() override { return HistoryType::Schematic; }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// UndoGroup
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class UndoGroup final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
QList<tstageobjectid> m_ids;</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
int m_groupId;
|
|
Shinya Kitaoka |
120a6e |
QList<int> m_positions;</int>
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
UndoGroup(const QList<tstageobjectid> &ids, int groupId,</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
const QList<int> &positions, TXsheetHandle *xshHandle)</int>
|
|
Shinya Kitaoka |
120a6e |
: m_ids(ids)
|
|
Shinya Kitaoka |
120a6e |
, m_groupId(groupId)
|
|
Shinya Kitaoka |
120a6e |
, m_positions(positions)
|
|
Shinya Kitaoka |
120a6e |
, m_xshHandle(xshHandle) {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~UndoGroup() {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
assert(m_ids.size() == m_positions.size());
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < m_ids.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = pegTree->getStageObject(m_ids[i], false);
|
|
Shinya Kitaoka |
120a6e |
if (obj) {
|
|
Shinya Kitaoka |
120a6e |
obj->removeGroupName(m_positions[i]);
|
|
Shinya Kitaoka |
120a6e |
obj->removeGroupId(m_positions[i]);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
assert(m_ids.size() == m_positions.size());
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < m_ids.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = pegTree->getStageObject(m_ids[i], false);
|
|
Shinya Kitaoka |
120a6e |
if (obj) {
|
|
Shinya Kitaoka |
120a6e |
obj->setGroupId(m_groupId, m_positions[i]);
|
|
Shinya Kitaoka |
120a6e |
obj->setGroupName(L"Group " + std::to_wstring(m_groupId),
|
|
Shinya Kitaoka |
120a6e |
m_positions[i]);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
int getSize() const override { return sizeof *this; }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// UndoUngroup
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class UndoUngroup final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
QList<tstageobjectid> m_objsId;</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
QList<int> m_positions;</int>
|
|
Shinya Kitaoka |
120a6e |
int m_groupId;
|
|
Shinya Kitaoka |
120a6e |
std::wstring m_groupName;
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
UndoUngroup(const QList<tstageobject *=""> &objs, TXsheetHandle *xshHandle)</tstageobject>
|
|
Shinya Kitaoka |
120a6e |
: m_xshHandle(xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
assert(objs.size() > 0);
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < objs.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
m_objsId.append(objs[i]->getId());
|
|
Shinya Kitaoka |
120a6e |
if (i == 0) {
|
|
Shinya Kitaoka |
120a6e |
m_groupId = objs[i]->getGroupId();
|
|
Shinya Kitaoka |
120a6e |
m_groupName = objs[i]->getGroupName(false);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~UndoUngroup() {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void setStackPositions(const QList<int> &positions) {</int>
|
|
Shinya Kitaoka |
120a6e |
m_positions = positions;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
assert(m_objsId.size() == m_positions.size());
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *objTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
if (!objTree) return;
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < m_objsId.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = objTree->getStageObject(m_objsId[i], false);
|
|
Shinya Kitaoka |
120a6e |
if (!obj) continue;
|
|
Shinya Kitaoka |
120a6e |
obj->setGroupId(m_groupId, m_positions[i]);
|
|
Shinya Kitaoka |
120a6e |
obj->setGroupName(m_groupName, m_positions[i]);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
assert(m_objsId.size() == m_positions.size());
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *objTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
if (!objTree) return;
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < m_objsId.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = objTree->getStageObject(m_objsId[i], false);
|
|
Shinya Kitaoka |
120a6e |
if (!obj) continue;
|
|
Shinya Kitaoka |
120a6e |
obj->removeGroupName(m_positions[i]);
|
|
Shinya Kitaoka |
120a6e |
obj->removeGroupId(m_positions[i]);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
int getSize() const override { return sizeof *this; }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// UndoRenameGroup
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class UndoRenameGroup final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
QList<tstageobject *=""> m_objs;</tstageobject>
|
|
Shinya Kitaoka |
120a6e |
QList<int> m_positions;</int>
|
|
Shinya Kitaoka |
120a6e |
std::wstring m_oldGroupName;
|
|
Shinya Kitaoka |
120a6e |
std::wstring m_newGroupName;
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
UndoRenameGroup(const QList<tstageobject *=""> &objs,</tstageobject>
|
|
Shinya Kitaoka |
120a6e |
const QList<int> &positions, const std::wstring &newName,</int>
|
|
Shinya Kitaoka |
120a6e |
const std::wstring &oldName, TXsheetHandle *xshHandle)
|
|
Shinya Kitaoka |
120a6e |
: m_objs(objs)
|
|
Shinya Kitaoka |
120a6e |
, m_newGroupName(newName)
|
|
Shinya Kitaoka |
120a6e |
, m_oldGroupName(oldName)
|
|
Shinya Kitaoka |
120a6e |
, m_xshHandle(xshHandle)
|
|
Shinya Kitaoka |
120a6e |
, m_positions(positions) {
|
|
Shinya Kitaoka |
120a6e |
assert(objs.size() > 0);
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < m_objs.size(); i++) m_objs[i]->addRef();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~UndoRenameGroup() {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < m_objs.size(); i++) m_objs[i]->release();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
assert(m_objs.size() == m_positions.size());
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < m_objs.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
m_objs[i]->removeGroupName(m_positions[i]);
|
|
Shinya Kitaoka |
120a6e |
m_objs[i]->setGroupName(m_oldGroupName, m_positions[i]);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
assert(m_objs.size() == m_positions.size());
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < m_objs.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
m_objs[i]->removeGroupName(m_positions[i]);
|
|
Shinya Kitaoka |
120a6e |
m_objs[i]->setGroupName(m_newGroupName, m_positions[i]);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
int getSize() const override { return sizeof *this; }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// UndoStatusChange
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class UndoStatusChange final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *m_obj;
|
|
Shinya Kitaoka |
120a6e |
TStageObject::Status m_oldStatus, m_newStatus;
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
UndoStatusChange(TStageObject *obj, TXsheetHandle *xshHandle)
|
|
Shinya Kitaoka |
120a6e |
: m_obj(obj), m_xshHandle(xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
m_obj->addRef();
|
|
Shinya Kitaoka |
120a6e |
// devo fare addref della spline altimenti crasha in uscita
|
|
Shinya Kitaoka |
120a6e |
// m_obj non fa addref della spline a lui associata, e quindi crasha perche'
|
|
Shinya Kitaoka |
120a6e |
// la spline viene distrutta
|
|
Shinya Kitaoka |
120a6e |
// prima di m_obj... sarebbe piu' corretto fare addref della spline quando
|
|
Shinya Kitaoka |
120a6e |
// viene settata all'oggetto
|
|
Shinya Kitaoka |
120a6e |
// piuttosto che farla qui?
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = m_obj->getSpline();
|
|
Shinya Kitaoka |
120a6e |
if (spline) spline->addRef();
|
|
Shinya Kitaoka |
120a6e |
m_oldStatus = m_obj->getStatus();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~UndoStatusChange() {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = m_obj->getSpline();
|
|
Shinya Kitaoka |
120a6e |
m_obj->release();
|
|
Shinya Kitaoka |
120a6e |
if (spline) spline->release();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void onAdd() override { m_newStatus = m_obj->getStatus(); }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
m_obj->setStatus(m_oldStatus);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
m_obj->setStatus(m_newStatus);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
int getSize() const override { return sizeof *this; }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// removePegbarNode
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void removeStageObjectNode(const TStageObjectId &id, TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *objHandle, TFxHandle *fxHandle,
|
|
Shinya Kitaoka |
120a6e |
bool doUndo = true) {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = xsh->getStageObject(id);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// Lacamera corrente e il tavolo non si devono rimuovere
|
|
Shinya Kitaoka |
120a6e |
if (id.isTable() ||
|
|
Shinya Kitaoka |
120a6e |
(id.isCamera() && xsh->getStageObjectTree()->getCurrentCameraId() == id))
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
John Dancel |
c323ac |
if (id.isCamera() && xsh->getCameraColumnIndex() == id.getIndex())
|
|
manongjohn |
12d839 |
xsh->setCameraColumnIndex(
|
|
manongjohn |
12d839 |
xsh->getStageObjectTree()->getCurrentCameraId().getIndex());
|
|
John Dancel |
c323ac |
|
|
Shinya Kitaoka |
120a6e |
// stacco tutti i figli e li attacco al padre
|
|
Shinya Kitaoka |
120a6e |
QList<tstageobjectid> linkedObjects;</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
int pegbarsCount = xsh->getStageObjectTree()->getStageObjectCount();
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < pegbarsCount; ++i) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *other = xsh->getStageObjectTree()->getStageObject(i);
|
|
Shinya Kitaoka |
120a6e |
if (other == pegbar) continue;
|
|
Shinya Kitaoka |
120a6e |
if (other->getParent() == id) {
|
|
Shinya Kitaoka |
120a6e |
other->setParent(pegbar->getParent());
|
|
Shinya Kitaoka |
120a6e |
linkedObjects.push_back(other->getId());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (id == objHandle->getObjectId())
|
|
Shinya Kitaoka |
120a6e |
objHandle->setObjectId(TStageObjectId::TableId);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
RemovePegbarNodeUndo *undo = new RemovePegbarNodeUndo(id, xshHandle);
|
|
Shinya Kitaoka |
120a6e |
undo->setLinkedObjects(linkedObjects);
|
|
Shinya Kitaoka |
120a6e |
if (id.isColumn())
|
|
Shinya Kitaoka |
120a6e |
xsh->removeColumn(id.getIndex());
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->removeStageObject(id);
|
|
Shinya Kitaoka |
120a6e |
if (doUndo)
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(undo);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
delete undo;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// removeColums
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void removeColums(const QVector<int> &columnIndexes, TXsheetHandle *xshHandle,</int>
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *objHandle, TFxHandle *fxHandle,
|
|
Shinya Kitaoka |
120a6e |
bool doUndo = true) {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectid, *="" qlist<tfxport="">> columnFxConnection;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
std::set<tfx *=""> leafesFx;</tfx>
|
|
Shinya Kitaoka |
120a6e |
QList<tfx *=""> notTerminalColumns;</tfx>
|
|
Shinya Kitaoka |
120a6e |
for (i = columnIndexes.size() - 1; i >= 0; i--) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = TStageObjectId::ColumnId(columnIndexes[i]);
|
|
Shinya Kitaoka |
120a6e |
TXshColumnP column = xsh->getColumn(id.getIndex());
|
|
Shinya Kitaoka |
120a6e |
if (!column) continue;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TFx *columnFx = column->getFx();
|
|
Shinya Kitaoka |
120a6e |
if (!columnFx) continue;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int j;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < columnFx->getOutputConnectionCount(); j++)
|
|
Shinya Kitaoka |
120a6e |
columnFxConnection[id].append(columnFx->getOutputConnection(j));
|
|
Shinya Kitaoka |
120a6e |
leafesFx.insert(columnFx);
|
|
Shinya Kitaoka |
120a6e |
if (!xsh->getFxDag()->getTerminalFxs()->containsFx(columnFx))
|
|
Shinya Kitaoka |
120a6e |
notTerminalColumns.append(columnFx);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
std::vector<tfx *=""> fxsToKill;</tfx>
|
|
Shinya Kitaoka |
120a6e |
std::vector<tfx *=""> terminalFxsToKill;</tfx>
|
|
Shinya Kitaoka |
120a6e |
TFxSet *fxSet = xsh->getFxDag()->getInternalFxs();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < fxSet->getFxCount(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TFx *fx = fxSet->getFx(i);
|
|
Shinya Kitaoka |
120a6e |
if (canRemoveFx(leafesFx, fx)) {
|
|
Shinya Kitaoka |
120a6e |
fxsToKill.push_back(fx);
|
|
Shinya Kitaoka |
120a6e |
if (xsh->getFxDag()->getTerminalFxs()->containsFx(fx))
|
|
Shinya Kitaoka |
120a6e |
terminalFxsToKill.push_back(fx);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (doUndo) {
|
|
Shinya Kitaoka |
120a6e |
RemoveColumnsUndo *undo =
|
|
Shinya Kitaoka |
120a6e |
new RemoveColumnsUndo(fxsToKill, terminalFxsToKill, columnFxConnection,
|
|
Shinya Kitaoka |
120a6e |
notTerminalColumns, xshHandle);
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(undo);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)fxsToKill.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TFx *fx = fxsToKill[i];
|
|
Shinya Kitaoka |
120a6e |
if (fx == fxHandle->getFx()) fxHandle->setFx(0);
|
|
Shinya Kitaoka |
120a6e |
if (fx->getLinkedFx() != fx) fx->unlinkParams();
|
|
Shinya Kitaoka |
120a6e |
int j, outputPortCount = fx->getOutputConnectionCount();
|
|
Shinya Kitaoka |
120a6e |
for (j = outputPortCount - 1; j >= 0; j--) {
|
|
Shinya Kitaoka |
120a6e |
TFxPort *port = fx->getOutputConnection(j);
|
|
Shinya Kitaoka |
120a6e |
std::vector<tfx *="">::iterator it =</tfx>
|
|
Shinya Kitaoka |
120a6e |
std::find(fxsToKill.begin(), fxsToKill.end(), port->getOwnerFx());
|
|
Shinya Kitaoka |
120a6e |
std::set<tfx *="">::iterator it2 =</tfx>
|
|
Shinya Kitaoka |
120a6e |
std::find(leafesFx.begin(), leafesFx.end(), port->getFx());
|
|
Shinya Kitaoka |
120a6e |
if (it == fxsToKill.end() && it2 == leafesFx.end()) port->setFx(0);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
fxSet->removeFx(fx);
|
|
Shinya Kitaoka |
120a6e |
xsh->getFxDag()->getTerminalFxs()->removeFx(fx);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (i = columnIndexes.size() - 1; i >= 0; i--)
|
|
Shinya Kitaoka |
120a6e |
removeStageObjectNode(TStageObjectId::ColumnId(columnIndexes[i]), xshHandle,
|
|
Shinya Kitaoka |
120a6e |
objHandle, fxHandle, doUndo);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// removeSpline
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void removeSpline(TStageObjectSpline *spline, TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *objHandle, bool doUndo = true) {
|
|
Shinya Kitaoka |
120a6e |
if (doUndo)
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(new RemoveSplineUndo(spline, xshHandle));
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegbarTree = xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < pegbarTree->getStageObjectCount(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = pegbarTree->getStageObject(i);
|
|
Shinya Kitaoka |
120a6e |
if (pegbar->getSpline() == spline) {
|
|
Shinya Kitaoka |
120a6e |
pegbar->setSpline(0);
|
|
Shinya Kitaoka |
120a6e |
if (pegbar->getId() == objHandle->getObjectId())
|
|
Shinya Kitaoka |
120a6e |
objHandle->setIsSpline(false);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
pegbarTree->removeSpline(spline);
|
|
Shinya Kitaoka |
120a6e |
// xshHandle->notifyXsheetChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void removeLink(const QPair<tstageobjectid, tstageobjectid=""> &link,</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle, TObjectHandle *objHandle,
|
|
Shinya Kitaoka |
120a6e |
bool doUndo = true) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *objTree = xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
if (link.first ==
|
|
Shinya Kitaoka |
120a6e |
link.second) { // is a link connecting a spline with an object
|
|
Shinya Kitaoka |
120a6e |
TStageObject *object = objTree->getStageObject(link.first, false);
|
|
Shinya Kitaoka |
120a6e |
if (!object) return;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = object->getSpline();
|
|
Shinya Kitaoka |
120a6e |
assert(spline);
|
|
Shinya Kitaoka |
120a6e |
object->setSpline(0);
|
|
Shinya Kitaoka |
120a6e |
if (objHandle->getObjectId() == link.first) objHandle->setIsSpline(false);
|
|
Shinya Kitaoka |
120a6e |
if (doUndo) {
|
|
Shinya Kitaoka |
120a6e |
TUndo *undo =
|
|
Shinya Kitaoka |
120a6e |
new RemoveSplineLinkUndo(link.first, spline, xshHandle, objHandle);
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(undo);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *object = objTree->getStageObject(link.first, false);
|
|
Shinya Kitaoka |
120a6e |
TStageObject *parentObject = objTree->getStageObject(link.second, false);
|
|
Shinya Kitaoka |
120a6e |
if (!object || !parentObject || object->isGrouped() ||
|
|
Shinya Kitaoka |
120a6e |
parentObject->isGrouped())
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
assert(object->getParent() == parentObject->getId());
|
|
Shinya Kitaoka |
120a6e |
TStageObjectCmd::setParent(object->getId(), TStageObjectId::NoneId, "",
|
|
Shinya Kitaoka |
120a6e |
xshHandle, doUndo);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
} // namespace
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// SetAttributeUndo & sons
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <class t=""></class>
|
|
Shinya Kitaoka |
120a6e |
class SetAttributeUndo : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId m_id;
|
|
Shinya Kitaoka |
120a6e |
T m_oldValue, m_newValue;
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
SetAttributeUndo(const TStageObjectId &id, TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
T oldValue, T newValue)
|
|
Shinya Kitaoka |
120a6e |
: m_id(id)
|
|
Shinya Kitaoka |
120a6e |
, m_xshHandle(xshHandle)
|
|
Shinya Kitaoka |
120a6e |
, m_oldValue(oldValue)
|
|
Shinya Kitaoka |
120a6e |
, m_newValue(newValue) {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId getId() const { return m_id; }
|
|
Shinya Kitaoka |
120a6e |
TStageObject *getStageObject() const {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = m_xshHandle->getXsheet()->getStageObject(m_id);
|
|
Shinya Kitaoka |
120a6e |
assert(pegbar);
|
|
Shinya Kitaoka |
120a6e |
return pegbar;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
virtual void setAttribute(TStageObject *pegbar, T value) const = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void setAttribute(T value) const {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = getStageObject();
|
|
Shinya Kitaoka |
120a6e |
if (pegbar) setAttribute(pegbar, value);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
setAttribute(m_oldValue);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
setAttribute(m_newValue);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
int getSize() const override { return sizeof(*this); }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
int getHistoryType() override { return HistoryType::Unidentified; }
|
|
Shinya Kitaoka |
473e70 |
QString getHistoryString() override {
|
|
Shinya Kitaoka |
120a6e |
return QString("%1 %2 : %3 -> %4")
|
|
Shinya Kitaoka |
120a6e |
.arg(getActionName())
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::fromStdString(getId().toString()))
|
|
Shinya Kitaoka |
120a6e |
.arg(getStringFromValue(m_oldValue))
|
|
Shinya Kitaoka |
120a6e |
.arg(getStringFromValue(m_newValue));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
virtual QString getActionName() { return QString(); }
|
|
Shinya Kitaoka |
120a6e |
virtual QString getStringFromValue(T value) { return QString(); }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class StageObjectRenameUndo final : public SetAttributeUndo<std::string> {</std::string>
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
StageObjectRenameUndo(const TStageObjectId &id, TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
std::string oldName, std::string newName)
|
|
Shinya Kitaoka |
120a6e |
: SetAttributeUndo<std::string>(id, xshHandle, oldName, newName) {}</std::string>
|
|
Shinya Kitaoka |
473e70 |
void setAttribute(TStageObject *pegbar, std::string name) const override {
|
|
Shinya Kitaoka |
120a6e |
pegbar->setName(name);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
QString getActionName() override { return QString("Rename Object"); }
|
|
Shinya Kitaoka |
473e70 |
QString getStringFromValue(std::string value) override {
|
|
Shinya Kitaoka |
120a6e |
return QString::fromStdString(value);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class ResetOffsetUndo final : public SetAttributeUndo<tpointd> {</tpointd>
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
ResetOffsetUndo(const TStageObjectId &id, TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
const TPointD &oldOffset)
|
|
Shinya Kitaoka |
120a6e |
: SetAttributeUndo<tpointd>(id, xshHandle, oldOffset, TPointD()) {}</tpointd>
|
|
Shinya Kitaoka |
473e70 |
void setAttribute(TStageObject *pegbar, TPointD offset) const override {
|
|
Shinya Kitaoka |
120a6e |
pegbar->setOffset(offset);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
QString getActionName() override { return QString("Reset Center"); }
|
|
Shinya Kitaoka |
473e70 |
QString getStringFromValue(TPointD value) override {
|
|
Shinya Kitaoka |
120a6e |
return QString("(%1,%2)")
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::number(value.x))
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::number(value.y));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class ResetCenterAndOffsetUndo final : public SetAttributeUndo<tpointd> {</tpointd>
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
ResetCenterAndOffsetUndo(const TStageObjectId &id, TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
const TPointD &oldOffset)
|
|
Shinya Kitaoka |
120a6e |
: SetAttributeUndo<tpointd>(id, xshHandle, oldOffset, TPointD()) {}</tpointd>
|
|
Shinya Kitaoka |
473e70 |
void setAttribute(TStageObject *pegbar, TPointD offset) const override {
|
|
Shinya Kitaoka |
120a6e |
pegbar->setCenterAndOffset(offset, offset);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
QString getActionName() override { return QString("Reset Center"); }
|
|
Shinya Kitaoka |
473e70 |
QString getStringFromValue(TPointD value) override {
|
|
Shinya Kitaoka |
120a6e |
return QString("(%1,%2)")
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::number(value.x))
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::number(value.y));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class SetHandleUndo final : public SetAttributeUndo<std::string> {</std::string>
|
|
Shinya Kitaoka |
120a6e |
TPointD m_center, m_offset;
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
SetHandleUndo(const TStageObjectId &id, std::string oldHandle,
|
|
Shinya Kitaoka |
120a6e |
std::string newHandle, TXsheetHandle *xshHandle)
|
|
Shinya Kitaoka |
120a6e |
: SetAttributeUndo<std::string>(id, xshHandle, oldHandle, newHandle)</std::string>
|
|
Shinya Kitaoka |
120a6e |
, m_xshHandle(xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = getStageObject();
|
|
Shinya Kitaoka |
120a6e |
if (pegbar) pegbar->getCenterAndOffset(m_center, m_offset);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
void setAttribute(TStageObject *pegbar, std::string handle) const override {
|
|
Shinya Kitaoka |
120a6e |
pegbar->setHandle(handle);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
SetAttributeUndo<std::string>::undo();</std::string>
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = getStageObject();
|
|
Shinya Kitaoka |
120a6e |
if (pegbar) pegbar->setCenterAndOffset(m_center, m_offset);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
QString getActionName() override { return QString("Set Handle"); }
|
|
Shinya Kitaoka |
473e70 |
QString getStringFromValue(std::string value) override {
|
|
Shinya Kitaoka |
120a6e |
return QString::fromStdString(value);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class SetParentHandleUndo final : public SetAttributeUndo<std::string> {</std::string>
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
SetParentHandleUndo(const TStageObjectId &id, TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
std::string oldHandle, std::string newHandle)
|
|
Shinya Kitaoka |
120a6e |
: SetAttributeUndo<std::string>(id, xshHandle, oldHandle, newHandle) {}</std::string>
|
|
Shinya Kitaoka |
473e70 |
void setAttribute(TStageObject *pegbar, std::string handle) const override {
|
|
Shinya Kitaoka |
120a6e |
pegbar->setParentHandle(handle);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
QString getActionName() override { return QString("Set Parent Handle"); }
|
|
Shinya Kitaoka |
473e70 |
QString getStringFromValue(std::string value) override {
|
|
Shinya Kitaoka |
120a6e |
return QString::fromStdString(value);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
3bfa54 |
typedef std::pair<tstageobjectid, std::string=""> ParentIdAndHandle;</tstageobjectid,>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class SetParentUndo final : public SetAttributeUndo<parentidandhandle> {</parentidandhandle>
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
SetParentUndo(const TStageObjectId &id, TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId oldParentId, std::string oldParentHandle,
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId newParentId, std::string newParentHandle)
|
|
Shinya Kitaoka |
120a6e |
: SetAttributeUndo<parentidandhandle>(</parentidandhandle>
|
|
Shinya Kitaoka |
120a6e |
id, xshHandle, ParentIdAndHandle(oldParentId, oldParentHandle),
|
|
Shinya Kitaoka |
120a6e |
ParentIdAndHandle(newParentId, newParentHandle)) {}
|
|
Shinya Kitaoka |
38fd86 |
void setAttribute(TStageObject *pegbar,
|
|
Shinya Kitaoka |
38fd86 |
ParentIdAndHandle parent) const override {
|
|
Shinya Kitaoka |
120a6e |
pegbar->setParent(parent.first);
|
|
Shinya Kitaoka |
120a6e |
pegbar->setParentHandle(parent.second);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
QString getActionName() override { return QString("Set Parent Handle"); }
|
|
Shinya Kitaoka |
473e70 |
QString getStringFromValue(ParentIdAndHandle value) override {
|
|
Shinya Kitaoka |
120a6e |
return QString("(%1,%2)")
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::fromStdString(value.first.toString()))
|
|
Shinya Kitaoka |
120a6e |
.arg(QString::fromStdString(value.second));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class ResetPositionUndo final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId m_id;
|
|
Shinya Kitaoka |
120a6e |
TPointD m_center, m_offset;
|
|
Shinya Kitaoka |
120a6e |
std::vector<tdoublekeyframe> m_xKeyframes, m_yKeyframes;</tdoublekeyframe>
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void saveKeyframes(std::vector<tdoublekeyframe> &keyframes,</tdoublekeyframe>
|
|
Shinya Kitaoka |
120a6e |
const TDoubleParam *param) {
|
|
Shinya Kitaoka |
120a6e |
int n = param->getKeyframeCount();
|
|
Shinya Kitaoka |
120a6e |
if (n == 0)
|
|
Shinya Kitaoka |
120a6e |
keyframes.clear();
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
keyframes.resize(n);
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < n; i++) keyframes[i] = param->getKeyframe(i);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void deleteAllKeyframes(TDoubleParam *param) const {
|
|
Shinya Kitaoka |
120a6e |
while (param->getKeyframeCount() > 0)
|
|
Shinya Kitaoka |
120a6e |
param->deleteKeyframe(param->keyframeIndexToFrame(0));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
void restoreKeyframes(TDoubleParam *param,
|
|
Shinya Kitaoka |
120a6e |
const std::vector<tdoublekeyframe> &keyframes) const {</tdoublekeyframe>
|
|
Shinya Kitaoka |
120a6e |
deleteAllKeyframes(param);
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < (int)keyframes.size(); i++)
|
|
Shinya Kitaoka |
120a6e |
param->setKeyframe(keyframes[i]);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObject *getStageObject() const {
|
|
Shinya Kitaoka |
120a6e |
return m_xshHandle->getXsheet()->getStageObject(m_id);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
ResetPositionUndo(const TStageObjectId &id, TXsheetHandle *xshHandle)
|
|
Shinya Kitaoka |
120a6e |
: m_xshHandle(xshHandle), m_id(id) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *stageObject = getStageObject();
|
|
Shinya Kitaoka |
120a6e |
if (stageObject) {
|
|
Shinya Kitaoka |
120a6e |
stageObject->getCenterAndOffset(m_center, m_offset);
|
|
Shinya Kitaoka |
120a6e |
saveKeyframes(m_xKeyframes, stageObject->getParam(TStageObject::T_X));
|
|
Shinya Kitaoka |
120a6e |
saveKeyframes(m_yKeyframes, stageObject->getParam(TStageObject::T_Y));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *stageObject = getStageObject();
|
|
Shinya Kitaoka |
120a6e |
if (!stageObject) return;
|
|
Shinya Kitaoka |
120a6e |
stageObject->setCenterAndOffset(m_center, m_offset);
|
|
Shinya Kitaoka |
120a6e |
restoreKeyframes(stageObject->getParam(TStageObject::T_X), m_xKeyframes);
|
|
Shinya Kitaoka |
120a6e |
restoreKeyframes(stageObject->getParam(TStageObject::T_Y), m_yKeyframes);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *stageObject = getStageObject();
|
|
Shinya Kitaoka |
120a6e |
if (!stageObject) return;
|
|
Shinya Kitaoka |
120a6e |
stageObject->setCenterAndOffset(TPointD(0, 0), TPointD(0, 0));
|
|
Shinya Kitaoka |
120a6e |
deleteAllKeyframes(stageObject->getParam(TStageObject::T_X));
|
|
Shinya Kitaoka |
120a6e |
deleteAllKeyframes(stageObject->getParam(TStageObject::T_Y));
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
int getSize() const override {
|
|
shun-iwasawa |
4a3868 |
return sizeof(*this) + sizeof(TDoubleKeyframe) *
|
|
shun-iwasawa |
4a3868 |
(m_xKeyframes.size() + m_yKeyframes.size());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
} // namespace
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// pegbar rename
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::rename(const TStageObjectId &id, std::string name,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = xshHandle->getXsheet()->getStageObject(id);
|
|
Shinya Kitaoka |
120a6e |
if (!pegbar) return;
|
|
Shinya Kitaoka |
120a6e |
std::string oldName = pegbar->getName();
|
|
Shinya Kitaoka |
120a6e |
if (oldName == name) return;
|
|
Shinya Kitaoka |
120a6e |
pegbar->setName(name);
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(
|
|
Shinya Kitaoka |
120a6e |
new StageObjectRenameUndo(id, xshHandle, oldName, name));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// resetOffset
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::resetOffset(const TStageObjectId &id,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *peg = xshHandle->getXsheet()->getStageObject(id);
|
|
Shinya Kitaoka |
120a6e |
if (!peg) return;
|
|
Shinya Kitaoka |
120a6e |
TPointD oldOffset = peg->getOffset();
|
|
Shinya Kitaoka |
120a6e |
peg->setOffset(TPointD());
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(new ResetOffsetUndo(id, xshHandle, oldOffset));
|
|
Shinya Kitaoka |
120a6e |
xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
// TNotifier::instance()->notify(TStageChange());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// resetCenterAndOffset
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::resetCenterAndOffset(const TStageObjectId &id,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *peg = xshHandle->getXsheet()->getStageObject(id);
|
|
Shinya Kitaoka |
120a6e |
if (!peg) return;
|
|
Shinya Kitaoka |
120a6e |
TPointD oldOffset = peg->getOffset();
|
|
Shinya Kitaoka |
120a6e |
peg->setCenterAndOffset(TPointD(), TPointD());
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(
|
|
Shinya Kitaoka |
120a6e |
new ResetCenterAndOffsetUndo(id, xshHandle, oldOffset));
|
|
Shinya Kitaoka |
120a6e |
xshHandle->notifyXsheetChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// resetPosition
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::resetPosition(const TStageObjectId &id,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = xshHandle->getXsheet()->getStageObject(id);
|
|
Shinya Kitaoka |
120a6e |
if (!obj) return;
|
|
Shinya Kitaoka |
120a6e |
TUndo *undo = new ResetPositionUndo(id, xshHandle);
|
|
Shinya Kitaoka |
120a6e |
undo->redo();
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(undo);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// setHandle
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::setHandle(const TStageObjectId &id, std::string handle,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *peg = xshHandle->getXsheet()->getStageObject(id);
|
|
Shinya Kitaoka |
120a6e |
if (!peg) return;
|
|
Shinya Kitaoka |
120a6e |
std::string oldHandle = peg->getHandle();
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(
|
|
Shinya Kitaoka |
120a6e |
new SetHandleUndo(id, oldHandle, handle, xshHandle));
|
|
Shinya Kitaoka |
120a6e |
peg->setHandle(handle);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// setParentHandle
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::setParentHandle(const std::vector<tstageobjectid> &ids,</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
std::string handle,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < (int)ids.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = ids[i];
|
|
Shinya Kitaoka |
120a6e |
TStageObject *peg = xshHandle->getXsheet()->getStageObject(id);
|
|
Shinya Kitaoka |
120a6e |
if (!peg) continue;
|
|
Shinya Kitaoka |
120a6e |
std::string oldHandle = peg->getParentHandle();
|
|
Shinya Kitaoka |
120a6e |
peg->setParentHandle(handle);
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(
|
|
Shinya Kitaoka |
120a6e |
new SetParentHandleUndo(id, xshHandle, oldHandle, handle));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// setParent
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::setParent(const TStageObjectId &id,
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId parentId,
|
|
Shinya Kitaoka |
120a6e |
std::string parentHandle,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle, bool doUndo) {
|
|
Shinya Kitaoka |
120a6e |
if (parentId == TStageObjectId::NoneId) {
|
|
Shinya Kitaoka |
120a6e |
if (id.isColumn() || id.isPegbar()) {
|
|
Shinya Kitaoka |
120a6e |
parentId = TStageObjectId::TableId;
|
|
Shinya Kitaoka |
120a6e |
parentHandle = "B";
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObject *stageObject = xshHandle->getXsheet()->getStageObject(id);
|
|
Shinya Kitaoka |
120a6e |
if (!stageObject) return;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId oldParentId = stageObject->getParent();
|
|
Shinya Kitaoka |
120a6e |
std::string oldParentHandle;
|
|
Shinya Kitaoka |
120a6e |
if (oldParentId != TStageObjectId::NoneId)
|
|
Shinya Kitaoka |
120a6e |
oldParentHandle = stageObject->getParentHandle();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
stageObject->setParent(parentId);
|
|
Shinya Kitaoka |
120a6e |
stageObject->setParentHandle(parentHandle);
|
|
Shinya Kitaoka |
120a6e |
if (doUndo) {
|
|
Shinya Kitaoka |
120a6e |
TUndoManager *undoManager = TUndoManager::manager();
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(new SetParentUndo(
|
|
Shinya Kitaoka |
120a6e |
id, xshHandle, oldParentId, oldParentHandle, parentId, parentHandle));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// setSplineParent
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void TStageObjectCmd::setSplineParent(TStageObjectSpline *spline,
|
|
Shinya Kitaoka |
120a6e |
TStageObject *parentObj,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(
|
|
Shinya Kitaoka |
120a6e |
new SplineLinkUndo(parentObj->getId(), spline, xshHandle));
|
|
Shinya Kitaoka |
120a6e |
parentObj->setSpline(spline);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// addNewCamera
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::addNewCamera(TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *objHandle,
|
|
Shinya Kitaoka |
120a6e |
QPointF initialPos) {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
int cameraIndex = 0;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *tree = xsh->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId cameraId;
|
|
Shinya Kitaoka |
120a6e |
for (;;) {
|
|
Shinya Kitaoka |
120a6e |
cameraId = TStageObjectId::CameraId(cameraIndex);
|
|
Shinya Kitaoka |
120a6e |
if (tree->getStageObject(cameraId, false) != 0) {
|
|
Shinya Kitaoka |
120a6e |
cameraIndex++;
|
|
Shinya Kitaoka |
120a6e |
continue;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// crea la nuova camera
|
|
Shinya Kitaoka |
120a6e |
TStageObject *newCameraPegbar = xsh->getStageObject(cameraId);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// make the new peg at the cursor position
|
|
Shinya Kitaoka |
120a6e |
if (!initialPos.isNull())
|
|
Shinya Kitaoka |
120a6e |
newCameraPegbar->setDagNodePos(TPointD(initialPos.x(), initialPos.y()));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// settings uguali a quelli della camera corrente
|
|
Shinya Kitaoka |
120a6e |
TCamera *currentCamera = tree->getCurrentCamera();
|
|
Shinya Kitaoka |
120a6e |
*newCameraPegbar->getCamera() = *currentCamera;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(
|
|
Shinya Kitaoka |
120a6e |
new NewCameraUndo(cameraId, xshHandle, objHandle));
|
|
Shinya Kitaoka |
120a6e |
xshHandle->notifyXsheetChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// addNewPegbar
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::addNewPegbar(TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *objHandle,
|
|
Shinya Kitaoka |
120a6e |
QPointF initialPos) {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
// crea la nuova pegbar
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pTree = xsh->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
int pegbarIndex = 0;
|
|
Shinya Kitaoka |
120a6e |
while (pTree->getStageObject(TStageObjectId::PegbarId(pegbarIndex), false))
|
|
Shinya Kitaoka |
120a6e |
pegbarIndex++;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = TStageObjectId::PegbarId(pegbarIndex);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = pTree->getStageObject(id, true);
|
|
Shinya Kitaoka |
120a6e |
if (!initialPos.isNull())
|
|
Shinya Kitaoka |
120a6e |
obj->setDagNodePos(TPointD(initialPos.x(), initialPos.y()));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(new NewPegbarUndo(id, xshHandle, objHandle));
|
|
Shinya Kitaoka |
120a6e |
xshHandle->notifyXsheetChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// setAsActiveCamera
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::setAsActiveCamera(TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *objHandle) {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId currentPegbarId = objHandle->getObjectId();
|
|
Shinya Kitaoka |
120a6e |
assert(currentPegbarId.isCamera());
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId newCameraId = currentPegbarId;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId oldCameraId = xsh->getStageObjectTree()->getCurrentCameraId();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->setCurrentCameraId(newCameraId);
|
|
Shinya Kitaoka |
120a6e |
// make the preview camera same as the final render camera
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->setCurrentPreviewCameraId(newCameraId);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(
|
|
Shinya Kitaoka |
120a6e |
new SetActiveCameraUndo(oldCameraId, newCameraId, xshHandle));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
xshHandle->notifyXsheetChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// addNewSpline
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::addNewSpline(TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *objHandle,
|
|
Shinya Kitaoka |
120a6e |
TColumnHandle *colHandle,
|
|
Shinya Kitaoka |
120a6e |
QPointF initialPos) {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = xsh->getStageObjectTree()->createSpline();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!initialPos.isNull())
|
|
Shinya Kitaoka |
120a6e |
spline->setDagNodePos(TPointD(initialPos.x(), initialPos.y()));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId objId = objHandle->getObjectId();
|
|
Shinya Kitaoka |
120a6e |
if (objId == TStageObjectId::NoneId) {
|
|
shun-iwasawa |
4a3868 |
int col = colHandle->getColumnIndex();
|
|
Shinya Kitaoka |
120a6e |
if (col >= 0) objId = TStageObjectId::ColumnId(col);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (objId != TStageObjectId::NoneId) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = xsh->getStageObject(objId);
|
|
Shinya Kitaoka |
120a6e |
assert(pegbar);
|
|
Shinya Kitaoka |
120a6e |
pegbar->setSpline(spline);
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(new NewSplineUndo(objId, spline, xshHandle));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
xshHandle->notifyXsheetChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// deleteSelection
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::deleteSelection(
|
|
Shinya Kitaoka |
120a6e |
const std::vector<tstageobjectid> &objIds,</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
const std::list<qpair<tstageobjectid, tstageobjectid="">> &links,</qpair<tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
const std::list<int> &splineIds, TXsheetHandle *xshHandle,</int>
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *objHandle, TFxHandle *fxHandle, bool doUndo) {
|
|
Shinya Kitaoka |
120a6e |
if (doUndo) TUndoManager::manager()->beginBlock();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QVector<int> columnIndexes;</int>
|
|
Shinya Kitaoka |
120a6e |
QVector<int> pegbarIndexes;</int>
|
|
Shinya Kitaoka |
120a6e |
QVector<int> cameraIndexes;</int>
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
std::vector<tstageobjectid>::const_iterator it2;</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
for (it2 = objIds.begin(); it2 != objIds.end(); it2++) {
|
|
Shinya Kitaoka |
120a6e |
if (it2->isColumn()) columnIndexes.append(it2->getIndex());
|
|
Shinya Kitaoka |
120a6e |
if (it2->isPegbar()) pegbarIndexes.append(it2->getIndex());
|
|
Shinya Kitaoka |
120a6e |
if (it2->isCamera()) cameraIndexes.append(it2->getIndex());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Tact Yoshida |
b8554a |
if (!columnIndexes.isEmpty()) {
|
|
Tact Yoshida |
b8554a |
std::sort(columnIndexes.begin(), columnIndexes.end());
|
|
Tact Yoshida |
b8554a |
}
|
|
Tact Yoshida |
b8554a |
if (!pegbarIndexes.isEmpty()) {
|
|
Tact Yoshida |
b8554a |
std::sort(pegbarIndexes.begin(), pegbarIndexes.end());
|
|
Tact Yoshida |
b8554a |
}
|
|
Tact Yoshida |
b8554a |
if (!cameraIndexes.isEmpty()) {
|
|
Tact Yoshida |
b8554a |
std::sort(cameraIndexes.begin(), cameraIndexes.end());
|
|
Tact Yoshida |
b8554a |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// remove all selected objects
|
|
Shinya Kitaoka |
120a6e |
removeColums(columnIndexes, xshHandle, objHandle, fxHandle, doUndo);
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = pegbarIndexes.size() - 1; i >= 0; i--)
|
|
Shinya Kitaoka |
120a6e |
removeStageObjectNode(TStageObjectId::PegbarId(pegbarIndexes[i]), xshHandle,
|
|
Shinya Kitaoka |
120a6e |
objHandle, fxHandle, doUndo);
|
|
Shinya Kitaoka |
120a6e |
for (i = cameraIndexes.size() - 1; i >= 0; i--)
|
|
Shinya Kitaoka |
120a6e |
removeStageObjectNode(TStageObjectId::CameraId(cameraIndexes[i]), xshHandle,
|
|
Shinya Kitaoka |
120a6e |
objHandle, fxHandle, doUndo);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
std::list<qpair<tstageobjectid, tstageobjectid="">>::const_iterator it1;</qpair<tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
for (it1 = links.begin(); it1 != links.end() && objIds.empty(); it1++)
|
|
Shinya Kitaoka |
120a6e |
removeLink(*it1, xshHandle, objHandle, doUndo);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
std::list<int>::const_iterator it3;</int>
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *objTree = xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
for (it3 = splineIds.begin(); it3 != splineIds.end(); it3++) {
|
|
Shinya Kitaoka |
120a6e |
int splineCount = objTree->getSplineCount();
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < splineCount; i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = objTree->getSpline(i);
|
|
Shinya Kitaoka |
120a6e |
if (spline->getId() == *it3) {
|
|
Shinya Kitaoka |
120a6e |
removeSpline(spline, xshHandle, objHandle, doUndo);
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (doUndo) TUndoManager::manager()->endBlock();
|
|
Shinya Kitaoka |
120a6e |
xshHandle->notifyXsheetChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// group
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::group(const QList<tstageobjectid> ids,</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegTree = xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
int groupId = pegTree->getNewGroupId();
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
QList<int> positions;</int>
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < ids.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = pegTree->getStageObject(ids[i], false);
|
|
Shinya Kitaoka |
120a6e |
if (obj) {
|
|
Shinya Kitaoka |
120a6e |
int position = obj->setGroupId(groupId);
|
|
Shinya Kitaoka |
120a6e |
obj->setGroupName(L"Group " + std::to_wstring(groupId));
|
|
Shinya Kitaoka |
120a6e |
positions.append(position);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(
|
|
Shinya Kitaoka |
120a6e |
new UndoGroup(ids, groupId, positions, xshHandle));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// ungroup
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::ungroup(int groupId, TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *objTree = xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
if (!objTree) return;
|
|
Shinya Kitaoka |
120a6e |
QList<tstageobject *=""> objs;</tstageobject>
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < objTree->getStageObjectCount(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = objTree->getStageObject(i);
|
|
Shinya Kitaoka |
120a6e |
if (!obj) continue;
|
|
Shinya Kitaoka |
120a6e |
if (obj->getGroupId() == groupId) objs.push_back(obj);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
QList<int> positions;</int>
|
|
Shinya Kitaoka |
120a6e |
UndoUngroup *undo = new UndoUngroup(objs, xshHandle);
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(undo);
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < objs.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = objs[i];
|
|
Shinya Kitaoka |
120a6e |
if (obj) {
|
|
Shinya Kitaoka |
120a6e |
obj->removeGroupName();
|
|
Shinya Kitaoka |
120a6e |
int position = obj->removeGroupId();
|
|
Shinya Kitaoka |
120a6e |
positions.append(position);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
undo->setStackPositions(positions);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// renameGroup
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::renameGroup(const QList<tstageobject *=""> objs,</tstageobject>
|
|
Shinya Kitaoka |
120a6e |
const std::wstring &name, bool fromEditor,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
std::wstring oldName;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegTree = xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
QList<int> positions;</int>
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < objs.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
if (i == 0) oldName = objs[i]->getGroupName(fromEditor);
|
|
shun-iwasawa |
4a3868 |
int position = objs[i]->removeGroupName(fromEditor);
|
|
Shinya Kitaoka |
120a6e |
objs[i]->setGroupName(name, position);
|
|
Shinya Kitaoka |
120a6e |
positions.push_back(position);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(
|
|
Shinya Kitaoka |
120a6e |
new UndoRenameGroup(objs, positions, name, oldName, xshHandle));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// renameGroup
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::duplicateObject(const QList<tstageobjectid> ids,</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *objTree = xsh->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
int i, objCount = ids.size();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < objCount; i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = ids[i];
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = objTree->getStageObject(id, false);
|
|
Shinya Kitaoka |
120a6e |
assert(obj);
|
|
Shinya Kitaoka |
120a6e |
TStageObject *duplicatedObj = 0;
|
|
Shinya Kitaoka |
120a6e |
if (id.isPegbar() || id.isCamera()) {
|
|
Shinya Kitaoka |
120a6e |
int index = 0;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId newId;
|
|
Shinya Kitaoka |
120a6e |
for (;;) {
|
|
Shinya Kitaoka |
120a6e |
newId = id.isPegbar() ? TStageObjectId::PegbarId(index)
|
|
Shinya Kitaoka |
120a6e |
: TStageObjectId::CameraId(index);
|
|
Shinya Kitaoka |
120a6e |
if (objTree->getStageObject(newId, false)) {
|
|
Shinya Kitaoka |
120a6e |
index++;
|
|
Shinya Kitaoka |
120a6e |
continue;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
duplicatedObj = xsh->getStageObject(newId);
|
|
Shinya Kitaoka |
120a6e |
TStageObjectParams *params = obj->getParams();
|
|
Shinya Kitaoka |
120a6e |
duplicatedObj->assignParams(params);
|
|
Shinya Kitaoka |
120a6e |
delete params;
|
|
Shinya Kitaoka |
120a6e |
if (id.isCamera()) *(duplicatedObj->getCamera()) = *(obj->getCamera());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
xshHandle->notifyXsheetChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::enableSplineAim(TStageObject *obj, int state,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
UndoStatusChange *undo = new UndoStatusChange(obj, xshHandle);
|
|
Shinya Kitaoka |
120a6e |
obj->enableAim(state != 2);
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(undo);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TStageObjectCmd::enableSplineUppk(TStageObject *obj, bool toggled,
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
UndoStatusChange *undo = new UndoStatusChange(obj, xshHandle);
|
|
Shinya Kitaoka |
120a6e |
obj->enableUppk(toggled);
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(undo);
|
|
Toshihiro Shimizu |
890ddd |
}
|