using namespace std;
using namespace lyx::support;
-using boost::shared_ptr;
namespace lyx {
int Tabular::textVOffset(idx_type cell) const
{
- return cellInfo(cell).voffset;
+ int voffset = cellInfo(cell).voffset;
+ if (isMultiRow(cell)) {
+ row_type const row = cellRow(cell);
+ voffset += (cellHeight(cell) - rowAscent(row) - rowDescent(row))/2;
+ }
+ return voffset;
}
FuncStatus & status) const
{
bool enabled;
- switch (cmd.action) {
+ switch (cmd.action()) {
case LFUN_LAYOUT:
enabled = !forcePlainLayout();
break;
CursorSlice sl = cur.top();
Cursor & bvcur = cur.bv().cursor();
- switch (cmd.action) {
+ FuncCode const act = cmd.action();
+
+ switch (act) {
case LFUN_MOUSE_PRESS: {
//lyxerr << "# InsetTabular::MousePress\n" << cur.bv().cursor() << endl;
// select row
- if (cmd.x < xo(cur.bv()) + ADD_TO_TABULAR_WIDTH
- || cmd.x > xo(cur.bv()) + tabular.width()) {
- row_type r = rowFromY(cur, cmd.y);
+ if (cmd.x() < xo(cur.bv()) + ADD_TO_TABULAR_WIDTH
+ || cmd.x() > xo(cur.bv()) + tabular.width()) {
+ row_type r = rowFromY(cur, cmd.y());
cur.idx() = tabular.getFirstCellInRow(r);
cur.pos() = 0;
cur.resetAnchor();
}
// select column
int const y0 = yo(cur.bv()) - tabular.rowAscent(0);
- if (cmd.y < y0 + ADD_TO_TABULAR_WIDTH
- || cmd.y > y0 + tabular.height()) {
- col_type c = columnFromX(cur, cmd.x);
+ if (cmd.y() < y0 + ADD_TO_TABULAR_WIDTH
+ || cmd.y() > y0 + tabular.height()) {
+ col_type c = columnFromX(cur, cmd.x());
cur.idx() = tabular.cellIndex(0, c);
cur.pos() = 0;
cur.resetAnchor();
//lyxerr << "# InsetTabular::MouseMotion\n" << bvcur << endl;
if (cmd.button() == mouse_button::button1) {
// only accept motions to places not deeper nested than the real anchor
- if (!bvcur.anchor_.hasPart(cur)) {
+ if (!bvcur.realAnchor().hasPart(cur)) {
cur.undispatched();
break;
}
// select (additional) row
if (rowselect_) {
- row_type r = rowFromY(cur, cmd.y);
+ row_type r = rowFromY(cur, cmd.y());
cur.idx() = tabular.getLastCellInRow(r);
// we need to reset the cursor's pit and pos now, as the old ones
// may no longer be valid.
}
// select (additional) column
if (colselect_) {
- col_type c = columnFromX(cur, cmd.x);
+ col_type c = columnFromX(cur, cmd.x());
cur.idx() = tabular.cellIndex(tabular.nrows() - 1, c);
// we need to reset the cursor's pit and pos now, as the old ones
// may no longer be valid.
}
// only update if selection changes
if (bvcur.idx() == cur.idx() &&
- !(bvcur.anchor_.idx() == cur.idx() && bvcur.pos() != cur.pos()))
+ !(bvcur.realAnchor().idx() == cur.idx() && bvcur.pos() != cur.pos()))
cur.noUpdate();
- setCursorFromCoordinates(cur, cmd.x, cmd.y);
+ setCursorFromCoordinates(cur, cmd.x(), cmd.y());
bvcur.setCursor(cur);
bvcur.setSelection(true);
// if this is a multicell selection, we just set the cursor to
EntryDirection entry_from = ENTRY_DIRECTION_IGNORE;
FuncCode finish_lfun;
- if (cmd.action == LFUN_CHAR_FORWARD
- || cmd.action == LFUN_CHAR_FORWARD_SELECT) {
+ if (act == LFUN_CHAR_FORWARD
+ || act == LFUN_CHAR_FORWARD_SELECT) {
next_cell = true;
finish_lfun = LFUN_FINISHED_FORWARD;
}
- else if (cmd.action == LFUN_CHAR_BACKWARD
- || cmd.action == LFUN_CHAR_BACKWARD_SELECT) {
+ else if (act == LFUN_CHAR_BACKWARD
+ || act == LFUN_CHAR_BACKWARD_SELECT) {
next_cell = false;
finish_lfun = LFUN_FINISHED_BACKWARD;
}
// LEFT or RIGHT commands --- the interpretation will depend on the
// table's direction.
else {
- bool const right = cmd.action == LFUN_CHAR_RIGHT
- || cmd.action == LFUN_CHAR_RIGHT_SELECT;
+ bool const right = act == LFUN_CHAR_RIGHT
+ || act == LFUN_CHAR_RIGHT_SELECT;
next_cell = isRightToLeft(cur) != right;
if (lyxrc.visual_cursor)
finish_lfun = right ? LFUN_FINISHED_RIGHT : LFUN_FINISHED_LEFT;
}
- bool const select = cmd.action == LFUN_CHAR_FORWARD_SELECT ||
- cmd.action == LFUN_CHAR_BACKWARD_SELECT ||
- cmd.action == LFUN_CHAR_RIGHT_SELECT ||
- cmd.action == 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;
// If we have a multicell selection or we're
// not doing some LFUN_*_SELECT thing anyway...
// if our Text didn't do anything to the cursor
// then we try to put the cursor into the cell below
// setting also the right targetX.
- cur.selHandle(cmd.action == LFUN_DOWN_SELECT);
+ cur.selHandle(act == LFUN_DOWN_SELECT);
if (tabular.cellRow(cur.idx()) != tabular.nrows() - 1) {
cur.idx() = tabular.cellBelow(cur.idx());
cur.pit() = 0;
// if our Text didn't do anything to the cursor
// then we try to put the cursor into the cell above
// setting also the right targetX.
- cur.selHandle(cmd.action == LFUN_UP_SELECT);
+ cur.selHandle(act == LFUN_UP_SELECT);
if (tabular.cellRow(cur.idx()) != 0) {
cur.idx() = tabular.cellAbove(cur.idx());
cur.pit() = cur.lastpit();
case LFUN_CLIPBOARD_PASTE:
case LFUN_PRIMARY_SELECTION_PASTE: {
- docstring const clip = (cmd.action == LFUN_CLIPBOARD_PASTE) ?
+ docstring const clip = (act == LFUN_CLIPBOARD_PASTE) ?
theClipboard().getAsText() :
theSelection().get();
if (clip.empty())
bool InsetTabular::getStatus(Cursor & cur, FuncRequest const & cmd,
FuncStatus & status) const
{
- switch (cmd.action) {
+ switch (cmd.action()) {
case LFUN_INSET_MODIFY: {
if (&cur.inset() != this || cmd.getArg(0) != "tabular")
break;
}
if (action == Tabular::LAST_ACTION) {
status.clear();
- status.unknown(true);
+ status.setUnknown(true);
return true;
}
case LFUN_BRANCH_INSERT:
case LFUN_PHANTOM_INSERT:
case LFUN_WRAP_INSERT:
+ case LFUN_PREVIEW_INSERT:
case LFUN_ERT_INSERT: {
if (cur.selIsMultiCell()) {
status.setEnabled(false);