|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "stageobjectselection.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tundo.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tconst.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/schematicnode.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/stageschematicnode.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/stageobjectsdata.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobject.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobjectcmd.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txsheethandle.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tcolumnhandle.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txsheet.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobjecttree.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/selectioncommandids.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "historytypes.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include <qset></qset>
|
|
Toshihiro Shimizu |
890ddd |
#include <qapplication></qapplication>
|
|
Toshihiro Shimizu |
890ddd |
#include <qclipboard></qclipboard>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace {
|
|
Shinya Kitaoka |
d1f6c4 |
class TPasteSelectionUndo final : public TUndo {
|
|
Shinya Kitaoka |
120a6e |
StageObjectsData *m_objData;
|
|
Shinya Kitaoka |
120a6e |
int m_index;
|
|
Shinya Kitaoka |
120a6e |
std::vector<tstageobjectid> m_pastedId;</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
std::list<int> m_pastedSplineIds;</int>
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectid, *="" qlist<tfxport="">> m_columnFxConnections;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
TXsheetHandle *m_xshHandle;
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *m_objHandle;
|
|
Shinya Kitaoka |
120a6e |
TFxHandle *m_fxHandle;
|
|
Shinya Kitaoka |
120a6e |
TPointD m_pastedPos;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TPasteSelectionUndo(StageObjectsData *objData, int index,
|
|
Shinya Kitaoka |
120a6e |
const std::vector<tstageobjectid> &pastedId,</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
const std::list<int> pastedSplineIds,</int>
|
|
Shinya Kitaoka |
120a6e |
const TPointD &pastedPos, TXsheetHandle *xshHandle,
|
|
Shinya Kitaoka |
120a6e |
TObjectHandle *objHandle, TFxHandle *fxHandle)
|
|
Shinya Kitaoka |
120a6e |
: TUndo()
|
|
Shinya Kitaoka |
120a6e |
, m_objData(objData)
|
|
Shinya Kitaoka |
120a6e |
, m_index(index)
|
|
Shinya Kitaoka |
120a6e |
, m_pastedSplineIds(pastedSplineIds)
|
|
Shinya Kitaoka |
120a6e |
, m_pastedId(pastedId)
|
|
Shinya Kitaoka |
120a6e |
, m_xshHandle(xshHandle)
|
|
Shinya Kitaoka |
120a6e |
, m_objHandle(objHandle)
|
|
Shinya Kitaoka |
120a6e |
, m_fxHandle(fxHandle)
|
|
Shinya Kitaoka |
120a6e |
, m_pastedPos(pastedPos) {
|
|
Shinya Kitaoka |
120a6e |
std::vector<tstageobjectid>::const_iterator it;</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
for (it = m_pastedId.begin(); it != m_pastedId.end(); it++) {
|
|
Shinya Kitaoka |
120a6e |
if (it->isColumn()) {
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TXshColumnP column = xsh->getColumn(it->getIndex());
|
|
Shinya Kitaoka |
120a6e |
assert(column);
|
|
Shinya Kitaoka |
120a6e |
TFx *columnFx = column->getFx();
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < columnFx->getOutputConnectionCount(); i++)
|
|
Shinya Kitaoka |
120a6e |
m_columnFxConnections[*it].append(columnFx->getOutputConnection(i));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~TPasteSelectionUndo() {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void undo() const override {
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->blockSignals(true);
|
|
Shinya Kitaoka |
120a6e |
TStageObjectCmd::deleteSelection(
|
|
Shinya Kitaoka |
120a6e |
m_pastedId, std::list<qpair<tstageobjectid, tstageobjectid="">>(),</qpair<tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
m_pastedSplineIds, m_xshHandle, m_objHandle, m_fxHandle, false);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->blockSignals(false);
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void redo() const override {
|
|
Shinya Kitaoka |
120a6e |
std::set<int> indexes;</int>
|
|
Shinya Kitaoka |
120a6e |
indexes.insert(m_index);
|
|
Shinya Kitaoka |
120a6e |
std::list<int> splineIds;</int>
|
|
Shinya Kitaoka |
120a6e |
m_objData->restoreObjects(indexes, splineIds, m_xshHandle->getXsheet(), 0,
|
|
Shinya Kitaoka |
120a6e |
m_pastedPos);
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectid, *="" qlist<tfxport="">>::const_iterator it;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
for (it = m_columnFxConnections.begin(); it != m_columnFxConnections.end();
|
|
Shinya Kitaoka |
120a6e |
it++) {
|
|
Shinya Kitaoka |
120a6e |
TXshColumnP column = xsh->getColumn(it.key().getIndex());
|
|
Shinya Kitaoka |
120a6e |
assert(column);
|
|
Shinya Kitaoka |
120a6e |
TFx *columnFx = column->getFx();
|
|
Shinya Kitaoka |
120a6e |
QList<tfxport *=""> ports = it.value();</tfxport>
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < ports.size(); i++) ports[i]->setFx(columnFx);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
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(StageObjectsData);
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
QString getHistoryString() override {
|
|
Shinya Kitaoka |
120a6e |
QString str = QObject::tr("Paste Object ");
|
|
Shinya Kitaoka |
120a6e |
std::vector<tstageobjectid>::iterator it = m_pastedId.begin();</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
for (; it != m_pastedId.end(); it++) {
|
|
Shinya Kitaoka |
120a6e |
if (it != m_pastedId.begin()) str += QString::fromStdString(", ");
|
|
Shinya Kitaoka |
120a6e |
str += QString::fromStdString((*it).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 |
//
|
|
Shinya Kitaoka |
120a6e |
// StageObjectSelection
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//======================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
StageObjectSelection::StageObjectSelection()
|
|
Shinya Kitaoka |
120a6e |
: m_xshHandle(0)
|
|
Shinya Kitaoka |
120a6e |
, m_objHandle(0)
|
|
Shinya Kitaoka |
120a6e |
, m_fxHandle(0)
|
|
Shinya Kitaoka |
120a6e |
, m_pastePosition(TConst::nowhere) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
StageObjectSelection::StageObjectSelection(const StageObjectSelection &src)
|
|
Shinya Kitaoka |
120a6e |
: m_selectedObjects(src.m_selectedObjects)
|
|
Shinya Kitaoka |
120a6e |
, m_selectedLinks(src.m_selectedLinks)
|
|
Shinya Kitaoka |
120a6e |
, m_selectedSplines(src.m_selectedSplines)
|
|
Shinya Kitaoka |
120a6e |
, m_xshHandle(src.m_xshHandle)
|
|
Shinya Kitaoka |
120a6e |
, m_objHandle(src.m_objHandle)
|
|
Shinya Kitaoka |
120a6e |
, m_fxHandle(src.m_fxHandle)
|
|
Shinya Kitaoka |
120a6e |
, m_pastePosition(TConst::nowhere) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
StageObjectSelection::~StageObjectSelection() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::enableCommands() {
|
|
Shinya Kitaoka |
120a6e |
enableCommand(this, MI_Clear, &StageObjectSelection::deleteSelection);
|
|
Shinya Kitaoka |
120a6e |
enableCommand(this, MI_Group, &StageObjectSelection::groupSelection);
|
|
Shinya Kitaoka |
120a6e |
enableCommand(this, MI_Ungroup, &StageObjectSelection::ungroupSelection);
|
|
Shinya Kitaoka |
120a6e |
enableCommand(this, MI_Collapse, &StageObjectSelection::collapseSelection);
|
|
Shinya Kitaoka |
120a6e |
enableCommand(this, MI_ExplodeChild, &StageObjectSelection::explodeChild);
|
|
Shinya Kitaoka |
120a6e |
enableCommand(this, MI_Copy, &StageObjectSelection::copySelection);
|
|
Shinya Kitaoka |
120a6e |
enableCommand(this, MI_Paste, &StageObjectSelection::pasteSelection);
|
|
Shinya Kitaoka |
120a6e |
enableCommand(this, MI_Cut, &StageObjectSelection::cutSelection);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::deleteSelection() {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectCmd::deleteSelection(
|
|
Shinya Kitaoka |
120a6e |
m_selectedObjects.toVector().toStdVector(), m_selectedLinks.toStdList(),
|
|
Shinya Kitaoka |
120a6e |
m_selectedSplines.toStdList(), m_xshHandle, m_objHandle, m_fxHandle);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::select(const TStageObjectId &id) {
|
|
Shinya Kitaoka |
120a6e |
m_selectedObjects.append(id);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::unselect(const TStageObjectId &id) {
|
|
Shinya Kitaoka |
120a6e |
int index = m_selectedObjects.indexOf(id);
|
|
Shinya Kitaoka |
120a6e |
if (index >= 0) m_selectedObjects.removeAt(index);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::select(int id) { m_selectedSplines.append(id); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::unselect(int id) {
|
|
Shinya Kitaoka |
120a6e |
int index = m_selectedSplines.indexOf(id);
|
|
Shinya Kitaoka |
120a6e |
if (index >= 0) m_selectedSplines.removeAt(index);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::select(SchematicLink *link) {
|
|
Shinya Kitaoka |
120a6e |
QPair<tstageobjectid, tstageobjectid=""> boundingObjects =</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
getBoundingObjects(link);
|
|
Shinya Kitaoka |
120a6e |
m_selectedLinks.append(boundingObjects);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::unselect(SchematicLink *link) {
|
|
Shinya Kitaoka |
120a6e |
QPair<tstageobjectid, tstageobjectid=""> boundingObjects =</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
getBoundingObjects(link);
|
|
Shinya Kitaoka |
120a6e |
int index = m_selectedLinks.indexOf(boundingObjects);
|
|
Shinya Kitaoka |
120a6e |
if (index >= 0) m_selectedLinks.removeAt(index);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool StageObjectSelection::isSelected(const TStageObjectId &id) const {
|
|
Shinya Kitaoka |
120a6e |
return m_selectedObjects.contains(id);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool StageObjectSelection::isSelected(SchematicLink *link) {
|
|
Shinya Kitaoka |
120a6e |
QPair<tstageobjectid, tstageobjectid=""> boundingObjects =</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
getBoundingObjects(link);
|
|
Shinya Kitaoka |
120a6e |
return m_selectedLinks.contains(boundingObjects);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QPair<tstageobjectid, tstageobjectid=""> StageObjectSelection::getBoundingObjects(</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
SchematicLink *link) {
|
|
Shinya Kitaoka |
120a6e |
QPair<tstageobjectid, tstageobjectid=""> boundingObjects;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
if (link) {
|
|
Shinya Kitaoka |
120a6e |
SchematicPort *port = link->getStartPort();
|
|
Shinya Kitaoka |
120a6e |
if (port->getType() == 100 && link->getEndPort()->getType() == 100) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *node =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematicnode *="">(port->getNode());</stageschematicnode>
|
|
Shinya Kitaoka |
120a6e |
if (node)
|
|
Shinya Kitaoka |
120a6e |
boundingObjects = getBoundingObjects(port, port);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
boundingObjects =
|
|
Shinya Kitaoka |
120a6e |
getBoundingObjects(link->getEndPort(), link->getEndPort());
|
|
Shinya Kitaoka |
120a6e |
} else if (port->getType() == 101)
|
|
Shinya Kitaoka |
120a6e |
boundingObjects = getBoundingObjects(port, link->getOtherPort(port));
|
|
Shinya Kitaoka |
120a6e |
else if (port->getType() == 102)
|
|
Shinya Kitaoka |
120a6e |
boundingObjects = getBoundingObjects(link->getOtherPort(port), port);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return boundingObjects;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QPair<tstageobjectid, tstageobjectid=""> StageObjectSelection::getBoundingObjects(</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
SchematicPort *inputPort, SchematicPort *outputPort) {
|
|
Shinya Kitaoka |
120a6e |
QPair<tstageobjectid, tstageobjectid=""> boundingObjects;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *inputNode =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematicnode *="">(inputPort->getNode());</stageschematicnode>
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *outputNode =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematicnode *="">(outputPort->getNode());</stageschematicnode>
|
|
Shinya Kitaoka |
120a6e |
if (!inputNode || !outputNode) return boundingObjects;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId inputId = inputNode->getStageObject()->getId();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId outputId = outputNode->getStageObject()->getId();
|
|
Shinya Kitaoka |
120a6e |
boundingObjects.first = inputId;
|
|
Shinya Kitaoka |
120a6e |
boundingObjects.second = outputId;
|
|
Shinya Kitaoka |
120a6e |
return boundingObjects;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool StageObjectSelection::isConnected() const {
|
|
Shinya Kitaoka |
120a6e |
int count = 0;
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
bool canBeGrouped = true;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < m_selectedObjects.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = m_selectedObjects[i];
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = pegTree->getStageObject(id, false);
|
|
Shinya Kitaoka |
120a6e |
if (!m_selectedObjects.contains(obj->getParent())) {
|
|
Shinya Kitaoka |
120a6e |
count++;
|
|
Shinya Kitaoka |
120a6e |
continue;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TStageObject *parentObj = pegTree->getStageObject(obj->getParent(), false);
|
|
Shinya Kitaoka |
120a6e |
canBeGrouped = canBeGrouped &&
|
|
Shinya Kitaoka |
120a6e |
obj->getEditingGroupId() == parentObj->getEditingGroupId();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return count == 1 && canBeGrouped;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::groupSelection() {
|
|
Shinya Kitaoka |
120a6e |
if (m_selectedObjects.size() <= 1 || !isConnected()) return;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectCmd::group(m_selectedObjects, m_xshHandle);
|
|
Shinya Kitaoka |
120a6e |
selectNone();
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::ungroupSelection() {
|
|
Shinya Kitaoka |
120a6e |
if (isEmpty()) return;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *objTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
if (!objTree) return;
|
|
Shinya Kitaoka |
120a6e |
QSet<int> idSet;</int>
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < m_selectedObjects.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
int groupId =
|
|
Shinya Kitaoka |
120a6e |
objTree->getStageObject(m_selectedObjects[i], false)->getGroupId();
|
|
Shinya Kitaoka |
120a6e |
if (groupId > 0)
|
|
Shinya Kitaoka |
120a6e |
idSet.insert(
|
|
Shinya Kitaoka |
120a6e |
objTree->getStageObject(m_selectedObjects[i], false)->getGroupId());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->beginBlock();
|
|
Shinya Kitaoka |
120a6e |
QSet<int>::iterator it;</int>
|
|
Shinya Kitaoka |
120a6e |
for (it = idSet.begin(); it != idSet.end(); it++)
|
|
Shinya Kitaoka |
120a6e |
TStageObjectCmd::ungroup(*it, m_xshHandle);
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->endBlock();
|
|
Shinya Kitaoka |
120a6e |
selectNone();
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::collapseSelection() {
|
|
Shinya Kitaoka |
120a6e |
if (isEmpty()) return;
|
|
Shinya Kitaoka |
120a6e |
QList<tstageobjectid> objects = getObjects();</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
if (!objects.isEmpty()) emit doCollapse(objects);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::explodeChild() {
|
|
Shinya Kitaoka |
120a6e |
if (isEmpty()) return;
|
|
Shinya Kitaoka |
120a6e |
QList<tstageobjectid> objects = getObjects();</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
if (!objects.isEmpty()) emit doExplodeChild(objects);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::copySelection() {
|
|
Shinya Kitaoka |
120a6e |
StageObjectsData *data = new StageObjectsData();
|
|
Shinya Kitaoka |
120a6e |
bool pegSelected = false;
|
|
Shinya Kitaoka |
120a6e |
data->storeObjects(
|
|
Shinya Kitaoka |
120a6e |
m_selectedObjects.toVector().toStdVector(), m_xshHandle->getXsheet(),
|
|
Shinya Kitaoka |
120a6e |
StageObjectsData::eDoClone | StageObjectsData::eResetFxDagPositions);
|
|
Shinya Kitaoka |
120a6e |
std::set<int> columnIndexes;</int>
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < m_selectedObjects.size(); i++)
|
|
Shinya Kitaoka |
120a6e |
if (m_selectedObjects[i].isColumn())
|
|
Shinya Kitaoka |
120a6e |
columnIndexes.insert(m_selectedObjects[i].getIndex());
|
|
Shinya Kitaoka |
120a6e |
data->storeColumnFxs(
|
|
Shinya Kitaoka |
120a6e |
columnIndexes, m_xshHandle->getXsheet(),
|
|
Shinya Kitaoka |
120a6e |
StageObjectsData::eDoClone | StageObjectsData::eResetFxDagPositions);
|
|
Shinya Kitaoka |
120a6e |
data->storeSplines(
|
|
Shinya Kitaoka |
120a6e |
m_selectedSplines.toStdList(), m_xshHandle->getXsheet(),
|
|
Shinya Kitaoka |
120a6e |
StageObjectsData::eDoClone | StageObjectsData::eResetFxDagPositions);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!data->isEmpty())
|
|
Shinya Kitaoka |
120a6e |
QApplication::clipboard()->setMimeData(data);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
delete data;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::pasteSelection() {
|
|
Shinya Kitaoka |
120a6e |
int index = m_xshHandle->getXsheet()->getColumnCount();
|
|
Shinya Kitaoka |
120a6e |
const QMimeData *data = QApplication::clipboard()->mimeData();
|
|
Shinya Kitaoka |
120a6e |
const StageObjectsData *objData =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<const *="" stageobjectsdata="">(data);</const>
|
|
Shinya Kitaoka |
120a6e |
if (!objData) return;
|
|
Shinya Kitaoka |
120a6e |
std::set<int> indexes;</int>
|
|
Shinya Kitaoka |
120a6e |
indexes.insert(index);
|
|
Shinya Kitaoka |
120a6e |
std::list<int> restoredSplineIds;</int>
|
|
Shinya Kitaoka |
120a6e |
std::vector<tstageobjectid> ids = objData->restoreObjects(</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
indexes, restoredSplineIds, m_xshHandle->getXsheet(),
|
|
Shinya Kitaoka |
120a6e |
StageObjectsData::eDoClone, m_pastePosition);
|
|
Shinya Kitaoka |
120a6e |
StageObjectsData *undoData = new StageObjectsData();
|
|
Shinya Kitaoka |
120a6e |
undoData->storeObjects(ids, m_xshHandle->getXsheet(), 0);
|
|
Shinya Kitaoka |
120a6e |
undoData->storeColumnFxs(indexes, m_xshHandle->getXsheet(), 0);
|
|
Shinya Kitaoka |
120a6e |
undoData->storeSplines(restoredSplineIds, m_xshHandle->getXsheet(), 0);
|
|
Shinya Kitaoka |
120a6e |
TUndoManager::manager()->add(new TPasteSelectionUndo(
|
|
Shinya Kitaoka |
120a6e |
undoData, index, ids, restoredSplineIds, m_pastePosition, m_xshHandle,
|
|
Shinya Kitaoka |
120a6e |
m_objHandle, m_fxHandle));
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Shinya Kitaoka |
120a6e |
m_pastePosition = TConst::nowhere;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageObjectSelection::cutSelection() {
|
|
Shinya Kitaoka |
120a6e |
copySelection();
|
|
Shinya Kitaoka |
120a6e |
deleteSelection();
|
|
Toshihiro Shimizu |
890ddd |
}
|