Small fixes to various InsetText problems.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2903 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jürgen Vigna 2001-10-19 15:40:01 +00:00
parent 0f3b5ab991
commit b08d44b58f
11 changed files with 57 additions and 43 deletions

View File

@ -1,3 +1,8 @@
2001-10-19 Juergen Vigna <jug@sad.it>
* text.C (workWidth): use getRow instead of wrong algorithm.
(setHeightOfRow): fix for MARGIN_RIGHT_ADDRESS_BOX
2001-10-19 John Levon <moz@compsoc.man.ac.uk>
* lyxserver.h:

View File

@ -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();
}

View File

@ -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; }

View File

@ -175,6 +175,7 @@ public:
///
void close(BufferView *) const;
///
bool allowSpellcheck() { return inset.allowSpellcheck(); }
string const selectNextWordToSpellcheck(BufferView *, float &) const;
void selectSelectedWord(BufferView * bv) {

View File

@ -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; }

View File

@ -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);

View File

@ -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, "/");

View File

@ -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);
}

View File

@ -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);
}

View File

@ -80,9 +80,7 @@ int LyXText::workWidth(BufferView * bview, Inset * inset) const
break;
}
}
if (!par) {
lyxerr << "LyXText::workWidth: cannot find inset!" <<endl;
return workWidth(bview);
}
@ -99,19 +97,19 @@ int LyXText::workWidth(BufferView * bview, Inset * inset) const
dummyrow.pos(pos);
return workWidth(bview) - leftMargin(bview, &dummyrow);
} else {
Row * row = firstrow;
for(; row; row = row->next()) {
if ((row->par() == par && row->pos() >= pos)) {
if (!row->next())
break;
else if ((row->next()->par() == par) &&
(row->next()->pos() >= pos))
continue;
}
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 (row) {
return workWidth(bview) - leftMargin(bview, row);
}
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()))
{

View File

@ -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);