X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsettext.C;h=9d414218ba572794709d44d5f915690177084739;hb=b95e8f250dca6264900d8aedf98e8a24411c36d4;hp=675adc4b4fb26d21693a71de24bfc545fd861e4d;hpb=a30e709a3b315fd675cff7c92b9539e5e0fd7c9c;p=lyx.git diff --git a/src/insets/insettext.C b/src/insets/insettext.C index 675adc4b4f..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_; + delete par; + } +#else + LyXParagraph * p = par->next(); delete par; while(p) { par = p; - p = p->next; + 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") { @@ -261,7 +295,7 @@ int InsetText::width(BufferView * bv, LyXFont const &) const int InsetText::textWidth(Painter & pain) const { - int w = getMaxWidth(pain, this); + int const w = getMaxWidth(pain, this); return w; } @@ -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, @@ -291,7 +325,7 @@ void InsetText::draw(BufferView * bv, LyXFont const & f, // if top_x differs we have a rule down and we don't have to clear anything if (!cleared && (top_x == int(x)) && - ((need_update==FULL) || (top_baseline!=baseline))) + ((need_update==INIT)||(need_update==FULL)||(top_baseline!=baseline))) { int w = insetWidth; int h = insetAscent + insetDescent; @@ -313,7 +347,6 @@ void InsetText::draw(BufferView * bv, LyXFont const & f, return; if (top_x != int(x)) { -// printf("InsetText::draw1 -> INIT(%d)\n",insetWidth); need_update = INIT; top_x = int(x); bv->text->status = LyXText::CHANGED_IN_DRAW; @@ -350,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)) { @@ -360,13 +393,20 @@ void InsetText::draw(BufferView * bv, LyXFont const & f, yf += row->height(); row = row->next(); } - } else if (need_update == SELECTION) { - bv->screen()->ToggleToggle(TEXT(bv), bv, y_offset, int(x)); + } 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 == CURSOR) { + if (need_update & SELECTION) + bv->screen()->ToggleToggle(TEXT(bv), bv, y_offset, int(x)); + else if (need_update & CURSOR) { bv->screen()->ToggleSelection(TEXT(bv), bv, true, y_offset,int(x)); - TEXT(bv)->ClearSelection(); + TEXT(bv)->ClearSelection(bv); TEXT(bv)->sel_cursor = TEXT(bv)->cursor; } bv->screen()->Update(TEXT(bv), bv, y_offset, int(x)); @@ -381,18 +421,15 @@ void InsetText::draw(BufferView * bv, LyXFont const & f, pain.rectangle(top_x + 1, baseline - insetAscent + 1, width(bv, f) - 1, insetAscent + insetDescent - 1, frame_color); - } else if (need_update == CLEAR_FRAME) { + } else if (need_update & CLEAR_FRAME) { pain.rectangle(top_x + 1, baseline - insetAscent + 1, width(bv, f) - 1, insetAscent + insetDescent - 1, LColor::background); } x += width(bv, f) - TEXT_TO_INSET_OFFSET; - if (bv->text->status==LyXText::CHANGED_IN_DRAW) - { + if (bv->text->status==LyXText::CHANGED_IN_DRAW) { need_update = INIT; -// printf("InsetText::draw2 -> INIT(%d)\n",insetWidth); - } - else if (need_update != INIT) + } else if (need_update != INIT) need_update = NONE; } @@ -450,23 +487,23 @@ void InsetText::update(BufferView * bv, LyXFont const & font, bool reinit) TEXT_TO_INSET_OFFSET; } -void InsetText::SetUpdateStatus(UpdateCodes what) +void InsetText::SetUpdateStatus(BufferView * bv, int what) { - if (what > need_update) - need_update = what; + need_update |= what; + if (TEXT(bv)->status == LyXText::NEED_MORE_REFRESH) + need_update |= FULL; + else if (TEXT(bv)->status == LyXText::NEED_VERY_LITTLE_REFRESH) + need_update |= CURSOR_PAR; + + // this to not draw a selection when we redraw all of it! + if ((need_update & (INIT|FULL)) && (need_update & CURSOR)) + TEXT(bv)->ClearSelection(bv); } -void InsetText::UpdateLocal(BufferView * bv, UpdateCodes what, bool mark_dirty) +void InsetText::UpdateLocal(BufferView * bv, int what, bool mark_dirty) { -// if (what == INIT) -// printf("InsetText::UpdateLocal -> INIT(%d)\n",insetWidth); TEXT(bv)->FullRebreak(bv); - if (need_update != INIT) { - if (TEXT(bv)->status == LyXText::NEED_MORE_REFRESH) - need_update = FULL; - else if (!the_locking_inset || (what != CURSOR)) - need_update = what; - } + SetUpdateStatus(bv, what); if ((need_update != CURSOR) || (TEXT(bv)->status != LyXText::UNCHANGED) || TEXT(bv)->selection) bv->updateInset(this, mark_dirty); @@ -509,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); @@ -526,8 +567,7 @@ void InsetText::InsetUnlock(BufferView * bv) HideInsetCursor(bv); no_selection = false; locked = false; - TEXT(bv)->selection = 0; - UpdateLocal(bv, CLEAR_FRAME, false); + UpdateLocal(bv, CLEAR_FRAME|CURSOR, false); if (owner()) bv->owner()->setLayout(owner()->getLyXText(bv) ->cursor.par()->GetLayout()); @@ -549,7 +589,13 @@ bool InsetText::LockInsetInInset(BufferView * bv, UpdatableInset * inset) inset_pos = cpos(bv); inset_par = cpar(bv); inset_boundary = cboundary(bv); +#if 0 + TEXT(bv)->ClearSelection(bv); + TEXT(bv)->sel_cursor = TEXT(bv)->cursor; TEXT(bv)->UpdateInset(bv, the_locking_inset); +#else + UpdateLocal(bv, CURSOR, false); +#endif return true; } else if (the_locking_inset && (the_locking_inset == inset)) { if (cpar(bv) == inset_par && cpos(bv) == inset_pos) { @@ -593,7 +639,7 @@ bool InsetText::UpdateInsetInInset(BufferView * bv, Inset * inset) return false; if (the_locking_inset != inset) { TEXT(bv)->UpdateInset(bv, the_locking_inset); - need_update = CURSOR_PAR; + SetUpdateStatus(bv, CURSOR_PAR); return the_locking_inset->UpdateInsetInInset(bv, inset); } // UpdateLocal(bv, FULL, false); @@ -609,7 +655,7 @@ bool InsetText::UpdateInsetInInset(BufferView * bv, Inset * inset) void InsetText::InsetButtonPress(BufferView * bv, int x, int y, int button) { - no_selection = false; + no_selection = true; int tmp_x = x - drawTextXOffset; int tmp_y = y + insetAscent - TEXT(bv)->first; @@ -619,6 +665,7 @@ void InsetText::InsetButtonPress(BufferView * bv, int x, int y, int button) if (the_locking_inset) { if (the_locking_inset == inset) { the_locking_inset->InsetButtonPress(bv,x-inset_x,y-inset_y,button); + no_selection = false; return; } else if (inset) { // otherwise unlock the_locking_inset and lock the new inset @@ -628,9 +675,9 @@ void InsetText::InsetButtonPress(BufferView * bv, int x, int y, int button) the_locking_inset = static_cast(inset); inset->InsetButtonPress(bv, x - inset_x, y - inset_y, button); inset->Edit(bv, x - inset_x, y - inset_y, button); - if (the_locking_inset) { - UpdateLocal(bv, CURSOR_PAR, false); - } + if (the_locking_inset) + UpdateLocal(bv, CURSOR, false); + no_selection = false; return; } // otherwise only unlock the_locking_inset @@ -648,10 +695,9 @@ void InsetText::InsetButtonPress(BufferView * bv, int x, int y, int button) the_locking_inset = uinset; uinset->InsetButtonPress(bv, x - inset_x, y - inset_y, button); uinset->Edit(bv, x - inset_x, y - inset_y, 0); -// TEXT(bv)->ClearSelection(); - if (the_locking_inset) { - UpdateLocal(bv, CURSOR_PAR, false); - } + if (the_locking_inset) + UpdateLocal(bv, CURSOR, false); + no_selection = false; return; } } @@ -678,6 +724,7 @@ void InsetText::InsetButtonPress(BufferView * bv, int x, int y, int button) } } ShowInsetCursor(bv); + no_selection = false; } @@ -709,22 +756,21 @@ void InsetText::InsetButtonRelease(BufferView * bv, int x, int y, int button) void InsetText::InsetMotionNotify(BufferView * bv, int x, int y, int state) { + if (no_selection) + return; if (the_locking_inset) { the_locking_inset->InsetMotionNotify(bv, x - inset_x, y - inset_y,state); return; } - if (!no_selection) { - HideInsetCursor(bv); - TEXT(bv)->SetCursorFromCoordinates(bv, x-drawTextXOffset, - y+insetAscent); - TEXT(bv)->SetSelection(); - if (TEXT(bv)->toggle_cursor.par()!=TEXT(bv)->toggle_end_cursor.par() || - TEXT(bv)->toggle_cursor.pos()!=TEXT(bv)->toggle_end_cursor.pos()) - UpdateLocal(bv, SELECTION, false); - ShowInsetCursor(bv); - } - no_selection = false; + HideInsetCursor(bv); + TEXT(bv)->SetCursorFromCoordinates(bv, x-drawTextXOffset, + y+insetAscent); + TEXT(bv)->SetSelection(bv); + if (TEXT(bv)->toggle_cursor.par()!=TEXT(bv)->toggle_end_cursor.par() || + TEXT(bv)->toggle_cursor.pos()!=TEXT(bv)->toggle_end_cursor.pos()) + UpdateLocal(bv, SELECTION, false); + ShowInsetCursor(bv); } @@ -739,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 @@ -777,6 +823,8 @@ InsetText::LocalDispatch(BufferView * bv, moveRightIntern(bv, false, false); dispatched = true; break; + default: + break; } the_locking_inset = 0; if (dispatched) @@ -800,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(); @@ -813,27 +861,20 @@ InsetText::LocalDispatch(BufferView * bv, TEXT(bv)->CutSelection(bv, false); } } - TEXT(bv)->ClearSelection(); + TEXT(bv)->ClearSelection(bv); for (string::size_type i = 0; i < arg.length(); ++i) { if (greek_kb_flag) { if (!math_insert_greek(bv, arg[i])) { -#if 0 - bv->owner()->getIntl()->getTrans()->TranslateAndInsert(arg[i], TEXT(bv)); -#else bv->owner()->getIntl()->getTrans().TranslateAndInsert(arg[i], TEXT(bv)); -#endif } else if (!the_locking_inset) { (void)moveRight(bv, false); } } else { -#if 0 - bv->owner()->getIntl()->getTrans()->TranslateAndInsert(arg[i], TEXT(bv)); -#else bv->owner()->getIntl()->getTrans().TranslateAndInsert(arg[i], TEXT(bv)); -#endif } } } + TEXT(bv)->sel_cursor = TEXT(bv)->cursor; UpdateLocal(bv, CURSOR_PAR, true); result=DISPATCHED_NOUPDATE; break; @@ -841,74 +882,64 @@ InsetText::LocalDispatch(BufferView * bv, case LFUN_RIGHTSEL: bv->text->FinishUndo(); moveRight(bv, false, true); - TEXT(bv)->SetSelection(); + TEXT(bv)->SetSelection(bv); UpdateLocal(bv, SELECTION, false); break; case LFUN_RIGHT: result = moveRight(bv); bv->text->FinishUndo(); - TEXT(bv)->ClearSelection(); UpdateLocal(bv, CURSOR, false); break; case LFUN_LEFTSEL: bv->text->FinishUndo(); moveLeft(bv, false, true); - TEXT(bv)->SetSelection(); + TEXT(bv)->SetSelection(bv); UpdateLocal(bv, SELECTION, false); break; case LFUN_LEFT: bv->text->FinishUndo(); result = moveLeft(bv); - TEXT(bv)->ClearSelection(); UpdateLocal(bv, CURSOR, false); break; case LFUN_DOWNSEL: bv->text->FinishUndo(); moveDown(bv); - TEXT(bv)->SetSelection(); + TEXT(bv)->SetSelection(bv); UpdateLocal(bv, SELECTION, false); break; case LFUN_DOWN: bv->text->FinishUndo(); result = moveDown(bv); - TEXT(bv)->ClearSelection(); - TEXT(bv)->sel_cursor = TEXT(bv)->cursor; UpdateLocal(bv, CURSOR, false); break; case LFUN_UPSEL: bv->text->FinishUndo(); moveUp(bv); - TEXT(bv)->SetSelection(); + TEXT(bv)->SetSelection(bv); UpdateLocal(bv, SELECTION, false); break; case LFUN_UP: bv->text->FinishUndo(); result = moveUp(bv); - TEXT(bv)->ClearSelection(); - TEXT(bv)->sel_cursor = TEXT(bv)->cursor; UpdateLocal(bv, CURSOR, false); break; case LFUN_HOME: bv->text->FinishUndo(); TEXT(bv)->CursorHome(bv); - TEXT(bv)->ClearSelection(); - TEXT(bv)->sel_cursor = TEXT(bv)->cursor; UpdateLocal(bv, CURSOR, false); break; case LFUN_END: TEXT(bv)->CursorEnd(bv); - TEXT(bv)->ClearSelection(); - TEXT(bv)->sel_cursor = TEXT(bv)->cursor; UpdateLocal(bv, CURSOR, false); break; 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) @@ -920,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) @@ -936,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); @@ -978,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); @@ -1005,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); @@ -1060,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()); @@ -1094,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); @@ -1103,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); @@ -1141,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; } @@ -1156,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; @@ -1168,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 } } @@ -1274,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; @@ -1289,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) @@ -1329,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); @@ -1344,9 +1400,8 @@ bool InsetText::InsertInset(BufferView * bv, Inset * inset) (cpar(bv)->GetInset(cpos(bv)) != inset)) TEXT(bv)->CursorLeft(bv); #endif - TEXT(bv)->selection = 0; bv->fitCursor(TEXT(bv)); - UpdateLocal(bv, CURSOR_PAR, true); + UpdateLocal(bv, CURSOR_PAR|CURSOR, true); ShowInsetCursor(bv); return true; } @@ -1370,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); @@ -1455,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. @@ -1464,26 +1521,49 @@ void InsetText::SetParagraphData(LyXParagraph *p) (*cit).second = 0; } +#ifndef NEW_INSETS + LyXParagraph * np; + if (par) { + 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; + 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; } @@ -1579,18 +1659,23 @@ Row * InsetText::crow(BufferView * bv) const } -LyXText * InsetText::getLyXText(BufferView const * lbv) const +LyXText * InsetText::getLyXText(BufferView const * lbv, bool const recursive) const { // Super UGLY! (Lgb) BufferView * bv = const_cast(lbv); - if ((cache.find(bv) != cache.end()) && cache[bv]) + if ((cache.find(bv) != cache.end()) && cache[bv]) { + if (recursive && the_locking_inset) + return the_locking_inset->getLyXText(bv); return cache[bv]; + } LyXText * lt = new LyXText(const_cast(this)); lt->init(bv); cache[bv] = lt; if (the_locking_inset) { lt->SetCursor(bv, inset_par, inset_pos, true, inset_boundary); + if (recursive) + return the_locking_inset->getLyXText(bv); } return lt; } @@ -1605,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; @@ -1658,7 +1753,7 @@ void InsetText::resizeLyXText(BufferView * bv) const selstartboundary); TEXT(bv)->sel_cursor = TEXT(bv)->cursor; TEXT(bv)->SetCursor(bv, selendpar, selendpos, true, selendboundary); - TEXT(bv)->SetSelection(); + TEXT(bv)->SetSelection(bv); TEXT(bv)->SetCursor(bv, lpar, pos); } else { TEXT(bv)->SetCursor(bv, lpar, pos, true, boundary); @@ -1675,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; } @@ -1685,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);