void dlgMapper::repopulateAreas(){ //if (mpMap && mpMap->areaNamesMap && showArea){ if (!mpMap) return; QMapIterator<int, QString> it( mpMap->areaNamesMap ); //sort them alphabetically (case sensitive so we use lower) QMap <QString, QStringList> areaNames; showArea->clear(); while( it.hasNext() ) { it.next(); QStringList info; info.append(it.value()); info.append(QString::number(it.key())); areaNames.insert(it.value().toLower(), info); } QMapIterator<QString, QStringList> areaIt( areaNames ); while( areaIt.hasNext() ) { areaIt.next(); QStringList info = areaIt.value(); showArea->addItem( info[0], info[1].toInt() ); } //} }
void PageItem_Table::updateSpans(int index, int number, ChangeType changeType) { // Loop through areas of merged cells. QMutableListIterator<CellArea> areaIt(m_cellAreas); while (areaIt.hasNext()) { CellArea oldArea = areaIt.next(); // Get a copy of the area adjusted to the change. CellArea newArea; switch (changeType) { case RowsInserted: newArea = oldArea.adjustedForRowInsertion(index, number); break; case RowsRemoved: newArea = oldArea.adjustedForRowRemoval(index, number); break; case ColumnsInserted: newArea = oldArea.adjustedForColumnInsertion(index, number); break; case ColumnsRemoved: newArea = oldArea.adjustedForColumnRemoval(index, number); break; default: break; } // Check if the area was affected by the change. if (newArea != oldArea) { if (newArea.height() < 1 || newArea.width() < 1) { // Adjusted area was annihilated, so remove it. areaIt.remove(); } else if (newArea.height() == 1 && newArea.width() == 1) { // Adjusted area is 1x1, so remove it. areaIt.remove(); // And reset row/column span of spanning cell to 1. TableCell oldSpanningCell = cellAt(oldArea.row(), oldArea.column()); oldSpanningCell.setRowSpan(1); oldSpanningCell.setColumnSpan(1); } else { // Replace the area with the adjusted copy. areaIt.setValue(newArea); // And set row/column spanning of spanning cell. TableCell newSpanningCell = cellAt(newArea.row(), newArea.column()); newSpanningCell.setRowSpan(newArea.height()); newSpanningCell.setColumnSpan(newArea.width()); } } } }
void PageItem_Table::mergeCells(int row, int column, int numRows, int numCols) { ASSERT_VALID(); if (!validCell(row, column) || !validCell(row + numRows - 1, column + numCols - 1)) return; CellArea newArea(row, column, numCols, numRows); // Unite intersecting areas. QMutableListIterator<CellArea> areaIt(m_cellAreas); while (areaIt.hasNext()) { CellArea oldArea = areaIt.next(); if (newArea.intersects(oldArea)) { // The two areas intersect, so unite them. newArea = newArea.united(oldArea); // Reset row/column span of old spanning cell, then remove old area. TableCell oldSpanningCell = cellAt(oldArea.row(), oldArea.column()); oldSpanningCell.setRowSpan(1); oldSpanningCell.setColumnSpan(1); areaIt.remove(); } } // Set row/column span of new spanning cell, and add new area. TableCell newSpanningCell = cellAt(newArea.row(), newArea.column()); newSpanningCell.setRowSpan(newArea.height()); newSpanningCell.setColumnSpan(newArea.width()); m_cellAreas.append(newArea); // Update cells. TODO: Not for entire table. updateCells(); // If merged area covers active position, move to the spanning cell. if (newArea.contains(m_activeRow, m_activeColumn)) moveTo(newSpanningCell); // Remove all cells covered by the merged area from the selection. QMutableSetIterator<TableCell> cellIt(m_selection); while (cellIt.hasNext()) { TableCell cell = cellIt.next(); if (newArea.contains(cell.row(), cell.column()) && !(cell.row() == newArea.row() && cell.column() == newArea.column())) cellIt.remove(); } emit changed(); ASSERT_VALID(); }