mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
Table: use the length of header row as the length of the table
This commit is contained in:
parent
8d95553e82
commit
05a42bd2bb
@ -208,6 +208,8 @@ void VTable::format()
|
|||||||
}
|
}
|
||||||
|
|
||||||
int nrCols = calculateColumnCount();
|
int nrCols = calculateColumnCount();
|
||||||
|
pruneColumns(nrCols);
|
||||||
|
|
||||||
for (int i = 0; i < nrCols; ++i) {
|
for (int i = 0; i < nrCols; ++i) {
|
||||||
formatOneColumn(i, curRowIdx, curPib);
|
formatOneColumn(i, curRowIdx, curPib);
|
||||||
}
|
}
|
||||||
@ -215,16 +217,9 @@ void VTable::format()
|
|||||||
|
|
||||||
int VTable::calculateColumnCount() const
|
int VTable::calculateColumnCount() const
|
||||||
{
|
{
|
||||||
int nr = 0;
|
// We use the width of the header as the width of the table.
|
||||||
|
// With this, we could add or remove one column by just changing the header row.
|
||||||
// Find the longest row.
|
return header()->m_cells.size();
|
||||||
for (const auto & row : m_rows) {
|
|
||||||
if (row.m_cells.size() > nr) {
|
|
||||||
nr = row.m_cells.size();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VTable::Row *VTable::header() const
|
VTable::Row *VTable::header() const
|
||||||
@ -354,7 +349,7 @@ void VTable::fetchCellInfoOfColumn(int p_idx,
|
|||||||
|
|
||||||
// Get the info of this cell.
|
// Get the info of this cell.
|
||||||
const auto & cell = row.m_cells[p_idx];
|
const auto & cell = row.m_cells[p_idx];
|
||||||
int first = 1, last = cell.m_length - 2;
|
int first = 1, last = cell.m_length - 1;
|
||||||
for (; first <= last; ++first) {
|
for (; first <= last; ++first) {
|
||||||
if (cell.m_text[first] != ' ') {
|
if (cell.m_text[first] != ' ') {
|
||||||
// Found the core content.
|
// Found the core content.
|
||||||
@ -589,7 +584,7 @@ void VTable::writeExist()
|
|||||||
for (auto & row : m_rows) {
|
for (auto & row : m_rows) {
|
||||||
bool needChange = false;
|
bool needChange = false;
|
||||||
for (const auto & cell : row.m_cells) {
|
for (const auto & cell : row.m_cells) {
|
||||||
if (!cell.m_formattedText.isEmpty()) {
|
if (!cell.m_formattedText.isEmpty() || cell.m_deleted) {
|
||||||
needChange = true;
|
needChange = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -610,6 +605,10 @@ void VTable::writeExist()
|
|||||||
// Construct the block text.
|
// Construct the block text.
|
||||||
QString newBlockText(row.m_preText);
|
QString newBlockText(row.m_preText);
|
||||||
for (auto & cell : row.m_cells) {
|
for (auto & cell : row.m_cells) {
|
||||||
|
if (cell.m_deleted) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
int pos = newBlockText.size();
|
int pos = newBlockText.size();
|
||||||
if (cell.m_formattedText.isEmpty()) {
|
if (cell.m_formattedText.isEmpty()) {
|
||||||
newBlockText += cell.m_text;
|
newBlockText += cell.m_text;
|
||||||
@ -658,6 +657,10 @@ void VTable::writeNonExist()
|
|||||||
const auto & row = m_rows[rowIdx];
|
const auto & row = m_rows[rowIdx];
|
||||||
tableText += row.m_preText;
|
tableText += row.m_preText;
|
||||||
for (auto & cell : row.m_cells) {
|
for (auto & cell : row.m_cells) {
|
||||||
|
if (cell.m_deleted) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
tableText += cell.m_text;
|
tableText += cell.m_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -676,3 +679,12 @@ void VTable::writeNonExist()
|
|||||||
cursor.setPosition(pos);
|
cursor.setPosition(pos);
|
||||||
m_editor->setTextCursorW(cursor);
|
m_editor->setTextCursorW(cursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VTable::pruneColumns(int p_nrCols)
|
||||||
|
{
|
||||||
|
for (auto & row : m_rows) {
|
||||||
|
for (int i = p_nrCols; i < row.m_cells.size(); ++i) {
|
||||||
|
row.m_cells[i].m_deleted = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
10
src/vtable.h
10
src/vtable.h
@ -34,7 +34,8 @@ private:
|
|||||||
Cell()
|
Cell()
|
||||||
: m_offset(-1),
|
: m_offset(-1),
|
||||||
m_length(0),
|
m_length(0),
|
||||||
m_cursorCoreOffset(-1)
|
m_cursorCoreOffset(-1),
|
||||||
|
m_deleted(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,6 +46,7 @@ private:
|
|||||||
m_text.clear();
|
m_text.clear();
|
||||||
m_formattedText.clear();
|
m_formattedText.clear();
|
||||||
m_cursorCoreOffset = -1;
|
m_cursorCoreOffset = -1;
|
||||||
|
m_deleted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start offset within block, including the starting border |.
|
// Start offset within block, including the starting border |.
|
||||||
@ -62,6 +64,9 @@ private:
|
|||||||
|
|
||||||
// If cursor is within this cell, this will not be -1.
|
// If cursor is within this cell, this will not be -1.
|
||||||
int m_cursorCoreOffset;
|
int m_cursorCoreOffset;
|
||||||
|
|
||||||
|
// Whether this cell need to be deleted.
|
||||||
|
bool m_deleted;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Row
|
struct Row
|
||||||
@ -169,6 +174,9 @@ private:
|
|||||||
|
|
||||||
void writeNonExist();
|
void writeNonExist();
|
||||||
|
|
||||||
|
// Prune unwanted columns beyond the header row.
|
||||||
|
void pruneColumns(int p_nrCols);
|
||||||
|
|
||||||
VTable::Row *header() const;
|
VTable::Row *header() const;
|
||||||
|
|
||||||
VTable::Row *delimiter() const;
|
VTable::Row *delimiter() const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user