pit_type const psize = head.paragraphs().front().size();
hassep = dit;
- if (hassep)
+ if (hassep) {
head.paragraphs().front().eraseChars(dit.pos(), psize, false);
-
- tail.paragraphs().front().eraseChars(0,
- dit.pos() < psize ? dit.pos() + 1 : psize, false);
+ tail.paragraphs().front().eraseChars(0,
+ dit.pos() < psize ? dit.pos() + 1 : psize, false);
+ }
return tail;
}
rotate(cs.rotate),
align_special(cs.align_special),
p_width(cs.p_width),
- inset(dynamic_cast<InsetTableCell *>(cs.inset->clone()))
+ inset(static_cast<InsetTableCell *>(cs.inset->clone()))
{
}
}
-int Tabular::columnWidth(idx_type cell) const
+int Tabular::cellWidth(idx_type cell) const
{
int w = 0;
col_type const span = columnSpan(cell);
}
-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);
}
} else if (row == 0) {
for (col_type c = 0; c < ncols(); ++c) {
- for ( ; c < ncols() && !topline[c]; ++c) {}
-
- col_type offset = 0;
- for (col_type j = 0 ; j < c; ++j)
- if (column_info[j].alignment == LYX_ALIGN_DECIMAL)
- ++offset;
-
- //babel makes the "-" character an active one, so we have to suppress this here
- //see http://groups.google.com/group/comp.text.tex/browse_thread/thread/af769424a4a0f289#
- if (lang == "slovak" || lang == "czech")
- os << "\\expandafter" << (use_booktabs ? "\\cmidrule" : "\\cline")
- << "\\expandafter{\\expandafter" << c + 1 + offset << "\\string-";
- else
- os << (use_booktabs ? "\\cmidrule{" : "\\cline{") << c + 1 + offset << '-';
-
- col_type cstart = c;
- for ( ; c < ncols() && topline[c]; ++c) {}
-
- for (col_type j = cstart ; j < c ; ++j)
- if (column_info[j].alignment == LYX_ALIGN_DECIMAL)
- ++offset;
-
- os << c + offset << "} ";
+ if (topline[c]) {
+ col_type offset = 0;
+ for (col_type j = 0 ; j < c; ++j)
+ if (column_info[j].alignment == LYX_ALIGN_DECIMAL)
+ ++offset;
+
+ //babel makes the "-" character an active one, so we have to suppress this here
+ //see http://groups.google.com/group/comp.text.tex/browse_thread/thread/af769424a4a0f289#
+ if (lang == "slovak" || lang == "czech")
+ os << "\\expandafter" << (use_booktabs ? "\\cmidrule" : "\\cline")
+ << "\\expandafter{\\expandafter" << c + 1 + offset << "\\string-";
+ else
+ os << (use_booktabs ? "\\cmidrule{" : "\\cline{") << c + 1 + offset << '-';
+
+ col_type cstart = c;
+ for ( ; c < ncols() && topline[c]; ++c) {}
+
+ for (col_type j = cstart ; j < c ; ++j)
+ if (column_info[j].alignment == LYX_ALIGN_DECIMAL)
+ ++offset;
+
+ os << c + offset << "} ";
+ }
}
}
os << "\n";
os << "\\hline ";
} else {
for (col_type c = 0; c < ncols(); ++c) {
- for ( ; c < ncols() && !bottomline[c]; ++c) {}
-
- col_type offset = 0;
- for (col_type j = 0 ; j < c; ++j)
- if (column_info[j].alignment == LYX_ALIGN_DECIMAL)
- ++offset;
-
- //babel makes the "-" character an active one, so we have to suppress this here
- //see http://groups.google.com/group/comp.text.tex/browse_thread/thread/af769424a4a0f289#
- if (lang == "slovak" || lang == "czech")
- os << "\\expandafter" << (use_booktabs ? "\\cmidrule" : "\\cline")
- << "\\expandafter{\\expandafter" << c + 1 + offset << "\\string-";
- else
- os << (use_booktabs ? "\\cmidrule{" : "\\cline{") << c + 1 + offset << '-';
-
- col_type cstart = c;
- for ( ; c < ncols() && bottomline[c]; ++c) {}
-
- for (col_type j = cstart ; j < c ; ++j)
- if (column_info[j].alignment == LYX_ALIGN_DECIMAL)
- ++offset;
-
- os << c + offset << "} ";
+ if (bottomline[c]) {
+ col_type offset = 0;
+ for (col_type j = 0 ; j < c; ++j)
+ if (column_info[j].alignment == LYX_ALIGN_DECIMAL)
+ ++offset;
+
+ //babel makes the "-" character an active one, so we have to suppress this here
+ //see http://groups.google.com/group/comp.text.tex/browse_thread/thread/af769424a4a0f289#
+ if (lang == "slovak" || lang == "czech")
+ os << "\\expandafter" << (use_booktabs ? "\\cmidrule" : "\\cline")
+ << "\\expandafter{\\expandafter" << c + 1 + offset << "\\string-";
+ else
+ os << (use_booktabs ? "\\cmidrule{" : "\\cline{") << c + 1 + offset << '-';
+
+ col_type cstart = c;
+ for ( ; c < ncols() && bottomline[c]; ++c) {}
+
+ for (col_type j = cstart ; j < c ; ++j)
+ if (column_info[j].alignment == LYX_ALIGN_DECIMAL)
+ ++offset;
+
+ os << c + offset << "} ";
+ }
}
}
os << "\n";
os << from_ascii(getPWidth(cell).asLatexString());
else
// we need to set a default value
- // needs to be discussed
os << "*";
os << "}{";
} // end if ismultirow
bool InsetTabular::insetAllowed(InsetCode code) const
{
- switch (code)
- {
+ switch (code) {
+ case FLOAT_CODE:
case MARGIN_CODE:
case MATHMACRO_CODE:
+ case WRAP_CODE:
return false;
case CAPTION_CODE:
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 =
idx = tabular.cellIndex(r, c);
if (tabular.isPartOfMultiRow(r, c)) {
- nx += tabular.columnWidth(idx);
+ nx += tabular.cellWidth(idx);
continue;
}
// Cache the Inset position.
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);
+ drawCellLines(pi, nx, y, r, 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))
}
-void InsetTabular::drawCellLines(Painter & pain, int x, int y,
- row_type row, idx_type cell, Change const & change) const
+void InsetTabular::drawCellLines(PainterInfo & pi, int x, int y,
+ row_type row, idx_type cell) 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;
+ Color const linecolor = pi.textColor(Color_tabularline);
+ Color const gridcolor = pi.textColor(Color_tabularonoffline);
// Top
bool drawline = tabular.topLine(cell)
|| (row > 0 && tabular.bottomLine(tabular.cellAbove(cell)));
- pain.line(x, y, x + w, y,
+ pi.pain.line(x, y, x + w, y,
drawline ? linecolor : gridcolor,
drawline ? Painter::line_solid : Painter::line_onoffdash);
// Bottom
drawline = tabular.bottomLine(cell);
- pain.line(x, y + h, x + w, y + h,
+ pi.pain.line(x, y + h, x + w, y + h,
drawline ? linecolor : gridcolor,
drawline ? Painter::line_solid : Painter::line_onoffdash);
col_type const col = tabular.cellColumn(cell);
drawline = tabular.leftLine(cell)
|| (col > 0 && tabular.rightLine(tabular.cellIndex(row, col - 1)));
- pain.line(x, y, x, y + h,
+ pi.pain.line(x, y, x, y + h,
drawline ? linecolor : gridcolor,
drawline ? Painter::line_solid : Painter::line_onoffdash);
drawline = tabular.rightLine(cell)
|| (col + 1 < tabular.ncols()
&& tabular.leftLine(tabular.cellIndex(row, col + 1)));
- pain.line(x + w, y, x + w, y + h,
+ pi.pain.line(x + w, y, x + w, y + h,
drawline ? linecolor : gridcolor,
drawline ? Painter::line_solid : Painter::line_onoffdash);
}
// only update if selection changes
if (bvcur.idx() == cur.idx() &&
!(bvcur.realAnchor().idx() == cur.idx() && bvcur.pos() != cur.pos()))
- cur.noUpdate();
+ cur.noScreenUpdate();
setCursorFromCoordinates(cur, cmd.x(), cmd.y());
bvcur.setCursor(cur);
bvcur.setSelection(true);
case LFUN_CHAR_RIGHT_SELECT:
case LFUN_CHAR_RIGHT:
case LFUN_CHAR_LEFT_SELECT:
- case LFUN_CHAR_LEFT: {
+ case LFUN_CHAR_LEFT:
+ case LFUN_WORD_FORWARD:
+ case LFUN_WORD_FORWARD_SELECT:
+ case LFUN_WORD_BACKWARD:
+ case LFUN_WORD_BACKWARD_SELECT:
+ case LFUN_WORD_RIGHT:
+ case LFUN_WORD_RIGHT_SELECT:
+ case LFUN_WORD_LEFT:
+ case LFUN_WORD_LEFT_SELECT: {
// determine whether we move to next or previous cell, where to enter
// the new cell from, and which command to "finish" (i.e., exit the
// inset) with:
FuncCode finish_lfun;
if (act == LFUN_CHAR_FORWARD
- || act == LFUN_CHAR_FORWARD_SELECT) {
+ || act == LFUN_CHAR_FORWARD_SELECT
+ || act == LFUN_WORD_FORWARD
+ || act == LFUN_WORD_FORWARD_SELECT) {
next_cell = true;
finish_lfun = LFUN_FINISHED_FORWARD;
}
else if (act == LFUN_CHAR_BACKWARD
- || act == LFUN_CHAR_BACKWARD_SELECT) {
+ || act == LFUN_CHAR_BACKWARD_SELECT
+ || act == LFUN_WORD_BACKWARD
+ || act == LFUN_WORD_BACKWARD_SELECT) {
next_cell = false;
finish_lfun = LFUN_FINISHED_BACKWARD;
}
// table's direction.
else {
bool const right = act == LFUN_CHAR_RIGHT
- || act == LFUN_CHAR_RIGHT_SELECT;
+ || act == LFUN_CHAR_RIGHT_SELECT
+ || act == LFUN_WORD_RIGHT
+ || act == LFUN_WORD_RIGHT_SELECT;
next_cell = isRightToLeft(cur) != right;
if (lyxrc.visual_cursor)
finish_lfun = right ? LFUN_FINISHED_RIGHT : LFUN_FINISHED_LEFT;
}
- bool const select = act == LFUN_CHAR_FORWARD_SELECT ||
- act == LFUN_CHAR_BACKWARD_SELECT ||
- act == LFUN_CHAR_RIGHT_SELECT ||
- act == LFUN_CHAR_LEFT_SELECT;
+ bool const select = act == LFUN_CHAR_FORWARD_SELECT
+ || act == LFUN_CHAR_BACKWARD_SELECT
+ || act == LFUN_CHAR_RIGHT_SELECT
+ || act == LFUN_CHAR_LEFT_SELECT
+ || act == LFUN_WORD_FORWARD_SELECT
+ || act == LFUN_WORD_RIGHT_SELECT
+ || act == LFUN_WORD_BACKWARD_SELECT
+ || act == LFUN_WORD_LEFT_SELECT;
// If we have a multicell selection or we're
// not doing some LFUN_*_SELECT thing anyway...
// col_type const col = tabular.cellColumn(cur.idx());
// int const t = cur.bv().top_y() + cur.bv().height();
// if (t < yo() + tabular.getHeightOfTabular()) {
-// cur.bv().scrollDocView(t);
+// cur.bv().scrollDocView(t, true);
// cur.idx() = tabular.cellBelow(first_visible_cell) + col;
// } else {
// cur.idx() = tabular.getFirstCellInRow(tabular.rows() - 1) + col;
// col_type const col = tabular.cellColumn(cur.idx());
// int const t = cur.bv().top_y() + cur.bv().height();
// if (yo() < 0) {
-// cur.bv().scrollDocView(t);
+// cur.bv().scrollDocView(t, true);
// if (yo() > 0)
// cur.idx() = col;
// else
break;
case Tabular::SET_LONGTABULAR:
+ // setting as longtable is not allowed when table is inside a float
+ if (cur.innerInsetOfType(FLOAT_CODE) != 0
+ || cur.innerInsetOfType(WRAP_CODE) != 0)
+ status.setEnabled(false);
status.setOnOff(tabular.is_long_tabular);
break;
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;
// only update if offset changed
if (scx_ != scx_old)
- cur.updateFlags(Update::Force | Update::FitCursor);
+ cur.screenUpdateFlags(Update::Force | Update::FitCursor);
}