X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsettext.C;h=9d414218ba572794709d44d5f915690177084739;hb=b95e8f250dca6264900d8aedf98e8a24411c36d4;hp=aec6572950ceb7c1b1447220d0fdcf809a889a9e;hpb=5e8b74091ee71c5dfb0d97ac6e3dc8d6fda1d808;p=lyx.git diff --git a/src/insets/insettext.C b/src/insets/insettext.C index aec6572950..9d414218ba 100644 --- a/src/insets/insettext.C +++ b/src/insets/insettext.C @@ -120,13 +120,23 @@ InsetText::~InsetText() delete (*cit).second; (*cit).second = 0; } - LyXParagraph * p = par->next; +#ifndef NEW_INSETS + LyXParagraph * p = par->next_; delete par; while(p) { par = p; - p = p->next; + p = p->next_; delete par; } +#else + LyXParagraph * p = par->next(); + delete par; + while(p) { + par = p; + p = p->next(); + delete par; + } +#endif } @@ -138,13 +148,23 @@ void InsetText::clear() delete (*cit).second; (*cit).second = 0; } - LyXParagraph * p = par->next; +#ifndef NEW_INSETS + LyXParagraph * p = par->next_; + delete par; + while(p) { + par = p; + p = p->next_; + delete par; + } +#else + LyXParagraph * p = par->next(); delete par; while(p) { par = p; - p = p->next; + p = p->next(); delete par; } +#endif par = new LyXParagraph(); } @@ -188,13 +208,23 @@ void InsetText::Read(Buffer const * buf, LyXLex & lex) (*cit).second = 0; } - LyXParagraph * p = par->next; +#ifndef NEW_INSETS + LyXParagraph * p = par->next_; + delete par; + while(p) { + par = p; + p = p->next_; + delete par; + } +#else + LyXParagraph * p = par->next(); delete par; while(p) { par = p; - p = p->next; + p = p->next(); delete par; } +#endif par = new LyXParagraph; while (lex.IsOK()) { lex.nextToken(); @@ -221,7 +251,11 @@ void InsetText::Read(Buffer const * buf, LyXLex & lex) par = return_par; while(return_par) { return_par->SetInsetOwner(this); - return_par = return_par->next; +#ifndef NEW_INSETS + return_par = return_par->next_; +#else + return_par = return_par->next(); +#endif } if (token != "\\end_inset") { @@ -273,7 +307,7 @@ void InsetText::draw(BufferView * bv, LyXFont const & f, // no draw is necessary !!! if ((drawFrame == LOCKED) && !locked && !par->size()) { - if (!cleared && (need_update == CLEAR_FRAME)) { + if (!cleared && (need_update & CLEAR_FRAME)) { pain.rectangle(top_x + 1, baseline - insetAscent + 1, width(bv, f) - 1, insetAscent + insetDescent - 1, @@ -349,7 +383,7 @@ void InsetText::draw(BufferView * bv, LyXFont const & f, if (y_offset < 0) y_offset = y; TEXT(bv)->first = first; - if (cleared || !locked || (need_update&FULL) || (need_update&INIT)) { + if (cleared) { // (need_update&FULL) || (need_update&INIT) int yf = y_offset; y = 0; while ((row != 0) && (yf < ph)) { @@ -359,6 +393,13 @@ void InsetText::draw(BufferView * bv, LyXFont const & f, yf += row->height(); row = row->next(); } + } else if (!locked) { + if (need_update & CURSOR) { + bv->screen()->ToggleSelection(TEXT(bv), bv, true, y_offset,int(x)); + TEXT(bv)->ClearSelection(bv); + TEXT(bv)->sel_cursor = TEXT(bv)->cursor; + } + bv->screen()->Update(TEXT(bv), bv, y_offset, int(x)); } else { locked = false; if (need_update & SELECTION) @@ -505,7 +546,11 @@ void InsetText::Edit(BufferView * bv, int x, int y, unsigned int button) // If the inset is empty set the language of the current font to the // language to the surronding text. - if (par->Last() == 0 && !par->next) { +#ifndef NEW_INSETS + if (par->Last() == 0 && !par->next_) { +#else# + if (par->Last() == 0 && !par->next()) { +#endif LyXFont font(LyXFont::ALL_IGNORE); font.setLanguage(bv->getParentLanguage(this)); SetFont(bv, font, false); @@ -740,7 +785,7 @@ void InsetText::InsetKeyPress(XKeyEvent * xke) UpdatableInset::RESULT InsetText::LocalDispatch(BufferView * bv, - int action, string const & arg) + kb_action action, string const & arg) { no_selection = false; UpdatableInset::RESULT @@ -778,6 +823,8 @@ InsetText::LocalDispatch(BufferView * bv, moveRightIntern(bv, false, false); dispatched = true; break; + default: + break; } the_locking_inset = 0; if (dispatched) @@ -801,11 +848,11 @@ InsetText::LocalDispatch(BufferView * bv, bv->text->SetUndo(bv->buffer(), Undo::INSERT, #ifndef NEW_INSETS - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous, - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous_, + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next_ #else - bv->text->cursor.par()->previous, - bv->text->cursor.par()->next + bv->text->cursor.par()->previous(), + bv->text->cursor.par()->next() #endif ); bv->setState(); @@ -815,7 +862,6 @@ InsetText::LocalDispatch(BufferView * bv, } } TEXT(bv)->ClearSelection(bv); - TEXT(bv)->sel_cursor = TEXT(bv)->cursor; for (string::size_type i = 0; i < arg.length(); ++i) { if (greek_kb_flag) { if (!math_insert_greek(bv, arg[i])) { @@ -828,6 +874,7 @@ InsetText::LocalDispatch(BufferView * bv, } } } + TEXT(bv)->sel_cursor = TEXT(bv)->cursor; UpdateLocal(bv, CURSOR_PAR, true); result=DISPATCHED_NOUPDATE; break; @@ -888,11 +935,11 @@ InsetText::LocalDispatch(BufferView * bv, case LFUN_BACKSPACE: bv->text->SetUndo(bv->buffer(), Undo::DELETE, #ifndef NEW_INSETS - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous, - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous_, + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next_ #else - bv->text->cursor.par()->previous, - bv->text->cursor.par()->next + bv->text->cursor.par()->previous(), + bv->text->cursor.par()->next() #endif ); if (TEXT(bv)->selection) @@ -904,11 +951,11 @@ InsetText::LocalDispatch(BufferView * bv, case LFUN_DELETE: bv->text->SetUndo(bv->buffer(), Undo::DELETE, #ifndef NEW_INSETS - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous, - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous_, + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next_ #else - bv->text->cursor.par()->previous, - bv->text->cursor.par()->next + bv->text->cursor.par()->previous(), + bv->text->cursor.par()->next() #endif ); if (TEXT(bv)->selection) @@ -920,11 +967,11 @@ InsetText::LocalDispatch(BufferView * bv, case LFUN_CUT: bv->text->SetUndo(bv->buffer(), Undo::DELETE, #ifndef NEW_INSETS - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous, - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous_, + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next_ #else - bv->text->cursor.par()->previous, - bv->text->cursor.par()->next + bv->text->cursor.par()->previous(), + bv->text->cursor.par()->next() #endif ); TEXT(bv)->CutSelection(bv); @@ -962,11 +1009,11 @@ InsetText::LocalDispatch(BufferView * bv, } bv->text->SetUndo(bv->buffer(), Undo::INSERT, #ifndef NEW_INSETS - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous, - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous_, + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next_ #else - bv->text->cursor.par()->previous, - bv->text->cursor.par()->next + bv->text->cursor.par()->previous(), + bv->text->cursor.par()->next() #endif ); TEXT(bv)->PasteSelection(bv); @@ -989,11 +1036,11 @@ InsetText::LocalDispatch(BufferView * bv, return DISPATCHED; bv->text->SetUndo(bv->buffer(), Undo::INSERT, #ifndef NEW_INSETS - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous, - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous_, + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next_ #else - bv->text->cursor.par()->previous, - bv->text->cursor.par()->next + bv->text->cursor.par()->previous(), + bv->text->cursor.par()->next() #endif ); TEXT(bv)->InsertChar(bv, LyXParagraph::META_NEWLINE); @@ -1044,10 +1091,10 @@ InsetText::LocalDispatch(BufferView * bv, // inherit bufferparams/paragraphparams in a strange way. (Lgb) { LyXParagraph * par = TEXT(bv)->cursor.par(); - Spacing::Space cur_spacing = par->spacing.getSpace(); + Spacing::Space cur_spacing = par->params.spacing().getSpace(); float cur_value = 1.0; if (cur_spacing == Spacing::Other) { - cur_value = par->spacing.getValue(); + cur_value = par->params.spacing().getValue(); } std::istringstream istr(arg.c_str()); @@ -1078,7 +1125,7 @@ InsetText::LocalDispatch(BufferView * bv, << arg << endl; } if (cur_spacing != new_spacing || cur_value != new_value) { - par->spacing.set(new_spacing, new_value); + par->params.spacing(Spacing(new_spacing, new_value)); //TEXT(bv)->RedoParagraph(owner->view()); UpdateLocal(bv, CURSOR_PAR, true); //bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); @@ -1087,13 +1134,18 @@ InsetText::LocalDispatch(BufferView * bv, break; default: - result = UNDISPATCHED; + if (!bv->Dispatch(action, arg)) + result = UNDISPATCHED; break; } /// If the action has deleted all text in the inset, we need to change the // language to the language to the surronding text. - if (par->Last() == 0 && !par->next) { +#ifndef NEW_INSETS + if (par->Last() == 0 && !par->next_) { +#else + if (par->Last() == 0 && !par->next()) { +#endif LyXFont font(LyXFont::ALL_IGNORE); font.setLanguage(bv->getParentLanguage(this)); SetFont(bv, font, false); @@ -1125,7 +1177,11 @@ int InsetText::Ascii(Buffer const * buf, ostream & os, int linelen) const tmp = buf->asciiParagraph(p, linelen); lines += countChar(tmp, '\n'); os << tmp; - p = p->next; +#ifndef NEW_INSETS + p = p->next(); +#else + p = p->next(); +#endif } return lines; } @@ -1140,7 +1196,11 @@ int InsetText::DocBook(Buffer const * buf, ostream & os) const string tmp; while (p) { buf->SimpleDocBookOnePar(os,tmp,p,desc,0); - p = p->next; +#ifndef NEW_INSETS + p = p->next_; +#else + p = p->next(); +#endif } return lines; @@ -1152,7 +1212,11 @@ void InsetText::Validate(LaTeXFeatures & features) const LyXParagraph * p = par; while(p) { p->validate(features); - p = p->next; +#ifndef NEW_INSETS + p = p->next_; +#else + p = p->next(); +#endif } } @@ -1258,7 +1322,11 @@ UpdatableInset::RESULT InsetText::moveRightIntern(BufferView * bv, bool behind, bool activate_inset, bool selecting) { - if (!cpar(bv)->next && (cpos(bv) >= cpar(bv)->Last())) +#ifndef NEW_INSETS + if (!cpar(bv)->next_ && (cpos(bv) >= cpar(bv)->Last())) +#else + if (!cpar(bv)->next() && (cpos(bv) >= cpar(bv)->Last())) +#endif return FINISHED; if (activate_inset && checkAndActivateInset(bv, behind)) return DISPATCHED; @@ -1273,7 +1341,11 @@ UpdatableInset::RESULT InsetText::moveLeftIntern(BufferView * bv, bool behind, bool activate_inset, bool selecting) { - if (!cpar(bv)->previous && (cpos(bv) <= 0)) +#ifndef NEW_INSETS + if (!cpar(bv)->previous_ && (cpos(bv) <= 0)) +#else + if (!cpar(bv)->previous() && (cpos(bv) <= 0)) +#endif return FINISHED; TEXT(bv)->CursorLeft(bv); if (!selecting) @@ -1313,11 +1385,11 @@ bool InsetText::InsertInset(BufferView * bv, Inset * inset) } bv->text->SetUndo(bv->buffer(), Undo::INSERT, #ifndef NEW_INSETS - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous, - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous_, + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next_ #else - bv->text->cursor.par()->previous, - bv->text->cursor.par()->next + bv->text->cursor.par()->previous(), + bv->text->cursor.par()->next() #endif ); inset->setOwner(this); @@ -1353,15 +1425,17 @@ UpdatableInset * InsetText::GetFirstLockingInsetOfType(Inset::Code c) void InsetText::SetFont(BufferView * bv, LyXFont const & font, bool toggleall) { - bv->text->SetUndo(bv->buffer(), Undo::EDIT, + if (TEXT(bv)->selection) { + bv->text->SetUndo(bv->buffer(), Undo::EDIT, #ifndef NEW_INSETS - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous, - bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->previous_, + bv->text->cursor.par()->ParFromPos(bv->text->cursor.pos())->next_ #else - bv->text->cursor.par()->previous, - bv->text->cursor.par()->next + bv->text->cursor.par()->previous(), + bv->text->cursor.par()->next() #endif ); + } TEXT(bv)->SetFont(bv, font, toggleall); bv->fitCursor(TEXT(bv)); UpdateLocal(bv, CURSOR_PAR, true); @@ -1438,7 +1512,7 @@ int InsetText::getMaxWidth(Painter & pain, UpdatableInset const * inset) const } -void InsetText::SetParagraphData(LyXParagraph *p) +void InsetText::SetParagraphData(LyXParagraph * p) { // delete all instances of LyXText before deleting the paragraps used // by it. @@ -1447,26 +1521,49 @@ void InsetText::SetParagraphData(LyXParagraph *p) (*cit).second = 0; } +#ifndef NEW_INSETS LyXParagraph * np; if (par) { - np = par->next; + np = par->next_; + delete par; + while (np) { + par = np; + np = np->next_; + delete par; + } + } + par = p->Clone(); + par->SetInsetOwner(this); + np = par; + while (p->next_) { + p = p->next_; + np->next(p->Clone()); + np->next_->previous(np); + np = np->next_; + np->SetInsetOwner(this); + } +#else + LyXParagraph * np; + if (par) { + np = par->next(); delete par; while(np) { par = np; - np = np->next; + np = np->next(); delete par; } } par = p->Clone(); par->SetInsetOwner(this); np = par; - while(p->next) { - p = p->next; - np->next = p->Clone(); - np->next->previous = np; - np = np->next; + while(p->next()) { + p = p->next(); + np->next(p->Clone()); + np->next()->previous(np); + np = np->next(); np->SetInsetOwner(this); } +#endif need_update = INIT; } @@ -1593,16 +1690,26 @@ void InsetText::deleteLyXText(BufferView * bv, bool recursive) const if (recursive) { /// then remove all LyXText in text-insets LyXParagraph * p = par; - for (;p;p = p->next) { +#ifndef NEW_INSETS + for (; p; p = p->next_) { p->deleteInsetsLyXText(bv); } +#else + for (; p; p = p->next()) { + p->deleteInsetsLyXText(bv); + } +#endif } } void InsetText::resizeLyXText(BufferView * bv) const { - if (!par->next && !par->size()) // resize not neccessary! +#ifndef NEW_INSETS + if (!par->next_ && !par->size()) // resize not neccessary! +#else + if (!par->next() && !par->size()) // resize not neccessary! +#endif return; if ((cache.find(bv) == cache.end()) || !cache[bv]) return; @@ -1663,9 +1770,15 @@ void InsetText::resizeLyXText(BufferView * bv) const /// then resize all LyXText in text-insets inset_x = cx(bv) - top_x + drawTextXOffset; inset_y = cy(bv) + drawTextYOffset; - for (LyXParagraph * p = par; p; p = p->next) { +#ifndef NEW_INSETS + for (LyXParagraph * p = par; p; p = p->next_) { + p->resizeInsetsLyXText(bv); + } +#else + for (LyXParagraph * p = par; p; p = p->next()) { p->resizeInsetsLyXText(bv); } +#endif } need_update = FULL; } @@ -1673,7 +1786,11 @@ void InsetText::resizeLyXText(BufferView * bv) const void InsetText::removeNewlines() { - for (LyXParagraph * p = par; p; p = p->next) { +#ifndef NEW_INSETS + for (LyXParagraph * p = par; p; p = p->next_) { +#else + for (LyXParagraph * p = par; p; p = p->next()) { +#endif for (int i = 0; i < p->Last(); ++i) { if (p->GetChar(i) == LyXParagraph::META_NEWLINE) p->Erase(i);