X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView_pimpl.C;h=a191d219d9d23c57737d4c10d78f9c0a24ab7080;hb=b0babedcb7a9f4c737540d8ac7007b12ff5d979b;hp=01bbd70f642223418ad6b9b5a2931c54b1725266;hpb=eb395d9d313c1bc07ff48b47e080442f095dc97a;p=lyx.git diff --git a/src/BufferView_pimpl.C b/src/BufferView_pimpl.C index 01bbd70f64..a191d219d9 100644 --- a/src/BufferView_pimpl.C +++ b/src/BufferView_pimpl.C @@ -41,21 +41,17 @@ #include "ParagraphParameters.h" #include "undo_funcs.h" #include "funcrequest.h" -#include "box.h" #include "insets/insetbib.h" #include "insets/insettext.h" -#include "insets/inseturl.h" #include "insets/insetlatexaccent.h" #include "insets/insettoc.h" -#include "insets/insetref.h" -#include "insets/insetparent.h" #include "insets/insetindex.h" +#include "insets/insetref.h" #include "insets/insetinclude.h" #include "insets/insetcite.h" #include "insets/insetgraphics.h" #include "insets/insetmarginal.h" -#include "insets/insetcaption.h" #include "insets/insetfloatlist.h" #include "mathed/formulabase.h" @@ -104,71 +100,6 @@ boost::signals::connection selectioncon; boost::signals::connection lostcon; - /** - * Return the on-screen dimensions of the inset at the cursor. - * Pre-condition: the cursor must be at an inset. - */ -Box insetDimensions(BufferView * bv, LyXText const & text, - LyXCursor const & cursor) -{ - Paragraph /*const*/ & par = *cursor.par(); - pos_type const pos = cursor.pos(); - - lyx::Assert(par.getInset(pos)); - - Inset const & inset(*par.getInset(pos)); - - LyXFont const & font = text.getFont(bv->buffer(), &par, pos); - - int const width = inset.width(bv, font); - int const inset_x = font.isVisibleRightToLeft() - ? (cursor.ix() - width) : cursor.ix(); - - return Box( - inset_x + inset.scroll(), - inset_x + width, - cursor.iy() - inset.ascent(bv, font), - cursor.iy() + inset.descent(bv, font)); -} - - -/** - * check if the given co-ordinates are inside an inset at the - * given cursor, if one exists. If so, the inset is returned, - * and the co-ordinates are made relative. Otherwise, 0 is returned. - */ -Inset * checkInset(BufferView * bv, LyXText const & text, - LyXCursor const & cursor, int & x, int & y) -{ - pos_type const pos = cursor.pos(); - Paragraph /*const*/ & par(*cursor.par()); - - if (pos >= par.size() || !par.isInset(pos)) { - return 0; - } - - Inset /*const*/ * inset = par.getInset(pos); - - if (!isEditableInset(inset)) - return 0; - - Box b = insetDimensions(bv, text, cursor); - - if (!b.contained(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.iy(); - - return inset; -} - } // anon namespace @@ -366,6 +297,8 @@ int BufferView::Pimpl::resizeCurrentBuffer() // bv_->text->owner(bv_); if (lyxerr.debugging()) textcache.show(lyxerr, "resizeCurrentBuffer"); + + buffer_->resizeInsets(bv_); } else { bv_->text = new LyXText(bv_); bv_->text->init(bv_); @@ -432,13 +365,13 @@ void BufferView::Pimpl::scrollDocView(int value) { lyxerr[Debug::GUI] << "scrollDocView of " << value << endl; - if (!buffer_) return; + if (!buffer_) + return; screen().draw(bv_->text, bv_, value); - if (!lyxrc.cursor_follows_scrollbar) { + if (!lyxrc.cursor_follows_scrollbar) return; - } LyXText * vbt = bv_->text; @@ -453,19 +386,26 @@ void BufferView::Pimpl::scrollDocView(int value) } -int BufferView::Pimpl::scroll(long time) +void BufferView::Pimpl::scroll(int lines) { - if (!buffer_) - return 0; + if (!buffer_) { + return; + } LyXText const * t = bv_->text; + int const line_height = t->defaultHeight(); + + // The new absolute coordinate + int new_first_y = t->first_y + lines * line_height; + + // Restrict to a valid value + new_first_y = std::min(t->height - 4 * line_height, new_first_y); + new_first_y = std::max(0, new_first_y); - double const diff = t->defaultHeight() - + double(time) * double(time) * 0.125; + scrollDocView(new_first_y); - scrollDocView(int(diff)); + // Update the scrollbar. workarea().setScrollbarParams(t->height, t->first_y, t->defaultHeight()); - return 0; } @@ -514,37 +454,6 @@ void BufferView::Pimpl::selectionLost() } - -Inset * BufferView::Pimpl::checkInsetHit(LyXText * text, int & x, int & y) -{ - int y_tmp = y + text->first_y; - - LyXCursor cursor; - text->setCursorFromCoordinates(bv_, cursor, x, y_tmp); - - Inset * inset = checkInset(bv_, *text, cursor, x, y_tmp); - - if (inset) { - y = y_tmp; - return inset; - } - - // look at previous position - if (cursor.pos() == 0) { - return 0; - } - - // move back one - text->setCursor(bv_, cursor, cursor.par(), cursor.pos() - 1, true); - - inset = checkInset(bv_, *text, cursor, x, y_tmp); - if (inset) { - y = y_tmp; - } - return inset; -} - - void BufferView::Pimpl::workAreaResize() { static int work_area_width; @@ -696,10 +605,6 @@ void BufferView::Pimpl::cursorToggle() return; } - /* FIXME */ - extern void reapSpellchecker(void); - reapSpellchecker(); - if (!bv_->theLockingInset()) { screen().cursorToggle(bv_); } else { @@ -735,7 +640,7 @@ void BufferView::Pimpl::savePosition(unsigned int i) if (i > 0) { ostringstream str; str << _("Saved bookmark") << ' ' << i; - owner_->message(str.str().c_str()); + owner_->message(STRCONV(str.str())); } } @@ -767,7 +672,7 @@ void BufferView::Pimpl::restorePosition(unsigned int i) if (i > 0) { ostringstream str; str << _("Moved to bookmark") << ' ' << i; - owner_->message(str.str().c_str()); + owner_->message(STRCONV(str.str())); } } @@ -976,18 +881,18 @@ void BufferView::Pimpl::MenuInsertLyXFile(string const & filen) ostringstream s1; s1 << _("Inserting document") << ' ' << disp_fn << " ..."; - owner_->message(s1.str().c_str()); + owner_->message(STRCONV(s1.str())); bool const res = bv_->insertLyXFile(filename); if (res) { ostringstream str; str << _("Document") << ' ' << disp_fn << ' ' << _("inserted."); - owner_->message(str.str().c_str()); + owner_->message(STRCONV(str.str())); } else { ostringstream str; str << _("Could not insert document") << ' ' << disp_fn; - owner_->message(str.str().c_str()); + owner_->message(STRCONV(str.str())); } } @@ -1002,20 +907,14 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & ev) << " button[" << ev.button() << "]" << endl; + // e.g. Qt mouse press when no buffer + if (!buffer_) + return false; + LyXTextClass const & tclass = buffer_->params.getLyXTextClass(); switch (ev.action) { - case LFUN_TOC_INSERT: - { - InsetCommandParams p; - p.setCmdName("tableofcontents"); - Inset * inset = new InsetTOC(p); - if (!insertInset(inset, tclass.defaultLayoutName())) - delete inset; - break; - } - case LFUN_SCROLL_INSET: // this is not handled here as this function is only active // if we have a locking_inset and that one is (or contains) @@ -1173,52 +1072,6 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & ev) } break; - case LFUN_HTMLURL: - case LFUN_URL: - { - InsetCommandParams p; - if (ev.action == LFUN_HTMLURL) - p.setCmdName("htmlurl"); - else - p.setCmdName("url"); - owner_->getDialogs().createUrl(p.getAsString()); - } - break; - - case LFUN_INSERT_URL: - { - InsetCommandParams p; - p.setFromString(ev.argument); - - InsetUrl * inset = new InsetUrl(p); - if (!insertInset(inset)) - delete inset; - else - updateInset(inset, true); - } - break; - - case LFUN_INSET_CAPTION: - { - // Do we have a locking inset... - if (bv_->theLockingInset()) { - lyxerr << "Locking inset code: " - << static_cast(bv_->theLockingInset()->lyxCode()); - InsetCaption * new_inset = - new InsetCaption(buffer_->params); - new_inset->setOwner(bv_->theLockingInset()); - new_inset->setAutoBreakRows(true); - new_inset->setDrawFrame(0, InsetText::LOCKED); - new_inset->setFrameColor(0, LColor::captionframe); - if (insertInset(new_inset)) - new_inset->edit(bv_); - else - delete new_inset; - } - } - break; - - // --- accented characters --------------------------- case LFUN_UMLAUT: @@ -1271,8 +1124,11 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & ev) InsetCitation * inset = new InsetCitation(p); if (!insertInset(inset)) delete inset; - else + else { + inset->setLoadingBuffer(bv_->buffer(), false); updateInset(inset, true); + } + } break; @@ -1312,9 +1168,8 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & ev) { InsetBibtex * inset = static_cast(getInsetByCode(Inset::BIBTEX_CODE)); - if (inset) { + if (inset) inset->delDatabase(ev.argument); - } } break; @@ -1322,56 +1177,16 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & ev) { InsetBibtex * inset = static_cast(getInsetByCode(Inset::BIBTEX_CODE)); - if (inset) { + if (inset) inset->setOptions(ev.argument); - } - } - break; - - case LFUN_INDEX_INSERT: - { - string entry = ev.argument; - if (entry.empty()) - entry = bv_->getLyXText()->getStringToIndex(bv_); - - if (entry.empty()) { - owner_->getDialogs().createIndex(); - break; - } - - InsetIndex * inset = new InsetIndex(InsetCommandParams("index", entry)); - - if (!insertInset(inset)) { - delete inset; - } else { - updateInset(inset, true); - } - } - break; - - case LFUN_INDEX_PRINT: - { - InsetCommandParams p("printindex"); - Inset * inset = new InsetPrintIndex(p); - if (!insertInset(inset, tclass.defaultLayoutName())) - delete inset; } break; - case LFUN_PARENTINSERT: - { - InsetCommandParams p("lyxparent", ev.argument); - Inset * inset = new InsetParent(p, *buffer_); - if (!insertInset(inset, tclass.defaultLayoutName())) - delete inset; - } - - break; - case LFUN_CHILD_INSERT: { InsetInclude::Params p; - p.cparams.setFromString(ev.argument); + if (!ev.argument.empty()) + p.cparams.setFromString(ev.argument); p.masterFilename_ = buffer_->fileName(); InsetInclude * inset = new InsetInclude(p); @@ -1434,7 +1249,7 @@ bool BufferView::Pimpl::insertInset(Inset * inset, string const & lout) // inset there otherwise this is a illegal function now if (bv_->theLockingInset()) { if (bv_->theLockingInset()->insetAllowed(inset)) - return bv_->theLockingInset()->insertInset(bv_, inset); + return bv_->theLockingInset()->insertInset(bv_, inset); return false; }