}
-int Tabular::columnWidth(idx_type cell) const
+int Tabular::cellWidth(idx_type cell) const
{
int w = 0;
col_type const span = columnSpan(cell);
int new_width = 0;
for(row_type r = 0; r < nrows(); ++r) {
idx_type const i = cellIndex(r, c);
- if (columnSpan(i) == 1)
- if (getAlignment(i) == LYX_ALIGN_DECIMAL)
+ if (columnSpan(i) == 1) {
+ if (getAlignment(i) == LYX_ALIGN_DECIMAL
+ && cell_info[r][c].decimal_width!=0)
new_width = max(new_width, cellInfo(i).width
+ max_dwidth[c] - cellInfo(i).decimal_width);
else
new_width = max(new_width, cellInfo(i).width);
+ }
}
if (column_info[c].width != new_width) {
}
-void Tabular::setCellWidth(idx_type cell, int new_width)
-{
- cellInfo(cell).width = new_width + 2 * WIDTH_OF_LINE
- + interColumnSpace(cell);
-}
-
-
void Tabular::setAlignment(idx_type cell, LyXAlignment align,
bool onlycolumn)
{
}
-int Tabular::cellWidth(idx_type cell) const
-{
- return cellInfo(cell).width;
-}
-
-
int Tabular::textHOffset(idx_type cell) const
{
// the LaTeX Way :-(
int x = WIDTH_OF_LINE;
+ int const w = cellWidth(cell) - cellInfo(cell).width;
+
switch (getAlignment(cell)) {
case LYX_ALIGN_CENTER:
- x += (columnWidth(cell) - cellWidth(cell)) / 2;
+ x += w / 2;
break;
case LYX_ALIGN_RIGHT:
- x += columnWidth(cell) - cellWidth(cell);
- // + interColumnSpace(cell);
+ x += w;
break;
case LYX_ALIGN_DECIMAL: {
// we center when no decimal point
if (cellInfo(cell).decimal_width == 0) {
- x += (columnWidth(cell) - cellWidth(cell)) / 2;
+ x += w / 2;
break;
}
col_type const c = cellColumn(cell);
int max_dhoffset = 0;
for(row_type r = 0; r < row_info.size() ; ++r) {
idx_type const i = cellIndex(r, c);
- if (getAlignment(i) == LYX_ALIGN_DECIMAL)
+ if (getAlignment(i) == LYX_ALIGN_DECIMAL
+ && cellInfo(i).decimal_width != 0)
max_dhoffset = max(max_dhoffset, cellInfo(i).decimal_hoffset);
}
x += max_dhoffset - cellInfo(cell).decimal_hoffset;
// we center in multicol when no decimal point
ismulticol |= ((column_info[c].alignment == LYX_ALIGN_DECIMAL)
- && (cellInfo(cell).decimal_width == 0) || isMultiRow(cell));
+ && (cellInfo(cell).decimal_width == 0));
// up counter by 1 for each decimally aligned col since they use 2 latex cols
int latexcolspan = columnSpan(cell);
: OutputParams::ALIGNED;
if (getAlignment(cell) == LYX_ALIGN_DECIMAL
- && cellInfo(cell).decimal_width != 0 && !isMultiRow(cell)) {
+ && cellInfo(cell).decimal_width != 0) {
// copy cell and split in 2
InsetTableCell head = InsetTableCell(*cellInset(cell).get());
head.getText(0)->setMacrocontextPosition(
int w = xo(cur.bv()) + ADD_TO_TABULAR_WIDTH;
col_type c = 0;
for (; c < tabular.ncols() && x > w; ++c)
- w += tabular.columnWidth(c);
+ w += tabular.cellWidth(c);
return c - 1;
}
tabular.cellInset(cell)->metrics(m, dim);
if (!p_width.zero())
dim.wid = m.base.textwidth;
- tabular.setCellWidth(cell, dim.wid);
+ tabular.cellInfo(cell).width = dim.wid + 2 * WIDTH_OF_LINE
+ + tabular.interColumnSpace(cell);
// FIXME(?): do we need a second metrics call?
TextMetrics const & tm =
// determine horiz offset because of decimal align (if necessary)
int decimal_hoffset = 0;
int decimal_width = 0;
- if ((tabular.column_info[c].alignment == LYX_ALIGN_DECIMAL)
- && !tabular.isMultiColumn(cell)
- && !tabular.isMultiRow(cell)) {
+ if (tabular.getAlignment(cell) == LYX_ALIGN_DECIMAL) {
// make a copy which we will split in 2
InsetTableCell head = InsetTableCell(*tabular.cellInset(cell).get());
head.getText(0)->setMacrocontextPosition(
idx = tabular.cellIndex(r, c);
if (tabular.isPartOfMultiRow(r, c)) {
- nx += tabular.columnWidth(idx);
+ nx += tabular.cellWidth(idx);
continue;
}
bv->coordCache().insets().add(cell(idx).get(), cx, cy);
cell(idx)->draw(pi, cx, cy);
drawCellLines(pi.pain, nx, y, r, idx, pi.change_);
- nx += tabular.columnWidth(idx);
+ nx += tabular.cellWidth(idx);
pi.selected = original_selection_state;
}
idx_type const cell = tabular.cellIndex(r, c);
if (tabular.isPartOfMultiRow(r, c)) {
- xx += tabular.columnWidth(cell);
+ xx += tabular.cellWidth(cell);
continue;
}
- int const w = tabular.columnWidth(cell);
+ int const w = tabular.cellWidth(cell);
int const h = tabular.cellHeight(cell);
int const yy = y - tabular.rowAscent(r);
if (isCellSelected(cur, r, c))
row_type row, idx_type cell, Change const & change) const
{
y -= tabular.rowAscent(row);
- int const w = tabular.columnWidth(cell);
+ int const w = tabular.cellWidth(cell);
int const h = tabular.cellHeight(cell);
Color linecolor = change.changed() ? change.color() : Color_tabularline;
Color gridcolor = change.changed() ? change.color() : Color_tabularonoffline;
Inset const & inset = *tabular.cellInset(cell);
Point o = bv.coordCache().getInsets().xy(&inset);
int const xbeg = o.x_ - tabular.textHOffset(cell);
- int const xend = xbeg + tabular.columnWidth(cell);
+ int const xend = xbeg + tabular.cellWidth(cell);
row_type const row = tabular.cellRow(cell);
int const ybeg = o.y_ - tabular.rowAscent(row)
- tabular.interRowSpace(row);
col_type col = tabular.cellColumn(cell);
int lx = 0;
for (col_type c = 0; c < col; ++c)
- lx += tabular.columnWidth(c);
+ lx += tabular.column_info[c].width;
return lx;
}
int const X2 = maxwidth;
int const offset = ADD_TO_TABULAR_WIDTH + 2;
int const x1 = xo(cur.bv()) + cellXPos(cur[i].idx()) + offset;
- int const x2 = x1 + tabular.columnWidth(cur[i].idx());
+ int const x2 = x1 + tabular.cellWidth(cur[i].idx());
if (x1 < X1)
scx_ = X1 + 20 - x1;