X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView_pimpl.C;h=56548fbca349b941f8de85ff871ed97aeb767be3;hb=98c966c64594611e469313314abd1e59524adb4a;hp=15eaec939dcc6eca32ed40a8c44a53d099309276;hpb=961b1a47ed2621b4f126580031bbe9f999c2c4fd;p=lyx.git diff --git a/src/BufferView_pimpl.C b/src/BufferView_pimpl.C index 15eaec939d..56548fbca3 100644 --- a/src/BufferView_pimpl.C +++ b/src/BufferView_pimpl.C @@ -87,7 +87,7 @@ using SigC::slot; using lyx::pos_type; using lyx::textclass_type; -/* the selection possible is needed, that only motion events are +/* the selection possible is needed, that only motion events are * used, where the bottom press event was on the drawing area too */ bool selection_possible = false; @@ -153,10 +153,10 @@ BufferView::Pimpl::Pimpl(BufferView * b, LyXView * o, workarea_.workAreaKeyPress .connect(slot(this, &BufferView::Pimpl::workAreaKeyPress)); workarea_.selectionRequested - .connect(slot(this, &BufferView::Pimpl::selectionRequested)); + .connect(slot(this, &BufferView::Pimpl::selectionRequested)); workarea_.selectionLost .connect(slot(this, &BufferView::Pimpl::selectionLost)); - + cursor_timeout.timeout.connect(slot(this, &BufferView::Pimpl::cursorToggle)); cursor_timeout.start(); @@ -165,7 +165,7 @@ BufferView::Pimpl::Pimpl(BufferView * b, LyXView * o, } -Painter & BufferView::Pimpl::painter() +Painter & BufferView::Pimpl::painter() { return workarea_.getPainter(); } @@ -186,7 +186,7 @@ void BufferView::Pimpl::buffer(Buffer * b) textcache.add(buffer_, workarea_.workWidth(), bv_->text); if (lyxerr.debugging()) textcache.show(lyxerr, "BufferView::buffer"); - + bv_->text = 0; } @@ -194,7 +194,7 @@ void BufferView::Pimpl::buffer(Buffer * b) buffer_ = b; if (bufferlist.getState() == BufferList::CLOSING) return; - + // Nuke old image // screen is always deleted when the buffer is changed. screen_.reset(0); @@ -300,18 +300,18 @@ void BufferView::Pimpl::redoCurrentBuffer() int BufferView::Pimpl::resizeCurrentBuffer() { lyxerr[Debug::INFO] << "resizeCurrentBuffer" << endl; - + Paragraph * par = 0; Paragraph * selstartpar = 0; Paragraph * selendpar = 0; UpdatableInset * the_locking_inset = 0; - + pos_type pos = 0; pos_type selstartpos = 0; pos_type selendpos = 0; bool selection = false; bool mark_set = false; - + owner_->prohibitInput(); owner_->message(_("Formatting document...")); @@ -381,7 +381,7 @@ int BufferView::Pimpl::resizeCurrentBuffer() setState(); owner_->allowInput(); - /// clear the "Formatting Document" message + /// clear the "Formatting Document" message owner_->message(""); return 0; @@ -397,10 +397,8 @@ void BufferView::Pimpl::updateScreen() void BufferView::Pimpl::updateScrollbar() { - /* If the text is smaller than the working area, the scrollbar - * maximum must be the working area height. No scrolling will - * be possible */ if (!bv_->text) { + lyxerr[Debug::GUI] << "no text in updateScrollbar" << endl; workarea_.setScrollbar(0, 1.0); return; } @@ -408,49 +406,43 @@ void BufferView::Pimpl::updateScrollbar() long const text_height = bv_->text->height; long const work_height = workarea_.height(); + double const lineh = bv_->text->defaultHeight(); + double const slider_size = + (text_height == 0) ? 1.0 : 1.0 / double(text_height); + + lyxerr[Debug::GUI] << "text_height now " << text_height << endl; + lyxerr[Debug::GUI] << "work_height " << work_height << endl; + + /* If the text is smaller than the working area, the scrollbar + * maximum must be the working area height. No scrolling will + * be possible */ if (text_height <= work_height) { + lyxerr[Debug::GUI] << "doc smaller than workarea !" << endl; workarea_.setScrollbarBounds(0.0, 0.0); current_scrollbar_value = bv_->text->first_y; workarea_.setScrollbar(current_scrollbar_value, 1.0); return; } - - double const lineh = bv_->text->defaultHeight(); - double const slider_size = - (text_height == 0) ? 1.0 : 1.0 / double(text_height); - - static long old_text_height; - static double old_lineh; - static double old_slider_size; - - if (text_height != old_text_height) { - workarea_.setScrollbarBounds(0.0, - text_height - work_height); - old_text_height = text_height; - } - if (lineh != old_lineh) { - workarea_.setScrollbarIncrements(lineh); - old_lineh = lineh; - } - if (current_scrollbar_value != bv_->text->first_y - || slider_size != old_slider_size) { - current_scrollbar_value = bv_->text->first_y; - workarea_.setScrollbar(current_scrollbar_value, slider_size); - old_slider_size = slider_size; - } + + workarea_.setScrollbarBounds(0.0, text_height - work_height); + workarea_.setScrollbarIncrements(lineh); + current_scrollbar_value = bv_->text->first_y; + workarea_.setScrollbar(current_scrollbar_value, slider_size); } // Callback for scrollbar slider void BufferView::Pimpl::scrollCB(double value) { + lyxerr[Debug::GUI] << "scrollCB of " << value << endl; + if (!buffer_) return; current_scrollbar_value = long(value); if (current_scrollbar_value < 0) current_scrollbar_value = 0; - + if (!screen_.get()) return; @@ -460,9 +452,9 @@ void BufferView::Pimpl::scrollCB(double value) waitForX(); return; } - + LyXText * vbt = bv_->text; - + int const height = vbt->defaultHeight(); int const first = static_cast((bv_->text->first_y + height)); int const last = static_cast((bv_->text->first_y + workarea_.height() - height)); @@ -480,26 +472,26 @@ int BufferView::Pimpl::scrollUp(long time) { if (!buffer_) return 0; if (!screen_.get()) return 0; - + double value = workarea_.getScrollbarValue(); - + if (value == 0) return 0; float add_value = (bv_->text->defaultHeight() + float(time) * float(time) * 0.125); - + if (add_value > workarea_.height()) add_value = float(workarea_.height() - bv_->text->defaultHeight()); - + value -= add_value; if (value < 0) value = 0; - + workarea_.setScrollbarValue(value); - - scrollCB(value); + + scrollCB(value); return 0; } @@ -508,28 +500,28 @@ int BufferView::Pimpl::scrollDown(long time) { if (!buffer_) return 0; if (!screen_.get()) return 0; - + double value = workarea_.getScrollbarValue(); pair p = workarea_.getScrollbarBounds(); double const max = p.second; - + if (value == max) return 0; float add_value = (bv_->text->defaultHeight() + float(time) * float(time) * 0.125); - + if (add_value > workarea_.height()) add_value = float(workarea_.height() - bv_->text->defaultHeight()); - + value += add_value; - + if (value > max) value = max; workarea_.setScrollbarValue(value); - - scrollCB(value); + + scrollCB(value); return 0; } @@ -564,20 +556,20 @@ void BufferView::Pimpl::workAreaMotionNotify(int x, int y, unsigned int state) state); return; } - + /* The test for not selection possible is needed, that only motion events are used, where the bottom press event was on the drawing area too */ if (!selection_possible) return; - + screen_->hideCursor(); bv_->text->setCursorFromCoordinates(bv_, x, y + bv_->text->first_y); - + if (!bv_->text->selection.set()) update(bv_->text, BufferView::UPDATE); // Maybe an empty line was deleted - + bv_->text->setSelection(bv_); screen_->toggleToggle(bv_->text, bv_); fitCursor(); @@ -587,7 +579,7 @@ void BufferView::Pimpl::workAreaMotionNotify(int x, int y, unsigned int state) // Single-click on work area void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos, - unsigned int button) + unsigned int button) { if (!buffer_ || !screen_.get()) return; @@ -605,7 +597,7 @@ void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos, break; } } - + // Middle button press pastes if we have a selection // We do this here as if the selection was inside an inset // it could get cleared on the unlocking of the inset so @@ -615,10 +607,12 @@ void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos, owner_->getLyXFunc()->dispatch(LFUN_COPY); paste_internally = true; } - + + int const screen_first = bv_->text->first_y; + if (bv_->theLockingInset()) { // We are in inset locking mode - + /* Check whether the inset was hit. If not reset mode, otherwise give the event to the inset */ if (inset_hit == bv_->theLockingInset()) { @@ -629,20 +623,18 @@ void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos, bv_->unlockInset(bv_->theLockingInset()); } } - + if (!inset_hit) selection_possible = true; screen_->hideCursor(); - int const screen_first = bv_->text->first_y; - // Clear the selection screen_->toggleSelection(bv_->text, bv_); bv_->text->clearSelection(); bv_->text->fullRebreak(bv_); update(); updateScrollbar(); - + // Single left click in math inset? if (isHighlyEditableInset(inset_hit)) { // Highly editable inset, like math @@ -650,30 +642,33 @@ void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos, selection_possible = false; owner_->updateLayoutChoice(); owner_->message(inset->editMessage()); - // IMO the inset has to be first in edit-mode and then we send the - // button press. (Jug 20020222) - inset->edit(bv_); //, xpos, ypos, button); + //inset->edit(bv_, xpos, ypos, button); + // We just have to lock the inset before calling a PressEvent on it! + // we don't need the edit() call here! (Jug20020329) + if (!bv_->lockInset(inset)) { + lyxerr[Debug::INSETS] << "Cannot lock inset" << endl; + } inset->insetButtonPress(bv_, xpos, ypos, button); return; - } - + } + // Right click on a footnote flag opens float menu - if (button == 3) { + if (button == 3) { selection_possible = false; return; } - + if (!inset_hit) // otherwise it was already set in checkInsetHit(...) bv_->text->setCursorFromCoordinates(bv_, xpos, ypos + screen_first); finishUndo(); bv_->text->selection.cursor = bv_->text->cursor; bv_->text->cursor.x_fix(bv_->text->cursor.x()); - + owner_->updateLayoutChoice(); if (fitCursor()) { selection_possible = false; } - + // Insert primary selection with middle mouse // if there is a local selection in the current buffer, // insert this @@ -682,14 +677,14 @@ void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos, owner_->getLyXFunc()->dispatch(LFUN_PASTE); else owner_->getLyXFunc()->dispatch(LFUN_PASTESELECTION, - "paragraph"); + "paragraph"); selection_possible = false; return; } } -void BufferView::Pimpl::doubleClick(int /*x*/, int /*y*/, unsigned int button) +void BufferView::Pimpl::doubleClick(int /*x*/, int /*y*/, unsigned int button) { // select a word if (!buffer_) @@ -748,28 +743,42 @@ void BufferView::Pimpl::tripleClick(int /*x*/, int /*y*/, unsigned int button) void BufferView::Pimpl::selectionRequested() { + static string sel; + if (!available()) return; - - string const sel(bv_->getLyXText()->selectionAsString(bv_->buffer(), - false)); + + LyXText * text = bv_->getLyXText(); + + if (text->selection.set() && + (!bv_->text->xsel_cache.set() || + text->selection.start != bv_->text->xsel_cache.start || + text->selection.end != bv_->text->xsel_cache.end)) + { + bv_->text->xsel_cache = text->selection; + sel = text->selectionAsString(bv_->buffer(), false); + } else if (!text->selection.set()) { + sel = string(); + bv_->text->xsel_cache.set(false); + } if (!sel.empty()) { workarea_.putClipboard(sel); } } - + void BufferView::Pimpl::selectionLost() { - if (active() && available()) { + if (active() && available()) { hideCursor(); toggleSelection(); bv_->getLyXText()->clearSelection(); - showCursor(); + showCursor(); + bv_->text->xsel_cache.set(false); } } - + void BufferView::Pimpl::enterView() { if (active() && available()) { @@ -802,15 +811,15 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y, // We are in inset locking mode. /* LyX does a kind of work-area grabbing for insets. - Only a ButtonPress Event outside the inset will + Only a ButtonPress Event outside the inset will force a insetUnlock. */ bv_->theLockingInset()-> insetButtonRelease(bv_, x, y, button); return; } - + selection_possible = false; - + if (button == 2) return; @@ -818,7 +827,7 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y, if (button == 1) { workarea_.haveSelection(bv_->getLyXText()->selection.set()); } - + setState(); owner_->showState(); owner_->updateMenubar(); @@ -831,7 +840,7 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y, // if we reach this point with a selection, it // must mean we are currently selecting. // But we don't want to open the inset - // because that is annoying for the user. + // because that is annoying for the user. // So just pretend we didn't hit it. // this is OK because a "kosher" ButtonRelease // will follow a ButtonPress that clears @@ -840,7 +849,7 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y, // problems if we end up opening an inset if (bv_->getLyXText()->selection.set()) return; - + // CHECK fix this proper in 0.13 // well, maybe 13.0 !!!!!!!!! @@ -869,13 +878,17 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y, inset->insetButtonRelease(bv_, x, y, button); } else { inset_hit->insetButtonRelease(bv_, x, y, button); + // IMO this is a grosshack! Inset's should be changed so that + // they call the actions they have to do with the insetButtonRel. + // function and not in the edit(). This should be changed + // (Jug 20020329) inset_hit->edit(bv_, x, y, button); } return; } // Maybe we want to edit a bibitem ale970302 - if (bv_->text->cursor.par()->bibkey && x < 20 + + if (bv_->text->cursor.par()->bibkey && x < 20 + bibitemMaxWidth(bv_, textclasslist[buffer_->params.textclass].defaultfont())) { bv_->text->cursor.par()->bibkey->edit(bv_, 0, 0, 0); } @@ -891,23 +904,23 @@ Box BufferView::Pimpl::insetDimensions(LyXText const & text, pos_type const pos = cursor.pos(); lyx::Assert(par.getInset(pos)); - + Inset const & inset(*par.getInset(pos)); LyXFont const & font = text.getFont(buffer_, &par, pos); - + int const width = inset.width(bv_, font); int const inset_x = font.isVisibleRightToLeft() ? (cursor.x() - width) : cursor.x(); - + return Box( inset_x + inset.scroll(), inset_x + width, cursor.y() - inset.ascent(bv_, font), cursor.y() + inset.descent(bv_, font)); } - - + + Inset * BufferView::Pimpl::checkInset(LyXText const & text, LyXCursor const & cursor, int & x, int & y) const @@ -920,7 +933,7 @@ Inset * BufferView::Pimpl::checkInset(LyXText const & text, } Inset /*const*/ * inset = par.getInset(pos); - + if (!isEditableInset(inset)) { return 0; } @@ -928,40 +941,40 @@ Inset * BufferView::Pimpl::checkInset(LyXText const & text, Box b(insetDimensions(text, cursor)); if (!b.contained(x, y)) { - lyxerr[Debug::GUI] << "Missed inset at x,y " << x << "," << y + lyxerr[Debug::GUI] << "Missed inset at x,y " << x << "," << y << " box " << b << endl; return 0; } - + text.setCursor(bv_, &par, pos, true); - + x -= b.x1; // The origin of an inset is on the baseline y -= (text.cursor.y()); - + return inset; } - + Inset * BufferView::Pimpl::checkInsetHit(LyXText * text, int & x, int & y) { if (!screen_.get()) return 0; - + int y_tmp = y + text->first_y; - + LyXCursor cursor; text->setCursorFromCoordinates(bv_, cursor, x, y_tmp); - + Inset * inset(checkInset(*text, cursor, x, y_tmp)); if (inset) { y = y_tmp; return inset; } - + // look at previous position - + if (cursor.pos() == 0) { return 0; } @@ -1057,7 +1070,7 @@ void BufferView::Pimpl::update() // -3 - update // -2 - update, move sel_cursor if selection, fitcursor // -1 - update, move sel_cursor if selection, fitcursor, mark dirty -// 0 - update, move sel_cursor if selection, fitcursor +// 0 - update, move sel_cursor if selection, fitcursor // 1 - update, move sel_cursor if selection, fitcursor, mark dirty // 3 - update, move sel_cursor if selection // @@ -1077,7 +1090,7 @@ void BufferView::Pimpl::update() // UPDATE = 0, // SELECT = 1, // FITCUR = 2, -// CHANGE = 4 +// CHANGE = 4 // }; // // UPDATE_ONLY = UPDATE; @@ -1107,7 +1120,7 @@ void BufferView::Pimpl::update(LyXText * text, BufferView::UpdateCodes f) } else { update(); } - + if ((f & FITCUR)) { fitCursor(); } @@ -1125,7 +1138,7 @@ void BufferView::Pimpl::cursorToggle() cursor_timeout.restart(); return; } - + if (!screen_.get()) { cursor_timeout.restart(); return; @@ -1134,13 +1147,13 @@ void BufferView::Pimpl::cursorToggle() /* FIXME */ extern void reapSpellchecker(void); reapSpellchecker(); - + if (!bv_->theLockingInset()) { screen_->cursorToggle(bv_); } else { bv_->theLockingInset()->toggleInsetCursor(bv_); } - + cursor_timeout.restart(); } @@ -1149,17 +1162,17 @@ void BufferView::Pimpl::cursorPrevious(LyXText * text) { if (!text->cursor.row()->previous()) return; - + int y = text->first_y; Row * cursorrow = text->cursor.row(); - + text->setCursorFromCoordinates(bv_, bv_->text->cursor.x_fix(), y); finishUndo(); // This is to allow jumping over large insets if ((cursorrow == text->cursor.row())) text->cursorUp(bv_); - - if (text->inset_owner || + + if (text->inset_owner || text->cursor.row()->height() < workarea_.height()) screen_->draw(bv_->text, bv_, text->cursor.y() @@ -1174,20 +1187,20 @@ void BufferView::Pimpl::cursorNext(LyXText * text) { if (!text->cursor.row()->next()) return; - + int y = text->first_y + workarea_.height(); // if (text->inset_owner) // y += bv_->text->first; text->getRowNearY(y); - + Row * cursorrow = text->cursor.row(); text->setCursorFromCoordinates(bv_, text->cursor.x_fix(), y); // + workarea_->height()); finishUndo(); // This is to allow jumping over large insets if ((cursorrow == bv_->text->cursor.row())) text->cursorDown(bv_); - - if (text->inset_owner || + + if (text->inset_owner || text->cursor.row()->height() < workarea_.height()) screen_->draw(bv_->text, bv_, text->cursor.y() - text->cursor.row()->baseline()); @@ -1236,7 +1249,7 @@ void BufferView::Pimpl::restorePosition(unsigned int i) if (fname != buffer_->fileName()) { Buffer * b = bufferlist.exists(fname) ? - bufferlist.getBuffer(fname) : + bufferlist.getBuffer(fname) : bufferlist.loadLyXFile(fname); // don't ask, just load it if (b != 0) buffer(b); } @@ -1331,7 +1344,7 @@ bool BufferView::Pimpl::active() const } -bool BufferView::Pimpl::belowMouse() const +bool BufferView::Pimpl::belowMouse() const { return workarea_.belowMouse(); } @@ -1376,7 +1389,7 @@ void BufferView::Pimpl::toggleToggle() } -void BufferView::Pimpl::center() +void BufferView::Pimpl::center() { beforeChange(bv_->text); if (bv_->text->cursor.y() > static_cast((workarea_.height() / 2))) { @@ -1389,16 +1402,16 @@ void BufferView::Pimpl::center() } -void BufferView::Pimpl::pasteClipboard(bool asPara) +void BufferView::Pimpl::pasteClipboard(bool asPara) { if (!buffer_) return; screen_->hideCursor(); beforeChange(bv_->text); - + string const clip(workarea_.getClipboard()); - + if (clip.empty()) return; @@ -1427,7 +1440,7 @@ inline void BufferView::Pimpl::moveCursorUpdate(bool selecting) { LyXText * lt = bv_->getLyXText(); - + if (selecting || lt->selection.mark()) { lt->setSelection(bv_); if (lt->bv_owner) @@ -1439,7 +1452,10 @@ void BufferView::Pimpl::moveCursorUpdate(bool selecting) update(lt, BufferView::SELECT|BufferView::FITCUR); showCursor(); } - + + if (!lt->selection.set()) + workarea_.haveSelection(false); + /* ---> Everytime the cursor is moved, show the current font state. */ // should this too me moved out of this func? //owner->showState(); @@ -1485,7 +1501,7 @@ void BufferView::Pimpl::MenuInsertLyXFile(string const & filen) FileDialog::Result result = fileDlg.Select(initpath, _("*.lyx| LyX Documents (*.lyx)")); - + if (result.first == FileDialog::Later) return; @@ -1503,7 +1519,7 @@ void BufferView::Pimpl::MenuInsertLyXFile(string const & filen) filename = FileSearch(string(), filename, "lyx"); string const disp_fn(MakeDisplayPath(filename)); - + ostringstream s1; s1 << _("Inserting document") << ' ' << disp_fn << " ..."; @@ -1527,7 +1543,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) { lyxerr[Debug::ACTION] << "BufferView::Pimpl::Dispatch: action[" << action <<"] arg[" << argument << "]" << endl; - + switch (action) { // --- Misc ------------------------------------------- case LFUN_APPENDIX: @@ -1552,7 +1568,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) delete inset; break; } - + case LFUN_SCROLL_INSET: // this is not handled here as this funktion is only aktive // if we have a locking_inset and that one is (or contains) @@ -1571,12 +1587,12 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) } break; } - + case LFUN_PASTE: bv_->paste(); setState(); break; - + case LFUN_PASTESELECTION: { bool asPara = false; @@ -1585,28 +1601,28 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) pasteClipboard(asPara); } break; - + case LFUN_CUT: bv_->cut(); break; - + case LFUN_COPY: bv_->copy(); break; - + case LFUN_LAYOUT_COPY: bv_->copyEnvironment(); break; - + case LFUN_LAYOUT_PASTE: bv_->pasteEnvironment(); setState(); break; - + case LFUN_GOTOERROR: gotoInset(Inset::ERROR_CODE, false); break; - + case LFUN_GOTONOTE: gotoInset(Inset::IGNORE_CODE, false); break; @@ -1623,15 +1639,15 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_HYPHENATION: specialChar(InsetSpecialChar::HYPHENATION); break; - + case LFUN_LIGATURE_BREAK: specialChar(InsetSpecialChar::LIGATURE_BREAK); break; - + case LFUN_LDOTS: specialChar(InsetSpecialChar::LDOTS); break; - + case LFUN_END_OF_SENTENCE: specialChar(InsetSpecialChar::END_OF_SENTENCE); break; @@ -1639,23 +1655,19 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_MENU_SEPARATOR: specialChar(InsetSpecialChar::MENU_SEPARATOR); break; - + case LFUN_HFILL: hfill(); break; - - case LFUN_DEPTH: - changeDepth(bv_, bv_->getLyXText(), 0); - break; - + case LFUN_DEPTH_MIN: changeDepth(bv_, bv_->getLyXText(), -1); break; - + case LFUN_DEPTH_PLUS: changeDepth(bv_, bv_->getLyXText(), 1); break; - + case LFUN_FREE: owner_->getDialogs()->setUserFreeFont(); break; @@ -1663,7 +1675,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_FILE_INSERT: MenuInsertLyXFile(argument); break; - + case LFUN_FILE_INSERT_ASCII_PARA: InsertAsciiFile(bv_, argument, true); break; @@ -1671,14 +1683,14 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_FILE_INSERT_ASCII: InsertAsciiFile(bv_, argument, false); break; - + case LFUN_LAYOUT: { lyxerr[Debug::INFO] << "LFUN_LAYOUT: (arg) " << argument << endl; - + // Derive layout number from given argument (string) - // and current buffer's textclass (number). */ + // and current buffer's textclass (number). */ textclass_type tclass = buffer_->params.textclass; bool hasLayout = textclasslist[tclass].hasLayout(argument); @@ -1688,7 +1700,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) if (hasLayout) { string const & obs = textclasslist[tclass][layout] .obsoleted_by(); - if (!obs.empty()) + if (!obs.empty()) layout = obs; } @@ -1732,50 +1744,50 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) bold(bv_); owner_->showState(); break; - + case LFUN_NOUN: noun(bv_); owner_->showState(); break; - + case LFUN_CODE: code(bv_); owner_->showState(); break; - + case LFUN_SANS: sans(bv_); owner_->showState(); break; - + case LFUN_ROMAN: roman(bv_); owner_->showState(); break; - + case LFUN_DEFAULT: styleReset(bv_); owner_->showState(); break; - + case LFUN_UNDERLINE: underline(bv_); owner_->showState(); break; - + case LFUN_FONT_SIZE: fontSize(bv_, argument); owner_->showState(); break; - + case LFUN_FONT_STATE: owner_->getLyXFunc()->setMessage(currentState(bv_)); break; - + case LFUN_UPCASE_WORD: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT | BufferView::FITCUR); @@ -1788,11 +1800,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) | BufferView::CHANGE); } break; - + case LFUN_LOWCASE_WORD: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); lt->changeCase(bv_, LyXText::text_lowercase); if (lt->inset_owner) @@ -1803,11 +1815,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) | BufferView::CHANGE); } break; - + case LFUN_CAPITALIZE_WORD: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); lt->changeCase(bv_, LyXText::text_capitalization); if (lt->inset_owner) @@ -1822,7 +1834,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_TRANSPOSE_CHARS: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); lt->transposeChars(*bv_); if (lt->inset_owner) @@ -1833,8 +1845,8 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) | BufferView::CHANGE); } break; - - + + case LFUN_INSERT_LABEL: MenuInsertLabel(bv_, argument); break; @@ -1867,29 +1879,29 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) { string label(argument); if (label.empty()) { - InsetRef * inset = + InsetRef * inset = static_cast(getInsetByCode(Inset::REF_CODE)); if (inset) { - label = inset->getContents(); + label = inset->getContents(); savePosition(0); } } - + if (!label.empty()) { //bv_->savePosition(0); if (!bv_->gotoLabel(label)) - Alert::alert(_("Error"), - _("Couldn't find this label"), + Alert::alert(_("Error"), + _("Couldn't find this label"), _("in current document.")); } } break; - + // --- Cursor Movements ----------------------------- case LFUN_RIGHT: { LyXText * lt = bv_->getLyXText(); - + bool is_rtl = lt->cursor.par()->isRightToLeftPar(buffer_->params); if (!lt->selection.mark()) beforeChange(lt); @@ -1914,7 +1926,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_LEFT: { // This is soooo ugly. Isn`t it possible to make @@ -1947,11 +1959,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_UP: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, BufferView::UPDATE); @@ -1961,11 +1973,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_DOWN: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, BufferView::UPDATE); @@ -1979,7 +1991,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_UP_PARAGRAPH: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, BufferView::UPDATE); @@ -1989,11 +2001,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_DOWN_PARAGRAPH: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, BufferView::UPDATE); @@ -2003,11 +2015,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_PRIOR: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, BufferView::UPDATE); @@ -2017,11 +2029,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_NEXT: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, BufferView::UPDATE); @@ -2031,11 +2043,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_HOME: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, BufferView::SELECT|BufferView::FITCUR); @@ -2045,11 +2057,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_END: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, @@ -2060,12 +2072,12 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_SHIFT_TAB: case LFUN_TAB: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, @@ -2076,11 +2088,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_WORDRIGHT: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, BufferView::SELECT|BufferView::FITCUR); @@ -2093,11 +2105,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_WORDLEFT: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, BufferView::SELECT|BufferView::FITCUR); @@ -2110,11 +2122,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_BEGINNINGBUF: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, @@ -2125,11 +2137,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_ENDBUF: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.mark()) beforeChange(lt); update(lt, @@ -2140,12 +2152,12 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + /* cursor selection ---------------------------- */ case LFUN_RIGHTSEL: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); if (lt->cursor.par()->isRightToLeftPar(buffer_->params)) @@ -2157,11 +2169,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_LEFTSEL: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); if (lt->cursor.par()->isRightToLeftPar(buffer_->params)) @@ -2173,11 +2185,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_UPSEL: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); lt->cursorUp(bv_); @@ -2186,11 +2198,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_DOWNSEL: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); lt->cursorDown(bv_); @@ -2203,7 +2215,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_UP_PARAGRAPHSEL: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); lt->cursorUpParagraph(bv_); @@ -2212,11 +2224,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_DOWN_PARAGRAPHSEL: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); lt->cursorDownParagraph(bv_); @@ -2225,11 +2237,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_PRIORSEL: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); cursorPrevious(lt); finishUndo(); @@ -2237,11 +2249,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_NEXTSEL: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); cursorNext(lt); finishUndo(); @@ -2249,11 +2261,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_HOMESEL: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); lt->cursorHome(bv_); finishUndo(); @@ -2261,7 +2273,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_ENDSEL: { LyXText * lt = bv_->getLyXText(); @@ -2273,11 +2285,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_WORDRIGHTSEL: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); if (lt->cursor.par()->isRightToLeftPar(buffer_->params)) lt->cursorLeftOneWord(bv_); @@ -2288,11 +2300,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_WORDLEFTSEL: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); if (lt->cursor.par()->isRightToLeftPar(buffer_->params)) lt->cursorRightOneWord(bv_); @@ -2303,11 +2315,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_BEGINNINGBUFSEL: { LyXText * lt = bv_->getLyXText(); - + if (lt->inset_owner) break; update(lt, BufferView::SELECT|BufferView::FITCUR); @@ -2317,11 +2329,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + case LFUN_ENDBUFSEL: { LyXText * lt = bv_->getLyXText(); - + if (lt->inset_owner) break; update(lt, @@ -2347,7 +2359,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) moveCursorUpdate(false); } break; - + case LFUN_PROTECTEDSPACE: { LyXText * lt = bv_->getLyXText(); @@ -2366,7 +2378,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) moveCursorUpdate(false); } break; - + case LFUN_SETMARK: { LyXText * lt = bv_->getLyXText(); @@ -2388,7 +2400,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) lt->selection.cursor = lt->cursor; } break; - + case LFUN_DELETE: { LyXText * lt = bv_->getLyXText(); @@ -2417,7 +2429,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) LyXText * lt = bv_->getLyXText(); // Reverse the effect of LFUN_BREAKPARAGRAPH_SKIP. - + LyXCursor cursor = lt->cursor; if (!lt->selection.set()) { @@ -2431,15 +2443,15 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) (bv_, cursor.par()->params().lineTop(), cursor.par()->params().lineBottom(), - cursor.par()->params().pagebreakTop(), + cursor.par()->params().pagebreakTop(), cursor.par()->params().pagebreakBottom(), - VSpace(VSpace::NONE), + VSpace(VSpace::NONE), cursor.par()->params().spaceBottom(), - cursor.par()->params().spacing(), - cursor.par()->params().align(), + cursor.par()->params().spacing(), + cursor.par()->params().align(), cursor.par()->params().labelWidthString(), 0); lt->cursorLeft(bv_); - update(lt, + update(lt, BufferView::SELECT | BufferView::FITCUR | BufferView::CHANGE); @@ -2479,7 +2491,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_DELETE_WORD_BACKWARD: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); lt->deleteWordBackward(bv_); update(lt, @@ -2490,12 +2502,12 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); } break; - + /* -------> Kill to end of line. */ case LFUN_DELETE_LINE_FORWARD: { LyXText * lt = bv_->getLyXText(); - + update(lt, BufferView::SELECT|BufferView::FITCUR); lt->deleteLineForward(bv_); update(lt, @@ -2505,12 +2517,12 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) moveCursorUpdate(false); } break; - + /* -------> Set mark off. */ case LFUN_MARK_OFF: { LyXText * lt = bv_->getLyXText(); - + beforeChange(lt); update(lt, BufferView::SELECT|BufferView::FITCUR); lt->selection.cursor = lt->cursor; @@ -2522,7 +2534,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_MARK_ON: { LyXText * lt = bv_->getLyXText(); - + beforeChange(lt); lt->selection.mark(true); update(lt, BufferView::SELECT|BufferView::FITCUR); @@ -2530,11 +2542,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->getLyXFunc()->setMessage(N_("Mark on")); } break; - + case LFUN_BACKSPACE: { LyXText * lt = bv_->getLyXText(); - + if (!lt->selection.set()) { if (owner_->getIntl()->getTrans().backspace()) { lt->backspace(bv_); @@ -2559,22 +2571,22 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) { // Reverse the effect of LFUN_BREAKPARAGRAPH_SKIP. LyXText * lt = bv_->getLyXText(); - + LyXCursor cursor = lt->cursor; - + if (!lt->selection.set()) { - if (cursor.pos() == 0 - && !(cursor.par()->params().spaceTop() + if (cursor.pos() == 0 + && !(cursor.par()->params().spaceTop() == VSpace (VSpace::NONE))) { - lt->setParagraph + lt->setParagraph (bv_, - cursor.par()->params().lineTop(), + cursor.par()->params().lineTop(), cursor.par()->params().lineBottom(), - cursor.par()->params().pagebreakTop(), + 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().spacing(), + cursor.par()->params().align(), cursor.par()->params().labelWidthString(), 0); update(lt, BufferView::SELECT @@ -2596,7 +2608,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_BREAKPARAGRAPH: { LyXText * lt = bv_->getLyXText(); - + beforeChange(lt); lt->breakParagraph(bv_, 0); update(lt, @@ -2612,7 +2624,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_BREAKPARAGRAPHKEEPLAYOUT: { LyXText * lt = bv_->getLyXText(); - + beforeChange(lt); lt->breakParagraph(bv_, 1); update(lt, @@ -2624,16 +2636,16 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->showState(); break; } - + case LFUN_BREAKPARAGRAPH_SKIP: { // When at the beginning of a paragraph, remove // indentation and add a "defskip" at the top. // Otherwise, do the same as LFUN_BREAKPARAGRAPH. LyXText * lt = bv_->getLyXText(); - + LyXCursor cursor = lt->cursor; - + beforeChange(lt); if (cursor.pos() == 0) { if (cursor.par()->params().spaceTop() == VSpace(VSpace::NONE)) { @@ -2648,7 +2660,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) cursor.par()->params().align(), cursor.par()->params().labelWidthString(), 1); //update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); - } + } } else { lt->breakParagraph(bv_, 0); @@ -2668,14 +2680,14 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_PARAGRAPH_SPACING: { LyXText * lt = bv_->getLyXText(); - + Paragraph * par = lt->cursor.par(); Spacing::Space cur_spacing = par->params().spacing().getSpace(); float cur_value = 1.0; if (cur_spacing == Spacing::Other) { cur_value = par->params().spacing().getValue(); } - + istringstream istr(argument.c_str()); string tmp; @@ -2714,7 +2726,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) } } break; - + case LFUN_INSET_TOGGLE: { LyXText * lt = bv_->getLyXText(); @@ -2724,7 +2736,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) lt->toggleInset(bv_); update(lt, BufferView::SELECT|BufferView::FITCUR); setState(); - } + } break; case LFUN_QUOTE: @@ -2742,7 +2754,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->getDialogs()->createUrl(p.getAsString()); } break; - + case LFUN_INSERT_URL: { InsetCommandParams p; @@ -2755,15 +2767,15 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) updateInset(inset, true); } break; - + case LFUN_INSET_ERT: insertAndEditInset(new InsetERT(buffer_->params)); break; - + case LFUN_INSET_EXTERNAL: insertAndEditInset(new InsetExternal); break; - + case LFUN_INSET_FOOTNOTE: insertAndEditInset(new InsetFoot(buffer_->params)); break; @@ -2806,7 +2818,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) lyxerr << "Non-existent float type: " << argument << endl; } - + } break; @@ -2819,7 +2831,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) insertAndEditInset(new InsetTheorem); break; #endif - + case LFUN_INSET_CAPTION: { // Do we have a locking inset... @@ -2839,7 +2851,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) } } break; - + case LFUN_INSET_TABULAR: { int r = 2; @@ -2867,13 +2879,13 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->getLyXFunc()->setMessage("EOF"); } break; - + case LFUN_GETXY: owner_->getLyXFunc()->setMessage(tostr(bv_->getLyXText()->cursor.x()) + ' ' + tostr(bv_->getLyXText()->cursor.y())); break; - + case LFUN_SETXY: { int x = 0; @@ -2885,26 +2897,26 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) bv_->getLyXText()->setCursorFromCoordinates(bv_, x, y); } break; - + case LFUN_GETLAYOUT: owner_->getLyXFunc()->setMessage(tostr(bv_->getLyXText()->cursor.par()->layout())); break; - + case LFUN_GETFONT: { LyXFont & font = bv_->getLyXText()->current_font; - if (font.shape() == LyXFont::ITALIC_SHAPE) + if (font.shape() == LyXFont::ITALIC_SHAPE) owner_->getLyXFunc()->setMessage("E"); - else if (font.shape() == LyXFont::SMALLCAPS_SHAPE) + else if (font.shape() == LyXFont::SMALLCAPS_SHAPE) owner_->getLyXFunc()->setMessage("N"); - else + else owner_->getLyXFunc()->setMessage("0"); } break; // --- accented characters --------------------------- - + case LFUN_UMLAUT: case LFUN_CIRCUMFLEX: case LFUN_GRAVE: @@ -2935,12 +2947,12 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) | BufferView::CHANGE); } break; - + case LFUN_MATH_MACRO: mathDispatchMathMacro(bv_, argument); break; - case LFUN_MATH_DELIM: + case LFUN_MATH_DELIM: mathDispatchMathDelim(bv_, argument); break; @@ -2960,14 +2972,14 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) mathDispatchMathDisplay(bv_, argument); break; - case LFUN_MATH_MODE: // Open or create an inlined math inset + case LFUN_MATH_MODE: // Open or create an inlined math inset mathDispatchMathMode(bv_, argument); break; - + case LFUN_GREEK: // Insert a single greek letter mathDispatchGreek(bv_, argument); break; - + case LFUN_CITATION_INSERT: { InsetCommandParams p; @@ -2980,18 +2992,18 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) updateInset(inset, true); } break; - + case LFUN_INSERT_BIBTEX: - { + { // ale970405+lasgoutt970425 - // The argument can be up to two tokens separated + // 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 const bibstyle = token(argument, ' ', 1); InsetCommandParams p("BibTeX", db, bibstyle); InsetBibtex * inset = new InsetBibtex(p); - + if (insertInset(inset)) { if (argument.empty()) inset->edit(bv_); @@ -2999,38 +3011,38 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) delete inset; } break; - + // BibTeX data bases case LFUN_BIBDB_ADD: { - InsetBibtex * inset = + InsetBibtex * inset = static_cast(getInsetByCode(Inset::BIBTEX_CODE)); if (inset) { inset->addDatabase(argument); } } break; - + case LFUN_BIBDB_DEL: { - InsetBibtex * inset = + InsetBibtex * inset = static_cast(getInsetByCode(Inset::BIBTEX_CODE)); if (inset) { inset->delDatabase(argument); } } break; - + case LFUN_BIBTEX_STYLE: { - InsetBibtex * inset = + InsetBibtex * inset = static_cast(getInsetByCode(Inset::BIBTEX_CODE)); if (inset) { inset->setOptions(argument); } } break; - + case LFUN_INDEX_CREATE: { InsetCommandParams p("index"); @@ -3044,7 +3056,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) owner_->getDialogs()->createIndex(p.getAsString()); } break; - + case LFUN_INDEX_INSERT: { InsetCommandParams p; @@ -3057,7 +3069,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) updateInset(inset, true); } break; - + case LFUN_INDEX_INSERT_LAST: { string const idxstring(bv_->getLyXText()->getStringToIndex(bv_)); @@ -3066,7 +3078,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) + idxstring + _(("' indexed."))); InsetCommandParams p("index", idxstring); InsetIndex * inset = new InsetIndex(p); - + if (!insertInset(inset)) delete inset; else @@ -3086,13 +3098,12 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_PARENTINSERT: { - lyxerr << "arg " << argument << endl; InsetCommandParams p("lyxparent", argument); Inset * inset = new InsetParent(p, *buffer_); if (!insertInset(inset, "Standard")) delete inset; } - + break; case LFUN_CHILD_INSERT: @@ -3109,7 +3120,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) bv_->owner()->getDialogs()->showInclude(inset); } } - break; + break; case LFUN_FLOAT_LIST: { @@ -3119,7 +3130,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) delete inset; } break; - + case LFUN_THESAURUS_ENTRY: { string arg = argument; @@ -3127,7 +3138,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) if (arg.empty()) { arg = bv_->getLyXText()->selectionAsString(buffer_, false); - + // FIXME if (arg.size() > 100 || arg.empty()) { // Get word or selection @@ -3140,11 +3151,11 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) bv_->owner()->getDialogs()->showThesaurus(arg); } break; - + case LFUN_SELFINSERT: { if (argument.empty()) break; - + /* Automatically delete the currently selected * text and replace it with what is being * typed in now. Depends on lyxrc settings @@ -3152,7 +3163,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) * true (on). */ LyXText * lt = bv_->getLyXText(); - + if (lyxrc.auto_region_delete) { if (lt->selection.set()) { lt->cutSelection(bv_, false, false); @@ -3161,25 +3172,26 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) | BufferView::FITCUR | BufferView::CHANGE); } + workarea_.haveSelection(false); } - + beforeChange(lt); LyXFont const old_font(lt->real_current_font); - + string::const_iterator cit = argument.begin(); string::const_iterator end = argument.end(); for (; cit != end; ++cit) { owner_->getIntl()->getTrans().TranslateAndInsert(*cit, lt); } - + bv_->update(lt, BufferView::SELECT | BufferView::FITCUR | BufferView::CHANGE); - + lt->selection.cursor = lt->cursor; moveCursorUpdate(false); - + // real_current_font.number can change so we need to // update the minibuffer if (old_font != lt->real_current_font) @@ -3196,14 +3208,14 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) string arg; if (!argument.empty()) arg = argument; - else + else arg = lyxrc.date_insert_format; char datetmp[32]; int const datetmp_len = ::strftime(datetmp, 32, arg.c_str(), now_tm); LyXText * lt = bv_->getLyXText(); - + for (int i = 0; i < datetmp_len; i++) { lt->insertChar(bv_, datetmp[i]); update(lt, @@ -3220,7 +3232,7 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument) case LFUN_UNKNOWN_ACTION: owner_->getLyXFunc()->setErrorMessage(N_("Unknown function!")); break; - + default: return false; } // end of switch @@ -3267,10 +3279,10 @@ void BufferView::Pimpl::specialChar(InsetSpecialChar::Kind kind) { if (available()) { LyXText * lt = bv_->getLyXText(); - + hideCursor(); update(lt, BufferView::SELECT|BufferView::FITCUR); - InsetSpecialChar * new_inset = + InsetSpecialChar * new_inset = new InsetSpecialChar(kind); if (!insertInset(new_inset)) delete new_inset; @@ -3293,13 +3305,13 @@ void BufferView::Pimpl::smartQuote() c = ' '; else c = par->getChar(pos - 1); - + hideCursor(); LyXLayout const & style = textclasslist[bv_->buffer()->params.textclass][par->layout()]; - + if (style.pass_thru || (!insertInset(new InsetQuotes(c, bv_->buffer()->params)))) bv_->owner()->getLyXFunc()->dispatch(LFUN_SELFINSERT, "\""); @@ -3314,12 +3326,12 @@ void BufferView::Pimpl::insertAndEditInset(Inset * inset) delete inset; } - + // Open and lock an updatable inset bool BufferView::Pimpl::open_new_inset(UpdatableInset * new_inset, bool behind) { LyXText * lt = bv_->getLyXText(); - + beforeChange(lt); finishUndo(); if (!insertInset(new_inset)) { @@ -3344,7 +3356,7 @@ bool BufferView::Pimpl::insertInset(Inset * inset, string const & lout) // not quite sure if we want this... setCursorParUndo(bv_); freezeUndo(); - + beforeChange(bv_->text); if (!lout.empty()) { update(bv_->text, BufferView::SELECT|BufferView::FITCUR); @@ -3353,7 +3365,7 @@ bool BufferView::Pimpl::insertInset(Inset * inset, string const & lout) if (bv_->text->cursor.par()->size()) { bv_->text->cursorLeft(bv_); - + bv_->text->breakParagraph(bv_); update(bv_->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); } @@ -3373,17 +3385,17 @@ bool BufferView::Pimpl::insertInset(Inset * inset, string const & lout) } bv_->text->setLayout(bv_, lay); - + bv_->text->setParagraph(bv_, 0, 0, 0, 0, VSpace(VSpace::NONE), VSpace(VSpace::NONE), Spacing(), - LYX_ALIGN_LAYOUT, + LYX_ALIGN_LAYOUT, string(), 0); update(bv_->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); } - + bv_->text->insertInset(bv_, inset); update(bv_->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); @@ -3419,7 +3431,7 @@ void BufferView::Pimpl::updateInset(Inset * inset, bool mark_dirty) } } } - + // then check if the inset is a top_level inset (has no owner) // if yes do the update as always otherwise we have to update the // toplevel inset where this inset is inside @@ -3455,13 +3467,13 @@ void BufferView::Pimpl::gotoInset(vector const & codes, bool same_content) { if (!available()) return; - + hideCursor(); beforeChange(bv_->text); update(bv_->text, BufferView::SELECT|BufferView::FITCUR); - + LyXCursor const & cursor = bv_->text->cursor; - + string contents; if (same_content && cursor.par()->isInset(cursor.pos())) { @@ -3471,10 +3483,10 @@ void BufferView::Pimpl::gotoInset(vector const & codes, contents = static_cast(inset)->getContents(); } - - + + if (!bv_->text->gotoNextInset(bv_, codes, contents)) { - if (bv_->text->cursor.pos() + if (bv_->text->cursor.pos() || bv_->text->cursor.par() != bv_->text->ownerParagraph()) { LyXCursor tmp = bv_->text->cursor; bv_->text->cursor.par(bv_->text->ownerParagraph());