}
refColumn = getColumnByIndex(index);
positionCol = refColumn;
// add a single column element to describe columns.
if (isUseRepeat()) {
TableTableColumnElement newColumnEle = (TableTableColumnElement) refColumn.getOdfElement().cloneNode(
true);
if (columnCount > 1) {
newColumnEle.setTableNumberColumnsRepeatedAttribute(columnCount);
} else {
newColumnEle.removeAttributeNS(tableNameSpace, "number-columns-repeated");
}
mTableElement.insertBefore(newColumnEle, positionCol.getOdfElement());
for (int i = 0; i < columnCount; i++) {
list.add(getColumnInstance(newColumnEle, i));
}
} else {
for (int i = 0; i < columnCount; i++) {
TableTableColumnElement newColumnEle = (TableTableColumnElement) refColumn.getOdfElement()
.cloneNode(true);
mTableElement.insertBefore(newColumnEle, positionCol.getOdfElement());
newColumnEle.removeAttributeNS(tableNameSpace, "number-columns-repeated");
list.add(getColumnInstance(newColumnEle, 0));
}
}
return list;
}
// 1. insert the cell
int iRowCount = getRowCount();
for (int i = iRowCount - 1; i >= 0;) {
Row row = getRowByIndex(i);
Cell refCell = row.getCellByIndex(index - 1);
Cell positionCell = null;
positionCell = row.getCellByIndex(index);
row.insertCellBefore(refCell, positionCell, columnCount);
i = i - row.getRowsRepeatedNumber();
}
refColumn = getColumnByIndex(index - 1);
positionCol = getColumnByIndex(index);
// 2. insert a <table:table-column>
if (refColumn.getOdfElement() == positionCol.getOdfElement()) {
TableTableColumnElement column = refColumn.getOdfElement();
int repeatedCount = column.getTableNumberColumnsRepeatedAttribute();
TableTableColumnElement columnEle = positionCol.getOdfElement();
// add a single column element to describe columns.
if (isUseRepeat()) {
column.setTableNumberColumnsRepeatedAttribute(repeatedCount + columnCount);
Column startCol = getColumnInstance(positionCol.getOdfElement(), 0);
for (int i = repeatedCount + columnCount - 1; i >= columnCount + (index - startCol.getColumnIndex()); i--) {
updateColumnRepository(columnEle, i - columnCount, columnEle, i);
}
for (int i = 0; i < columnCount; i++) {
list.add(getColumnInstance(column, refColumn.mnRepeatedIndex + 1 + i));
}
} else {
TableTableColumnElement newBeforeColumnEle = (TableTableColumnElement) refColumn.getOdfElement()
.cloneNode(true);
if (index > 1) {
newBeforeColumnEle.setTableNumberColumnsRepeatedAttribute(index);
} else {
newBeforeColumnEle.removeAttributeNS(tableNameSpace, "number-columns-repeated");
}
mTableElement.insertBefore(newBeforeColumnEle, positionCol.getOdfElement());
for (int i = 0; i < index; i++) {
updateColumnRepository(columnEle, i, newBeforeColumnEle, i);
}
int newAfterCount = repeatedCount - index;
if (newAfterCount > 1) {
positionCol.setColumnsRepeatedNumber(newAfterCount);
} else {
positionCol.getOdfElement().removeAttributeNS(tableNameSpace, "number-columns-repeated");
}
for (int i = repeatedCount - 1; i >= index; i--) {
updateColumnRepository(columnEle, i, columnEle, i - index);
}
for (int i = 0; i < columnCount; i++) {
TableTableColumnElement newColumnEle = (TableTableColumnElement) refColumn.getOdfElement()
.cloneNode(true);
newColumnEle.removeAttributeNS(tableNameSpace, "number-columns-repeated");
mTableElement.insertBefore(newColumnEle, positionCol.getOdfElement());
list.add(getColumnInstance(newColumnEle, 0));
}
}
} else {
// add a single column element to describe columns.
if (isUseRepeat()) {
TableTableColumnElement newColumnEle = (TableTableColumnElement) refColumn.getOdfElement().cloneNode(
true);
if (columnCount > 1) {
newColumnEle.setTableNumberColumnsRepeatedAttribute(columnCount);
} else {
newColumnEle.removeAttributeNS(tableNameSpace, "number-columns-repeated");
}
mTableElement.insertBefore(newColumnEle, positionCol.getOdfElement());
for (int i = 0; i < columnCount; i++) {
list.add(getColumnInstance(newColumnEle, i));
}
} else {
for (int i = 0; i < columnCount; i++) {
TableTableColumnElement newColumnEle = (TableTableColumnElement) refColumn.getOdfElement()
.cloneNode(true);
newColumnEle.removeAttributeNS(tableNameSpace, "number-columns-repeated");
mTableElement.insertBefore(newColumnEle, positionCol.getOdfElement());
list.add(getColumnInstance(newColumnEle, 0));
}
}
}