[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/3.5/kdewebdev/quanta/components/tableeditor
From: Andras Mantia <amantia () kde ! org>
Date: 2005-09-14 18:14:40
Message-ID: 1126721680.693738.10372.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 460672 by amantia:
Small steps ahead: fix handling/deletion of merged columns.
M +58 -10 tableeditor.cpp
--- branches/KDE/3.5/kdewebdev/quanta/components/tableeditor/tableeditor.cpp \
#460671:460672 @@ -403,15 +403,39 @@
if (countRows)
{
maxCol = (nCol > maxCol) ? nCol : maxCol;
- for (int i = 0; i < maxCol - nCol; i++)
+ for (int col = 0; col < maxCol - nCol; col++)
{
- tableNode.node = new Node(0L);
- newNum++;
- tableNode.node->tag = new Tag();
- tableNode.node->tag->setDtd(m_dtd);
- tableNode.node->tag->parse("<td>", m_write);
- tableNode.merged = false;
- tableRowTags.append(tableNode);
+ while (mergeMatrix[nRow - 1][col].node != 0L) {
+ if (m_colSpin->value() < col)
+ m_colSpin->setValue(col);
+ TableNode tableN = mergeMatrix[nRow - 1][col];
+ Node *n = tableN.node;
+ setCellText(m_dataTable, nRow - 1, col, i18n("Merged with (%1, \
%2).").arg(tableN.mergedRow + 1).arg(tableN.mergedCol + 1)); + \
m_dataTable->item(nRow-1, col)->setEnabled(false); + tableNode.node = new \
Node(0L); + tableNode.node->tag = new Tag(*(n->tag));
+ configureCell(nRow-1, col, tableNode.node);
+ newNum++;
+ tableNode.merged = true;
+ tableNode.mergedRow = tableN.mergedRow;
+ tableNode.mergedCol = tableN.mergedCol;
+ tableRowTags.append(tableNode);
+ col++;
+ nCol++;
+ if ((uint)nCol >= mergeMatrix[0].size()) // Check if there are enough \
cols + for (uint i=0; i<mergeMatrix.size(); i++)
+ mergeMatrix[i].resize(2 * mergeMatrix[i].size());
+
+ } /*else
+ {
+ tableNode.node = new Node(0L);
+ newNum++;
+ tableNode.node->tag = new Tag();
+ tableNode.node->tag->setDtd(m_dtd);
+ tableNode.node->tag->parse("<td>", m_write);
+ tableNode.merged = false;
+ tableRowTags.append(tableNode);
+ }*/
}
if (!tableRowTags.isEmpty())
m_tableTags->append(tableRowTags);
@@ -880,6 +904,16 @@
m_tableRows->erase(it);
QValueList<QValueList<TableNode> >::Iterator it2 = m_tableTags->at(m_row);
for (QValueList<TableNode>::Iterator it3 = (*it2).begin(); it3 != (*it2).end(); \
++it3) { + if ((*it3).merged)
+ {
+ TableNode *mainTableNode = \
&((*m_tableTags)[(*it3).mergedRow][(*it3).mergedCol]); + int rowspan = \
mainTableNode->node->tag->attributeValue("rowspan", true).toInt(); + rowspan--;
+ if (rowspan > 1)
+ mainTableNode->node->tag->editAttribute("rowspan", \
QString("%1").arg(rowspan)); + else
+ mainTableNode->node->tag->deleteAttribute("rowspan");
+ }
delete (*it3).node;
newNum--;
}
@@ -900,6 +934,7 @@
(*it2).merged = false;
setCellText(m_dataTable, i, j, tagContent((*it2).node));
m_dataTable->item(i, j)->setEnabled(true);
+ (*it2).node->tag->deleteAttribute("colspan");
}
j++;
}
@@ -909,6 +944,16 @@
m_col = m_dataTable->numCols() - 1;
for (QValueList<QValueList<TableNode> >::Iterator it = m_tableTags->begin(); it != \
m_tableTags->end(); ++it) { QValueList<TableNode>::Iterator it2 = (*it).at(m_col);
+ if ((*it2).merged)
+ {
+ TableNode *mainTableNode = \
&((*m_tableTags)[(*it2).mergedRow][(*it2).mergedCol]); + int colspan = \
mainTableNode->node->tag->attributeValue("colspan", true).toInt(); + colspan--;
+ if (colspan > 1)
+ mainTableNode->node->tag->editAttribute("colspan", \
QString("%1").arg(colspan)); + else
+ mainTableNode->node->tag->deleteAttribute("colspan");
+ }
delete (*it2).node;
newNum--;
(*it).erase(it2);
@@ -981,14 +1026,17 @@
lCol = selection.leftCol();
rCol = selection.rightCol();
TableNode *mainTableNode = &((*m_tableTags)[tRow][lCol]);
- mainTableNode->node->tag->editAttribute("colspan", QString("%1").arg(rCol - lCol + \
1));
- mainTableNode->node->tag->editAttribute("rowSpan", QString("%1").arg(bRow - tRow + \
1)); + if (rCol - lCol > 0)
+ mainTableNode->node->tag->editAttribute("colspan", QString("%1").arg(rCol - lCol \
+ 1)); + if (bRow - tRow > 0)
+ mainTableNode->node->tag->editAttribute("rowSpan", QString("%1").arg(bRow - tRow \
+ 1)); for (int i = 0; i < bRow - tRow + 1; i++)
for (int j = 0; j < rCol - lCol + 1; j++) {
if (i != 0 || j != 0) {
setCellText(m_dataTable, tRow + i, lCol + j, i18n("Merged with (%1, \
%2).").arg(tRow + 1).arg(lCol + 1)); m_dataTable->item(tRow + i, lCol + \
j)->setEnabled(false); TableNode *tableNode = &((*m_tableTags)[tRow + i][lCol + j]);
+ delete tableNode->node;
tableNode->node = new Node(0L);
newNum++;
tableNode->node->tag = new Tag(*(mainTableNode->node->tag));
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic