From: Jürgen Vigna Date: Fri, 10 Nov 2000 16:04:51 +0000 (+0000) Subject: Small fixes noticed by Jean-Marc. X-Git-Tag: 1.6.10~21827 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=dacb5be6462e278d769686b7380984b584dd86ac;p=features.git Small fixes noticed by Jean-Marc. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1210 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/ChangeLog b/ChangeLog index 2e3dde6966..d800b58e09 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2000-11-10 Juergen Vigna + + * src/insets/insettext.C (resizeLyXText): check !cache[bv] + (deleteLyXText): ditto + + * src/insets/insettabular.C (InsetButtonPress): don't clear the + selection on mouse-button-3. + + * src/insets/insettabular.h: new function clearSelection(), use this + functions inside insettabular.C. + + * src/insets/insettabular.C (TabularFeatures): clear the selection + on remove_row/column. + + * src/insets/inset.C (scroll): fixed some scroll stuff. + + * src/insets/insettabular.C (draw): fixed another minor draw problem. + 2000-11-10 Jean-Marc Lasgouttes * lib/CREDITS: add Yves Bastide diff --git a/src/insets/inset.C b/src/insets/inset.C index aa1fadca81..c5526aa723 100644 --- a/src/insets/inset.C +++ b/src/insets/inset.C @@ -167,6 +167,10 @@ void UpdatableInset::scroll(BufferView * bv, float s) const { LyXFont font; + if (!s) { + scx = 0; + return; + } if (((top_x - scx) > 0) && (top_x - scx + width(bv, font)) < bv->workWidth()) return; @@ -189,7 +193,7 @@ void UpdatableInset::scroll(BufferView * bv, float s) const void UpdatableInset::scroll(BufferView * bv, int offset) const { if (offset > 0) { - if (!scx && top_x > 0) + if (!scx && top_x >= 20) return; if ((top_x + offset) > 20) scx += offset - (top_x - scx + offset - 20); diff --git a/src/insets/insettabular.C b/src/insets/insettabular.C index 88b234dfc4..89f19028de 100644 --- a/src/insets/insettabular.C +++ b/src/insets/insettabular.C @@ -129,9 +129,9 @@ InsetTabular::InsetTabular(Buffer const & buf, int rows, int columns) locked = no_selection = cursor_visible = false; cursor.x_fix(-1); oldcell = -1; - actcell = 0; + actrow = actcell = 0; cursor.pos(0); - sel_pos_start = sel_pos_end = sel_cell_start = sel_cell_end = 0; + clearSelection(); need_update = INIT; } @@ -144,7 +144,7 @@ InsetTabular::InsetTabular(InsetTabular const & tab, Buffer const & buf) locked = no_selection = cursor_visible = false; cursor.x_fix(-1); oldcell = -1; - actcell = 0; + actrow = actcell = 0; cursor.pos(0); sel_pos_start = sel_pos_end = sel_cell_start = sel_cell_end = 0; need_update = INIT; @@ -292,6 +292,7 @@ void InsetTabular::draw(BufferView * bv, LyXFont const & font, int baseline, } i = tabular->row_of_cell(actcell); if (the_locking_inset == tabular->GetCellInset(cell)) { +#if 0 LyXText::text_status st = bv->text->status; do { cx = nx + tabular->GetBeginningOfTextInCell(cell); @@ -310,12 +311,38 @@ void InsetTabular::draw(BufferView * bv, LyXFont const & font, int baseline, baseline - tabular->GetAscentOfRow(i) + 1, tabular->GetWidthOfColumn(cell) - tabular->GetBeginningOfTextInCell(cell) - - the_locking_inset->width(bv,font) - 1, + the_locking_inset->width(bv,font) - + tabular->GetAdditionalWidth(cell) - 1, tabular->GetAscentOfRow(i) + tabular->GetDescentOfRow(i) - 1); } tabular->GetCellInset(cell)->draw(bv,font,baseline, cx, false); } while(bv->text->status == LyXText::CHANGED_IN_DRAW); +#else + cx = nx + tabular->GetBeginningOfTextInCell(cell); + if (need_update == CELL) { + // clear before the inset + pain.fillRectangle( + nx + 1, + baseline - tabular->GetAscentOfRow(i) + 1, + int(cx - nx - 1), + tabular->GetAscentOfRow(i) + + tabular->GetDescentOfRow(i) - 1); + // clear behind the inset + pain.fillRectangle( + int(cx + the_locking_inset->width(bv,font) + 1), + baseline - tabular->GetAscentOfRow(i) + 1, + tabular->GetWidthOfColumn(cell) - + tabular->GetBeginningOfTextInCell(cell) - + the_locking_inset->width(bv,font) - + tabular->GetAdditionalWidth(cell) - 1, + tabular->GetAscentOfRow(i) + + tabular->GetDescentOfRow(i) - 1); + } + tabular->GetCellInset(cell)->draw(bv,font,baseline, cx, false); + if (bv->text->status == LyXText::CHANGED_IN_DRAW) + return; +#endif } } x -= ADD_TO_TABULAR_WIDTH; @@ -592,8 +619,8 @@ bool InsetTabular::InsertInset(BufferView * bv, Inset * inset) void InsetTabular::InsetButtonPress(BufferView * bv, int x, int y, int button) { - if (hasSelection()) { - sel_pos_start = sel_pos_end = sel_cell_start = sel_cell_end = 0; + if (hasSelection() && (button != 3)) { + clearSelection(); UpdateLocal(bv, SELECTION, false); } no_selection = false; @@ -1117,7 +1144,10 @@ void InsetTabular::resetPos(BufferView * bv) const } } static int const offset = ADD_TO_TABULAR_WIDTH + 2; - cursor.x(getCellXPos(actcell) + offset); + int new_x = getCellXPos(actcell); + new_x += offset; + cursor.x(new_x); +// cursor.x(getCellXPos(actcell) + offset); if (((cursor.x() - offset) > 20) && ((cursor.x()-offset+tabular->GetWidthOfColumn(actcell)) > (bv->workWidth()-20))) @@ -1387,6 +1417,7 @@ void InsetTabular::TabularFeatures(BufferView * bv, if ((row+1) > tabular->rows()) --row; actcell = tabular->GetCellNumber(row, column); + clearSelection(); UpdateLocal(bv, INIT, true); break; case LyXTabular::DELETE_COLUMN: @@ -1394,6 +1425,7 @@ void InsetTabular::TabularFeatures(BufferView * bv, if ((column+1) > tabular->columns()) --column; actcell = tabular->GetCellNumber(row, column); + clearSelection(); UpdateLocal(bv, INIT, true); break; case LyXTabular::M_TOGGLE_LINE_TOP: diff --git a/src/insets/insettabular.h b/src/insets/insettabular.h index 4a62f37108..f9d8396978 100644 --- a/src/insets/insettabular.h +++ b/src/insets/insettabular.h @@ -221,6 +221,10 @@ private: bool hasSelection() const { return ((sel_pos_start != sel_pos_end) || (sel_cell_start != sel_cell_end));} /// + void clearSelection() const { + sel_pos_start = sel_pos_end = sel_cell_start = sel_cell_end = 0; + } + /// bool ActivateCellInset(BufferView *, int x = 0, int y = 0, int button = 0, bool behind = false); /// diff --git a/src/insets/insettext.C b/src/insets/insettext.C index 369d9b4ae6..218521efbc 100644 --- a/src/insets/insettext.C +++ b/src/insets/insettext.C @@ -405,8 +405,6 @@ void InsetText::update(BufferView * bv, LyXFont const & font, bool reinit) if (need_update == INIT) { resizeLyXText(bv); need_update = FULL; -// if (!owner() && bv->text) -// bv->text->UpdateInset(bv, this); } int oldw = insetWidth; #if 1 @@ -424,20 +422,7 @@ void InsetText::update(BufferView * bv, LyXFont const & font, bool reinit) // textWidth(bv->painter()),static_cast(TEXT(bv)->width)); resizeLyXText(bv); need_update = FULL; -#if 0 - if (owner()) { - owner()->update(bv, font, reinit); - return; - } else { - update(bv, font, reinit); - } -#else -#if 1 update(bv, font, reinit); -#else - UpdateLocal(bv, INIT, false); -#endif -#endif return; } if ((need_update==CURSOR_PAR) && (TEXT(bv)->status==LyXText::UNCHANGED) && @@ -1510,7 +1495,7 @@ LyXText * InsetText::getLyXText(BufferView * bv) const void InsetText::deleteLyXText(BufferView * bv, bool recursive) const { - if (cache.find(bv) == cache.end()) + if ((cache.find(bv) == cache.end()) || !cache[bv]) return; delete cache[bv]; cache.erase(bv); @@ -1528,7 +1513,7 @@ void InsetText::resizeLyXText(BufferView * bv) const { if (!par->next && !par->size()) // resize not neccessary! return; - if (cache.find(bv) == cache.end()) + if ((cache.find(bv) == cache.end()) || !cache[bv]) return; LyXParagraph * lpar = 0; diff --git a/src/text2.C b/src/text2.C index 9564e41c7f..6636883fe8 100644 --- a/src/text2.C +++ b/src/text2.C @@ -3501,9 +3501,9 @@ Undo * LyXText::CreateUndo(Buffer * buf, Undo::undo_kind kind, end = end->next; } - if (start && end - && start != end->next - && (before != behind || (!before && !behind))) { + if (start && end && (start != end->next) && + ((before != behind) || (!before && !behind))) + { tmppar = start; tmppar2 = tmppar->Clone(); tmppar2->id(tmppar->id());