|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/stageschematicscene.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzQt includes
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/stageschematicnode.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/dvdialog.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/gutil.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/schematicgroupeditor.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "stageobjectselection.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/icongenerator.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzLib includes
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txsheet.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/tscenehandle.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tframehandle.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/txshcolumn.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/toonzscene.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobjecttree.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobjectspline.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tcamera.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tstageobjectcmd.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tproject.h"
|
|
manongjohn |
d6e3cc |
#include "toonz/childstack.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzCore includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tconst.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tsystem.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tstream.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tstroke.h"
|
|
shun_iwasawa |
22eaa4 |
#include "tenv.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Qt includes
|
|
Toshihiro Shimizu |
890ddd |
#include <qmenu></qmenu>
|
|
Toshihiro Shimizu |
890ddd |
#include <qgraphicsscenecontextmenuevent></qgraphicsscenecontextmenuevent>
|
|
Toshihiro Shimizu |
890ddd |
#include <qgraphicsscenemouseevent></qgraphicsscenemouseevent>
|
|
Toshihiro Shimizu |
890ddd |
#include <qfiledialog></qfiledialog>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TEnv::IntVar ShowLetterOnOutputPortOfStageNode(
|
|
Shinya Kitaoka |
120a6e |
"ShowLetterOnOutputPortOfStageNode", 0);
|
|
shun_iwasawa |
22eaa4 |
|
|
Shinya Kitaoka |
120a6e |
namespace {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//! Define the method to sort a TreeStageNode container.
|
|
Toshihiro Shimizu |
890ddd |
//! The sorting follows these rules:
|
|
Toshihiro Shimizu |
890ddd |
//! \li TableNode < CameraNode < PegbarNode < ColumnNode
|
|
Toshihiro Shimizu |
890ddd |
//! \li if two nodes are of the same type, they are odered using indexes
|
|
Shinya Kitaoka |
120a6e |
class CompareNodes {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
bool operator()(TreeStageNode *node1, TreeStageNode *node2) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id1 = node1->getNode()->getStageObject()->getId();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id2 = node2->getNode()->getStageObject()->getId();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (id1.isTable() ||
|
|
Shinya Kitaoka |
120a6e |
(id1.isCamera() && !id2.isTable() && !id2.isCamera()) ||
|
|
Shinya Kitaoka |
120a6e |
(id1.isPegbar() && !id2.isTable() && !id2.isCamera() &&
|
|
Shinya Kitaoka |
120a6e |
!id2.isPegbar()))
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
if ((id1.isCamera() && id2.isCamera()) ||
|
|
Shinya Kitaoka |
120a6e |
(id1.isTable() && id2.isTable()) ||
|
|
Shinya Kitaoka |
120a6e |
(id1.isPegbar() && id2.isPegbar()) ||
|
|
Shinya Kitaoka |
120a6e |
(id1.isColumn() && id2.isColumn()))
|
|
Shinya Kitaoka |
120a6e |
return id1.getIndex() < id2.getIndex();
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObject *getRoot(const QList<tstageobject *=""> &objs,</tstageobject>
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegTree) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < objs.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *parent = pegTree->getStageObject(objs[i]->getParent(), false);
|
|
Shinya Kitaoka |
120a6e |
if (objs.contains(parent))
|
|
Shinya Kitaoka |
120a6e |
continue;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
return objs[i];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void keepSubgroup(QMap<int, *="" qlist<schematicnode="">> &editedGroup) {</int,>
|
|
Shinya Kitaoka |
120a6e |
QMap<int, *="" qlist<schematicnode="">>::iterator it;</int,>
|
|
Shinya Kitaoka |
120a6e |
for (it = editedGroup.begin(); it != editedGroup.end(); it++) {
|
|
Shinya Kitaoka |
120a6e |
QList<schematicnode *=""> groupedNodes = it.value();</schematicnode>
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < groupedNodes.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *node =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematicnode *="">(groupedNodes[i]);</stageschematicnode>
|
|
Shinya Kitaoka |
120a6e |
if (!node) continue;
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = node->getStageObject();
|
|
Shinya Kitaoka |
120a6e |
assert(obj);
|
|
Shinya Kitaoka |
120a6e |
QMap<int, *="" qlist<schematicnode="">>::iterator it2;</int,>
|
|
Shinya Kitaoka |
120a6e |
for (it2 = editedGroup.begin(); it2 != editedGroup.end(); it2++) {
|
|
Shinya Kitaoka |
120a6e |
if (obj->isContainedInGroup(it2.key()) &&
|
|
Shinya Kitaoka |
120a6e |
!editedGroup[it2.key()].contains(node))
|
|
Shinya Kitaoka |
120a6e |
editedGroup[it2.key()].append(node);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
manongjohn |
adae7d |
bool resizingNodes = false;
|
|
manongjohn |
adae7d |
bool updatingScene = false;
|
|
Shinya Kitaoka |
120a6e |
} // namespace
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//==================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// TreeStageNode
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//==================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TreeStageNode::sortChildren(int startIndex, int lastIndex) {
|
|
Shinya Kitaoka |
120a6e |
if (startIndex == lastIndex) return;
|
|
Shinya Kitaoka |
120a6e |
std::vector<treestagenode *="">::iterator begin, end;</treestagenode>
|
|
Shinya Kitaoka |
120a6e |
begin = m_cildren.begin() + startIndex;
|
|
Shinya Kitaoka |
120a6e |
end = m_cildren.begin() + lastIndex;
|
|
Shinya Kitaoka |
120a6e |
std::sort(begin, end, CompareNodes());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//==================================================================
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
// StageSchematicScene
|
|
Toshihiro Shimizu |
890ddd |
//
|
|
Toshihiro Shimizu |
890ddd |
//==================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
StageSchematicScene::StageSchematicScene(QWidget *parent)
|
|
Shinya Kitaoka |
120a6e |
: SchematicScene(parent)
|
|
Shinya Kitaoka |
120a6e |
, m_nextNodePos(0, 0)
|
|
Shinya Kitaoka |
120a6e |
, m_xshHandle(0)
|
|
Shinya Kitaoka |
120a6e |
, m_objHandle(0)
|
|
Shinya Kitaoka |
120a6e |
, m_colHandle(0)
|
|
Shinya Kitaoka |
120a6e |
, m_sceneHandle(0)
|
|
Shinya Kitaoka |
120a6e |
, m_frameHandle(0)
|
|
Shinya Kitaoka |
120a6e |
, m_gridDimension(eSmall)
|
|
manongjohn |
d6e3cc |
, m_showLetterOnPortFlag(ShowLetterOnOutputPortOfStageNode != 0)
|
|
manongjohn |
d6e3cc |
, m_viewer() {
|
|
manongjohn |
d6e3cc |
m_viewer = (SchematicViewer *)parent;
|
|
manongjohn |
d6e3cc |
|
|
Shinya Kitaoka |
120a6e |
QPointF sceneCenter = sceneRect().center();
|
|
Shinya Kitaoka |
120a6e |
m_firstPos = TPointD(sceneCenter.x(), sceneCenter.y());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_selection = new StageObjectSelection();
|
|
Shinya Kitaoka |
120a6e |
connect(m_selection, SIGNAL(doCollapse(QList<tstageobjectid>)), this,</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
SLOT(onCollapse(QList<tstageobjectid>)));</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
connect(m_selection, SIGNAL(doExplodeChild(QList<tstageobjectid>)), this,</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
SIGNAL(doExplodeChild(QList<tstageobjectid>)));</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
connect(this, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()));
|
|
Shinya Kitaoka |
120a6e |
m_highlightedLinks.clear();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
StageSchematicScene::~StageSchematicScene() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::setXsheetHandle(TXsheetHandle *xshHandle) {
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle = xshHandle;
|
|
Shinya Kitaoka |
120a6e |
m_selection->setXsheetHandle(xshHandle);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::setObjectHandle(TObjectHandle *objHandle) {
|
|
Shinya Kitaoka |
120a6e |
m_objHandle = objHandle;
|
|
Shinya Kitaoka |
120a6e |
m_selection->setObjectHandle(objHandle);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::setColumnHandle(TColumnHandle *colHandle) {
|
|
Shinya Kitaoka |
120a6e |
m_colHandle = colHandle;
|
|
Shinya Kitaoka |
120a6e |
m_selection->setColumnHandle(colHandle);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::setFxHandle(TFxHandle *fxHandle) {
|
|
Shinya Kitaoka |
120a6e |
m_selection->setFxHandle(fxHandle);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onSelectionSwitched(TSelection *oldSel,
|
|
Shinya Kitaoka |
120a6e |
TSelection *newSel) {
|
|
Shinya Kitaoka |
120a6e |
if (m_selection == oldSel && m_selection != newSel) clearSelection();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::updateScene() {
|
|
manongjohn |
adae7d |
if (updatingScene) return;
|
|
manongjohn |
adae7d |
updatingScene = true;
|
|
Shinya Kitaoka |
120a6e |
clearAllItems();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QPointF firstPos = sceneRect().center();
|
|
Shinya Kitaoka |
120a6e |
m_nextNodePos = TPointD(firstPos.x(), firstPos.y());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_nodeTable.clear();
|
|
Shinya Kitaoka |
120a6e |
m_GroupTable.clear();
|
|
Shinya Kitaoka |
120a6e |
m_groupEditorTable.clear();
|
|
Shinya Kitaoka |
120a6e |
m_gridDimension = pegTree->getDagGridDimension();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QMap<int, *="" qlist<tstageobject="">> groupedObj;</int,>
|
|
Shinya Kitaoka |
120a6e |
QMap<int, *="" qlist<schematicnode="">> editedGroup;</int,>
|
|
Shinya Kitaoka |
120a6e |
// in order to draw the position-specified nodes first
|
|
Shinya Kitaoka |
120a6e |
QList<int> modifiedNodeIds;</int>
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < pegTree->getStageObjectCount(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = pegTree->getStageObject(i);
|
|
Shinya Kitaoka |
120a6e |
if (pegbar->getDagNodePos() == TConst::nowhere)
|
|
Shinya Kitaoka |
120a6e |
modifiedNodeIds.push_back(i);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
modifiedNodeIds.push_front(i);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < modifiedNodeIds.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = pegTree->getStageObject(modifiedNodeIds.at(i));
|
|
Shinya Kitaoka |
120a6e |
if (pegbar->isGrouped() && !pegbar->isGroupEditing()) {
|
|
Shinya Kitaoka |
120a6e |
groupedObj[pegbar->getGroupId()].push_back(pegbar);
|
|
Shinya Kitaoka |
120a6e |
continue;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *node = addStageSchematicNode(pegbar);
|
|
Shinya Kitaoka |
120a6e |
if (node != 0) {
|
|
Shinya Kitaoka |
120a6e |
m_nodeTable[pegbar->getId()] = node;
|
|
Shinya Kitaoka |
120a6e |
if (pegbar->isGrouped())
|
|
Shinya Kitaoka |
120a6e |
editedGroup[pegbar->getEditingGroupId()].append(node);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// Motion Path
|
|
Shinya Kitaoka |
120a6e |
m_splineTable.clear();
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < pegTree->getSplineCount(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = pegTree->getSpline(i);
|
|
Shinya Kitaoka |
120a6e |
StageSchematicSplineNode *node = addSchematicSplineNode(spline);
|
|
Shinya Kitaoka |
120a6e |
if (node != 0) {
|
|
Shinya Kitaoka |
120a6e |
m_splineTable[spline] = node;
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(currentObjectChanged(const TStageObjectId &, bool)),
|
|
Shinya Kitaoka |
120a6e |
this, SLOT(onCurrentObjectChanged(const TStageObjectId &, bool)));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QMap<int, *="" qlist<tstageobject="">>::iterator it;</int,>
|
|
Shinya Kitaoka |
120a6e |
for (it = groupedObj.begin(); it != groupedObj.end(); it++) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicGroupNode *node = addStageGroupNode(it.value());
|
|
Shinya Kitaoka |
120a6e |
m_GroupTable[it.key()] = node;
|
|
Shinya Kitaoka |
120a6e |
int editingGroupId = node->getStageObject()->getEditingGroupId();
|
|
Shinya Kitaoka |
120a6e |
if (editingGroupId != -1) editedGroup[editingGroupId].append(node);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
keepSubgroup(editedGroup);
|
|
Shinya Kitaoka |
120a6e |
updateEditedGroups(editedGroup);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// update stage links
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < pegTree->getStageObjectCount(); i++)
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = pegTree->getStageObject(i);
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId parentId = pegbar->getParent();
|
|
Shinya Kitaoka |
120a6e |
// update link; find StageSchematicNode representing pegbar
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectid, *="" stageschematicnode="">::iterator it;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!pegbar->isGrouped() || pegbar->isGroupEditing()) {
|
|
Shinya Kitaoka |
120a6e |
it = m_nodeTable.find(pegbar->getId());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! note: not every stage object is represented in the scene (e.g. empty
|
|
Shinya Kitaoka |
120a6e |
//! columns are not)
|
|
Shinya Kitaoka |
120a6e |
if (it == m_nodeTable.end()) continue;
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *node = it.value();
|
|
Shinya Kitaoka |
120a6e |
// get pegbar parent
|
|
Shinya Kitaoka |
120a6e |
if (parentId != TStageObjectId::NoneId) {
|
|
Shinya Kitaoka |
120a6e |
// find StageSchematicNode representing parentId
|
|
Shinya Kitaoka |
120a6e |
it = m_nodeTable.find(parentId);
|
|
Shinya Kitaoka |
120a6e |
if (it != m_nodeTable.end()) // at least we avoid crash
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *parentNode = it.value();
|
|
Shinya Kitaoka |
120a6e |
if (parentNode) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNodePort *port1 = parentNode->makeChildPort(
|
|
Shinya Kitaoka |
120a6e |
QString::fromStdString(pegbar->getParentHandle()));
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNodePort *port2 = node->makeParentPort(
|
|
Shinya Kitaoka |
120a6e |
QString::fromStdString(pegbar->getHandle()));
|
|
Shinya Kitaoka |
120a6e |
port2->makeLink(port1);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TStageObject *parent = pegTree->getStageObject(parentId, false);
|
|
Shinya Kitaoka |
120a6e |
if (parent && parent->isGrouped()) {
|
|
Shinya Kitaoka |
120a6e |
int groupId = parent->getGroupId();
|
|
Shinya Kitaoka |
120a6e |
if (m_GroupTable.contains(groupId)) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicGroupNode *groupeNode = m_GroupTable[groupId];
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNodePort *port1 = groupeNode->getChildPort(0);
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNodePort *port2 = node->makeParentPort(
|
|
Shinya Kitaoka |
120a6e |
QString::fromStdString(pegbar->getHandle()));
|
|
Shinya Kitaoka |
120a6e |
port2->makeLink(port1);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// link to motion path
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = pegbar->getSpline();
|
|
Shinya Kitaoka |
120a6e |
if (spline) {
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectspline *="" *,="" stageschematicsplinenode="">::iterator</tstageobjectspline>
|
|
Shinya Kitaoka |
120a6e |
splineIt;
|
|
Shinya Kitaoka |
120a6e |
splineIt = m_splineTable.find(spline);
|
|
Shinya Kitaoka |
120a6e |
if (splineIt != m_splineTable.end()) {
|
|
Shinya Kitaoka |
120a6e |
SchematicPort *port1 = splineIt.value()->getPort(-1);
|
|
Shinya Kitaoka |
120a6e |
SchematicPort *port2 = node->getPort(-1);
|
|
Shinya Kitaoka |
120a6e |
port2->makeLink(port1);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
int groupId = pegbar->getGroupId();
|
|
Shinya Kitaoka |
120a6e |
StageSchematicGroupNode *groupeNode = m_GroupTable[groupId];
|
|
Shinya Kitaoka |
120a6e |
TStageObject *parent = pegTree->getStageObject(parentId, false);
|
|
Shinya Kitaoka |
120a6e |
if (parent && (!parent->isGrouped() || parent->isGroupEditing())) {
|
|
Shinya Kitaoka |
120a6e |
it = m_nodeTable.find(parentId);
|
|
Shinya Kitaoka |
120a6e |
if (it == m_nodeTable.end()) continue;
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *parentNode = it.value();
|
|
Shinya Kitaoka |
120a6e |
if (parentNode) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNodePort *port1 = parentNode->makeChildPort(
|
|
Shinya Kitaoka |
120a6e |
QString::fromStdString(pegbar->getParentHandle()));
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNodePort *port2 = groupeNode->getParentPort();
|
|
Shinya Kitaoka |
120a6e |
port2->makeLink(port1);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (parent && parent->isGrouped()) {
|
|
Shinya Kitaoka |
120a6e |
int parentGroupId = parent->getGroupId();
|
|
Shinya Kitaoka |
120a6e |
if (m_GroupTable.contains(parentGroupId)) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicGroupNode *groupeParentNode =
|
|
Shinya Kitaoka |
120a6e |
m_GroupTable[parentGroupId];
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNodePort *port1 = groupeParentNode->getChildPort(0);
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNodePort *port2 = groupeNode->getParentPort();
|
|
Shinya Kitaoka |
120a6e |
if (!port1->isLinkedTo(port2) && groupeParentNode != groupeNode)
|
|
Shinya Kitaoka |
120a6e |
port2->makeLink(port1);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = pegbar->getSpline();
|
|
Shinya Kitaoka |
120a6e |
if (spline) {
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectspline *="" *,="" stageschematicsplinenode="">::iterator</tstageobjectspline>
|
|
Shinya Kitaoka |
120a6e |
splineIt;
|
|
Shinya Kitaoka |
120a6e |
splineIt = m_splineTable.find(spline);
|
|
Shinya Kitaoka |
120a6e |
if (splineIt != m_splineTable.end()) {
|
|
Shinya Kitaoka |
120a6e |
SchematicPort *port1 = splineIt.value()->getPort(-1);
|
|
Shinya Kitaoka |
120a6e |
SchematicPort *port2 = groupeNode->getPort(-1);
|
|
Shinya Kitaoka |
120a6e |
port2->makeLink(port1);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_nodesToPlace.clear();
|
|
manongjohn |
adae7d |
updatingScene = false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *StageSchematicScene::addStageSchematicNode(
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar) {
|
|
Shinya Kitaoka |
120a6e |
// create the node according to the type of StageObject
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *node = createStageSchematicNode(this, pegbar);
|
|
Shinya Kitaoka |
120a6e |
if (!node) return 0;
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(sceneChanged()), this, SLOT(onSceneChanged()));
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(xsheetChanged()), this, SLOT(onXsheetChanged()));
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(currentObjectChanged(const TStageObjectId &, bool)),
|
|
Shinya Kitaoka |
120a6e |
this, SLOT(onCurrentObjectChanged(const TStageObjectId &, bool)));
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(currentColumnChanged(int)), this,
|
|
Shinya Kitaoka |
120a6e |
SLOT(onCurrentColumnChanged(int)));
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(editObject()), this, SIGNAL(editObject()));
|
|
manongjohn |
adae7d |
connect(node, SIGNAL(nodeChangedSize()), this, SLOT(onNodeChangedSize()));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// specify the node position
|
|
Shinya Kitaoka |
120a6e |
if (pegbar->getDagNodePos() == TConst::nowhere) {
|
|
Shinya Kitaoka |
120a6e |
if (pegbar->getId().isColumn()) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicColumnNode *cNode =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematiccolumnnode *="">(node);</stageschematiccolumnnode>
|
|
Shinya Kitaoka |
120a6e |
assert(node);
|
|
Shinya Kitaoka |
120a6e |
cNode->resize(m_gridDimension == 0);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
placeNode(node);
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
updatePosition(node, pegbar->getDagNodePos());
|
|
Shinya Kitaoka |
120a6e |
return node;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
StageSchematicGroupNode *StageSchematicScene::addStageGroupNode(
|
|
Shinya Kitaoka |
120a6e |
QList<tstageobject *=""> objs) {</tstageobject>
|
|
Shinya Kitaoka |
120a6e |
if (objs.isEmpty()) return 0;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *objTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
TStageObject *root = getRoot(objs, objTree);
|
|
Shinya Kitaoka |
120a6e |
StageSchematicGroupNode *node = new StageSchematicGroupNode(this, root, objs);
|
|
Shinya Kitaoka |
120a6e |
if (!node) return 0;
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(sceneChanged()), this, SLOT(onSceneChanged()));
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(xsheetChanged()), this, SLOT(onXsheetChanged()));
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(currentObjectChanged(const TStageObjectId &, bool)),
|
|
Shinya Kitaoka |
120a6e |
this, SLOT(onCurrentObjectChanged(const TStageObjectId &, bool)));
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(currentColumnChanged(int)), this,
|
|
Shinya Kitaoka |
120a6e |
SLOT(onCurrentColumnChanged(int)));
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(editObject()), this, SIGNAL(editObject()));
|
|
Shinya Kitaoka |
120a6e |
if (root->getDagNodePos() == TConst::nowhere) {
|
|
Shinya Kitaoka |
120a6e |
placeNode(node);
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
updatePosition(node, root->getDagNodePos());
|
|
Shinya Kitaoka |
120a6e |
return node;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
StageSchematicGroupEditor *
|
|
Shinya Kitaoka |
120a6e |
StageSchematicScene::addEditedGroupedStageSchematicNode(
|
|
Shinya Kitaoka |
120a6e |
int groupId, const QList<schematicnode *=""> &groupedObjs) {</schematicnode>
|
|
Shinya Kitaoka |
120a6e |
StageSchematicGroupEditor *editorGroup =
|
|
Shinya Kitaoka |
120a6e |
new StageSchematicGroupEditor(groupId, groupedObjs, this);
|
|
Shinya Kitaoka |
120a6e |
m_groupEditorTable[groupId] = editorGroup;
|
|
Shinya Kitaoka |
120a6e |
return editorGroup;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::updatePosition(StageSchematicNode *node,
|
|
Shinya Kitaoka |
120a6e |
const TPointD &pos) {
|
|
Shinya Kitaoka |
120a6e |
node->setPos(QPointF(pos.x, pos.y));
|
|
Shinya Kitaoka |
120a6e |
node->getStageObject()->setDagNodePos(pos);
|
|
Shinya Kitaoka |
120a6e |
// this operation may abort
|
|
Shinya Kitaoka |
120a6e |
/*
|
|
Shinya Kitaoka |
120a6e |
QVector<schematicnode*> placedNodes = getPlacedNode(node);</schematicnode*>
|
|
Shinya Kitaoka |
120a6e |
TPointD offset(15,15);
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for(i=0; i
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *placedNode =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematicnode*>(placedNodes[i]);</stageschematicnode*>
|
|
Shinya Kitaoka |
120a6e |
assert(placedNode);
|
|
Shinya Kitaoka |
120a6e |
TPointD newPos = placedNode->getStageObject()->getDagNodePos()+offset;
|
|
Shinya Kitaoka |
120a6e |
updatePosition(placedNode,newPos);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::highlightLinks(StageSchematicNode *node, bool value) {
|
|
Shinya Kitaoka |
120a6e |
int i, portCount = node->getChildCount();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < portCount; i++) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNodePort *port = node->getChildPort(i);
|
|
Shinya Kitaoka |
120a6e |
int j, linkCount = port->getLinkCount();
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < linkCount; j++) {
|
|
Shinya Kitaoka |
120a6e |
SchematicLink *link = port->getLink(j);
|
|
Shinya Kitaoka |
120a6e |
if (!link) continue;
|
|
Shinya Kitaoka |
120a6e |
link->setHighlighted(value);
|
|
Shinya Kitaoka |
120a6e |
link->update();
|
|
Shinya Kitaoka |
120a6e |
m_highlightedLinks.push_back(link);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNodePort *port = node->getParentPort();
|
|
Shinya Kitaoka |
120a6e |
if (port) {
|
|
Shinya Kitaoka |
120a6e |
int linkCount = port->getLinkCount();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < linkCount; i++) {
|
|
Shinya Kitaoka |
120a6e |
SchematicLink *link = port->getLink(i);
|
|
Shinya Kitaoka |
120a6e |
if (link) {
|
|
Shinya Kitaoka |
120a6e |
link->setHighlighted(value);
|
|
Shinya Kitaoka |
120a6e |
link->update();
|
|
Shinya Kitaoka |
120a6e |
m_highlightedLinks.push_back(link);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::updateEditedGroups(
|
|
Shinya Kitaoka |
120a6e |
const QMap<int, *="" qlist<schematicnode="">> &editedGroup) {</int,>
|
|
Shinya Kitaoka |
120a6e |
QMap<int, *="" qlist<schematicnode="">>::const_iterator it;</int,>
|
|
Shinya Kitaoka |
120a6e |
for (it = editedGroup.begin(); it != editedGroup.end(); it++) {
|
|
shun-iwasawa |
1a2d69 |
int zValue = 2;
|
|
Shinya Kitaoka |
120a6e |
QMap<int, *="" qlist<schematicnode="">>::const_iterator it2 = editedGroup.begin();</int,>
|
|
Shinya Kitaoka |
120a6e |
while (it2 != editedGroup.end()) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *placedObj =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematicnode *="">(it2.value()[0]);</stageschematicnode>
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *obj =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematicnode *="">(it.value()[0]);</stageschematicnode>
|
|
Shinya Kitaoka |
120a6e |
if (!placedObj || !obj) {
|
|
Shinya Kitaoka |
120a6e |
it2++;
|
|
Shinya Kitaoka |
120a6e |
continue;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
int placedGroupedId = placedObj->getStageObject()->getEditingGroupId();
|
|
Shinya Kitaoka |
120a6e |
if (obj->getStageObject()->isContainedInGroup(placedGroupedId) &&
|
|
Shinya Kitaoka |
120a6e |
obj->getStageObject()->getEditingGroupId() != it2.key())
|
|
Shinya Kitaoka |
120a6e |
zValue += 2;
|
|
Shinya Kitaoka |
120a6e |
it2++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
StageSchematicGroupEditor *node =
|
|
Shinya Kitaoka |
120a6e |
addEditedGroupedStageSchematicNode(it.key(), it.value());
|
|
Shinya Kitaoka |
120a6e |
node->setZValue(zValue);
|
|
Shinya Kitaoka |
120a6e |
node->setGroupedNodeZValue(zValue + 1);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::updateNestedGroupEditors(StageSchematicNode *node,
|
|
Shinya Kitaoka |
120a6e |
const QPointF &newPos) {
|
|
Shinya Kitaoka |
120a6e |
if (!node) return;
|
|
Shinya Kitaoka |
120a6e |
QStack<int> groupIdStack = node->getStageObject()->getGroupIdStack();</int>
|
|
Shinya Kitaoka |
120a6e |
if (groupIdStack.isEmpty()) return;
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
QRectF rect;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < groupIdStack.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
if (m_groupEditorTable.contains(groupIdStack[i])) {
|
|
Shinya Kitaoka |
120a6e |
QRectF app = m_groupEditorTable[groupIdStack[i]]->sceneBoundingRect();
|
|
Shinya Kitaoka |
120a6e |
if (rect.isEmpty())
|
|
Shinya Kitaoka |
120a6e |
rect = app;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Toshihiro Shimizu |
890ddd |
#if QT_VERSION >= 0x050000
|
|
Shinya Kitaoka |
120a6e |
rect = rect.united(app);
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Shinya Kitaoka |
120a6e |
rect = rect.unite(app);
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
node->setPos(newPos);
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < groupIdStack.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
if (!m_groupEditorTable.contains(groupIdStack[i])) continue;
|
|
Toshihiro Shimizu |
890ddd |
#if QT_VERSION >= 0x050000
|
|
Shinya Kitaoka |
120a6e |
rect =
|
|
Shinya Kitaoka |
120a6e |
rect.united(m_groupEditorTable[groupIdStack[i]]->sceneBoundingRect());
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Shinya Kitaoka |
120a6e |
rect = rect.unite(m_groupEditorTable[groupIdStack[i]]->sceneBoundingRect());
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Shinya Kitaoka |
120a6e |
QRectF app = m_groupEditorTable[groupIdStack[i]]->boundingSceneRect();
|
|
Shinya Kitaoka |
120a6e |
if (m_groupEditorTable[groupIdStack[i]]->scenePos() != app.topLeft())
|
|
Shinya Kitaoka |
120a6e |
m_groupEditorTable[groupIdStack[i]]->setPos(app.topLeft());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
update(rect);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::resizeNodes(bool maximizedNode) {
|
|
manongjohn |
adae7d |
resizingNodes = true;
|
|
Shinya Kitaoka |
120a6e |
m_gridDimension = maximizedNode ? eLarge : eSmall;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
pegTree->setDagGridDimension(m_gridDimension);
|
|
Shinya Kitaoka |
120a6e |
int i, objCount = pegTree->getStageObjectCount();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < objCount; i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = pegTree->getStageObject(i);
|
|
Shinya Kitaoka |
120a6e |
if (obj && obj->getId().isColumn()) {
|
|
Shinya Kitaoka |
120a6e |
if (!m_nodeTable.contains(obj->getId())) continue;
|
|
Shinya Kitaoka |
120a6e |
StageSchematicColumnNode *node =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematiccolumnnode *="">(m_nodeTable[obj->getId()]);</stageschematiccolumnnode>
|
|
Shinya Kitaoka |
120a6e |
assert(node);
|
|
Shinya Kitaoka |
120a6e |
node->resize(maximizedNode);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (obj && !obj->getId().isCamera())
|
|
Shinya Kitaoka |
120a6e |
updatePositionOnResize(obj, maximizedNode);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
int splineCount = pegTree->getSplineCount();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < splineCount; i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spl = pegTree->getSpline(i);
|
|
Shinya Kitaoka |
120a6e |
if (spl) {
|
|
Shinya Kitaoka |
120a6e |
if (!m_splineTable.contains(spl)) continue;
|
|
Shinya Kitaoka |
120a6e |
StageSchematicSplineNode *node =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematicsplinenode *="">(m_splineTable[spl]);</stageschematicsplinenode>
|
|
Shinya Kitaoka |
120a6e |
assert(node);
|
|
Shinya Kitaoka |
120a6e |
node->resize(maximizedNode);
|
|
Shinya Kitaoka |
120a6e |
updateSplinePositionOnResize(spl, maximizedNode);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
QMap<int, *="" stageschematicgroupnode="">::iterator it;</int,>
|
|
Shinya Kitaoka |
120a6e |
for (it = m_GroupTable.begin(); it != m_GroupTable.end(); it++) {
|
|
Shinya Kitaoka |
120a6e |
it.value()->resize(maximizedNode);
|
|
Shinya Kitaoka |
120a6e |
QList<tstageobject *=""> groupedObjs = it.value()->getGroupedObjects();</tstageobject>
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < groupedObjs.size(); i++)
|
|
Shinya Kitaoka |
120a6e |
updatePositionOnResize(groupedObjs[i], maximizedNode);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
QMap<int, *="" stageschematicgroupeditor="">::iterator it2;</int,>
|
|
Shinya Kitaoka |
120a6e |
for (it2 = m_groupEditorTable.begin(); it2 != m_groupEditorTable.end(); it2++)
|
|
Shinya Kitaoka |
120a6e |
it2.value()->resizeNodes(maximizedNode);
|
|
Shinya Kitaoka |
120a6e |
updateScene();
|
|
manongjohn |
adae7d |
resizingNodes = false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::updatePositionOnResize(TStageObject *obj,
|
|
Shinya Kitaoka |
120a6e |
bool maximizedNode) {
|
|
Shinya Kitaoka |
120a6e |
TPointD oldPos = obj->getDagNodePos();
|
|
manongjohn |
f37f4a |
if (oldPos == TConst::nowhere) return;
|
|
Shinya Kitaoka |
120a6e |
double oldPosY = oldPos.y - 25500;
|
|
Shinya Kitaoka |
120a6e |
double newPosY = maximizedNode ? oldPosY * 2 : oldPosY * 0.5;
|
|
Shinya Kitaoka |
120a6e |
obj->setDagNodePos(TPointD(oldPos.x, newPosY + 25500));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::updateSplinePositionOnResize(TStageObjectSpline *spl,
|
|
Shinya Kitaoka |
120a6e |
bool maximizedNode) {
|
|
Shinya Kitaoka |
120a6e |
TPointD oldPos = spl->getDagNodePos();
|
|
manongjohn |
f37f4a |
if (oldPos == TConst::nowhere) return;
|
|
Shinya Kitaoka |
120a6e |
double oldPosY = oldPos.y - 25500;
|
|
Shinya Kitaoka |
120a6e |
double newPosY = maximizedNode ? oldPosY * 2 : oldPosY * 0.5;
|
|
Shinya Kitaoka |
120a6e |
spl->setDagNodePos(TPointD(oldPos.x, newPosY + 25500));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
StageSchematicSplineNode *StageSchematicScene::addSchematicSplineNode(
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicSplineNode *node = new StageSchematicSplineNode(this, spline);
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(sceneChanged()), this, SLOT(onSceneChanged()));
|
|
Shinya Kitaoka |
120a6e |
connect(node, SIGNAL(xsheetChanged()), this, SLOT(onXsheetChanged()));
|
|
Shinya Kitaoka |
120a6e |
if (!node) return 0;
|
|
Shinya Kitaoka |
120a6e |
if (spline->getDagNodePos() == TConst::nowhere) {
|
|
Shinya Kitaoka |
120a6e |
node->resize(m_gridDimension == 0);
|
|
Shinya Kitaoka |
120a6e |
placeSplineNode(node);
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
node->setPos(QPointF(spline->getDagNodePos().x, spline->getDagNodePos().y));
|
|
Shinya Kitaoka |
120a6e |
return node;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! create node according to the type of StageObject
|
|
shun-iwasawa |
1a2d69 |
*/
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *StageSchematicScene::createStageSchematicNode(
|
|
Shinya Kitaoka |
120a6e |
StageSchematicScene *scene, TStageObject *pegbar) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = pegbar->getId();
|
|
Shinya Kitaoka |
120a6e |
if (id.isColumn()) {
|
|
Shinya Kitaoka |
120a6e |
int columnIndex = id.getIndex();
|
|
Shinya Kitaoka |
120a6e |
if (m_xshHandle->getXsheet()->isColumnEmpty(columnIndex)) {
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
TXshColumn *column = m_xshHandle->getXsheet()->getColumn(columnIndex);
|
|
Shinya Kitaoka |
120a6e |
if (!column || column->getSoundColumn() || column->getSoundTextColumn())
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (!pegbar || !scene) return 0;
|
|
Shinya Kitaoka |
120a6e |
if (id.isTable())
|
|
Shinya Kitaoka |
120a6e |
return new StageSchematicTableNode(scene, pegbar);
|
|
Shinya Kitaoka |
120a6e |
else if (id.isCamera())
|
|
Shinya Kitaoka |
120a6e |
return new StageSchematicCameraNode(scene, pegbar);
|
|
Shinya Kitaoka |
120a6e |
else if (id.isPegbar())
|
|
Shinya Kitaoka |
120a6e |
return new StageSchematicPegbarNode(scene, pegbar);
|
|
Shinya Kitaoka |
120a6e |
else if (id.isColumn())
|
|
Shinya Kitaoka |
120a6e |
return new StageSchematicColumnNode(scene, pegbar);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
QGraphicsItem *StageSchematicScene::getCurrentNode() {
|
|
Shinya Kitaoka |
120a6e |
QList<qgraphicsitem *=""> allItems = items();</qgraphicsitem>
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (auto const item : allItems) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *node = dynamic_cast<stageschematicnode *="">(item);</stageschematicnode>
|
|
Shinya Kitaoka |
120a6e |
if (node && node->getStageObject()->getId() == m_objHandle->getObjectId())
|
|
Shinya Kitaoka |
120a6e |
return node;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::reorderScene() { placeNodes(); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::placeNodes() {
|
|
Shinya Kitaoka |
120a6e |
// search all possible roots
|
|
Shinya Kitaoka |
120a6e |
std::vector<treestagenode *=""> roots;</treestagenode>
|
|
Shinya Kitaoka |
120a6e |
findRoots(roots);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// sorts the roots container. Sortijg rules are specified by CompareNodes
|
|
Shinya Kitaoka |
120a6e |
// class
|
|
Shinya Kitaoka |
120a6e |
std::sort(roots.begin(), roots.end(), CompareNodes());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
double xFirstPos = m_firstPos.x - 500;
|
|
Shinya Kitaoka |
120a6e |
double yFirstPos = m_firstPos.y + 500;
|
|
Shinya Kitaoka |
120a6e |
double xPos = xFirstPos;
|
|
Shinya Kitaoka |
120a6e |
double yPos = yFirstPos;
|
|
Shinya Kitaoka |
120a6e |
double maxXPos;
|
|
Shinya Kitaoka |
120a6e |
double maxYPos = yFirstPos;
|
|
Shinya Kitaoka |
120a6e |
int step = m_gridDimension == eLarge ? 100 : 50;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// places the first roots and its children. The first root is always a table!
|
|
Shinya Kitaoka |
120a6e |
assert(roots[0]->getNode()->getStageObject()->getId().isTable());
|
|
Shinya Kitaoka |
120a6e |
roots[0]->getNode()->getStageObject()->setDagNodePos(
|
|
Shinya Kitaoka |
120a6e |
TPointD(xFirstPos, yFirstPos));
|
|
Shinya Kitaoka |
120a6e |
placeChildren(roots[0], xPos, yPos);
|
|
Shinya Kitaoka |
120a6e |
maxXPos = xPos;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
// places other roots and root's children.
|
|
Shinya Kitaoka |
120a6e |
for (i = 1; i < (int)roots.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = roots[i]->getNode()->getStageObject();
|
|
Shinya Kitaoka |
120a6e |
xPos = xFirstPos;
|
|
Shinya Kitaoka |
120a6e |
yPos = maxYPos + (pegbar->getId().isCamera() ? 100 : step);
|
|
Shinya Kitaoka |
120a6e |
pegbar->setDagNodePos(TPointD(xPos, yPos));
|
|
Shinya Kitaoka |
120a6e |
placeChildren(roots[i], xPos, yPos);
|
|
Shinya Kitaoka |
120a6e |
maxXPos = std::max(xPos, maxXPos);
|
|
Shinya Kitaoka |
120a6e |
maxYPos = std::max(yPos, maxYPos);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// places all spline nodes.
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < pegTree->getSplineCount(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = pegTree->getSpline(i);
|
|
Shinya Kitaoka |
120a6e |
spline->setDagNodePos(TPointD(maxXPos, yFirstPos + step));
|
|
Shinya Kitaoka |
120a6e |
maxXPos += (m_showLetterOnPortFlag) ? 150 : 120;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// delete the tree
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)roots.size(); i++) delete roots[i];
|
|
Shinya Kitaoka |
120a6e |
roots.clear();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
updateScene();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::findRoots(std::vector<treestagenode *=""> &roots) {</treestagenode>
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < pegTree->getStageObjectCount(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = pegTree->getStageObject(i);
|
|
Shinya Kitaoka |
120a6e |
// only cameras and pegbars can be roots
|
|
shun-iwasawa |
1a2d69 |
// check if the id is contained in the table in case the object is grouped
|
|
shun-iwasawa |
1a2d69 |
if ((pegbar->getId().isCamera() || pegbar->getId().isTable()) &&
|
|
shun-iwasawa |
1a2d69 |
m_nodeTable.contains(pegbar->getId())) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *node = m_nodeTable[pegbar->getId()];
|
|
Shinya Kitaoka |
120a6e |
TreeStageNode *treeNode = new TreeStageNode(node);
|
|
Shinya Kitaoka |
120a6e |
roots.push_back(treeNode);
|
|
Shinya Kitaoka |
120a6e |
// when a root is found, the tree is build.
|
|
Shinya Kitaoka |
120a6e |
makeTree(treeNode);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::makeTree(TreeStageNode *treeNode) {
|
|
Shinya Kitaoka |
120a6e |
int i, portCount = treeNode->getNode()->getChildCount();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < portCount; i++) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNodePort *port = treeNode->getNode()->getChildPort(i);
|
|
Shinya Kitaoka |
120a6e |
int firstChild = treeNode->getChildrenCount();
|
|
Shinya Kitaoka |
120a6e |
int j, linkCount = port->getLinkCount();
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < linkCount; j++) {
|
|
Shinya Kitaoka |
120a6e |
// the linked node is taken and the method is iterated for this node
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *schematicNode =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematicnode *="">(port->getLinkedNode(j));</stageschematicnode>
|
|
Shinya Kitaoka |
120a6e |
TreeStageNode *treeChild = new TreeStageNode(schematicNode);
|
|
Shinya Kitaoka |
120a6e |
treeNode->addChild(treeChild);
|
|
Shinya Kitaoka |
120a6e |
makeTree(treeChild);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
int lastChild = treeNode->getChildrenCount();
|
|
Shinya Kitaoka |
120a6e |
treeNode->sortChildren(firstChild, lastChild);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::placeChildren(TreeStageNode *treeNode, double &xPos,
|
|
Shinya Kitaoka |
120a6e |
double &yPos, bool isCameraTree) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
xPos += (m_showLetterOnPortFlag) ? 150 : 120;
|
|
Shinya Kitaoka |
120a6e |
double xChildPos = xPos;
|
|
Shinya Kitaoka |
120a6e |
double xRefPos = xPos;
|
|
Shinya Kitaoka |
120a6e |
bool firstChild = true;
|
|
Shinya Kitaoka |
120a6e |
bool startFromCamera =
|
|
Shinya Kitaoka |
120a6e |
isCameraTree || treeNode->getNode()->getStageObject()->getId().isCamera();
|
|
Shinya Kitaoka |
120a6e |
int step = m_gridDimension == eLarge ? 100 : 50;
|
|
Shinya Kitaoka |
120a6e |
double yOffset = startFromCamera ? step : -step;
|
|
Shinya Kitaoka |
120a6e |
if (startFromCamera) treeNode->reverseChildren();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < treeNode->getChildrenCount(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TreeStageNode *childNode = treeNode->getChildTreeNode(i);
|
|
Shinya Kitaoka |
120a6e |
TStageObject *childPegbar = childNode->getNode()->getStageObject();
|
|
Shinya Kitaoka |
120a6e |
if (childPegbar->getId().isCamera()) continue;
|
|
Shinya Kitaoka |
120a6e |
xChildPos = xRefPos;
|
|
Shinya Kitaoka |
120a6e |
// first child must have same yPos of father.
|
|
Shinya Kitaoka |
120a6e |
yPos += firstChild ? 0 : yOffset;
|
|
Shinya Kitaoka |
120a6e |
firstChild = false;
|
|
Shinya Kitaoka |
120a6e |
childPegbar->setDagNodePos(TPointD(xChildPos, yPos));
|
|
Shinya Kitaoka |
120a6e |
placeChildren(childNode, xChildPos, yPos, startFromCamera);
|
|
Shinya Kitaoka |
120a6e |
xPos = std::max(xPos, xChildPos);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! define the position of nodes which is not specified manually
|
|
shun-iwasawa |
1a2d69 |
*/
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::placeNode(StageSchematicNode *node) {
|
|
Shinya Kitaoka |
120a6e |
double xFirstPos = m_firstPos.x - 500;
|
|
Shinya Kitaoka |
120a6e |
double yFirstPos = m_firstPos.y + 500;
|
|
Shinya Kitaoka |
120a6e |
double xPos = xFirstPos;
|
|
Shinya Kitaoka |
120a6e |
double yPos = yFirstPos;
|
|
Shinya Kitaoka |
120a6e |
int step = m_gridDimension == eLarge ? 100 : 50;
|
|
Shinya Kitaoka |
120a6e |
int hStep = (m_showLetterOnPortFlag) ? 150 : 120;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
QRectF nodeRect = node->boundingRect();
|
|
Shinya Kitaoka |
120a6e |
TStageObject *pegbar = node->getStageObject();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId parentObjId = pegbar->getParent();
|
|
Shinya Kitaoka |
120a6e |
TStageObject *parentObj = pegTree->getStageObject(parentObjId, false);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (pegbar->getId().isCamera())
|
|
Shinya Kitaoka |
120a6e |
yPos = yFirstPos + step;
|
|
Shinya Kitaoka |
120a6e |
else if (pegbar->getId().isPegbar()) {
|
|
Shinya Kitaoka |
120a6e |
if (parentObj) {
|
|
Shinya Kitaoka |
120a6e |
if (parentObj->getDagNodePos() != TConst::nowhere) {
|
|
Shinya Kitaoka |
120a6e |
TPointD pos = parentObj->getDagNodePos();
|
|
Shinya Kitaoka |
120a6e |
yPos = pos.y;
|
|
Shinya Kitaoka |
120a6e |
xPos = pos.x + hStep;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
m_nodesToPlace[parentObjId].append(node);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
yPos = yFirstPos;
|
|
Shinya Kitaoka |
120a6e |
xPos = xFirstPos + hStep;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} else if (pegbar->getId().isColumn()) {
|
|
Shinya Kitaoka |
120a6e |
if (parentObj) {
|
|
Shinya Kitaoka |
120a6e |
if (parentObj->getDagNodePos() != TConst::nowhere) {
|
|
Shinya Kitaoka |
120a6e |
TPointD pos = parentObj->getDagNodePos();
|
|
Shinya Kitaoka |
120a6e |
yPos = pos.y;
|
|
Shinya Kitaoka |
120a6e |
xPos = pos.x + hStep;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
m_nodesToPlace[parentObjId].append(node);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
yPos = yFirstPos;
|
|
Shinya Kitaoka |
120a6e |
xPos = xFirstPos + (hStep * 2);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
QPointF initPos(xPos, yPos);
|
|
Shinya Kitaoka |
120a6e |
nodeRect.moveTopLeft(initPos);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bool found = false;
|
|
Shinya Kitaoka |
120a6e |
// try to place inside of the visible area
|
|
Shinya Kitaoka |
120a6e |
if (!views().isEmpty() && pegbar->getId().isPegbar()) {
|
|
Shinya Kitaoka |
120a6e |
QGraphicsView *view = views().at(0);
|
|
Shinya Kitaoka |
120a6e |
QRectF visibleRect =
|
|
Shinya Kitaoka |
120a6e |
view->mapToScene(0, 0, view->width(), view->height()).boundingRect();
|
|
Shinya Kitaoka |
120a6e |
while (visibleRect.left() > nodeRect.left()) {
|
|
Shinya Kitaoka |
120a6e |
nodeRect.translate(hStep, 0);
|
|
Shinya Kitaoka |
120a6e |
xPos += hStep;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
while (visibleRect.bottom() < nodeRect.bottom()) {
|
|
Shinya Kitaoka |
120a6e |
nodeRect.translate(0, -step);
|
|
Shinya Kitaoka |
120a6e |
yPos -= step;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
QPointF tmpPos(xPos, yPos);
|
|
Shinya Kitaoka |
120a6e |
while (visibleRect.right() > nodeRect.right()) {
|
|
Shinya Kitaoka |
120a6e |
while (!isAnEmptyZone(nodeRect)) {
|
|
Shinya Kitaoka |
120a6e |
nodeRect.translate(0, -step);
|
|
Shinya Kitaoka |
120a6e |
yPos -= step;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// if failed to place this column, then move the candidate position to
|
|
Shinya Kitaoka |
120a6e |
// right
|
|
Shinya Kitaoka |
120a6e |
if (visibleRect.contains(nodeRect)) {
|
|
Shinya Kitaoka |
120a6e |
found = true;
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
xPos += hStep;
|
|
Shinya Kitaoka |
120a6e |
yPos = tmpPos.y();
|
|
Shinya Kitaoka |
120a6e |
nodeRect.moveTopLeft(QPointF(xPos, yPos));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
// place the node outside of the visible area
|
|
Shinya Kitaoka |
120a6e |
if (!found) {
|
|
Shinya Kitaoka |
120a6e |
nodeRect.moveTopLeft(initPos);
|
|
Shinya Kitaoka |
120a6e |
xPos = initPos.x();
|
|
Shinya Kitaoka |
120a6e |
yPos = initPos.y();
|
|
Shinya Kitaoka |
120a6e |
nodeRect.moveTopLeft(initPos);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
while (!isAnEmptyZone(nodeRect)) {
|
|
Shinya Kitaoka |
120a6e |
if (pegbar->getId().isCamera()) {
|
|
Shinya Kitaoka |
120a6e |
nodeRect.translate(0, step);
|
|
Shinya Kitaoka |
120a6e |
yPos += step;
|
|
Shinya Kitaoka |
120a6e |
} else if (pegbar->getId().isColumn() || pegbar->getId().isPegbar()) {
|
|
Shinya Kitaoka |
120a6e |
nodeRect.translate(0, -step);
|
|
Shinya Kitaoka |
120a6e |
yPos -= step;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
pegbar->setDagNodePos(TPointD(xPos, yPos));
|
|
Shinya Kitaoka |
120a6e |
node->setPos(xPos, yPos);
|
|
Shinya Kitaoka |
120a6e |
if (m_nodesToPlace.contains(pegbar->getId())) {
|
|
Shinya Kitaoka |
120a6e |
QList<stageschematicnode *=""> nodes = m_nodesToPlace[pegbar->getId()];</stageschematicnode>
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < nodes.size(); i++) placeNode(nodes[i]);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::placeSplineNode(
|
|
Shinya Kitaoka |
120a6e |
StageSchematicSplineNode *splineNode) {
|
|
Shinya Kitaoka |
120a6e |
double xFirstPos = m_firstPos.x - 500;
|
|
Shinya Kitaoka |
120a6e |
double yFirstPos = m_firstPos.y + 500;
|
|
Shinya Kitaoka |
120a6e |
int hStep = (m_showLetterOnPortFlag) ? 150 : 120;
|
|
Shinya Kitaoka |
120a6e |
double xPos = xFirstPos + (hStep * 2);
|
|
Shinya Kitaoka |
120a6e |
int step = m_gridDimension == eLarge ? 100 : 50;
|
|
Shinya Kitaoka |
120a6e |
double yPos = yFirstPos + step;
|
|
Shinya Kitaoka |
120a6e |
QRectF nodeRect = splineNode->boundingRect();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = splineNode->getSpline();
|
|
Shinya Kitaoka |
120a6e |
nodeRect.translate(QPointF(xPos, yPos));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
while (!isAnEmptyZone(nodeRect)) {
|
|
Shinya Kitaoka |
120a6e |
nodeRect.translate(hStep, 0);
|
|
Shinya Kitaoka |
120a6e |
xPos += hStep;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
spline->setDagNodePos(TPointD(xPos, yPos));
|
|
Shinya Kitaoka |
120a6e |
splineNode->setPos(xPos, yPos);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onPegbarAdded() {
|
|
Shinya Kitaoka |
120a6e |
// if this command called from the context menu, place the node at the
|
|
Shinya Kitaoka |
120a6e |
// cllicked position
|
|
Shinya Kitaoka |
120a6e |
// clickedPos will be null(0,0) if it called from the toolbar
|
|
Shinya Kitaoka |
120a6e |
QPointF clickedPos = qobject_cast<qaction *="">(sender())->data().toPointF();</qaction>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectCmd::addNewPegbar(m_xshHandle, m_objHandle, clickedPos);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onSplineAdded() {
|
|
Shinya Kitaoka |
120a6e |
// if this command called from the context menu, place the node at the
|
|
Shinya Kitaoka |
120a6e |
// cllicked position
|
|
Shinya Kitaoka |
120a6e |
// clickedPos will be null(0,0) if it called from the toolbar
|
|
Shinya Kitaoka |
120a6e |
QPointF clickedPos = qobject_cast<qaction *="">(sender())->data().toPointF();</qaction>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectCmd::addNewSpline(m_xshHandle, m_objHandle, m_colHandle,
|
|
Shinya Kitaoka |
120a6e |
clickedPos);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onCameraAdded() {
|
|
Shinya Kitaoka |
120a6e |
// if this command called from the context menu, place the node at the
|
|
Shinya Kitaoka |
120a6e |
// cllicked position
|
|
Shinya Kitaoka |
120a6e |
// clickedPos will be null(0,0) if it called from the toolbar
|
|
Shinya Kitaoka |
120a6e |
QPointF clickedPos = qobject_cast<qaction *="">(sender())->data().toPointF();</qaction>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectCmd::addNewCamera(m_xshHandle, m_objHandle, clickedPos);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onSwitchPortModeToggled(bool withLetter) {
|
|
Shinya Kitaoka |
120a6e |
m_showLetterOnPortFlag = withLetter;
|
|
Shinya Kitaoka |
120a6e |
ShowLetterOnOutputPortOfStageNode = (withLetter) ? 1 : 0;
|
|
Shinya Kitaoka |
120a6e |
updateScene();
|
|
shun_iwasawa |
22eaa4 |
}
|
|
shun_iwasawa |
22eaa4 |
|
|
shun_iwasawa |
22eaa4 |
//------------------------------------------------------------------
|
|
shun_iwasawa |
22eaa4 |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onResetCenter() {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = m_objHandle->getObjectId();
|
|
Shinya Kitaoka |
120a6e |
TStageObjectCmd::resetCenterAndOffset(id, m_xshHandle);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onCameraActivate() {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectCmd::setAsActiveCamera(m_xshHandle, m_objHandle);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onRemoveSpline() { m_selection->deleteSelection(); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onSaveSpline() {
|
|
Shinya Kitaoka |
120a6e |
TFilePath projectFolder =
|
|
Shinya Kitaoka |
120a6e |
m_sceneHandle->getScene()->getProject()->getProjectFolder();
|
|
Shinya Kitaoka |
120a6e |
QString fileNameStr = QFileDialog::getSaveFileName(
|
|
Shinya Kitaoka |
120a6e |
this->views()[0], QObject::tr("Save Motion Path"),
|
|
Shinya Kitaoka |
120a6e |
QString::fromStdWString(projectFolder.getWideString()),
|
|
Shinya Kitaoka |
120a6e |
QObject::tr("Motion Path files (*.mpath)"));
|
|
Shinya Kitaoka |
120a6e |
if (fileNameStr == "") return;
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp(fileNameStr.toStdWString());
|
|
Shinya Kitaoka |
120a6e |
if (fp.getType() == "") fp = fp.withType("mpath");
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
assert(m_objHandle->isSpline());
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = m_objHandle->getObjectId();
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
TStageObject *currentObj = xsh->getStageObjectTree()->getStageObject(id);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (currentObj == 0) throw "no currentObj";
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline = currentObj->getSpline();
|
|
Shinya Kitaoka |
120a6e |
if (spline == 0) throw "no spline";
|
|
Shinya Kitaoka |
120a6e |
TOStream os(fp);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// Only points are saved
|
|
Shinya Kitaoka |
120a6e |
const TStroke *stroke = spline->getStroke();
|
|
Shinya Kitaoka |
120a6e |
int n = stroke ? stroke->getControlPointCount() : 0;
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < n; i++) {
|
|
Shinya Kitaoka |
120a6e |
TThickPoint p = stroke->getControlPoint(i);
|
|
Shinya Kitaoka |
120a6e |
os << p.x << p.y << p.thick;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
Shinya Kitaoka |
120a6e |
DVGui::warning(QObject::tr("It is not possible to save the motion path."));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onLoadSpline() {
|
|
Shinya Kitaoka |
120a6e |
TFilePath projectFolder =
|
|
Shinya Kitaoka |
120a6e |
m_sceneHandle->getScene()->getProject()->getProjectFolder();
|
|
Shinya Kitaoka |
120a6e |
QString fileNameStr = QFileDialog::getOpenFileName(
|
|
Shinya Kitaoka |
120a6e |
this->views()[0], QObject::tr("Load Motion Path"),
|
|
Shinya Kitaoka |
120a6e |
QString::fromStdWString(projectFolder.getWideString()),
|
|
Shinya Kitaoka |
120a6e |
QObject::tr("Motion Path files (*.mpath)"));
|
|
Shinya Kitaoka |
120a6e |
if (fileNameStr == "") return;
|
|
Shinya Kitaoka |
120a6e |
TFilePath fp(fileNameStr.toStdWString());
|
|
Shinya Kitaoka |
120a6e |
if (fp.getType() == "") fp = fp.withType("mpath");
|
|
Shinya Kitaoka |
120a6e |
try {
|
|
Shinya Kitaoka |
120a6e |
if (!TFileStatus(fp).doesExist()) {
|
|
Shinya Kitaoka |
120a6e |
QString msg;
|
|
Shinya Kitaoka |
120a6e |
msg = "Motion path " + toQString(fp) + " doesn't exists.";
|
|
Shinya Kitaoka |
120a6e |
DVGui::info(msg);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
assert(m_objHandle->isSpline());
|
|
Shinya Kitaoka |
120a6e |
// ObjectID of the parent node to which the spline is connected
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId id = m_objHandle->getObjectId();
|
|
Shinya Kitaoka |
120a6e |
TXsheet *xsh = m_xshHandle->getXsheet();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectSpline *spline =
|
|
Shinya Kitaoka |
120a6e |
xsh->getStageObjectTree()->getStageObject(id, false)->getSpline();
|
|
Shinya Kitaoka |
120a6e |
if (!spline) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TIStream is(fp);
|
|
Shinya Kitaoka |
120a6e |
if (is) {
|
|
Shinya Kitaoka |
120a6e |
spline->loadData(is);
|
|
Shinya Kitaoka |
120a6e |
m_objHandle->setSplineObject(spline);
|
|
Shinya Kitaoka |
120a6e |
m_objHandle->commitSplineChanges();
|
|
Shinya Kitaoka |
120a6e |
IconGenerator::instance()->invalidate(spline);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} catch (...) {
|
|
Shinya Kitaoka |
120a6e |
DVGui::warning(QObject::tr("It is not possible to load the motion path."));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onPathToggled(int state) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId objId = m_objHandle->getObjectId();
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = m_xshHandle->getXsheet()->getStageObject(objId);
|
|
Shinya Kitaoka |
120a6e |
TStageObjectCmd::enableSplineAim(obj, state, m_xshHandle);
|
|
Shinya Kitaoka |
120a6e |
onSceneChanged();
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//--------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onCpToggled(bool toggled) {
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId objId = m_objHandle->getObjectId();
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = m_xshHandle->getXsheet()->getStageObject(objId);
|
|
Shinya Kitaoka |
120a6e |
TStageObjectCmd::enableSplineUppk(obj, toggled, m_xshHandle);
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TXsheet *StageSchematicScene::getXsheet() { return m_xshHandle->getXsheet(); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onXsheetChanged() {
|
|
Shinya Kitaoka |
120a6e |
m_xshHandle->notifyXsheetChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onSceneChanged() {
|
|
Shinya Kitaoka |
120a6e |
m_sceneHandle->notifySceneChanged();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onCurrentObjectChanged(const TStageObjectId &id,
|
|
Shinya Kitaoka |
120a6e |
bool isSpline) {
|
|
Shinya Kitaoka |
120a6e |
// revert the pre-selected node to normal text color
|
|
Shinya Kitaoka |
120a6e |
QMap<tstageobjectid, *="" stageschematicnode="">::iterator it;</tstageobjectid,>
|
|
Shinya Kitaoka |
120a6e |
it = m_nodeTable.find(getCurrentObject());
|
|
Shinya Kitaoka |
120a6e |
if (it != m_nodeTable.end()) {
|
|
Shinya Kitaoka |
120a6e |
it.value()->update();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_objHandle->setObjectId(id);
|
|
Shinya Kitaoka |
120a6e |
if (m_frameHandle->isEditingLevel()) return;
|
|
Shinya Kitaoka |
120a6e |
m_objHandle->setIsSpline(isSpline);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onCurrentColumnChanged(int index) {
|
|
Shinya Kitaoka |
120a6e |
m_colHandle->setColumnIndex(index);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::contextMenuEvent(
|
|
Shinya Kitaoka |
120a6e |
QGraphicsSceneContextMenuEvent *cme) {
|
|
Shinya Kitaoka |
120a6e |
QPointF scenePos = cme->scenePos();
|
|
Shinya Kitaoka |
120a6e |
QList<qgraphicsitem *=""> itemList = items(scenePos);</qgraphicsitem>
|
|
Shinya Kitaoka |
120a6e |
if (!itemList.isEmpty()) {
|
|
Shinya Kitaoka |
120a6e |
SchematicScene::contextMenuEvent(cme);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QMenu menu(views()[0]);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// AddPegbar
|
|
Shinya Kitaoka |
120a6e |
QAction *addPegbar = new QAction(tr("&New Pegbar"), &menu);
|
|
Shinya Kitaoka |
120a6e |
connect(addPegbar, SIGNAL(triggered()), this, SLOT(onPegbarAdded()));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// AddSpline
|
|
Shinya Kitaoka |
120a6e |
QAction *addSpline = new QAction(tr("&New Motion Path"), &menu);
|
|
Shinya Kitaoka |
120a6e |
connect(addSpline, SIGNAL(triggered()), this, SLOT(onSplineAdded()));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// AddCamera
|
|
Shinya Kitaoka |
120a6e |
QAction *addCamera = new QAction(tr("&New Camera"), &menu);
|
|
Shinya Kitaoka |
120a6e |
connect(addCamera, SIGNAL(triggered()), this, SLOT(onCameraAdded()));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QAction *paste = CommandManager::instance()->getAction("MI_Paste");
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// this is to place the node at the clicked position
|
|
Shinya Kitaoka |
120a6e |
addPegbar->setData(cme->scenePos());
|
|
Shinya Kitaoka |
120a6e |
addSpline->setData(cme->scenePos());
|
|
Shinya Kitaoka |
120a6e |
addCamera->setData(cme->scenePos());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
menu.addAction(addPegbar);
|
|
Shinya Kitaoka |
120a6e |
menu.addAction(addCamera);
|
|
Shinya Kitaoka |
120a6e |
menu.addAction(addSpline);
|
|
manongjohn |
d6e3cc |
|
|
manongjohn |
d6e3cc |
// Close sub xsheet and move to parent sheet
|
|
manongjohn |
d6e3cc |
ToonzScene *scene = m_sceneHandle->getScene();
|
|
manongjohn |
d6e3cc |
ChildStack *childStack = scene->getChildStack();
|
|
manongjohn |
d6e3cc |
if (childStack && childStack->getAncestorCount() > 0) {
|
|
manongjohn |
d6e3cc |
menu.addSeparator();
|
|
manongjohn |
d6e3cc |
menu.addAction(CommandManager::instance()->getAction("MI_CloseChild"));
|
|
manongjohn |
d6e3cc |
}
|
|
manongjohn |
d6e3cc |
|
|
Shinya Kitaoka |
120a6e |
menu.addSeparator();
|
|
Shinya Kitaoka |
120a6e |
menu.addAction(paste);
|
|
Shinya Kitaoka |
120a6e |
m_selection->setPastePosition(TPointD(scenePos.x(), scenePos.y()));
|
|
Shinya Kitaoka |
120a6e |
menu.exec(cme->screenPos());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::mousePressEvent(QGraphicsSceneMouseEvent *me) {
|
|
Shinya Kitaoka |
120a6e |
QList<qgraphicsitem *=""> items = selectedItems();</qgraphicsitem>
|
|
Shinya Kitaoka |
120a6e |
SchematicScene::mousePressEvent(me);
|
|
Shinya Kitaoka |
120a6e |
if (me->button() == Qt::MidButton) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < items.size(); i++) items[i]->setSelected(true);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
SchematicNode *StageSchematicScene::getNodeFromPosition(const QPointF &pos) {
|
|
Shinya Kitaoka |
120a6e |
QList<qgraphicsitem *=""> pickedItems = items(pos);</qgraphicsitem>
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < pickedItems.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
SchematicNode *node = dynamic_cast<schematicnode *="">(pickedItems.at(i));</schematicnode>
|
|
Shinya Kitaoka |
120a6e |
if (node) return node;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onSelectionChanged() {
|
|
Shinya Kitaoka |
120a6e |
m_selection->selectNone();
|
|
Shinya Kitaoka |
120a6e |
int i, size = m_highlightedLinks.size();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < size; i++) {
|
|
Shinya Kitaoka |
120a6e |
SchematicLink *link = m_highlightedLinks[i];
|
|
Shinya Kitaoka |
120a6e |
link->setHighlighted(false);
|
|
Shinya Kitaoka |
120a6e |
link->update();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_highlightedLinks.clear();
|
|
Shinya Kitaoka |
120a6e |
QList<qgraphicsitem *=""> slcItems = selectedItems();</qgraphicsitem>
|
|
Shinya Kitaoka |
120a6e |
QList<qgraphicsitem *="">::iterator it;</qgraphicsitem>
|
|
Shinya Kitaoka |
120a6e |
for (it = slcItems.begin(); it != slcItems.end(); it++) {
|
|
Shinya Kitaoka |
120a6e |
StageSchematicGroupNode *groupNode =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematicgroupnode *="">(*it);</stageschematicgroupnode>
|
|
Shinya Kitaoka |
120a6e |
StageSchematicNode *node = dynamic_cast<stageschematicnode *="">(*it);</stageschematicnode>
|
|
Shinya Kitaoka |
120a6e |
if (groupNode) {
|
|
Shinya Kitaoka |
120a6e |
QList<tstageobject *=""> objs = groupNode->getGroupedObjects();</tstageobject>
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < objs.size(); i++) m_selection->select(objs[i]->getId());
|
|
Shinya Kitaoka |
120a6e |
highlightLinks(groupNode, true);
|
|
Shinya Kitaoka |
120a6e |
} else if (node) {
|
|
Shinya Kitaoka |
120a6e |
m_selection->select(node->getStageObject()->getId());
|
|
Shinya Kitaoka |
120a6e |
highlightLinks(node, true);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
StageSchematicSplineNode *spline =
|
|
Shinya Kitaoka |
120a6e |
dynamic_cast<stageschematicsplinenode *="">(*it);</stageschematicsplinenode>
|
|
Shinya Kitaoka |
120a6e |
if (spline) {
|
|
Shinya Kitaoka |
120a6e |
m_selection->select(spline->getSpline()->getId());
|
|
Shinya Kitaoka |
120a6e |
StageSchematicSplinePort *port = spline->getParentPort();
|
|
Shinya Kitaoka |
120a6e |
if (port) {
|
|
Shinya Kitaoka |
120a6e |
int i, linkCount = port->getLinkCount();
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < linkCount; i++) {
|
|
Shinya Kitaoka |
120a6e |
SchematicLink *link = port->getLink(i);
|
|
Shinya Kitaoka |
120a6e |
link->setHighlighted(true);
|
|
Shinya Kitaoka |
120a6e |
m_highlightedLinks.push_back(link);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
SchematicLink *link = dynamic_cast<schematiclink *="">(*it);</schematiclink>
|
|
Shinya Kitaoka |
120a6e |
if (link) m_selection->select(link);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (!m_selection->isEmpty()) m_selection->makeCurrent();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onCollapse(QList<tstageobjectid> objects) {</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
emit doCollapse(objects);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void StageSchematicScene::onEditGroup() {
|
|
Shinya Kitaoka |
120a6e |
if (m_selection->isEmpty()) return;
|
|
Shinya Kitaoka |
120a6e |
TStageObjectTree *pegTree = m_xshHandle->getXsheet()->getStageObjectTree();
|
|
Shinya Kitaoka |
120a6e |
QList<tstageobjectid> objs = m_selection->getObjects();</tstageobjectid>
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < objs.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TStageObject *obj = pegTree->getStageObject(objs[i], false);
|
|
Shinya Kitaoka |
120a6e |
if (obj && obj->isGrouped() && !obj->isGroupEditing()) obj->editGroup();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
updateScene();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TStageObjectId StageSchematicScene::getCurrentObject() {
|
|
Shinya Kitaoka |
120a6e |
return m_objHandle->getObjectId();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
manongjohn |
adae7d |
|
|
manongjohn |
adae7d |
//------------------------------------------------------------------
|
|
manongjohn |
adae7d |
|
|
manongjohn |
adae7d |
void StageSchematicScene::onNodeChangedSize() {
|
|
manongjohn |
adae7d |
if (resizingNodes) return;
|
|
manongjohn |
adae7d |
updateScene();
|
|
manongjohn |
adae7d |
}
|