From: André Pönitz Date: Thu, 17 Jul 2003 06:45:39 +0000 (+0000) Subject: Disable InsetText::update and InsetTabular::update X-Git-Tag: 1.6.10~16527 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=cf31c9b2193684cf7e813c74e6200cbf005a7bf7;p=features.git Disable InsetText::update and InsetTabular::update git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7297 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/ChangeLog b/src/ChangeLog index 7c9b728b80..16de892ce5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,4 +1,10 @@ +2003-07-17 André Pönitz + + * lyxtext.h: + * rowpainter.C: + * text2.C: don't call inset->update() anymore + 2003-07-16 André Pönitz * lyxcursor.[Ch]: diff --git a/src/insets/ChangeLog b/src/insets/ChangeLog index 38b6dc9291..f939571026 100644 --- a/src/insets/ChangeLog +++ b/src/insets/ChangeLog @@ -1,4 +1,10 @@ +2003-07-17 André Pönitz + + * insetcollapsable.C: + * insettabular.C: + * insettext.C: don't call Inset::update() anymore + 2003-07-16 André Pönitz * insettext.C (selectAll): remove diff --git a/src/insets/insetcollapsable.C b/src/insets/insetcollapsable.C index 7f24b59882..43d81cc2d3 100644 --- a/src/insets/insetcollapsable.C +++ b/src/insets/insetcollapsable.C @@ -308,13 +308,15 @@ void InsetCollapsable::update(BufferView * bv, bool reinit) Inset::RESULT InsetCollapsable::localDispatch(FuncRequest const & cmd) { - //lyxerr << "InsetCollapsable::localDispatch: " << cmd.action << "\n"; + lyxerr << "InsetCollapsable::localDispatch: " + << cmd.action << " '" << cmd.argument << "'\n"; BufferView * bv = cmd.view(); switch (cmd.action) { case LFUN_INSET_EDIT: { if (!cmd.argument.empty()) { UpdatableInset::localDispatch(cmd); if (collapsed_) { + lyxerr << "branch collapsed_\n"; collapsed_ = false; if (bv->lockInset(this)) { inset.setUpdateStatus(InsetText::FULL); @@ -324,6 +326,7 @@ Inset::RESULT InsetCollapsable::localDispatch(FuncRequest const & cmd) first_after_edit = true; } } else { + lyxerr << "branch not collapsed_\n"; if (bv->lockInset(this)) inset.localDispatch(cmd); } diff --git a/src/insets/insettabular.C b/src/insets/insettabular.C index 5572ae09a9..7a2229a015 100644 --- a/src/insets/insettabular.C +++ b/src/insets/insettabular.C @@ -259,6 +259,7 @@ void InsetTabular::read(Buffer const * buf, LyXLex & lex) void InsetTabular::metrics(MetricsInfo & mi, Dimension & dim) const { if (mi.base.bv) { + calculate_dimensions_of_cells(mi.base.bv, true); //lyxerr << "InsetTabular::metrics, bv: " << mi.base.bv << endl; for (int i = 0; i < tabular.getNumberOfCells(); ++i) { tabular.cellinfo_of_cell(i)->inset.text_.bv_owner = mi.base.bv; @@ -411,42 +412,6 @@ void InsetTabular::drawCellSelection(Painter & pain, int x, int y, void InsetTabular::update(BufferView * bv, bool reinit) { - if (in_update) { - if (reinit) { - resetPos(bv); - if (owner()) - owner()->update(bv, true); - } - return; - } - in_update = true; - if (reinit) { - need_update = INIT; - if (calculate_dimensions_of_cells(bv, true)) - resetPos(bv); - if (owner()) - owner()->update(bv, true); - in_update = false; - return; - } - if (the_locking_inset) - the_locking_inset->update(bv, reinit); - if (need_update < FULL && bv->text->needRefresh()) - need_update = FULL; - - switch (need_update) { - case INIT: - case FULL: - case CELL: - if (calculate_dimensions_of_cells(bv, false)) { - need_update = INIT; - resetPos(bv); - } - break; - default: - break; - } - in_update = false; } diff --git a/src/insets/insettext.C b/src/insets/insettext.C index d56527f55c..570e8b486c 100644 --- a/src/insets/insettext.C +++ b/src/insets/insettext.C @@ -277,6 +277,7 @@ void InsetText::metrics(MetricsInfo & mi, Dimension & dim) const { BufferView * bv = mi.base.bv; setViewCache(bv); + text_.rebuild(); dim.asc = text_.rows().begin()->ascent_of_text() + TEXT_TO_INSET_OFFSET; dim.des = text_.height - dim.asc + TEXT_TO_INSET_OFFSET; dim.wid = max(textWidth(bv), int(text_.width)) + 2 * TEXT_TO_INSET_OFFSET; @@ -405,56 +406,6 @@ void InsetText::drawFrame(Painter & pain, int x) const void InsetText::update(BufferView * bv, bool reinit) { setViewCache(bv); - - if (in_update) { - if (reinit && owner()) { - reinitLyXText(); - owner()->update(bv, true); - } - return; - } - in_update = true; - - if (reinit || need_update == INIT) { - need_update = FULL; - // we should put this call where we set need_update to INIT! - reinitLyXText(); - if (owner()) - owner()->update(bv, true); - in_update = false; - - int nw = getMaxWidth(bv, this); - if (nw > 0 && old_max_width != nw) { - need_update |= INIT; - old_max_width = nw; - } - return; - } - - if (!autoBreakRows && paragraphs.size() > 1) - collapseParagraphs(bv); - - if (the_locking_inset) { - inset_x = cix(bv) - top_x + drawTextXOffset; - inset_y = ciy() + drawTextYOffset; - the_locking_inset->update(bv, reinit); - } - - if ((need_update & CURSOR_PAR) && !text_.needRefresh() && - the_locking_inset) { - text_.updateInset(the_locking_inset); - } - - if (text_.needRefresh()) - need_update |= FULL; - - in_update = false; - - int nw = getMaxWidth(bv, this); - if (nw > 0 && old_max_width != nw) { - need_update |= INIT; - old_max_width = nw; - } } @@ -476,6 +427,9 @@ void InsetText::setUpdateStatus(int what) const void InsetText::updateLocal(BufferView * bv, int what, bool mark_dirty) { + if (!bv) + return; + if (!autoBreakRows && paragraphs.size() > 1) collapseParagraphs(bv); @@ -555,7 +509,7 @@ void InsetText::lockInset(BufferView * bv) inset_boundary = false; inset_par = paragraphs.end(); old_par = paragraphs.end(); - text_.setCursor(paragraphs.begin(), 0); + text_.setCursorIntern(paragraphs.begin(), 0); text_.clearSelection(); finishUndo(); // If the inset is empty set the language of the current font to the @@ -581,7 +535,7 @@ void InsetText::lockInset(BufferView * bv, UpdatableInset * inset) inset_pos = cpos(); inset_par = cpar(); inset_boundary = cboundary(); - updateLocal(bv, CURSOR, false); + //updateLocal(bv, CURSOR, false); } @@ -597,30 +551,36 @@ bool InsetText::lockInsetInInset(BufferView * bv, UpdatableInset * inset) int const id = inset->id(); for (; pit != pend; ++pit) { - InsetList::iterator it = - pit->insetlist.begin(); - InsetList::iterator const end = - pit->insetlist.end(); + InsetList::iterator it = pit->insetlist.begin(); + InsetList::iterator const end = pit->insetlist.end(); for (; it != end; ++it) { if (it->inset == inset) { - getLyXText(bv)->setCursorIntern(pit, it->pos); + lyxerr << "InsetText::lockInsetInInset: 1 a\n"; + text_.setCursorIntern(pit, it->pos); + lyxerr << "InsetText::lockInsetInInset: 1 b\n"; + lyxerr << "bv: " << bv << " inset: " << inset << "\n"; lockInset(bv, inset); + lyxerr << "InsetText::lockInsetInInset: 1 c" << endl; return true; } if (it->inset->getInsetFromID(id)) { - getLyXText(bv)->setCursorIntern(pit, it->pos); + lyxerr << "InsetText::lockInsetInInset: 2\n"; + text_.setCursorIntern(pit, it->pos); it->inset->localDispatch(FuncRequest(bv, LFUN_INSET_EDIT)); return the_locking_inset->lockInsetInInset(bv, inset); } } } + lyxerr << "InsetText::lockInsetInInset: 3\n"; return false; } if (inset == cpar()->getInset(cpos())) { lyxerr[Debug::INSETS] << "OK" << endl; lockInset(bv, inset); return true; - } else if (the_locking_inset && (the_locking_inset == inset)) { + } + + if (the_locking_inset && the_locking_inset == inset) { if (cpar() == inset_par && cpos() == inset_pos) { lyxerr[Debug::INSETS] << "OK" << endl; inset_x = cix(bv) - top_x + drawTextXOffset; @@ -884,7 +844,7 @@ Inset::RESULT InsetText::localDispatch(FuncRequest const & cmd) if (cmd.argument.size()) { if (cmd.argument == "left") - text_.setCursor(paragraphs.begin(), 0); + text_.setCursorIntern(paragraphs.begin(), 0); else { ParagraphList::iterator it = paragraphs.begin(); ParagraphList::iterator end = paragraphs.end(); diff --git a/src/lyxtext.h b/src/lyxtext.h index a33a71c9bb..2e6ddd97c3 100644 --- a/src/lyxtext.h +++ b/src/lyxtext.h @@ -163,6 +163,8 @@ public: void partialRebreak(); /// a full rebreak of the whole text void fullRebreak(); + /// rebuild RowList cache + void rebuild(); /// RowList::iterator need_break_row; diff --git a/src/rowpainter.C b/src/rowpainter.C index 8c0ee616b3..dab05373fb 100644 --- a/src/rowpainter.C +++ b/src/rowpainter.C @@ -179,7 +179,7 @@ void RowPainter::paintInset(pos_type const pos) Assert(inset); #warning inset->update FIXME - inset->update(perv(bv_), false); + //inset->update(perv(bv_), false); PainterInfo pi(perv(bv_)); pi.base.font = getFont(pos); diff --git a/src/text2.C b/src/text2.C index f8b72a88bb..d183f53934 100644 --- a/src/text2.C +++ b/src/text2.C @@ -692,6 +692,32 @@ void LyXText::fullRebreak() } +void LyXText::rebuild() +{ + rowlist_.clear(); + need_break_row = rows().end(); + width = height = 0; + + anchor_row_ = rows().end(); + anchor_row_offset_ = 0; + + ParagraphList::iterator pit = ownerParagraphs().begin(); + ParagraphList::iterator end = ownerParagraphs().end(); + + //current_font = getFont(bview->buffer(), pit, 0); + + for (; pit != end; ++pit) + insertParagraph(pit, rowlist_.end()); + + //setCursorIntern(rowlist_.begin()->par(), 0); + //selection.cursor = cursor; + + //updateCounters(); + + //setCursorIntern(cursor.par(), cursor.pos()); +} + + void LyXText::partialRebreak() { if (rows().empty()) { @@ -1516,6 +1542,8 @@ void LyXText::setCursor(LyXCursor & cur, ParagraphList::iterator pit, cur.par(pit); cur.pos(pos); cur.boundary(boundary); + if (rows().empty()) + return; // get the cursor y position in text int y = 0;