bool CellsMover::canMoveCells(const TPoint &pos) { TXsheet *xsh = getXsheet(); if (pos.x < 0) return false; if (pos.x != m_startPos.x) { int count = 0; // controlla il tipo int i = 0; while (i < m_rowCount * m_colCount) { TXshColumn::ColumnType srcType = getColumnTypeFromCell(i); int dstIndex = pos.x + i; TXshColumn *dstColumn = xsh->getColumn(dstIndex); if (srcType == TXshColumn::eZeraryFxType) return false; if (dstColumn && !dstColumn->isEmpty() && dstColumn->getColumnType() != srcType) return false; if (!dstColumn || dstColumn->isLocked() == false) count++; i += m_rowCount; } if (count == 0) return false; } if ((m_qualifiers & CellsMover::eInsertCells) || (m_qualifiers & CellsMover::eOverwriteCells)) return true; int count = 0; for (int i = 0; i < m_colCount; i++) { for (int j = 0; j < m_rowCount; j++) { if (!xsh->getCell(pos.y + j, pos.x + i).isEmpty()) return false; count++; } } if (count == 0) return false; return true; }
void CellsMover::emptyColumns(int c) const { std::set<int> ii; for (int i = 0; i < m_colCount; i++) ii.insert(c + i); ColumnCmd::deleteColumns(ii, false, true); TXsheet *xsh = getXsheet(); for (int i = 0; i < m_colCount; i++) xsh->insertColumn(c); }
TXshColumn *TXshSoundTextColumn::clone() const { TXshSoundTextColumn *column = new TXshSoundTextColumn(); column->setXsheet(getXsheet()); column->setStatusWord(getStatusWord()); column->m_cells = m_cells; column->m_first = m_first; return column; }
void CellsMover::getCells(std::vector<TXshCell> &cells, int r, int c) const { for (int i = 0; i < (int)cells.size(); i++) cells[i] = TXshCell(); TXsheet *xsh = getXsheet(); for (int i = 0; i < m_colCount; i++) { TXshColumn *column = xsh->getColumn(c + i); if (column && column->isLocked()) continue; xsh->getCells(r, c + i, m_rowCount, &cells[m_rowCount * i]); } }
// // xsheet <- cells // void CellsMover::setCells(const std::vector<TXshCell> &cells, int r, int c) const { TXsheet *xsh = getXsheet(); for (int i = 0; i < m_colCount; i++) { TXshColumn *column = xsh->getColumn(c + i); if (column) // skip if columns is locked or doesn't support cells operation if (column->getCellColumn() == 0 || column->isLocked()) continue; xsh->setCells(r, c + i, m_rowCount, &cells[m_rowCount * i]); } }
void CellsMover::undoMoveCells(const TPoint &pos) const { TXsheet *xsh = getXsheet(); int r = pos.y; int c = pos.x; if (m_qualifiers & eInsertCells) { for (int i = 0; i < m_colCount; i++) xsh->removeCells(r, c + i, m_rowCount); } else { for (int i = 0; i < m_colCount; i++) xsh->clearCells(r, c + i, m_rowCount); if (m_qualifiers & eOverwriteCells) setCells(m_oldCells, r, c); } }
void CellsMover::getColumnsData(int c0, int c1) { TXsheet *xsh = getXsheet(); int colCount = c1 - c0 + 1; m_columnsData = new StageObjectsData(); std::set<int> ii; for (int i = 0; i < colCount; i++) ii.insert(c0 + i); m_columnsData->storeColumns( ii, xsh, StageObjectsData::eDoClone | StageObjectsData::eResetFxDagPositions); m_columnsData->storeColumnFxs( ii, xsh, StageObjectsData::eDoClone | StageObjectsData::eResetFxDagPositions); }
// // xsheet <- m_cells; insert cells if qualifiers contain eInsertCells // void CellsMover::moveCells(const TPoint &pos) const { int r = pos.y; int c = pos.x; TXsheet *xsh = getXsheet(); if (m_qualifiers & eInsertCells) { for (int i = 0; i < m_colCount; i++) { TXshColumn *column = xsh->getColumn(c + i); if (column) { if (column->getCellColumn() == 0 || column->isLocked()) continue; xsh->insertCells(r, c + i, m_rowCount); } } } setCells(m_cells, r, c); }
void CellsMover::restoreColumns(int c) const { std::set<int> ii; for (int i = 0; i < m_colCount; i++) ii.insert(c + i); TXsheet *xsh = getXsheet(); for (int i = 0; i < m_colCount; i++) xsh->removeColumn(c); std::list<int> restoredSplineIds; m_columnsData->restoreObjects( ii, restoredSplineIds, xsh, StageObjectsData::eDoClone | StageObjectsData::eResetFxDagPositions); for (int i = 0; i < m_colCount; i++) { TXshColumn *column = xsh->getColumn(c + i); if (!column) continue; TXshCellColumn *cellColumn = column->getCellColumn(); if (!cellColumn) continue; int r0 = 0, r1 = -1; cellColumn->getRange(r0, r1); if (r0 <= r1) cellColumn->clearCells(r0, r1 - r0 + 1); } }
bool TTool::isColumnLocked(int columnIndex) const { if (columnIndex < 0) return false; TXsheet *xsh = getXsheet(); TXshColumn *column = xsh->getColumn(columnIndex); return column->isLocked(); }