X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView_pimpl.C;h=03354332484a0715c8fbbe30f0348336be748dcc;hb=f360c39690150b6ff9116ff56c39c3a0e0a92fd2;hp=79205be07dd1714871d839dc9e51509d8a4729eb;hpb=da7667356810c250a0875649d0b0291c90462c65;p=lyx.git diff --git a/src/BufferView_pimpl.C b/src/BufferView_pimpl.C index 79205be07d..0335433248 100644 --- a/src/BufferView_pimpl.C +++ b/src/BufferView_pimpl.C @@ -67,7 +67,6 @@ #include "mathed/formulabase.h" extern LyXTextClass::size_type current_layout; -extern int greek_kb_flag; using std::vector; using std::find_if; @@ -85,7 +84,6 @@ bool selection_possible = false; extern BufferList bufferlist; extern char ascii_type; -extern bool math_insert_greek(BufferView *, char); extern void sigchldchecker(pid_t pid, int * status); extern int bibitemMaxWidth(BufferView *, LyXFont const &); @@ -256,7 +254,7 @@ void BufferView::Pimpl::redraw() } -bool BufferView::Pimpl::fitCursor(LyXText * text) +bool BufferView::Pimpl::fitCursor() { lyx::Assert(screen_.get()); @@ -266,7 +264,7 @@ bool BufferView::Pimpl::fitCursor(LyXText * text) bv_->theLockingInset()->fitInsetCursor(bv_); ret = true; } else { - ret = screen_->fitCursor(text, bv_); + ret = screen_->fitCursor(bv_->text, bv_); } bv_->owner()->getDialogs()->updateParagraph(); @@ -368,10 +366,7 @@ int BufferView::Pimpl::resizeCurrentBuffer() /// clear the "Formatting Document" message owner_->message(""); - - /// get rid of the splash screen if it's not gone already - owner_->getDialogs()->destroySplash(); - + return 0; } @@ -558,8 +553,12 @@ void BufferView::Pimpl::workAreaMotionNotify(int x, int y, unsigned int state) bv_->text->setSelection(bv_); screen_->toggleToggle(bv_->text, bv_); - fitCursor(bv_->text); + fitCursor(); +#if 0 screen_->showCursor(bv_->text, bv_); +#else + showCursor(); +#endif } @@ -615,9 +614,13 @@ void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos, // Clear the selection screen_->toggleSelection(bv_->text, bv_); - bv_->text->clearSelection(bv_); + bv_->text->clearSelection(); bv_->text->fullRebreak(bv_); +#if 0 screen_->update(bv_->text, bv_); +#else + update(); +#endif updateScrollbar(); // Single left click in math inset? @@ -646,7 +649,7 @@ void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos, bv_->text->cursor.x_fix(bv_->text->cursor.x()); owner_->updateLayoutChoice(); - if (fitCursor(bv_->text)) { + if (fitCursor()) { selection_possible = false; } @@ -802,6 +805,9 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y, return; } +#ifdef WITH_WARNINGS +#warning variable c is set but never used. What is it good for?? (JMarc) +#endif // check whether we want to open a float if (bv_->text) { bool hit = false; @@ -883,7 +889,7 @@ Inset * BufferView::Pimpl::checkInsetHit(LyXText * text, int & x, int & y, (cursor.par()->getInset(cursor.pos() - 1)->editable())) { Inset * tmpinset = cursor.par()->getInset(cursor.pos()-1); LyXFont font = text->getFont(buffer_, cursor.par(), - cursor.pos()-1); + cursor.pos() - 1); int const width = tmpinset->width(bv_, font); int const inset_x = font.isVisibleRightToLeft() ? cursor.x() : cursor.x() - width; @@ -939,7 +945,7 @@ void BufferView::Pimpl::workAreaExpose() // fitCursor() ensures we don't jump back // to the start of the document on vertical // resize - fitCursor(bv_->text); + fitCursor(); // The main window size has changed, repaint most stuff redraw(); @@ -962,7 +968,24 @@ void BufferView::Pimpl::update() if (screen_.get() && (!bv_->theLockingInset() || !bv_->theLockingInset()->nodraw())) { + LyXText::text_status st = bv_->text->status(); screen_->update(bv_->text, bv_); + bool fitc = false; + while(bv_->text->status() == LyXText::CHANGED_IN_DRAW) { + if (bv_->text->fullRebreak(bv_)) { + st = LyXText::NEED_MORE_REFRESH; + bv_->text->setCursor(bv_, bv_->text->cursor.par(), + bv_->text->cursor.pos()); + fitc = true; + } + bv_->text->status(bv_, st); + screen_->update(bv_->text, bv_); + } + // do this here instead of in the screen::update because of + // the above loop! + bv_->text->status(bv_, LyXText::UNCHANGED); + if (fitc) + fitCursor(); } } @@ -1022,7 +1045,7 @@ void BufferView::Pimpl::update(LyXText * text, BufferView::UpdateCodes f) } if ((f & FITCUR)) { - fitCursor(text); + fitCursor(); } if ((f & CHANGE)) { @@ -1056,7 +1079,7 @@ void BufferView::Pimpl::cursorToggle() } if (!bv_->theLockingInset()) { - screen_->cursorToggle(bv_->text, bv_); + screen_->cursorToggle(bv_); } else { bv_->theLockingInset()->toggleInsetCursor(bv_); } @@ -1126,7 +1149,7 @@ bool BufferView::Pimpl::available() const void BufferView::Pimpl::beforeChange(LyXText * text) { toggleSelection(); - text->clearSelection(bv_); + text->clearSelection(); } @@ -1192,12 +1215,7 @@ void BufferView::Pimpl::setState() return; LyXText * text = bv_->getLyXText(); - if (text->real_current_font.isRightToLeft() -#ifndef NO_LATEX - && - text->real_current_font.latex() != LyXFont::ON -#endif - ) { + if (text->real_current_font.isRightToLeft()) { if (owner_->getIntl()->keymap == Intl::PRIMARY) owner_->getIntl()->KeyMapSec(); } else { @@ -1389,7 +1407,7 @@ void BufferView::Pimpl::MenuInsertLyXFile(string const & filen) if (available()) { string const trypath = owner_->buffer()->filepath; // If directory is writeable, use this as default. - if (IsDirWriteable(trypath) == 1) + if (IsDirWriteable(trypath)) initpath = trypath; } @@ -1579,14 +1597,6 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->getDialogs()->setUserFreeFont(); break; -#ifndef NO_LATEX - case LFUN_TEX: - Tex(bv_); - setState(); - owner_->showState(); - break; -#endif - case LFUN_FILE_INSERT: { MenuInsertLyXFile(argument); @@ -1649,58 +1659,58 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) break; case LFUN_LANGUAGE: - Lang(bv_, argument); + lang(bv_, argument); setState(); owner_->showState(); break; case LFUN_EMPH: - Emph(bv_); + emph(bv_); owner_->showState(); break; case LFUN_BOLD: - Bold(bv_); + bold(bv_); owner_->showState(); break; case LFUN_NOUN: - Noun(bv_); + noun(bv_); owner_->showState(); break; case LFUN_CODE: - Code(bv_); + code(bv_); owner_->showState(); break; case LFUN_SANS: - Sans(bv_); + sans(bv_); owner_->showState(); break; case LFUN_ROMAN: - Roman(bv_); + roman(bv_); owner_->showState(); break; case LFUN_DEFAULT: - StyleReset(bv_); + styleReset(bv_); owner_->showState(); break; case LFUN_UNDERLINE: - Underline(bv_); + underline(bv_); owner_->showState(); break; case LFUN_FONT_SIZE: - FontSize(bv_, argument); + fontSize(bv_, argument); owner_->showState(); break; case LFUN_FONT_STATE: - owner_->getLyXFunc()->setMessage(CurrentState(bv_)); + owner_->getLyXFunc()->setMessage(currentState(bv_)); break; case LFUN_UPCASE_WORD: @@ -2343,7 +2353,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) // just comment out the line below... showCursor(); } else { - bv_->cut(); + bv_->cut(false); } moveCursorUpdate(false); owner_->showState(); @@ -2374,6 +2384,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) cursor.par()->params().pagebreakBottom(), VSpace(VSpace::NONE), cursor.par()->params().spaceBottom(), + cursor.par()->params().spacing(), cursor.par()->params().align(), cursor.par()->params().labelWidthString(), 0); lt->cursorLeft(bv_); @@ -2399,7 +2410,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) | BufferView::CHANGE); } } else { - bv_->cut(); + bv_->cut(false); } } break; @@ -2486,7 +2497,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) showCursor(); } } else { - bv_->cut(); + bv_->cut(false); } owner_->showState(); setState(); @@ -2511,6 +2522,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) cursor.par()->params().pagebreakTop(), cursor.par()->params().pagebreakBottom(), VSpace(VSpace::NONE), cursor.par()->params().spaceBottom(), + cursor.par()->params().spacing(), cursor.par()->params().align(), cursor.par()->params().labelWidthString(), 0); update(lt, @@ -2526,7 +2538,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) | BufferView::CHANGE); } } else - bv_->cut(); + bv_->cut(false); } break; @@ -2581,6 +2593,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) cursor.par()->params().pagebreakTop(), cursor.par()->params().pagebreakBottom(), VSpace(VSpace::DEFSKIP), cursor.par()->params().spaceBottom(), + cursor.par()->params().spacing(), cursor.par()->params().align(), cursor.par()->params().labelWidthString(), 1); //update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); @@ -2725,7 +2738,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) if (floatList.typeExist(argument)) { insertAndEditInset(new InsetFloat(argument)); } else { - lyxerr << "Non-existant float type: " + lyxerr << "Non-existent float type: " << argument << endl; } break; @@ -2741,7 +2754,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) else delete new_inset; } else { - lyxerr << "Non-existant float type: " + lyxerr << "Non-existent float type: " << argument << endl; } @@ -2840,18 +2853,6 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) } break; - case LFUN_GETLATEX: - { -#ifndef NO_LATEX - LyXFont & font = bv_->getLyXText()->current_font; - if (font.latex() == LyXFont::ON) - owner_->getLyXFunc()->setMessage("L"); - else -#endif - owner_->getLyXFunc()->setMessage("0"); - } - break; - // --- accented characters --------------------------- case LFUN_UMLAUT: @@ -2932,9 +2933,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) // The argument can be up to two tokens separated // by a space. The first one is the bibstyle. string const db = token(argument, ' ', 0); - string bibstyle = token(argument, ' ', 1); - if (bibstyle.empty()) - bibstyle = "plain"; + string const bibstyle = token(argument, ' ', 1); InsetCommandParams p( "BibTeX", db, bibstyle ); InsetBibtex * inset = new InsetBibtex(p); @@ -2981,22 +2980,9 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_INDEX_CREATE: { InsetCommandParams p("index"); - LyXText * lt = bv_->getLyXText(); - if (argument.empty()) { - // Get word or selection - lt->selectWordWhenUnderCursor(bv_, LyXText::PREVIOUS_WORD); - - if (!lt->selection.set()) { - owner_->message(_("Nothing to index!")); - break; - } - if (lt->selection.start.par() != lt->selection.end.par()) { - owner_->message(_("Cannot index more than one paragraph!")); - break; - } - - p.setContents(lt->selectionAsString(buffer_)); + string const idxstring(bv_->getLyXText()->getStringToIndex(bv_)); + p.setContents(idxstring); } else { p.setContents(argument); } @@ -3020,26 +3006,18 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_INDEX_INSERT_LAST: { - LyXText * lt = bv_->getLyXText(); - // Get word or selection - lt->selectWordWhenUnderCursor(bv_, LyXText::PREVIOUS_WORD); - - if (!lt->selection.set()) { - owner_->message(_("Nothing to index!")); - break; - } - if (lt->selection.start.par() != lt->selection.end.par()) { - owner_->message(_("Cannot index more than one paragraph!")); - break; + string const idxstring(bv_->getLyXText()->getStringToIndex(bv_)); + if (!idxstring.empty()) { + owner_->message(_("Word `") + + idxstring + _(("' indexed."))); + InsetCommandParams p("index", idxstring); + InsetIndex * inset = new InsetIndex(p); + + if (!insertInset(inset)) + delete inset; + else + updateInset(inset, true); } - - InsetCommandParams p("index", lt->selectionAsString(buffer_)); - InsetIndex * inset = new InsetIndex(p); - - if (!insertInset(inset)) - delete inset; - else - updateInset(inset, true); } break; @@ -3093,13 +3071,14 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) string arg = argument; if (arg.empty()) { - arg = bv_->getLyXText()->selectionAsString(buffer_); + arg = bv_->getLyXText()->selectionAsString(buffer_, + false); // FIXME if (arg.size() > 100 || arg.empty()) { // Get word or selection bv_->getLyXText()->selectWordWhenUnderCursor(bv_, LyXText::WHOLE_WORD); - arg = bv_->getLyXText()->selectionAsString(buffer_); + arg = bv_->getLyXText()->selectionAsString(buffer_, false); // FIXME: where is getLyXText()->unselect(bv_) ? } } @@ -3122,7 +3101,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) if (lyxrc.auto_region_delete) { if (lt->selection.set()) { - lt->cutSelection(bv_, false); + lt->cutSelection(bv_, false, false); bv_->update(lt, BufferView::SELECT | BufferView::FITCUR @@ -3136,11 +3115,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) string::const_iterator cit = argument.begin(); string::const_iterator end = argument.end(); for (; cit != end; ++cit) { - if (greek_kb_flag) { - if (!math_insert_greek(bv_, *cit)) - owner_->getIntl()->getTrans().TranslateAndInsert(*cit, lt); - } else - owner_->getIntl()->getTrans().TranslateAndInsert(*cit, lt); + owner_->getIntl()->getTrans().TranslateAndInsert(*cit, lt); } bv_->update(lt, @@ -3265,6 +3240,8 @@ void BufferView::Pimpl::specialChar(InsetSpecialChar::Kind kind) InsetSpecialChar * new_inset = new InsetSpecialChar(kind); insertInset(new_inset); + // Ok, what happens here if we are unable to insert + // the inset? Leak it? } } @@ -3280,7 +3257,13 @@ void BufferView::Pimpl::smartQuote() c = ' '; hideCursor(); - if (!insertInset(new InsetQuotes(c, bv_->buffer()->params))) + + LyXLayout const & style = textclasslist.Style( + bv_->buffer()->params.textclass, + lt->cursor.par()->getLayout()); + + if (style.pass_thru || + (!insertInset(new InsetQuotes(c, bv_->buffer()->params)))) Dispatch(LFUN_SELFINSERT, "\""); } @@ -3354,13 +3337,11 @@ bool BufferView::Pimpl::insertInset(Inset * inset, string const & lout) bv_->text->setParagraph(bv_, 0, 0, 0, 0, VSpace(VSpace::NONE), VSpace(VSpace::NONE), + Spacing(), LYX_ALIGN_LAYOUT, string(), 0); update(bv_->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); -#ifndef NO_LATEX - bv_->text->current_font.setLatex(LyXFont::OFF); -#endif } bv_->text->insertInset(bv_, inset); @@ -3389,7 +3370,7 @@ void BufferView::Pimpl::updateInset(Inset * inset, bool mark_dirty) } } else if (bv_->theLockingInset()->updateInsetInInset(bv_, inset)) { if (bv_->text->updateInset(bv_, - bv_->theLockingInset())) { + bv_->theLockingInset())) { update(); if (mark_dirty){ buffer_->markDirty();