From: Jürgen Vigna Date: Fri, 19 Oct 2001 15:40:01 +0000 (+0000) Subject: Small fixes to various InsetText problems. X-Git-Tag: 1.6.10~20460 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=b08d44b58f923f80cb1cd8868cf9a772b3271eef;p=features.git Small fixes to various InsetText problems. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2903 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/ChangeLog b/src/ChangeLog index 3bd2010c01..f998df225d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2001-10-19 Juergen Vigna + + * text.C (workWidth): use getRow instead of wrong algorithm. + (setHeightOfRow): fix for MARGIN_RIGHT_ADDRESS_BOX + 2001-10-19 John Levon * lyxserver.h: diff --git a/src/insets/inset.C b/src/insets/inset.C index 1b187425a5..90c7d74e2d 100644 --- a/src/insets/inset.C +++ b/src/insets/inset.C @@ -324,7 +324,6 @@ int UpdatableInset::getMaxWidth(BufferView * bv, UpdatableInset const *) const if ((w - ((2 * TEXT_TO_INSET_OFFSET) + 5)) >= 0) w -= (2 * TEXT_TO_INSET_OFFSET) + 5; if (topx_set && owner()) { - lyxerr << "topx_set && owner()\n"; w -= top_x; w += owner()->x(); } diff --git a/src/insets/inset.h b/src/insets/inset.h index 9c03cdf90f..3e9e04f452 100644 --- a/src/insets/inset.h +++ b/src/insets/inset.h @@ -291,6 +291,10 @@ public: /// we need this here because collapsed insets are only EDITABLE virtual void setFont(BufferView *, LyXFont const &, bool toggleall = false, bool selectall = false); + /// + // needed for spellchecking text + /// + virtual bool allowSpellcheck() { return false; } protected: /// mutable int top_x; @@ -471,6 +475,8 @@ public: /// // needed for spellchecking text /// + virtual bool allowSpellcheck() { return false; } + /// virtual string const selectNextWordToSpellcheck(BufferView *, float & value) const; /// virtual void selectSelectedWord(BufferView *) { return; } diff --git a/src/insets/insetcollapsable.h b/src/insets/insetcollapsable.h index 38cefa54e5..1653bd6639 100644 --- a/src/insets/insetcollapsable.h +++ b/src/insets/insetcollapsable.h @@ -175,6 +175,7 @@ public: /// void close(BufferView *) const; /// + bool allowSpellcheck() { return inset.allowSpellcheck(); } string const selectNextWordToSpellcheck(BufferView *, float &) const; void selectSelectedWord(BufferView * bv) { diff --git a/src/insets/insetert.h b/src/insets/insetert.h index e908766d71..655953f502 100644 --- a/src/insets/insetert.h +++ b/src/insets/insetert.h @@ -97,6 +97,7 @@ public: /// void close(BufferView *) const; /// + bool allowSpellcheck() { return false; } string const selectNextWordToSpellcheck(BufferView *, float &) const; /// bool inlined() const { return status_ == Inlined; } diff --git a/src/insets/insettext.h b/src/insets/insettext.h index a304a1d18d..dc574ef903 100644 --- a/src/insets/insettext.h +++ b/src/insets/insettext.h @@ -229,6 +229,7 @@ public: /// void paragraph(Paragraph *); /// + bool allowSpellcheck() { return true; } string const selectNextWordToSpellcheck(BufferView *, float & value) const; void selectSelectedWord(BufferView *); void toggleSelection(BufferView *, bool kill_selection); diff --git a/src/mathed/math_macrotable.C b/src/mathed/math_macrotable.C index d6e171994b..c120da64f8 100644 --- a/src/mathed/math_macrotable.C +++ b/src/mathed/math_macrotable.C @@ -77,7 +77,6 @@ void MathMacroTable::builtinMacros() built = true; //lyxerr[Debug::MATHED] << "Building macros\n"; -D //create("emptyset", 0, "\\not0"); create("notin", 0, "\\not\\in"); create("slash", 0, "/"); diff --git a/src/paragraph.C b/src/paragraph.C index 9ecffaf0e9..36d87fbc28 100644 --- a/src/paragraph.C +++ b/src/paragraph.C @@ -492,32 +492,29 @@ bool Paragraph::checkInsertChar(LyXFont & font) } -void Paragraph::insertChar(Paragraph::size_type pos, - Paragraph::value_type c) +void Paragraph::insertChar(Paragraph::size_type pos, Paragraph::value_type c) { LyXFont const f(LyXFont::ALL_INHERIT); insertChar(pos, c, f); } -void Paragraph::insertChar(Paragraph::size_type pos, - Paragraph::value_type c, - LyXFont const & font) +void Paragraph::insertChar(Paragraph::size_type pos, Paragraph::value_type c, + LyXFont const & font) { pimpl_->insertChar(pos, c, font); } -void Paragraph::insertInset(Paragraph::size_type pos, - Inset * inset) +void Paragraph::insertInset(Paragraph::size_type pos, Inset * inset) { LyXFont const f(LyXFont::ALL_INHERIT); insertInset(pos, inset, f); } -void Paragraph::insertInset(Paragraph::size_type pos, - Inset * inset, LyXFont const & font) +void Paragraph::insertInset(Paragraph::size_type pos, Inset * inset, + LyXFont const & font) { pimpl_->insertInset(pos, inset, font); } diff --git a/src/paragraph_pimpl.C b/src/paragraph_pimpl.C index 6fc6184189..a2a31eb5fa 100644 --- a/src/paragraph_pimpl.C +++ b/src/paragraph_pimpl.C @@ -83,15 +83,15 @@ Paragraph::Pimpl::getChar(Paragraph::size_type pos) const void Paragraph::Pimpl::setChar(Paragraph::size_type pos, - Paragraph::value_type c) + Paragraph::value_type c) { text[pos] = c; } void Paragraph::Pimpl::insertChar(Paragraph::size_type pos, - Paragraph::value_type c, - LyXFont const & font) + Paragraph::value_type c, + LyXFont const & font) { lyx::Assert(pos <= size()); @@ -100,19 +100,22 @@ void Paragraph::Pimpl::insertChar(Paragraph::size_type pos, // Update the font table. FontTable search_font(pos, LyXFont()); for (FontList::iterator it = std::lower_bound(fontlist.begin(), - fontlist.end(), - search_font, matchFT()); + fontlist.end(), + search_font, matchFT()); it != fontlist.end(); ++it) + { it->pos(it->pos() + 1); + } // Update the inset table. InsetTable search_inset(pos, 0); for (InsetList::iterator it = std::lower_bound(owner_->insetlist.begin(), - owner_->insetlist.end(), - search_inset, matchIT()); + owner_->insetlist.end(), + search_inset, matchIT()); it != owner_->insetlist.end(); ++it) + { ++it->pos; - + } owner_->setFont(pos, font); } diff --git a/src/text.C b/src/text.C index 02afce8f7d..b859f46b55 100644 --- a/src/text.C +++ b/src/text.C @@ -80,9 +80,7 @@ int LyXText::workWidth(BufferView * bview, Inset * inset) const break; } } - if (!par) { - lyxerr << "LyXText::workWidth: cannot find inset!" <next()) { - if ((row->par() == par && row->pos() >= pos)) { - if (!row->next()) - break; - else if ((row->next()->par() == par) && - (row->next()->pos() >= pos)) - continue; - } - } - if (row) { - return workWidth(bview) - leftMargin(bview, row); - } + int dummy_y; + Row * row = getRow(par, pos, dummy_y); + Row * frow = row; + while(frow->previous() && frow->par() == frow->previous()->par()) + frow = frow->previous(); + int maxw = 0; + while(frow->next() && frow->par() == frow->next()->par()) { + if ((frow != row) && (maxw < frow->width())) + maxw = frow->width(); + frow = frow->next(); + } + if (maxw) + return maxw; } return workWidth(bview); } @@ -681,8 +679,8 @@ int LyXText::leftMargin(BufferView * bview, Row const * row) const // make a corresponding row. Needed to call LeftMargin() // check wether it is a sufficent paragraph - if (newpar - && tclass[newpar->getLayout()].isEnvironment()) { + if (newpar && tclass[newpar->getLayout()].isEnvironment()) + { Row dummyrow; dummyrow.par(newpar); dummyrow.pos(newpar->size()); @@ -1011,7 +1009,8 @@ int LyXText::fill(BufferView * bview, Row * row, int paper_width) const // special handling of the right address boxes if (textclasslist.Style(bview->buffer()->params.textclass, row->par()->getLayout()).margintype - == MARGIN_RIGHT_ADDRESS_BOX) { + == MARGIN_RIGHT_ADDRESS_BOX) + { int const tmpfill = row->fill(); row->fill(0); // the minfill in MarginLeft() w = leftMargin(bview, row); @@ -1507,9 +1506,11 @@ void LyXText::setHeightOfRow(BufferView * bview, Row * row_ptr) const row_ptr->baseline(maxasc + labeladdon); height += row_ptr->height(); - float x; - float dummy; - prepareToPrint(bview, row_ptr, x, dummy, dummy, dummy, false); + float x = 0; + if (layout.margintype != MARGIN_RIGHT_ADDRESS_BOX) { + float dummy; + prepareToPrint(bview, row_ptr, x, dummy, dummy, dummy, false); + } row_ptr->width(int(maxwidth + x)); if (inset_owner) { Row * r = firstrow; @@ -2297,7 +2298,7 @@ bool LyXText::selectWordWhenUnderCursor(BufferView * bview, // This function is only used by the spellchecker for NextWord(). // It doesn't handle LYX_ACCENTs and probably never will. string const LyXText::selectNextWordToSpellcheck(BufferView * bview, - float & value) const + float & value) const { if (the_locking_inset) { string str = the_locking_inset->selectNextWordToSpellcheck(bview, value); @@ -2331,7 +2332,7 @@ string const LyXText::selectNextWordToSpellcheck(BufferView * bview, while ((cursor.par()->size() > cursor.pos() && (!cursor.par()->isLetter(cursor.pos())) && (!cursor.par()->isInset(cursor.pos()) || - !cursor.par()->getInset(cursor.pos())->isTextInset())) + !cursor.par()->getInset(cursor.pos())->allowSpellcheck())) || (cursor.par()->size() == cursor.pos() && cursor.par()->next())) { diff --git a/src/text2.C b/src/text2.C index c3c0be6f3a..500b2a7a53 100644 --- a/src/text2.C +++ b/src/text2.C @@ -1984,7 +1984,7 @@ bool LyXText::gotoNextInset(BufferView * bview, void LyXText::checkParagraph(BufferView * bview, Paragraph * par, - Paragraph::size_type pos) + Paragraph::size_type pos) { LyXCursor tmpcursor; @@ -2027,7 +2027,8 @@ void LyXText::checkParagraph(BufferView * bview, Paragraph * par, // check the special right address boxes if (textclasslist.Style(bview->buffer()->params.textclass, par->getLayout()).margintype - == MARGIN_RIGHT_ADDRESS_BOX) { + == MARGIN_RIGHT_ADDRESS_BOX) + { tmpcursor.par(par); tmpcursor.row(row); tmpcursor.y(y);