TStageObjectId TColumnDataElement::restoreColumn(TXsheet *xsh, int index, int fxFlags, bool copyPosition) const { bool doClone = (fxFlags & eDoClone); bool resetFxDagPositions = (fxFlags & eResetFxDagPositions); TXshColumn *column = m_column.getPointer(); // The xsheet 'changes' if a new column is inserted. If it was already there, no. bool xsheetChange = false; if (column && column->getXsheet() && column->getXsheet() != xsh) xsheetChange = true; // Insert a column at the specified index. If a column was stored, insert that one. TPointD dagPos = TConst::nowhere; if (column) { if (column->getFx()) dagPos = column->getFx()->getAttributes()->getDagNodePos(); if (doClone) column = column->clone(); xsh->insertColumn(index, column); } else xsh->insertColumn(index); // Create a new one otherwise if (!resetFxDagPositions && dagPos != TConst::nowhere) { // Don't accept the default position (fx object) TXshColumn *restoredColumn = xsh->getColumn(index); restoredColumn->getFx()->getAttributes()->setDagNodePos(dagPos); } // Retrieve the newly inserted column stage object TStageObject *obj = xsh->getStageObject(TStageObjectId::ColumnId(index)); assert(obj); obj->assignParams(m_params, doClone); // Assign the stored params if (copyPosition) obj->setDagNodePos(m_dagPos); // Clone the associated curve if any if (xsheetChange && obj->getSpline()) { TStageObjectSpline *srcSpl = obj->getSpline(); TStageObjectSpline *dstSpl = xsh->getStageObjectTree()->createSpline(); dstSpl->addRef(); dstSpl->setStroke(new TStroke(*srcSpl->getStroke())); obj->setSpline(dstSpl); } int gridType = xsh->getStageObjectTree()->getDagGridDimension(); obj->setIsOpened(gridType == 0); // gridType is 0 if the node is opened, 1 if closed // see StageSchematicScene::GridDimension // TODO: Should be made PUBLIC!! xsh->updateFrameCount(); return obj->getId(); }
TStageObjectId TCameraDataElement::restoreCamera(TXsheet *xsh, bool copyPosition) const { TStageObjectTree *tree = xsh->getStageObjectTree(); // Search the first unused camera id in the xsheet int index = 0; while (tree->getStageObject(TStageObjectId::CameraId(index), false)) ++index; // Create the new camera object and assign stored data TStageObject *newCamera = tree->getStageObject(TStageObjectId::CameraId(index), true); newCamera->assignParams(m_params); *(newCamera->getCamera()) = m_camera; if (copyPosition) newCamera->setDagNodePos(m_dagPos); return newCamera->getId(); }
TStageObjectId TStageObjectDataElement::restoreObject(TXsheet *xsh, bool copyPosition) const { int index = 2; // Skip the table and camera 1 (I guess) // Search the first unused common (pegbar) id TStageObjectTree *tree = xsh->getStageObjectTree(); while (tree->getStageObject(TStageObjectId::PegbarId(index), false)) ++index; // Create the new object to be inserted TStageObject *newObj = tree->getStageObject(TStageObjectId::PegbarId(index), true); newObj->setParent(m_params->m_parentId); newObj->assignParams(m_params); // If specified, copy the stored position in the viewer if (copyPosition) newObj->setDagNodePos(m_dagPos); return newObj->getId(); }