]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView_pimpl.C
fix linking problem with boost
[lyx.git] / src / BufferView_pimpl.C
index 01bbd70f642223418ad6b9b5a2931c54b1725266..a191d219d9d23c57737d4c10d78f9c0a24ab7080 100644 (file)
 #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<int>(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<InsetBibtex*>(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<InsetBibtex*>(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;
        }