On Wed, Mar 19, 2003 at 09:35:15PM +0000, John Levon wrote: > This is fun. Insets like InsetMinipage and InsetERT can have e.g. > INSET_MODIFY applied to them. This can actually alter its size. It > actually needs to tell its contained InsetText to ->update(reinit == > true);
HA ! That's a bloody joke. This doesn't work. I have absolutely no idea why, of course. This update stuff is entirely beyond understanding. Just dealing with the bv->updateInset() vs. bv->update() vs. bv->update(blah) vs. inset->update() vs. inset->updateInsetInInset() vs lyxtext->update() vs. lyxtext->updateInset() [1] isn't too bad, but the semi-recursive nature and delayed insettext state update thing makes it impossible. I've spent 2 solid hours trying to work out the correct way of forcing an update of a minipage, no go. Pretty pissed off ... > Juergen, can you help ? What would you say if I suggest ripping the font > paramter from inset->update ? I've done this anyway, since it doesn't make things worse. I'm committing the lot below tomorrow. regards, john [1] I suspect casual readers may think I'm joking here. I'm not, these all exist, and they all call each other. Index: rowpainter.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/rowpainter.C,v retrieving revision 1.8 diff -u -p -r1.8 rowpainter.C --- rowpainter.C 17 Mar 2003 16:24:53 -0000 1.8 +++ rowpainter.C 20 Mar 2003 02:51:47 -0000 @@ -110,7 +110,9 @@ bool RowPainter::paintInset(pos_type con LyXFont const & font = getFont(pos); - inset->update(perv(bv_), font, false); +#warning inset->update FIXME + inset->update(perv(bv_), false); + inset->draw(perv(bv_), font, yo_ + row_.baseline(), x_); // return true if something changed when we drew an inset Index: text.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text.C,v retrieving revision 1.322 diff -u -p -r1.322 text.C --- text.C 19 Mar 2003 15:01:29 -0000 1.322 +++ text.C 20 Mar 2003 02:51:50 -0000 @@ -283,10 +283,11 @@ int LyXText::singleWidth(Paragraph * par return 3; } #if 1 +#warning inset->update FIXME // this IS needed otherwise on initialitation we don't get the fill // of the row right (ONLY on initialization if we read a file!) // should be changed! (Jug 20011204) - tmpinset->update(bv(), font); + tmpinset->update(bv()); #endif return tmpinset->width(bv(), font); } @@ -1019,7 +1020,8 @@ void LyXText::setHeightOfRow(Row * row) tmpinset = row->par()->getInset(pos); if (tmpinset) { #if 1 // this is needed for deep update on initialitation - tmpinset->update(bv(), tmpfont); +#warning inset->update FIXME + tmpinset->update(bv()); #endif asc = tmpinset->ascent(bv(), tmpfont); desc = tmpinset->descent(bv(), tmpfont); Index: text2.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text2.C,v retrieving revision 1.295 diff -u -p -r1.295 text2.C --- text2.C 19 Mar 2003 14:45:15 -0000 1.295 +++ text2.C 20 Mar 2003 02:51:53 -0000 @@ -415,9 +415,8 @@ void LyXText::toggleInset() } else { inset->open(bv()); } -#if 0 - inset->open(bv(), !inset->isOpen()); -#endif + + bv()->updateInset(inset); } @@ -2482,14 +2481,8 @@ void LyXText::postPaint(int start_y) // We are an inset's lyxtext. Tell the top-level lyxtext // it needs to update the row we're in. - LyXText * t = bv()->text; - - // FIXME: but what if this row is below ? - if (!t->refresh_row) { - t->refresh_row = t->cursor.row(); - t->refresh_y = t->cursor.y() - t->cursor.row()->baseline(); - } + t->postRowPaint(t->cursor.row(), t->cursor.y() - t->cursor.row()->baseline()); } @@ -2499,6 +2492,7 @@ void LyXText::postRowPaint(Row * row, in { if (status_ != UNCHANGED && refresh_y < start_y) { lyxerr << "Paint already pending from above" << endl; + status_ = NEED_MORE_REFRESH; return; } else { refresh_y = start_y; @@ -2515,15 +2509,8 @@ void LyXText::postRowPaint(Row * row, in // We are an inset's lyxtext. Tell the top-level lyxtext // it needs to update the row we're in. - LyXText * t = bv()->text; - - // FIXME: but what if this new row is above ? - // Why the !t->refresh_row at all ? - if (!t->refresh_row) { - t->refresh_row = t->cursor.row(); - t->refresh_y = t->cursor.y() - t->cursor.row()->baseline(); - } + t->postRowPaint(t->cursor.row(), t->cursor.y() - t->cursor.row()->baseline()); } Index: insets/inset.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/inset.h,v retrieving revision 1.79 diff -u -p -r1.79 inset.h --- insets/inset.h 17 Mar 2003 16:24:58 -0000 1.79 +++ insets/inset.h 20 Mar 2003 02:51:56 -0000 @@ -164,7 +164,7 @@ public: /// virtual void draw(BufferView *, LyXFont const &, int baseline, float & x) const = 0; /// update the inset representation - virtual void update(BufferView *, LyXFont const &, bool = false) + virtual void update(BufferView *, bool = false) {} /// what appears in the minibuffer when opening virtual string const editMessage() const; Index: insets/insetcollapsable.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcollapsable.C,v retrieving revision 1.129 diff -u -p -r1.129 insetcollapsable.C --- insets/insetcollapsable.C 19 Mar 2003 14:45:18 -0000 1.129 +++ insets/insetcollapsable.C 20 Mar 2003 02:51:56 -0000 @@ -46,7 +46,7 @@ class LyXText; InsetCollapsable::InsetCollapsable(BufferParams const & bp, bool collapsed) : UpdatableInset(), collapsed_(collapsed), inset(bp), button_length(0), button_top_y(0), button_bottom_y(0), - need_update(NONE), label("Label"), + label("Label"), #if 0 autocollapse(false), #endif @@ -64,7 +64,7 @@ InsetCollapsable::InsetCollapsable(Inset : UpdatableInset(in, same_id), collapsed_(in.collapsed_), framecolor(in.framecolor), labelfont(in.labelfont), inset(in.inset), button_length(0), button_top_y(0), button_bottom_y(0), - need_update(NONE), label(in.label), + label(in.label), #if 0 autocollapse(in.autocollapse), #endif @@ -167,10 +167,10 @@ int InsetCollapsable::width(BufferView * if (collapsed_) return width_collapsed(); - int widthCollapsed = width_collapsed(); + int const collapsed_width = width_collapsed(); + int const contents_width = inset.width(bv, font); - return (inset.width(bv, font) > widthCollapsed) ? - inset.width(bv, font) : widthCollapsed; + return max(collapsed_width, contents_width); } @@ -184,17 +184,11 @@ void InsetCollapsable::draw_collapsed(Pa void InsetCollapsable::draw(BufferView * bv, LyXFont const & f, - int baseline, float & x) const + int baseline, float & x, bool inlined) const { lyx::Assert(bv); cache(bv); - if (need_update != NONE) { - const_cast<InsetText *>(&inset)->update(bv, f, true); - bv->text->postChangedInDraw(); - need_update = NONE; - return; - } if (nodraw()) return; @@ -213,7 +207,7 @@ void InsetCollapsable::draw(BufferView * float old_x = x; if (!owner()) - x += static_cast<float>(scroll()); + x += scroll(); top_x = int(x); topx_set = true; @@ -221,10 +215,23 @@ void InsetCollapsable::draw(BufferView * int const bl = baseline - ascent(bv, f) + ascent_collapsed(); - draw_collapsed(pain, bl, old_x); - inset.draw(bv, f, bl + descent_collapsed() + inset.ascent(bv, f), x); - if (x < (top_x + button_length + TEXT_TO_INSET_OFFSET)) - x = top_x + button_length + TEXT_TO_INSET_OFFSET; + if (inlined) { + inset.draw(bv, f, baseline, x); + } else { + draw_collapsed(pain, bl, old_x); + inset.draw(bv, f, bl + descent_collapsed() + inset.ascent(bv, f), x); + // contained inset may be shorter than the button + if (x < (top_x + button_length + TEXT_TO_INSET_OFFSET)) + x = top_x + button_length + TEXT_TO_INSET_OFFSET; + } +} + + +void InsetCollapsable::draw(BufferView * bv, LyXFont const & f, + int baseline, float & x) const +{ + // by default, we are not inlined-drawing + draw(bv, f, baseline, x, false); } @@ -422,19 +429,18 @@ int InsetCollapsable::getMaxWidth(Buffer #endif -void InsetCollapsable::update(BufferView * bv, LyXFont const & font, - bool reinit) +void InsetCollapsable::update(BufferView * bv, bool reinit) { if (in_update) { if (reinit && owner()) { - owner()->update(bv, font, true); + owner()->update(bv, true); } return; } in_update = true; - inset.update(bv, font, reinit); + inset.update(bv, reinit); if (reinit && owner()) { - owner()->update(bv, font, true); + owner()->update(bv, true); } in_update = false; } Index: insets/insetcollapsable.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcollapsable.h,v retrieving revision 1.94 diff -u -p -r1.94 insetcollapsable.h --- insets/insetcollapsable.h 17 Mar 2003 01:34:34 -0000 1.94 +++ insets/insetcollapsable.h 20 Mar 2003 02:51:56 -0000 @@ -33,11 +33,6 @@ class LyXCursor; class InsetCollapsable : public UpdatableInset { public: /// - enum UpdateCodes { - NONE = 0, - FULL - }; - /// static int const TEXT_TO_TOP_OFFSET = 2; /// static int const TEXT_TO_BOTTOM_OFFSET = 2; @@ -57,8 +52,11 @@ public: int width(BufferView *, LyXFont const &) const; /// void draw(BufferView *, const LyXFont &, int , float &) const; + /// draw, either inlined (no button) or collapsed/open + void draw(BufferView * bv, LyXFont const & f, + int baseline, float & x, bool inlined) const; /// - void update(BufferView *, LyXFont const &, bool =false); + void update(BufferView *, bool =false); /// void edit(BufferView *, int, int, mouse_button::state); /// @@ -226,7 +224,6 @@ protected: /// mutable int topx; mutable int topbaseline; - mutable UpdateCodes need_update; private: /// Index: insets/insetert.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetert.C,v retrieving revision 1.110 diff -u -p -r1.110 insetert.C --- insets/insetert.C 19 Mar 2003 14:45:19 -0000 1.110 +++ insets/insetert.C 20 Mar 2003 02:51:57 -0000 @@ -445,6 +445,9 @@ Inset::RESULT InsetERT::localDispatch(Fu InsetERTMailer::string2params(cmd.argument, status_); status(bv, status_); + // re-init the text (width may have changed, going + // from inline to fullrow, etc.) + inset.update(bv, true); bv->updateInset(this); result = DISPATCHED; } @@ -569,39 +572,7 @@ int InsetERT::width(BufferView * bv, LyX void InsetERT::draw(BufferView * bv, LyXFont const & f, int baseline, float & x) const { - lyx::Assert(bv); - cache(bv); - - Painter & pain = bv->painter(); - - button_length = width_collapsed(); - button_top_y = -ascent(bv, f); - button_bottom_y = -ascent(bv, f) + ascent_collapsed() + - descent_collapsed(); - - if (!isOpen()) { - draw_collapsed(pain, baseline, x); - return; - } - - float old_x = x; - - if (!owner()) - x += static_cast<float>(scroll()); - - top_x = int(x); - topx_set = true; - top_baseline = baseline; - - int const bl = baseline - ascent(bv, f) + ascent_collapsed(); - - if (inlined()) { - inset.draw(bv, f, baseline, x); - } else { - draw_collapsed(pain, bl, old_x); - inset.draw(bv, f, bl + descent_collapsed() + inset.ascent(bv, f), x); - } - need_update = NONE; + InsetCollapsable::draw(bv, f, baseline, x, inlined()); } @@ -623,7 +594,6 @@ void InsetERT::status(BufferView * bv, E { if (st != status_) { status_ = st; - need_update = FULL; switch (st) { case Inlined: if (bv) @@ -706,15 +676,14 @@ int InsetERT::getMaxWidth(BufferView * b } -void InsetERT::update(BufferView * bv, LyXFont const & font, - bool reinit) +void InsetERT::update(BufferView * bv, bool reinit) { if (inset.need_update & InsetText::INIT || - inset.need_update & InsetText::FULL) - { + inset.need_update & InsetText::FULL) { setButtonLabel(); } - InsetCollapsable::update(bv, font, reinit); + + InsetCollapsable::update(bv, reinit); } Index: insets/insetert.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetert.h,v retrieving revision 1.64 diff -u -p -r1.64 insetert.h --- insets/insetert.h 17 Mar 2003 01:34:34 -0000 1.64 +++ insets/insetert.h 20 Mar 2003 02:51:57 -0000 @@ -123,7 +123,7 @@ public: /// int getMaxWidth(BufferView *, UpdatableInset const *) const; /// - void update(BufferView *, LyXFont const &, bool =false); + void update(BufferView *, bool =false); private: /// Index: insets/insetminipage.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetminipage.C,v retrieving revision 1.59 diff -u -p -r1.59 insetminipage.C --- insets/insetminipage.C 19 Mar 2003 18:25:36 -0000 1.59 +++ insets/insetminipage.C 20 Mar 2003 02:51:58 -0000 @@ -117,6 +117,8 @@ dispatch_result InsetMinipage::localDisp params_.pos = params.pos; params_.width = params.width; + // FIXME: what magical mysterious commands are actually + // needed here to update the bloody size of the inset !!! cmd.view()->updateInset(this); result = DISPATCHED; } Index: insets/insettabular.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettabular.C,v retrieving revision 1.250 diff -u -p -r1.250 insettabular.C --- insets/insettabular.C 19 Mar 2003 17:15:31 -0000 1.250 +++ insets/insettabular.C 20 Mar 2003 02:52:00 -0000 @@ -327,7 +327,7 @@ void InsetTabular::draw(BufferView * bv, int i = 0; for(Inset * inset = owner(); inset; ++i) inset = inset->owner(); - if (calculate_dimensions_of_cells(bv, font, false)) + if (calculate_dimensions_of_cells(bv, false)) need_update = INIT; } else { need_update = NONE; @@ -397,28 +397,28 @@ void InsetTabular::drawCellSelection(Pai } -void InsetTabular::update(BufferView * bv, LyXFont const & font, bool reinit) +void InsetTabular::update(BufferView * bv, bool reinit) { if (in_update) { if (reinit) { resetPos(bv); if (owner()) - owner()->update(bv, font, true); + owner()->update(bv, true); } return; } in_update = true; if (reinit) { need_update = INIT; - if (calculate_dimensions_of_cells(bv, font, true)) + if (calculate_dimensions_of_cells(bv, true)) resetPos(bv); if (owner()) - owner()->update(bv, font, true); + owner()->update(bv, true); in_update = false; return; } if (the_locking_inset) - the_locking_inset->update(bv, font, reinit); + the_locking_inset->update(bv, reinit); if (need_update < FULL && bv->text->status() == LyXText::NEED_MORE_REFRESH) { @@ -429,7 +429,7 @@ void InsetTabular::update(BufferView * b case INIT: case FULL: case CELL: - if (calculate_dimensions_of_cells(bv, font, false)) { + if (calculate_dimensions_of_cells(bv, false)) { need_update = INIT; resetPos(bv); } @@ -505,7 +505,7 @@ void InsetTabular::insetUnlock(BufferVie { if (the_locking_inset) { the_locking_inset->insetUnlock(bv); - updateLocal(bv, CELL, false); + updateLocal(bv, CELL); the_locking_inset = 0; } hideInsetCursor(bv); @@ -517,17 +517,15 @@ void InsetTabular::insetUnlock(BufferVie if (scroll(false)) { scroll(bv, 0.0F); } - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); } } -void InsetTabular::updateLocal(BufferView * bv, UpdateCodes what, - bool mark_dirty) const +void InsetTabular::updateLocal(BufferView * bv, UpdateCodes what) const { if (what == INIT) { - LyXFont font; - calculate_dimensions_of_cells(bv, font, true); + calculate_dimensions_of_cells(bv, true); } if (!locked && what == CELL) what = FULL; @@ -598,7 +596,7 @@ bool InsetTabular::unlockInsetInInset(Bu if (scroll(false)) scroll(bv, 0.0F); #endif - updateLocal(bv, CELL, false); + updateLocal(bv, CELL); // this has to be here otherwise we don't redraw the cell! the_locking_inset = 0; // showInsetCursor(bv, false); @@ -631,7 +629,7 @@ bool InsetTabular::updateInsetInInset(Bu if (!static_cast<InsetText *>(tl_inset)->updateInsetInInset(bv, inset)) return false; } - updateLocal(bv, CELL, false); + updateLocal(bv, CELL); return true; } @@ -676,7 +674,7 @@ void InsetTabular::lfunMousePress(FuncRe if (hasSelection()) { clearSelection(); - updateLocal(cmd.view(), SELECTION, false); + updateLocal(cmd.view(), SELECTION); } int const ocell = actcell; @@ -692,13 +690,13 @@ void InsetTabular::lfunMousePress(FuncRe } setPos(bv, cmd.x, cmd.y); if (actrow != orow) - updateLocal(bv, NONE, false); + updateLocal(bv, NONE); clearSelection(); #if 0 if (cmd.button() == mouse_button::button3) { if ((ocell != actcell) && the_locking_inset) { the_locking_inset->insetUnlock(bv); - updateLocal(bv, CELL, false); + updateLocal(bv, CELL); the_locking_inset = 0; } showInsetCursor(bv); @@ -719,7 +717,7 @@ void InsetTabular::lfunMousePress(FuncRe if (the_locking_inset) { the_locking_inset->insetUnlock(bv); - updateLocal(bv, CELL, false); + updateLocal(bv, CELL); the_locking_inset = 0; } @@ -780,10 +778,10 @@ void InsetTabular::lfunMouseMotion(FuncR setPos(bv, cmd.x, cmd.y); if (!hasSelection()) { setSelection(actcell, actcell); - updateLocal(bv, SELECTION, false); + updateLocal(bv, SELECTION); } else if (old_cell != actcell) { setSelection(sel_cell_start, actcell); - updateLocal(bv, SELECTION, false); + updateLocal(bv, SELECTION); } showInsetCursor(bv); } @@ -833,7 +831,7 @@ Inset::RESULT InsetTabular::localDispatc movePrevCell(bv, old_locking_inset != 0); clearSelection(); if (hs) - updateLocal(bv, SELECTION, false); + updateLocal(bv, SELECTION); if (!the_locking_inset) { showInsetCursor(bv); return DISPATCHED_NOUPDATE; @@ -854,13 +852,13 @@ Inset::RESULT InsetTabular::localDispatc resetPos(bv); if (sc != scroll()) { // inset has been scrolled the_locking_inset->toggleInsetCursor(bv); - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); the_locking_inset->toggleInsetCursor(bv); } return result; } else if (result == DISPATCHED) { the_locking_inset->toggleInsetCursor(bv); - updateLocal(bv, CELL, false); + updateLocal(bv, CELL); the_locking_inset->toggleInsetCursor(bv); return result; } else if (result == FINISHED_UP) { @@ -891,14 +889,14 @@ Inset::RESULT InsetTabular::localDispatc end = actcell; } setSelection(start, end); - updateLocal(bv, SELECTION, false); + updateLocal(bv, SELECTION); break; } case LFUN_RIGHT: result = moveRight(bv); clearSelection(); if (hs) - updateLocal(bv, SELECTION, false); + updateLocal(bv, SELECTION); break; case LFUN_LEFTSEL: { int const start = hasSelection() ? sel_cell_start : actcell; @@ -915,14 +913,14 @@ Inset::RESULT InsetTabular::localDispatc end = actcell; } setSelection(start, end); - updateLocal(bv, SELECTION, false); + updateLocal(bv, SELECTION); break; } case LFUN_LEFT: result = moveLeft(bv); clearSelection(); if (hs) - updateLocal(bv, SELECTION, false); + updateLocal(bv, SELECTION); break; case LFUN_DOWNSEL: { int const start = hasSelection() ? sel_cell_start : actcell; @@ -939,14 +937,14 @@ Inset::RESULT InsetTabular::localDispatc } else { setSelection(start, start); } - updateLocal(bv, SELECTION, false); + updateLocal(bv, SELECTION); } break; case LFUN_DOWN: result = moveDown(bv, old_locking_inset != 0); clearSelection(); if (hs) { - updateLocal(bv, SELECTION, false); + updateLocal(bv, SELECTION); } break; case LFUN_UPSEL: { @@ -964,14 +962,14 @@ Inset::RESULT InsetTabular::localDispatc } else { setSelection(start, start); } - updateLocal(bv, SELECTION, false); + updateLocal(bv, SELECTION); } break; case LFUN_UP: result = moveUp(bv, old_locking_inset != 0); clearSelection(); if (hs) - updateLocal(bv, SELECTION, false); + updateLocal(bv, SELECTION); break; case LFUN_NEXT: { UpdateCodes code = CURSOR; @@ -991,7 +989,7 @@ Inset::RESULT InsetTabular::localDispatc actcell = tabular->GetFirstCellInRow(tabular->rows() - 1) + column; } resetPos(bv); - updateLocal(bv, code, false); + updateLocal(bv, code); break; } case LFUN_PRIOR: { @@ -1013,7 +1011,7 @@ Inset::RESULT InsetTabular::localDispatc actcell = column; } resetPos(bv); - updateLocal(bv, code, false); + updateLocal(bv, code); break; } // none of these make sense for insettabular, @@ -1062,7 +1060,7 @@ Inset::RESULT InsetTabular::localDispatc if (tmpstr.empty()) break; if (insertAsciiString(bv, tmpstr, false)) - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); else result = UNDISPATCHED; break; @@ -1077,7 +1075,7 @@ Inset::RESULT InsetTabular::localDispatc bv->text->cursor.par(), bv->text->cursor.par()->next()); cutSelection(bv->buffer()->params); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; case LFUN_COPY: if (!hasSelection()) @@ -1162,7 +1160,7 @@ Inset::RESULT InsetTabular::localDispatc bv->text->cursor.par(), bv->text->cursor.par()->next()); pasteSelection(bv); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; } // ATTENTION: the function above has to be PASTE and PASTESELECTION!!! @@ -1202,7 +1200,7 @@ Inset::RESULT InsetTabular::localDispatc unlockInsetInInset(bv, the_locking_inset); nodraw(false); // we need to update if this was requested before - updateLocal(bv, NONE, false); + updateLocal(bv, NONE); return UNDISPATCHED; } else if (hs) { clearSelection(); @@ -1211,7 +1209,7 @@ Inset::RESULT InsetTabular::localDispatc need_update = SELECTION; } nodraw(false); - updateLocal(bv, CELL, false); + updateLocal(bv, CELL); return result; } break; @@ -1219,7 +1217,7 @@ Inset::RESULT InsetTabular::localDispatc if (result < FINISHED) { if (!the_locking_inset) { if (bv->fitCursor()) - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); if (locked) showInsetCursor(bv); } @@ -1290,9 +1288,7 @@ void InsetTabular::validate(LaTeXFeature } -bool InsetTabular::calculate_dimensions_of_cells(BufferView * bv, - LyXFont const & font, - bool reinit) const +bool InsetTabular::calculate_dimensions_of_cells(BufferView * bv, bool reinit) const { int cell = -1; int maxAsc = 0; @@ -1300,6 +1296,10 @@ bool InsetTabular::calculate_dimensions_ InsetText * inset; bool changed = false; + // FIXME: since InsetText ignores this anyway, it doesn't + // matter what we pass it. Ugly + LyXFont font; + // if we have a locking_inset we should have to check only this cell for // change so I'll try this to have a boost, but who knows ;) if ((need_update != INIT) && @@ -1324,7 +1324,7 @@ bool InsetTabular::calculate_dimensions_ ++cell; inset = tabular->GetCellInset(cell); if (!reinit && !tabular->GetPWidth(cell).zero()) - inset->update(bv, font, false); + inset->update(bv, false); maxAsc = max(maxAsc, inset->ascent(bv, font)); maxDesc = max(maxDesc, inset->descent(bv, font)); changed = tabular->SetWidthOfCell(cell, inset->width(bv, font)) || changed; @@ -1501,34 +1501,34 @@ void InsetTabular::resetPos(BufferView * (tabular->GetWidthOfTabular() < bv->workWidth()-20)) { scroll(bv, 0.0F); - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); } else if (the_locking_inset && (tabular->GetWidthOfColumn(actcell) > bv->workWidth()-20)) { int xx = cursor_.x() - offset + bv->text->getRealCursorX(); if (xx > (bv->workWidth()-20)) { scroll(bv, -(xx - bv->workWidth() + 60)); - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); } else if (xx < 20) { if (xx < 0) xx = -xx + 60; else xx = 60; scroll(bv, xx); - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); } } else if ((cursor_.x() - offset) > 20 && (cursor_.x() - offset + tabular->GetWidthOfColumn(actcell)) > (bv->workWidth() - 20)) { scroll(bv, -tabular->GetWidthOfColumn(actcell) - 20); - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); } else if ((cursor_.x() - offset) < 20) { scroll(bv, 20 - cursor_.x() + offset); - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); } else if (scroll() && top_x > 20 && (top_x + tabular->GetWidthOfTabular()) > (bv->workWidth() - 20)) { scroll(bv, old_x - cursor_.x()); - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); } if (the_locking_inset) { inset_x = cursor_.x() - top_x + tabular->GetBeginningOfTextInCell(actcell); @@ -1706,7 +1706,7 @@ void InsetTabular::setFont(BufferView * unFreezeUndo(); if (selectall) clearSelection(); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); } if (the_locking_inset) the_locking_inset->setFont(bv, font, tall); @@ -1832,7 +1832,7 @@ void InsetTabular::tabularFeatures(Buffe cell = tabular->GetCellNumber(i,column); tabular->GetCellInset(cell)->resizeLyXText(bv); } - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); } if (vallen.zero() @@ -1855,27 +1855,27 @@ void InsetTabular::tabularFeatures(Buffe tabular->GetCellInset(tabular->GetCellNumber(i, column))-> resizeLyXText(bv); } - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); } } break; case LyXTabular::SET_SPECIAL_COLUMN: case LyXTabular::SET_SPECIAL_MULTI: tabular->SetAlignSpecial(actcell,value,feature); - updateLocal(bv, FULL, true); + updateLocal(bv, FULL); break; case LyXTabular::APPEND_ROW: // append the row into the tabular unlockInsetInInset(bv, the_locking_inset); tabular->AppendRow(bv->buffer()->params, actcell); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; case LyXTabular::APPEND_COLUMN: // append the column into the tabular unlockInsetInInset(bv, the_locking_inset); tabular->AppendColumn(bv->buffer()->params, actcell); actcell = tabular->GetCellNumber(row, column); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; case LyXTabular::DELETE_ROW: unlockInsetInInset(bv, the_locking_inset); @@ -1886,7 +1886,7 @@ void InsetTabular::tabularFeatures(Buffe --sel_row_start; actcell = tabular->GetCellNumber(sel_row_start, column); clearSelection(); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; case LyXTabular::DELETE_COLUMN: unlockInsetInInset(bv, the_locking_inset); @@ -1897,7 +1897,7 @@ void InsetTabular::tabularFeatures(Buffe --sel_col_start; actcell = tabular->GetCellNumber(row, sel_col_start); clearSelection(); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; case LyXTabular::M_TOGGLE_LINE_TOP: flag = false; @@ -1909,7 +1909,7 @@ void InsetTabular::tabularFeatures(Buffe tabular->SetTopLine( tabular->GetCellNumber(i, j), lineSet, flag); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; } @@ -1924,7 +1924,7 @@ void InsetTabular::tabularFeatures(Buffe tabular->GetCellNumber(i, j), lineSet, flag); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; } @@ -1939,7 +1939,7 @@ void InsetTabular::tabularFeatures(Buffe tabular->GetCellNumber(i,j), lineSet, flag); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; } @@ -1954,7 +1954,7 @@ void InsetTabular::tabularFeatures(Buffe tabular->GetCellNumber(i,j), lineSet, flag); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; } @@ -1972,7 +1972,7 @@ void InsetTabular::tabularFeatures(Buffe tabular->GetCellNumber(i, j), setAlign, flag); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; case LyXTabular::M_VALIGN_TOP: case LyXTabular::M_VALIGN_BOTTOM: @@ -1986,7 +1986,7 @@ void InsetTabular::tabularFeatures(Buffe tabular->SetVAlignment( tabular->GetCellNumber(i, j), setVAlign, flag); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; case LyXTabular::MULTICOLUMN: { @@ -2001,10 +2001,10 @@ void InsetTabular::tabularFeatures(Buffe // check wether we are completly in a multicol if (tabular->IsMultiColumn(actcell)) { tabular->UnsetMultiColumn(actcell); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); } else { tabular->SetMultiColumn(bv->buffer(), actcell, 1); - updateLocal(bv, CELL, true); + updateLocal(bv, CELL); } return; } @@ -2023,7 +2023,7 @@ void InsetTabular::tabularFeatures(Buffe tabular->SetMultiColumn(bv->buffer(), s_start, s_end - s_start + 1); actcell = s_start; clearSelection(); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; } case LyXTabular::SET_ALL_LINES: @@ -2033,15 +2033,15 @@ void InsetTabular::tabularFeatures(Buffe for (int j = sel_col_start; j <= sel_col_end; ++j) tabular->SetAllLines( tabular->GetCellNumber(i,j), setLines); - updateLocal(bv, INIT, true); + updateLocal(bv, INIT); break; case LyXTabular::SET_LONGTABULAR: tabular->SetLongTabular(true); - updateLocal(bv, INIT, true); // because this toggles displayed + updateLocal(bv, INIT); // because this toggles displayed break; case LyXTabular::UNSET_LONGTABULAR: tabular->SetLongTabular(false); - updateLocal(bv, INIT, true); // because this toggles displayed + updateLocal(bv, INIT); // because this toggles displayed break; case LyXTabular::SET_ROTATE_TABULAR: tabular->SetRotateTabular(true); @@ -2129,7 +2129,7 @@ bool InsetTabular::activateCellInset(Buf inset->edit(bv, x, y, button); if (!the_locking_inset) return false; - updateLocal(bv, CELL, false); + updateLocal(bv, CELL); return (the_locking_inset != 0); } @@ -2693,7 +2693,7 @@ bool InsetTabular::nextChange(BufferView { if (the_locking_inset) { if (the_locking_inset->nextChange(bv, length)) { - updateLocal(bv, CELL, false); + updateLocal(bv, CELL); return true; } if (tabular->IsLastCell(actcell)) @@ -2702,14 +2702,14 @@ bool InsetTabular::nextChange(BufferView } InsetText * inset = tabular->GetCellInset(actcell); if (inset->nextChange(bv, length)) { - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); return true; } while (!tabular->IsLastCell(actcell)) { ++actcell; inset = tabular->GetCellInset(actcell); if (inset->nextChange(bv, length)) { - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); return true; } } @@ -2722,7 +2722,7 @@ bool InsetTabular::searchForward(BufferV { if (the_locking_inset) { if (the_locking_inset->searchForward(bv, str, cs, mw)) { - updateLocal(bv, CELL, false); + updateLocal(bv, CELL); return true; } if (tabular->IsLastCell(actcell)) @@ -2731,14 +2731,14 @@ bool InsetTabular::searchForward(BufferV } InsetText * inset = tabular->GetCellInset(actcell); if (inset->searchForward(bv, str, cs, mw)) { - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); return true; } while (!tabular->IsLastCell(actcell)) { ++actcell; inset = tabular->GetCellInset(actcell); if (inset->searchForward(bv, str, cs, mw)) { - updateLocal(bv, FULL, false); + updateLocal(bv, FULL); return true; } } @@ -2751,7 +2751,7 @@ bool InsetTabular::searchBackward(Buffer { if (the_locking_inset) { if (the_locking_inset->searchBackward(bv, str, cs, mw)) { - updateLocal(bv, CELL, false); + updateLocal(bv, CELL); return true; } } @@ -2762,7 +2762,7 @@ bool InsetTabular::searchBackward(Buffer --actcell; InsetText * inset = tabular->GetCellInset(actcell); if (inset->searchBackward(bv, str, cs, mw)) { - updateLocal(bv, CELL, false); + updateLocal(bv, CELL); return true; } } Index: insets/insettabular.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettabular.h,v retrieving revision 1.108 diff -u -p -r1.108 insettabular.h --- insets/insettabular.h 17 Mar 2003 01:34:35 -0000 1.108 +++ insets/insettabular.h 20 Mar 2003 02:52:01 -0000 @@ -94,7 +94,7 @@ public: /// void draw(BufferView *, const LyXFont &, int , float &) const; /// - void update(BufferView *, LyXFont const &, bool = false); + void update(BufferView *, bool = false); /// string const editMessage() const; /// @@ -104,7 +104,7 @@ public: // void insetUnlock(BufferView *); /// - void updateLocal(BufferView *, UpdateCodes, bool mark_dirty) const; + void updateLocal(BufferView *, UpdateCodes) const; /// bool lockInsetInInset(BufferView *, UpdatableInset *); /// @@ -251,8 +251,7 @@ private: /// void lfunMouseMotion(FuncRequest const &); /// - bool calculate_dimensions_of_cells(BufferView *, LyXFont const &, - bool = false) const; + bool calculate_dimensions_of_cells(BufferView *, bool = false) const; /// void drawCellLines(Painter &, int x, int baseline, int row, int cell) const; Index: insets/insettext.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettext.C,v retrieving revision 1.360 diff -u -p -r1.360 insettext.C --- insets/insettext.C 19 Mar 2003 14:45:21 -0000 1.360 +++ insets/insettext.C 20 Mar 2003 02:52:04 -0000 @@ -485,12 +485,12 @@ void InsetText::drawFrame(Painter & pain } -void InsetText::update(BufferView * bv, LyXFont const & font, bool reinit) +void InsetText::update(BufferView * bv, bool reinit) { if (in_update) { if (reinit && owner()) { reinitLyXText(); - owner()->update(bv, font, true); + owner()->update(bv, true); } return; } @@ -500,7 +500,7 @@ void InsetText::update(BufferView * bv, // we should put this call where we set need_update to INIT! reinitLyXText(); if (owner()) - owner()->update(bv, font, true); + owner()->update(bv, true); in_update = false; return; } @@ -511,7 +511,7 @@ void InsetText::update(BufferView * bv, if (the_locking_inset) { inset_x = cix(bv) - top_x + drawTextXOffset; inset_y = ciy(bv) + drawTextYOffset; - the_locking_inset->update(bv, font, reinit); + the_locking_inset->update(bv, reinit); } bool clear = false; @@ -538,7 +538,7 @@ void InsetText::setUpdateStatus(BufferVi LyXText * llt = getLyXText(bv); need_update |= what; - // we have to redraw us full if our LyXText NEEDS_MORE_REFRES or + // we have to redraw us full if our LyXText NEED_MORE_REFRESH or // if we don't break row so that we only have one row to update! if ((llt->status() == LyXText::NEED_MORE_REFRESH) || (!autoBreakRows && @@ -2270,7 +2270,6 @@ void InsetText::resizeLyXText(BufferView return; } do_resize = 0; -// lyxerr << "InsetText::resizeLyXText\n"; if (!paragraphs.begin()->next() && paragraphs.begin()->empty()) { // no data, resize not neccessary! // we have to do this as a fixed width may have changed! LyXText * t = getLyXText(bv); @@ -2323,7 +2322,6 @@ void InsetText::reinitLyXText() const } do_reinit = false; do_resize = 0; -// lyxerr << "InsetText::reinitLyXText\n"; for (Cache::iterator it = cache.begin(); it != cache.end(); ++it) { lyx::Assert(it->second.text.get()); Index: insets/insettext.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettext.h,v retrieving revision 1.145 diff -u -p -r1.145 insettext.h --- insets/insettext.h 17 Mar 2003 16:24:59 -0000 1.145 +++ insets/insettext.h 20 Mar 2003 02:52:04 -0000 @@ -94,7 +94,7 @@ public: /// void draw(BufferView *, LyXFont const &, int , float &) const; /// - void update(BufferView *, LyXFont const &, bool = false); + void update(BufferView *, bool = false); /// void setUpdateStatus(BufferView *, int what) const; ///