+2000-10-02 Juergen Vigna <jug@sad.it>
+
+ * src/insets/insettabular.C (LocalDispatch): fixed selection code,
+ now you can type or do stuff inside the table-cell also when in dummy
+ position, fixed visible cursor.
+
+ * src/insets/insettext.C (Edit): fixing cursor-view position.
+
+ * src/lyxfunc.C (Dispatch): use * text variable so that it can
+ be used for equal functions in lyxfunc and insettext.
+
+ * src/text.C (GetVisibleRow): fixed a small clear_area bug.
+
2000-10-02 John Levon <moz@compsoc.man.ac.uk>
* src/frontends/gnome/FormCitation.h:
the_locking_inset = 0;
if (lr)
moveRight(bv, false);
+ ShowInsetCursor(bv, false);
UpdateLocal(bv, CELL, false);
return true;
}
sel_pos_start = sel_pos_end = cursor.pos();
sel_cell_start = sel_cell_end = actcell;
the_locking_inset=0;
+ ShowInsetCursor(bv);
result = DISPATCHED;
return result;
}
HideInsetCursor(bv);
result=DISPATCHED;
switch (action) {
- // Normal chars not handled here
- case -1:
- break;
// --- Cursor Movements ---------------------------------------------
case LFUN_RIGHTSEL:
if (tabular->IsLastCellInRow(actcell) && !cellstart(cursor.pos()))
break;
moveRight(bv, false);
- sel_pos_end = cursor.pos();
+#if 0
if (!cellstart(cursor.pos())) {
+ sel_pos_end = cursor.pos();
if (tabular->right_column_of_cell(sel_cell_start) >
tabular->right_column_of_cell(actcell))
sel_cell_end = actcell+1;
else
sel_cell_end = actcell;
}
+#else
+ sel_pos_end = cursor.pos();
+ sel_cell_end = actcell;
+#endif
UpdateLocal(bv, SELECTION, false);
break;
case LFUN_RIGHT:
if (tabular->IsFirstCellInRow(actcell) && cellstart(cursor.pos()))
break;
moveLeft(bv, false);
- sel_pos_end = cursor.pos();
+#if 0
if (cellstart(cursor.pos())) {
+ sel_pos_end = cursor.pos();
if (tabular->column_of_cell(sel_cell_start) >=
tabular->column_of_cell(actcell))
sel_cell_end = actcell;
else
sel_cell_end = actcell-1;
}
+#else
+ sel_pos_end = cursor.pos();
+ sel_cell_end = actcell;
+#endif
UpdateLocal(bv, SELECTION, false);
break;
case LFUN_LEFT:
UpdateLocal(bv, INIT, true);
break;
default:
+ // we try to activate the actual inset and put this event down to
+ // the insets dispatch function.
result = UNDISPATCHED;
+ if (the_locking_inset)
+ break;
+ if (ActivateCellInset(bv)) {
+ result=the_locking_inset->LocalDispatch(bv, action, arg);
+ if (result == DISPATCHED_NOUPDATE)
+ return result;
+ else if (result == DISPATCHED) {
+ the_locking_inset->ToggleInsetCursor(bv);
+ UpdateLocal(bv, CELL, false);
+ the_locking_inset->ToggleInsetCursor(bv);
+ return result;
+ } else {
+ result = UNDISPATCHED;
+ }
+ }
break;
}
if (result!=FINISHED) {
if (!the_locking_inset) {
-#if 0
- if (ocell != actcell)
- bview->getOwner()->getPopups().updateFormTabular();
-#endif
ShowInsetCursor(bv);
}
} else
}
-void InsetTabular::ShowInsetCursor(BufferView * bv)
+void InsetTabular::ShowInsetCursor(BufferView * bv, bool show)
{
if (!cursor_visible) {
LyXFont font; // = GetFont(par, cursor.pos);
int const asc = lyxfont::maxAscent(font);
int const desc = lyxfont::maxDescent(font);
bv->fitLockedInsetCursor(cursor.x(), cursor.y(), asc, desc);
- bv->showLockedInsetCursor(cursor.x(), cursor.y(), asc, desc);
+ if (show)
+ bv->showLockedInsetCursor(cursor.x(), cursor.y(), asc, desc);
cursor_visible = true;
}
}
if (tabular->IsLastCell(actcell))
return FINISHED;
++actcell;
- cursor.pos((cursor.pos() + 1) % 2);
+ cursor.pos(0);
} else if (lock) {
if (ActivateCellInset(bv))
return DISPATCHED;
} else { // before the inset
- cursor.pos((cursor.pos() + 1) % 2);
+ cursor.pos(1);
}
resetPos(bv);
return DISPATCHED_NOUPDATE;
UpdatableInset::RESULT InsetTabular::moveLeft(BufferView * bv, bool lock)
{
- if (!cursor.pos()) {
- if (!actcell)
- return FINISHED;
- cursor.pos(0);
- }
- cursor.pos((cursor.pos() - 1) % 2);
- if (!cellstart(cursor.pos())) {
+ if (cellstart(cursor.pos()) && !actcell)
+ return FINISHED;
+ if (cellstart(cursor.pos())) {
--actcell;
+ cursor.pos(1);
} else if (lock) { // behind the inset
+ cursor.pos(0);
if (ActivateCellInset(bv, 0, 0, 0, true))
return DISPATCHED;
+ } else {
+ cursor.pos(0);
}
resetPos(bv);
return DISPATCHED_NOUPDATE;
if (tabular->IsLastCell(actcell))
return false;
++actcell;
- cursor.pos((cursor.pos() + 1) % 2);
- if (!cellstart(cursor.pos()))
- cursor.pos((cursor.pos() + 1) % 2);
resetPos(bv);
return true;
}
if (!actcell) // first cell
return false;
--actcell;
- cursor.pos((cursor.pos() - 1) % 2);
- if (cellstart(cursor.pos()))
- cursor.pos((cursor.pos() - 1) % 2);
resetPos(bv);
return true;
}
}
inset_x = cursor.x() - top_x + tabular->GetBeginningOfTextInCell(actcell);
inset_y = cursor.y();
- inset->Edit(bv, x - inset_x, y - inset_y, button);
+ inset->Edit(bv, x, y - inset_y, button);
if (!the_locking_inset)
return false;
UpdateLocal(bv, CELL, false);
void DrawCellSelection(Painter &, int x, int baseline,
int row, int column, int cell) const;
///
- void ShowInsetCursor(BufferView *);
+ void ShowInsetCursor(BufferView *, bool show=true);
///
void HideInsetCursor(BufferView *);
///
}
TEXT(bv)->refresh_y = 0;
TEXT(bv)->status = LyXText::UNCHANGED;
- if ((drawFrame == ALWAYS) || ((drawFrame == LOCKED) && locked)) {
+ if ((need_update != CURSOR_PAR) &&
+ ((drawFrame == ALWAYS) || ((drawFrame == LOCKED) && locked)))
+ {
pain.rectangle(top_x + 1, baseline - insetAscent + 1,
width(bv, f) - 1, insetAscent + insetDescent - 1,
frame_color);
y+TEXT(bv)->first+insetAscent);
TEXT(bv)->sel_cursor = TEXT(bv)->cursor;
bv->text->FinishUndo();
+ ShowInsetCursor(bv);
UpdateLocal(bv, FULL, false);
}
case LFUN_RIGHT:
result = moveRight(bv);
bv->text->FinishUndo();
+ TEXT(bv)->ClearSelection();
UpdateLocal(bv, CURSOR, false);
break;
case LFUN_LEFTSEL:
case LFUN_LEFT:
bv->text->FinishUndo();
result= moveLeft(bv);
+ TEXT(bv)->ClearSelection();
UpdateLocal(bv, CURSOR, false);
break;
case LFUN_DOWNSEL:
case LFUN_DOWN:
bv->text->FinishUndo();
result = moveDown(bv);
+ TEXT(bv)->ClearSelection();
UpdateLocal(bv, CURSOR, false);
break;
case LFUN_UPSEL:
case LFUN_UP:
bv->text->FinishUndo();
result = moveUp(bv);
+ TEXT(bv)->ClearSelection();
UpdateLocal(bv, CURSOR, false);
break;
case LFUN_HOME:
}
}
- // If in math mode pass the control to
- // the math inset [asierra060396]
- if (owner->view()->available() &&
- owner->view()->the_locking_inset) {
+ LyXText * text = 0;
+ if (owner->view()->available() && owner->view()->the_locking_inset) {
+ text = owner->view()->the_locking_inset->getLyXText(owner->view());
UpdatableInset::RESULT result;
if ((action > 1) || ((action == LFUN_UNKNOWN_ACTION) &&
(keyseq.length >= -1)))
}
}
+ if (!text)
+ text = owner->view()->text;
+
switch(action) {
// --- Misc -------------------------------------------
case LFUN_WORDFINDFORWARD :
case LFUN_UPCASE_WORD:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->ChangeWordCase(owner->view(),
- LyXText::text_uppercase);
+ text->ChangeWordCase(owner->view(), LyXText::text_uppercase);
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
break;
case LFUN_LOWCASE_WORD:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->ChangeWordCase(owner->view(),
- LyXText::text_lowercase);
+ text->ChangeWordCase(owner->view(), LyXText::text_lowercase);
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
break;
case LFUN_CAPITALIZE_WORD:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->ChangeWordCase(owner->view(),
- LyXText::text_capitalization);
+ text->ChangeWordCase(owner->view(),
+ LyXText::text_capitalization);
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
break;
break;
case LFUN_WORDRIGHT:
- if(!owner->view()->text->mark_set)
+ if(!text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
- owner->view()->text->CursorLeftOneWord(owner->view());
+ if (text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
+ text->CursorLeftOneWord(owner->view());
else
- owner->view()->text->CursorRightOneWord(owner->view());
+ text->CursorRightOneWord(owner->view());
owner->view()->text->FinishUndo();
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
moveCursorUpdate(false);
owner->showState();
break;
case LFUN_WORDLEFT:
- if(!owner->view()->text->mark_set)
+ if(!text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
- owner->view()->text->CursorRightOneWord(owner->view());
+ if (text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
+ text->CursorRightOneWord(owner->view());
else
- owner->view()->text->CursorLeftOneWord(owner->view());
+ text->CursorLeftOneWord(owner->view());
owner->view()->text->FinishUndo();
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
moveCursorUpdate(false);
owner->showState();
break;
break;
case LFUN_SETMARK:
- if(owner->view()->text->mark_set) {
+ if(text->mark_set) {
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
setMessage(N_("Mark removed"));
} else {
owner->view()->beforeChange();
- owner->view()->text->mark_set = 1;
+ text->mark_set = 1;
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
setMessage(N_("Mark set"));
}
- owner->view()->text->sel_cursor =
- owner->view()->text->cursor;
+ text->sel_cursor = text->cursor;
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
break;
case LFUN_DELETE:
/* -------> Delete word forward. */
case LFUN_DELETE_WORD_FORWARD:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->DeleteWordForward(owner->view());
+ text->DeleteWordForward(owner->view());
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
moveCursorUpdate(false);
owner->showState();
/* -------> Delete word backward. */
case LFUN_DELETE_WORD_BACKWARD:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->DeleteWordBackward(owner->view());
+ text->DeleteWordBackward(owner->view());
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
moveCursorUpdate(false);
owner->showState();
/* -------> Kill to end of line. */
case LFUN_DELETE_LINE_FORWARD:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->DeleteLineForward(owner->view());
+ text->DeleteLineForward(owner->view());
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
moveCursorUpdate(false);
break;
case LFUN_MARK_OFF:
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->sel_cursor =
- owner->view()->text->cursor;
+ text->sel_cursor = text->cursor;
setMessage(N_("Mark off"));
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
break;
/* -------> Set mark on. */
owner->view()->beforeChange();
owner->view()->text->mark_set = 1;
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->sel_cursor =
- owner->view()->text->cursor;
+ text->sel_cursor = text->cursor;
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
setMessage(N_("Mark on"));
break;
if (cleared) {
clear_area = true;
} else if (clear_area) {
- int w = (inset_owner ? inset_owner->width(bview, font) : ww);
+#warning Should be fixed with a lyxinset::clear_width(bv, font) function! (Jug)
+ int w = (inset_owner ? inset_owner->width(bview, font)-2 : ww);
pain.fillRectangle(x_offset, y_offset, w, row_ptr->height());
} else if (inset != 0) {
int h = row_ptr->baseline() - inset->ascent(bview, font);