X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView2.C;h=e58b0e4ef7665cdebe8851e7895d1aa701576b1e;hb=a69e7a45780e94f4330a91facfe35126c678e34e;hp=dce9e3fa7c23699ba5645d85c8a674a1e23d2d3f;hpb=2889b5fd3e8987d0c265ff4726a7fb6c6cb6c034;p=lyx.git diff --git a/src/BufferView2.C b/src/BufferView2.C index dce9e3fa7c..e58b0e4ef7 100644 --- a/src/BufferView2.C +++ b/src/BufferView2.C @@ -73,10 +73,11 @@ bool BufferView::insertLyXFile(string const & filen) MakeDisplayPath(fname, 50)); return false; } + + char c = ifs.peek(); + LyXLex lex(0, 0); lex.setStream(ifs); - char c; ifs.get(c); - ifs.putback(c); bool res = true; @@ -102,22 +103,28 @@ bool BufferView::removeAutoInsets() bool a = false; while (par) { // this has to be done before the delete +#ifndef NEW_INSETS if (par->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE) - text->SetCursor(cursor, par, 0); +#endif + text->SetCursor(this, cursor, par, 0); if (par->AutoDeleteInsets()){ a = true; +#ifndef NEW_INSETS if (par->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE){ - text->RedoParagraphs(cursor, +#endif + text->RedoParagraphs(this, cursor, cursor.par()->Next()); - text->FullRebreak(); + text->FullRebreak(this); +#ifndef NEW_INSETS } +#endif } par = par->next; } // avoid forbidden cursor positions caused by error removing if (tmpcursor.pos() > tmpcursor.par()->Last()) tmpcursor.pos(tmpcursor.par()->Last()); - text->SetCursorIntern(tmpcursor.par(), tmpcursor.pos()); + text->SetCursorIntern(this, tmpcursor.par(), tmpcursor.pos()); return a; } @@ -128,9 +135,11 @@ void BufferView::insertErrors(TeXErrors & terr) // Save the cursor position LyXCursor cursor = text->cursor; +#ifndef NEW_INSETS // This is drastic, but it's the only fix, I could find. (Asger) allFloats(1, 0); allFloats(1, 1); +#endif for (TeXErrors::Errors::const_iterator cit = terr.begin(); cit != terr.end(); @@ -144,8 +153,10 @@ void BufferView::insertErrors(TeXErrors & terr) int tmpid = -1; int tmppos = -1; - buffer()->texrow.getIdFromRow(errorrow, tmpid, tmppos); - + if (buffer()->texrow.getIdFromRow(errorrow, tmpid, tmppos)) { + buffer()->texrow.increasePos(tmpid, tmppos); + } + LyXParagraph * texrowpar = 0; if (tmpid == -1) { @@ -159,12 +170,12 @@ void BufferView::insertErrors(TeXErrors & terr) continue; InsetError * new_inset = new InsetError(msgtxt); - text->SetCursorIntern(texrowpar, tmppos); - text->InsertInset(new_inset); - text->FullRebreak(); + text->SetCursorIntern(this, texrowpar, tmppos); + text->InsertInset(this, new_inset); + text->FullRebreak(this); } // Restore the cursor position - text->SetCursorIntern(cursor.par(), cursor.pos()); + text->SetCursorIntern(this, cursor.par(), cursor.pos()); } @@ -183,7 +194,7 @@ void BufferView::setCursorFromRow(int row) } else { texrowpar = text->GetParFromID(tmpid); } - text->SetCursor(texrowpar, tmppos); + text->SetCursor(this, texrowpar, tmppos); } bool BufferView::insertInset(Inset * inset, string const & lout, @@ -209,20 +220,20 @@ bool BufferView::insertInset(Inset * inset, string const & lout, #endif // not quite sure if we want this... - text->SetCursorParUndo(); + text->SetCursorParUndo(buffer()); text->FreezeUndo(); beforeChange(); if (!lout.empty()) { - update(-2); - text->BreakParagraph(); - update(-1); + update(BufferView::SELECT|BufferView::FITCUR); + text->BreakParagraph(this); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); if (text->cursor.par()->Last()) { - text->CursorLeft(); + text->CursorLeft(this); - text->BreakParagraph(); - update(-1); + text->BreakParagraph(this); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); } pair lres = @@ -237,20 +248,20 @@ bool BufferView::insertInset(Inset * inset, string const & lout, lay = 0; } - text->SetLayout(lay); + text->SetLayout(this, lay); - text->SetParagraph(0, 0, + text->SetParagraph(this, 0, 0, 0, 0, VSpace(VSpace::NONE), VSpace(VSpace::NONE), LYX_ALIGN_LAYOUT, string(), 0); - update(-1); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); text->current_font.setLatex(LyXFont::OFF); } - text->InsertInset(inset); + text->InsertInset(this, inset); #if 1 // if we enter a text-inset the cursor should be to the left side // of it! This couldn't happen before as Undo was not handled inside @@ -259,12 +270,12 @@ bool BufferView::insertInset(Inset * inset, string const & lout, // does not return the inset! if (inset->IsTextInset()) { if (text->cursor.par()->isRightToLeftPar(buffer()->params)) - text->CursorRight(); + text->CursorRight(this); else - text->CursorLeft(); + text->CursorLeft(this); } #endif - update(-1); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); text->UnFreezeUndo(); return true; @@ -272,14 +283,16 @@ bool BufferView::insertInset(Inset * inset, string const & lout, // Open and lock an updatable inset -void BufferView::open_new_inset(UpdatableInset * new_inset) +bool BufferView::open_new_inset(UpdatableInset * new_inset) { beforeChange(); text->FinishUndo(); - insertInset(new_inset); - text->CursorLeft(); - update(1); + if (!insertInset(new_inset)) + return false; + text->CursorLeft(this); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); new_inset->Edit(this, 0, 0, 0); + return true; } /* This is also a buffer property (ale) */ @@ -296,25 +309,29 @@ bool BufferView::gotoLabel(string const & label) if ( find(labels.begin(),labels.end(),label) != labels.end()) { beforeChange(); - text->SetCursor(it.getPar(), it.getPos()); + text->SetCursor(this, it.getPar(), it.getPos()); text->sel_cursor = text->cursor; - update(0); + update(BufferView::SELECT|BufferView::FITCUR); return true; } } return false; } + +#ifndef NEW_INSETS void BufferView::allFloats(char flag, char figmar) { if (!available()) return; LyXCursor cursor = text->cursor; - if (!flag && cursor.par()->footnoteflag != LyXParagraph::NO_FOOTNOTE + if (!flag + && cursor.par()->footnoteflag != LyXParagraph::NO_FOOTNOTE && ((figmar && cursor.par()->footnotekind != LyXParagraph::FOOTNOTE - && cursor.par()->footnotekind != LyXParagraph::MARGIN) + && cursor.par()->footnotekind != LyXParagraph::MARGIN + ) || (!figmar && cursor.par()->footnotekind != LyXParagraph::FIG && cursor.par()->footnotekind != LyXParagraph::TAB @@ -348,9 +365,10 @@ void BufferView::allFloats(char flag, char figmar) if (par->previous && par->previous->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE){ /* should be */ - text->SetCursorIntern(par->previous, + text->SetCursorIntern(this, + par->previous, 0); - text->OpenFootnote(); + text->OpenFootnote(this); } } } else { @@ -377,18 +395,19 @@ void BufferView::allFloats(char flag, char figmar) ) ) ) { - text->SetCursorIntern(par, 0); - text->CloseFootnote(); + text->SetCursorIntern(this, par, 0); + text->CloseFootnote(this); } } par = par->next; } - text->SetCursorIntern(cursor.par(), cursor.pos()); + text->SetCursorIntern(this, cursor.par(), cursor.pos()); redraw(); fitCursor(); //updateScrollbar(); } +#endif void BufferView::insertNote() @@ -399,15 +418,16 @@ void BufferView::insertNote() } +#ifndef NEW_INSETS void BufferView::openStuff() { if (available()) { owner()->getMiniBuffer()->Set(_("Open/Close...")); hideCursor(); beforeChange(); - update(-2); - text->OpenStuff(); - update(0); + update(BufferView::SELECT|BufferView::FITCUR); + text->OpenStuff(this); + update(BufferView::SELECT|BufferView::FITCUR); setState(); } } @@ -419,12 +439,13 @@ void BufferView::toggleFloat() owner()->getMiniBuffer()->Set(_("Open/Close...")); hideCursor(); beforeChange(); - update(-2); - text->ToggleFootnote(); - update(0); + update(BufferView::SELECT|BufferView::FITCUR); + text->ToggleFootnote(this); + update(BufferView::SELECT|BufferView::FITCUR); setState(); } } +#endif void BufferView::menuUndo() { @@ -432,11 +453,11 @@ void BufferView::menuUndo() owner()->getMiniBuffer()->Set(_("Undo")); hideCursor(); beforeChange(); - update(-2); - if (!text->TextUndo()) + update(BufferView::SELECT|BufferView::FITCUR); + if (!text->TextUndo(this)) owner()->getMiniBuffer()->Set(_("No further undo information")); else - update(-1); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); setState(); } } @@ -453,11 +474,11 @@ void BufferView::menuRedo() owner()->getMiniBuffer()->Set(_("Redo")); hideCursor(); beforeChange(); - update(-2); - if (!text->TextRedo()) + update(BufferView::SELECT|BufferView::FITCUR); + if (!text->TextRedo(this)) owner()->getMiniBuffer()->Set(_("No further redo information")); else - update(-1); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); setState(); } } @@ -467,7 +488,7 @@ void BufferView::hyphenationPoint() { if (available()) { hideCursor(); - update(-2); + update(BufferView::SELECT|BufferView::FITCUR); InsetSpecialChar * new_inset = new InsetSpecialChar(InsetSpecialChar::HYPHENATION); insertInset(new_inset); @@ -479,7 +500,7 @@ void BufferView::ldots() { if (available()) { hideCursor(); - update(-2); + update(BufferView::SELECT|BufferView::FITCUR); InsetSpecialChar * new_inset = new InsetSpecialChar(InsetSpecialChar::LDOTS); insertInset(new_inset); @@ -491,7 +512,7 @@ void BufferView::endOfSentenceDot() { if (available()) { hideCursor(); - update(-2); + update(BufferView::SELECT|BufferView::FITCUR); InsetSpecialChar * new_inset = new InsetSpecialChar(InsetSpecialChar::END_OF_SENTENCE); insertInset(new_inset); @@ -503,7 +524,7 @@ void BufferView::menuSeparator() { if (available()) { hideCursor(); - update(-2); + update(BufferView::SELECT|BufferView::FITCUR); InsetSpecialChar * new_inset = new InsetSpecialChar(InsetSpecialChar::MENU_SEPARATOR); insertInset(new_inset); @@ -515,9 +536,9 @@ void BufferView::newline() { if (available()) { hideCursor(); - update(-2); - text->InsertChar(LyXParagraph::META_NEWLINE); - update(-1); + update(BufferView::SELECT|BufferView::FITCUR); + text->InsertChar(this, LyXParagraph::META_NEWLINE); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); } } @@ -526,7 +547,7 @@ void BufferView::protectedBlank() { if (available()) { hideCursor(); - update(-2); + update(BufferView::SELECT|BufferView::FITCUR); InsetSpecialChar * new_inset = new InsetSpecialChar(InsetSpecialChar::PROTECTED_SEPARATOR); insertInset(new_inset); @@ -538,9 +559,9 @@ void BufferView::hfill() { if (available()) { hideCursor(); - update(-2); - text->InsertChar(LyXParagraph::META_HFILL); - update(-1); + update(BufferView::SELECT|BufferView::FITCUR); + text->InsertChar(this, LyXParagraph::META_HFILL); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); } } @@ -551,7 +572,7 @@ void BufferView::copyEnvironment() // clear the selection, even if mark_set toggleSelection(); text->ClearSelection(); - update(-2); + update(BufferView::SELECT|BufferView::FITCUR); owner()->getMiniBuffer()->Set(_("Paragraph environment type copied")); } } @@ -560,9 +581,9 @@ void BufferView::copyEnvironment() void BufferView::pasteEnvironment() { if (available()) { - text->pasteEnvironmentType(); + text->pasteEnvironmentType(this); owner()->getMiniBuffer()->Set(_("Paragraph environment type set")); - update(1); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); } } @@ -570,11 +591,11 @@ void BufferView::pasteEnvironment() void BufferView::copy() { if (available()) { - text->CopySelection(); + text->CopySelection(this); // clear the selection, even if mark_set toggleSelection(); text->ClearSelection(); - update(-2); + update(BufferView::SELECT|BufferView::FITCUR); owner()->getMiniBuffer()->Set(_("Copy")); } } @@ -583,9 +604,9 @@ void BufferView::cut() { if (available()) { hideCursor(); - update(-2); - text->CutSelection(); - update(1); + update(BufferView::SELECT|BufferView::FITCUR); + text->CutSelection(this); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); owner()->getMiniBuffer()->Set(_("Cut")); } } @@ -600,16 +621,16 @@ void BufferView::paste() // clear the selection toggleSelection(); text->ClearSelection(); - update(-2); + update(BufferView::SELECT|BufferView::FITCUR); // paste - text->PasteSelection(); - update(1); + text->PasteSelection(this); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); // clear the selection toggleSelection(); text->ClearSelection(); - update(-2); + update(BufferView::SELECT|BufferView::FITCUR); } @@ -619,16 +640,16 @@ void BufferView::gotoNote() hideCursor(); beforeChange(); - update(-2); + update(BufferView::SELECT|BufferView::FITCUR); LyXCursor tmp; - if (!text->GotoNextNote()) { + if (!text->GotoNextNote(this)) { if (text->cursor.pos() || text->cursor.par() != text->FirstParagraph()) { tmp = text->cursor; text->cursor.par(text->FirstParagraph()); text->cursor.pos(0); - if (!text->GotoNextNote()) { + if (!text->GotoNextNote(this)) { text->cursor = tmp; owner()->getMiniBuffer()->Set(_("No more notes")); LyXBell(); @@ -638,7 +659,7 @@ void BufferView::gotoNote() LyXBell(); } } - update(0); + update(BufferView::SELECT|BufferView::FITCUR); text->sel_cursor = text->cursor; } @@ -664,7 +685,7 @@ char * BufferView::nextWord(float & value) return 0; } - char * string = text->SelectNextWord(value); + char * string = text->SelectNextWord(this, value); return string; } @@ -676,9 +697,9 @@ void BufferView::selectLastWord() hideCursor(); beforeChange(); - text->SelectSelectedWord(); + text->SelectSelectedWord(this); toggleSelection(false); - update(0); + update(BufferView::SELECT|BufferView::FITCUR); } @@ -688,9 +709,9 @@ void BufferView::endOfSpellCheck() hideCursor(); beforeChange(); - text->SelectSelectedWord(); + text->SelectSelectedWord(this); text->ClearSelection(); - update(0); + update(BufferView::SELECT|BufferView::FITCUR); } @@ -699,23 +720,23 @@ void BufferView::replaceWord(string const & replacestring) if (!available()) return; hideCursor(); - update(-2); + update(BufferView::SELECT|BufferView::FITCUR); /* clear the selection (if there is any) */ toggleSelection(false); - update(-2); + update(BufferView::SELECT|BufferView::FITCUR); /* clear the selection (if there is any) */ toggleSelection(false); - text->ReplaceSelectionWithString(replacestring.c_str()); + text->ReplaceSelectionWithString(this, replacestring.c_str()); - text->SetSelectionOverString(replacestring.c_str()); + text->SetSelectionOverString(this, replacestring.c_str()); // Go back so that replacement string is also spellchecked for (string::size_type i = 0; i < replacestring.length() + 1; ++i) { - text->CursorLeftIntern(); + text->CursorLeftIntern(this); } - update(1); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); } // End of spellchecker stuff @@ -741,11 +762,11 @@ void BufferView::showLockedInsetCursor(long x, long y, int asc, int desc) LyXParagraph::META_INSET) && (cursor.par()->GetInset(cursor.pos() - 1) == the_locking_inset->GetLockingInset())) - text->SetCursor(cursor, + text->SetCursor(this, cursor, cursor.par(), cursor.pos() - 1); y += cursor.y() + the_locking_inset->InsetInInsetY(); - pimpl_->screen->ShowManualCursor(x, y, asc, desc, - LyXScreen::BAR_SHAPE); + pimpl_->screen_->ShowManualCursor(text, x, y, asc, desc, + LyXScreen::BAR_SHAPE); } } @@ -753,7 +774,7 @@ void BufferView::showLockedInsetCursor(long x, long y, int asc, int desc) void BufferView::hideLockedInsetCursor() { if (the_locking_inset && available()) { - pimpl_->screen->HideCursor(); + pimpl_->screen_->HideCursor(); } } @@ -762,7 +783,7 @@ void BufferView::fitLockedInsetCursor(long x, long y, int asc, int desc) { if (the_locking_inset && available()){ y += text->cursor.y() + the_locking_inset->InsetInInsetY(); - if (pimpl_->screen->FitManualCursor(x, y, asc, desc)) + if (pimpl_->screen_->FitManualCursor(text, x, y, asc, desc)) updateScrollbar(); } } @@ -790,11 +811,17 @@ void BufferView::lockedInsetStoreUndo(Undo::undo_kind kind) return; // shouldn't happen if (kind == Undo::EDIT) // in this case insets would not be stored! kind = Undo::FINISH; - text->SetUndo(kind, + text->SetUndo(buffer(), kind, +#ifndef NEW_INSETS text->cursor.par()-> ParFromPos(text->cursor.pos())->previous, text->cursor.par()-> - ParFromPos(text->cursor.pos())->next); + ParFromPos(text->cursor.pos())->next +#else + text->cursor.par()->previous, + text->cursor.par()->next +#endif + ); } @@ -806,7 +833,7 @@ void BufferView::updateInset(Inset * inset, bool mark_dirty) // first check for locking insets if (the_locking_inset) { if (the_locking_inset == inset) { - if (text->UpdateInset(inset)){ + if (text->UpdateInset(this, inset)){ update(); if (mark_dirty){ if (buffer()->isLyxClean()) @@ -818,7 +845,7 @@ void BufferView::updateInset(Inset * inset, bool mark_dirty) return; } } else if (the_locking_inset->UpdateInsetInInset(this,inset)) { - if (text->UpdateInset(the_locking_inset)) { + if (text->UpdateInset(this, the_locking_inset)) { update(); if (mark_dirty){ if (buffer()->isLyxClean()) @@ -835,12 +862,12 @@ void BufferView::updateInset(Inset * inset, bool mark_dirty) // then check the current buffer if (available()) { hideCursor(); - update(-3); - if (text->UpdateInset(inset)){ + update(BufferView::UPDATE); + if (text->UpdateInset(this, inset)){ if (mark_dirty) - update(1); + update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); else - update(3); + update(SELECT); return; } } @@ -852,8 +879,13 @@ bool BufferView::ChangeRefs(string const & from, string const & to) LyXParagraph * par = buffer()->paragraph; LyXCursor cursor = text->cursor; LyXCursor tmpcursor = cursor; +#ifndef NEW_INSETS cursor.par(tmpcursor.par()->ParFromPos(tmpcursor.pos())); cursor.pos(tmpcursor.par()->PositionInParFromPos(tmpcursor.pos())); +#else + cursor.par(tmpcursor.par()); + cursor.pos(tmpcursor.pos()); +#endif while (par) { bool flag2 = false; @@ -869,17 +901,21 @@ bool BufferView::ChangeRefs(string const & from, string const & to) } if (flag2) { flag = true; +#ifndef NEW_INSETS if (par->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE){ +#endif // this is possible now, since SetCursor takes // care about footnotes - text->SetCursorIntern(par, 0); - text->RedoParagraphs(text->cursor, + text->SetCursorIntern(this, par, 0); + text->RedoParagraphs(this, text->cursor, text->cursor.par()->Next()); - text->FullRebreak(); + text->FullRebreak(this); +#ifndef NEW_INSETS } +#endif } par = par->next; } - text->SetCursorIntern(cursor.par(), cursor.pos()); + text->SetCursorIntern(this, cursor.par(), cursor.pos()); return flag; }