mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-14 12:25:11 +00:00
InsetText/Tabular fixes (buglist from SF.NET)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2085 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
d963398763
commit
e06bc73c22
@ -1835,7 +1835,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument)
|
|||||||
if (!lt->selection.mark())
|
if (!lt->selection.mark())
|
||||||
beforeChange(lt);
|
beforeChange(lt);
|
||||||
update(lt, BufferView::SELECT|BufferView::FITCUR);
|
update(lt, BufferView::SELECT|BufferView::FITCUR);
|
||||||
LyXCursor const & cur = lt->cursor;
|
LyXCursor const cur = lt->cursor;
|
||||||
if (!is_rtl)
|
if (!is_rtl)
|
||||||
lt->CursorLeft(bv_, false);
|
lt->CursorLeft(bv_, false);
|
||||||
if ((is_rtl || cur != lt->cursor) && // only if really moved!
|
if ((is_rtl || cur != lt->cursor) && // only if really moved!
|
||||||
|
@ -1,3 +1,14 @@
|
|||||||
|
2001-06-01 Juergen Vigna <jug@sad.it>
|
||||||
|
|
||||||
|
* lyxfunc.C (Dispatch): LFUN_PREFIX don't call the update if we're
|
||||||
|
inside a LockingInset (is the update needed at all?).
|
||||||
|
|
||||||
|
2001-05-31 Juergen Vigna <jug@sad.it>
|
||||||
|
|
||||||
|
* BufferView_pimpl.C (Dispatch): we need a new instanze of cursor
|
||||||
|
here not the old one otherwise how should we compare it afterwards
|
||||||
|
if it's the same!
|
||||||
|
|
||||||
2001-06-01 Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
|
2001-06-01 Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
|
||||||
|
|
||||||
* lyxfont.C:
|
* lyxfont.C:
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
2001-06-01 Juergen Vigna <jug@sad.it>
|
||||||
|
|
||||||
|
* insettabular.C (resetPos): small hack so that scroll is not set to
|
||||||
|
0 when we are in the last column of a tabular. This is a problem we
|
||||||
|
have because of constats 20 offset on both directions, so this can
|
||||||
|
cause on the limit an endless loop.
|
||||||
|
|
||||||
|
* insettext.C (SetFont): forgot that we can have locking insets ;)
|
||||||
|
|
||||||
|
2001-05-31 Juergen Vigna <jug@sad.it>
|
||||||
|
|
||||||
|
* insettabular.C (LocalDispatch): small fix for LFUN_TAB.
|
||||||
|
|
||||||
2001-05-31 Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
|
2001-05-31 Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
|
||||||
|
|
||||||
* figinset.C: add using std:: directive for the C functions which
|
* figinset.C: add using std:: directive for the C functions which
|
||||||
|
@ -577,10 +577,12 @@ bool InsetTabular::UnlockInsetInInset(BufferView * bv, UpdatableInset * inset,
|
|||||||
if (the_locking_inset == inset) {
|
if (the_locking_inset == inset) {
|
||||||
the_locking_inset->InsetUnlock(bv);
|
the_locking_inset->InsetUnlock(bv);
|
||||||
the_locking_inset = 0;
|
the_locking_inset = 0;
|
||||||
|
#warning fix scrolling when cellinset has requested a scroll (Jug)!!!
|
||||||
|
#if 0
|
||||||
if (scroll(false))
|
if (scroll(false))
|
||||||
scroll(bv, 0.0F);
|
scroll(bv, 0.0F);
|
||||||
else
|
#endif
|
||||||
UpdateLocal(bv, CELL, false);
|
UpdateLocal(bv, CELL, false);
|
||||||
ShowInsetCursor(bv, false);
|
ShowInsetCursor(bv, false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -782,7 +784,7 @@ InsetTabular::LocalDispatch(BufferView * bv,
|
|||||||
case LFUN_SHIFT_TAB:
|
case LFUN_SHIFT_TAB:
|
||||||
case LFUN_TAB:
|
case LFUN_TAB:
|
||||||
{
|
{
|
||||||
if (GetFirstLockingInsetOfType(Inset::TABULAR_CODE))
|
if (GetFirstLockingInsetOfType(Inset::TABULAR_CODE) != this)
|
||||||
break;
|
break;
|
||||||
HideInsetCursor(bv);
|
HideInsetCursor(bv);
|
||||||
if (the_locking_inset) {
|
if (the_locking_inset) {
|
||||||
@ -1282,11 +1284,14 @@ void InsetTabular::resetPos(BufferView * bv) const
|
|||||||
new_x += offset;
|
new_x += offset;
|
||||||
cursor.x(new_x);
|
cursor.x(new_x);
|
||||||
// cursor.x(getCellXPos(actcell) + offset);
|
// cursor.x(getCellXPos(actcell) + offset);
|
||||||
if (scroll(false) && (tabular->GetWidthOfTabular() < bv->workWidth()-20)) {
|
if ((actcol < tabular->columns()-1) && scroll(false) &&
|
||||||
|
(tabular->GetWidthOfTabular() < bv->workWidth()-20))
|
||||||
|
{
|
||||||
scroll(bv, 0.0F);
|
scroll(bv, 0.0F);
|
||||||
UpdateLocal(bv, FULL, false);
|
UpdateLocal(bv, FULL, false);
|
||||||
} else if (the_locking_inset &&
|
} else if (the_locking_inset &&
|
||||||
(tabular->GetWidthOfColumn(actcell) > bv->workWidth()-20)) {
|
(tabular->GetWidthOfColumn(actcell) > bv->workWidth()-20))
|
||||||
|
{
|
||||||
int xx = cursor.x() - offset + bv->text->GetRealCursorX(bv);
|
int xx = cursor.x() - offset + bv->text->GetRealCursorX(bv);
|
||||||
if (xx > (bv->workWidth()-20)) {
|
if (xx > (bv->workWidth()-20)) {
|
||||||
scroll(bv, -(xx - bv->workWidth() + 60));
|
scroll(bv, -(xx - bv->workWidth() + 60));
|
||||||
|
@ -284,21 +284,7 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
|
|||||||
((need_update&(INIT|FULL)) || (top_baseline!=baseline) ||
|
((need_update&(INIT|FULL)) || (top_baseline!=baseline) ||
|
||||||
(last_drawn_width!=insetWidth)))
|
(last_drawn_width!=insetWidth)))
|
||||||
{
|
{
|
||||||
int w = insetWidth;
|
clearInset(pain, baseline, cleared);
|
||||||
int h = insetAscent + insetDescent;
|
|
||||||
int ty = baseline - insetAscent;
|
|
||||||
|
|
||||||
if (ty < 0) {
|
|
||||||
h += ty;
|
|
||||||
ty = 0;
|
|
||||||
}
|
|
||||||
if ((ty + h) > pain.paperHeight())
|
|
||||||
h = pain.paperHeight();
|
|
||||||
if ((top_x + drawTextXOffset + w) > pain.paperWidth())
|
|
||||||
w = pain.paperWidth();
|
|
||||||
pain.fillRectangle(top_x+drawTextXOffset, ty, w, h);
|
|
||||||
cleared = true;
|
|
||||||
need_update = FULL;
|
|
||||||
}
|
}
|
||||||
if (cleared)
|
if (cleared)
|
||||||
frame_is_visible = false;
|
frame_is_visible = false;
|
||||||
@ -315,7 +301,7 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
|
|||||||
}
|
}
|
||||||
top_x = int(x);
|
top_x = int(x);
|
||||||
#if 1
|
#if 1
|
||||||
cleared = true;
|
clearInset(pain, baseline, cleared);
|
||||||
#else
|
#else
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
@ -1394,6 +1380,10 @@ std::vector<string> const InsetText::getLabelList() const
|
|||||||
void InsetText::SetFont(BufferView * bv, LyXFont const & font, bool toggleall,
|
void InsetText::SetFont(BufferView * bv, LyXFont const & font, bool toggleall,
|
||||||
bool selectall)
|
bool selectall)
|
||||||
{
|
{
|
||||||
|
if (the_locking_inset) {
|
||||||
|
the_locking_inset->SetFont(bv, font, toggleall, selectall);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (TEXT(bv)->selection.set()) {
|
if (TEXT(bv)->selection.set()) {
|
||||||
bv->text->SetUndo(bv->buffer(), Undo::EDIT,
|
bv->text->SetUndo(bv->buffer(), Undo::EDIT,
|
||||||
bv->text->cursor.par()->previous(),
|
bv->text->cursor.par()->previous(),
|
||||||
@ -1761,6 +1751,24 @@ void InsetText::clearSelection(BufferView * bv)
|
|||||||
TEXT(bv)->ClearSelection(bv);
|
TEXT(bv)->ClearSelection(bv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InsetText::clearInset(Painter & pain, int baseline, bool & cleared) const
|
||||||
|
{
|
||||||
|
int w = insetWidth;
|
||||||
|
int h = insetAscent + insetDescent;
|
||||||
|
int ty = baseline - insetAscent;
|
||||||
|
|
||||||
|
if (ty < 0) {
|
||||||
|
h += ty;
|
||||||
|
ty = 0;
|
||||||
|
}
|
||||||
|
if ((ty + h) > pain.paperHeight())
|
||||||
|
h = pain.paperHeight();
|
||||||
|
if ((top_x + drawTextXOffset + w) > pain.paperWidth())
|
||||||
|
w = pain.paperWidth();
|
||||||
|
pain.fillRectangle(top_x+drawTextXOffset, ty, w, h);
|
||||||
|
cleared = true;
|
||||||
|
need_update = FULL;
|
||||||
|
}
|
||||||
/* Emacs:
|
/* Emacs:
|
||||||
* Local variables:
|
* Local variables:
|
||||||
* tab-width: 4
|
* tab-width: 4
|
||||||
|
@ -275,6 +275,7 @@ private:
|
|||||||
void drawFrame(Painter &, bool cleared) const;
|
void drawFrame(Painter &, bool cleared) const;
|
||||||
void clearFrame(Painter &, bool cleared) const;
|
void clearFrame(Painter &, bool cleared) const;
|
||||||
///
|
///
|
||||||
|
void clearInset(Painter &, int baseline, bool & cleared) const;
|
||||||
|
|
||||||
/* Private structures and variables */
|
/* Private structures and variables */
|
||||||
///
|
///
|
||||||
|
@ -710,7 +710,10 @@ string const LyXFunc::Dispatch(int ac,
|
|||||||
}
|
}
|
||||||
return string();
|
return string();
|
||||||
case LFUN_DOWN:
|
case LFUN_DOWN:
|
||||||
TEXT()->CursorDown(owner->view());
|
if (TEXT()->cursor.row()->next())
|
||||||
|
TEXT()->CursorDown(owner->view());
|
||||||
|
else
|
||||||
|
TEXT()->CursorRight(owner->view());
|
||||||
moveCursorUpdate(true, false);
|
moveCursorUpdate(true, false);
|
||||||
owner->showState();
|
owner->showState();
|
||||||
return string();
|
return string();
|
||||||
@ -794,7 +797,7 @@ string const LyXFunc::Dispatch(int ac,
|
|||||||
|
|
||||||
case LFUN_PREFIX:
|
case LFUN_PREFIX:
|
||||||
{
|
{
|
||||||
if (owner->view()->available()) {
|
if (owner->view()->available() && !owner->view()->theLockingInset()) {
|
||||||
owner->view()->update(TEXT(),
|
owner->view()->update(TEXT(),
|
||||||
BufferView::SELECT|BufferView::FITCUR);
|
BufferView::SELECT|BufferView::FITCUR);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user