]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView_pimpl.C
minimal effort implementation of:
[lyx.git] / src / BufferView_pimpl.C
index d1c7dd04a7d1b8ef0a12fcf7c939a44914975d8b..a1fc04b408b4608db3e96008a0fb279cb3f44de3 100644 (file)
@@ -12,6 +12,7 @@
  * \author André Pönitz
  * \author Dekel Tsur
  * \author Jürgen Vigna
+ * \author Abdelrazak Younes
  *
  * Full author contact details are available in file CREDITS.
  */
@@ -28,6 +29,7 @@
 #include "CutAndPaste.h"
 #include "debug.h"
 #include "dispatchresult.h"
+#include "errorlist.h"
 #include "factory.h"
 #include "FloatList.h"
 #include "funcrequest.h"
@@ -198,7 +200,8 @@ bool BufferView::Pimpl::loadLyXFile(string const & filename, bool tolastfiles)
        }
 
        setBuffer(b);
-       owner_->showErrorList(_("Parse"));
+       // Send the "errors" signal in case of parsing errors
+       b->errors("Parse");
 
        // scroll to the position when the file was last closed
        if (lyxrc.use_lastfilepos) {
@@ -229,12 +232,6 @@ bool BufferView::Pimpl::loadLyXFile(string const & filename, bool tolastfiles)
 }
 
 
-lyx::frontend::Gui & BufferView::Pimpl::gui() const
-{
-       return owner_->gui();
-}
-
-
 int BufferView::Pimpl::width() const
 {
        return width_;
@@ -263,6 +260,12 @@ void BufferView::Pimpl::setBuffer(Buffer * b)
                        boost::tie(cursor_.pit(), cursor_.pos()) );
        }
 
+       // If we're quitting lyx, don't bother updating stuff
+       if (quitting) {
+               buffer_ = 0;
+               return;
+       }
+
        // If we are closing current buffer, switch to the first in
        // buffer list.
        if (!b) {
@@ -270,7 +273,6 @@ void BufferView::Pimpl::setBuffer(Buffer * b)
                                    << " No Buffer!" << endl;
                // We are closing the buffer, use the first buffer as current
                buffer_ = bufferlist.first();
-               owner_->getDialogs().hideBufferDependent();
        } else {
                // Set current buffer
                buffer_ = b;
@@ -281,11 +283,6 @@ void BufferView::Pimpl::setBuffer(Buffer * b)
        anchor_ref_ = 0;
        offset_ref_ = 0;
 
-
-       // If we're quitting lyx, don't bother updating stuff
-       if (quitting)
-               return;
-
        if (buffer_) {
                lyxerr[Debug::INFO] << BOOST_CURRENT_FUNCTION
                                    << "Buffer addr: " << buffer_ << endl;
@@ -301,11 +298,6 @@ void BufferView::Pimpl::setBuffer(Buffer * b)
                        cursor_.setCursor(buffer_->getCursor().asDocIterator(&(buffer_->inset())));
                        cursor_.setSelection();
                }
-
-               // Buffer-dependent dialogs should be updated or
-               // hidden. This should go here because some dialogs (eg ToC)
-               // require bv_->text.
-               owner_->getDialogs().updateBufferDependent(true);
        }
 
        update();
@@ -314,34 +306,10 @@ void BufferView::Pimpl::setBuffer(Buffer * b)
                lyx::graphics::Previews::get().generateBufferPreviews(*buffer_);
 }
 
-string BufferView::Pimpl::firstLayout()
-{
-       string firstlayout;
-
-       // This is done after the layout combox has been populated
-       if (buffer_) {
-               size_t i = cursor_.depth() - 1;
-               // we know we'll eventually find a paragraph
-               while (true) {
-                       CursorSlice const & slice = cursor_[i];
-                       if (!slice.inset().inMathed()) {
-                               LyXLayout_ptr const layout = slice.paragraph().layout();
-                               firstlayout = layout->name();
-                               break;
-                       }
-                       BOOST_ASSERT(i>0);
-                       --i;
-               }
-       }
-       return firstlayout;
-}
-
 
 void BufferView::Pimpl::resizeCurrentBuffer()
 {
        lyxerr[Debug::DEBUG] << BOOST_CURRENT_FUNCTION << endl;
-       owner_->busy(true);
-       owner_->message(_("Formatting document..."));
 
        LyXText * text = bv_->text();
        if (!text)
@@ -349,12 +317,7 @@ void BufferView::Pimpl::resizeCurrentBuffer()
 
        text->init(bv_);
        update();
-
        switchKeyMap();
-       owner_->busy(false);
-
-       // Reset the "Formatting..." message
-       owner_->clearMessage();
 }
 
 
@@ -439,10 +402,12 @@ void BufferView::Pimpl::scrollDocView(int value)
        t.redoParagraph(anchor_ref_);
        int const h = t.getPar(anchor_ref_).height();
        offset_ref_ = int((bar * t.paragraphs().size() - anchor_ref_) * h);
-       update();
+}
 
-       if (!lyxrc.cursor_follows_scrollbar)
-               return;
+
+void BufferView::Pimpl::setCursorFromScrollbar()
+{
+       LyXText & t = *bv_->text();
 
        int const height = 2 * defaultRowHeight();
        int const first = height;
@@ -468,7 +433,6 @@ void BufferView::Pimpl::scrollDocView(int value)
                        t.setCursorFromCoordinates(cur, 0, newy);
                }
        }
-       owner_->updateLayoutChoice();
 }
 
 
@@ -494,13 +458,6 @@ void BufferView::Pimpl::scroll(int /*lines*/)
 }
 
 
-void BufferView::Pimpl::workAreaKeyPress(LyXKeySymPtr key,
-                                        key_modifier::state state)
-{
-       owner_->getLyXFunc().processKeySym(key, state);
-}
-
-
 void BufferView::Pimpl::selectionRequested()
 {
        static string sel;
@@ -548,14 +505,12 @@ void BufferView::Pimpl::workAreaResize(int width, int height)
        height_ = height;
 
        if (buffer_ && widthChange) {
-               // The visible LyXView need a resize
+               // The WorkArea content needs a resize
                resizeCurrentBuffer();
        }
 
        if (widthChange || heightChange)
                update();
-
-       owner_->updateLayoutChoice();
 }
 
 
@@ -617,7 +572,7 @@ bool BufferView::Pimpl::update(Update::flags flags)
        bool const need_second_step =
                (flags & (Update::Force | Update::FitCursor | Update::MultiParSel))
                && (fitCursor() || multiParSel());
-       
+
        return need_second_step;
 }
 
@@ -653,7 +608,8 @@ void BufferView::Pimpl::savePosition(unsigned int i)
                                      cursor_.paragraph().id(),
                                      cursor_.pos());
        if (i > 0)
-               owner_->message(bformat(_("Saved bookmark %1$d"), i));
+               // emit message signal.
+               bv_->message(bformat(_("Saved bookmark %1$d"), i));
 }
 
 
@@ -686,7 +642,8 @@ void BufferView::Pimpl::restorePosition(unsigned int i)
        bv_->setCursor(makeDocIterator(par, min(par->size(), saved_positions[i].par_pos)));
 
        if (i > 0)
-               owner_->message(bformat(_("Moved to bookmark %1$d"), i));
+               // emit message signal.
+               bv_->message(bformat(_("Moved to bookmark %1$d"), i));
 }
 
 
@@ -775,7 +732,8 @@ void BufferView::Pimpl::menuInsertLyXFile(string const & filenm)
 
                // check selected filename
                if (filename.empty()) {
-                       owner_->message(_("Canceled."));
+                       // emit message signal.
+                       bv_->message(_("Canceled."));
                        return;
                }
        }
@@ -785,21 +743,24 @@ void BufferView::Pimpl::menuInsertLyXFile(string const & filenm)
        filename = fileSearch(string(), filename, "lyx");
 
        string const disp_fn = makeDisplayPath(filename);
-       owner_->message(bformat(_("Inserting document %1$s..."), disp_fn));
+       // emit message signal.
+       bv_->message(bformat(_("Inserting document %1$s..."), disp_fn));
 
        string res;
        Buffer buf("", false);
-       // FIXME: is there a need for something like that?
-       //buf.errors.connect(boost::bind(&LyXView::showErrorList, owner_, _1));
        if (::loadLyXFile(&buf, makeAbsPath(filename))) {
+               ErrorList & el = buffer_->errorList("Parse");
+               // Copy the inserted document error list into the current buffer one.
+               el = buf.errorList("Parse");
                lyx::cap::pasteParagraphList(cursor_, buf.paragraphs(),
-                                            buf.params().textclass);
+                                            buf.params().textclass, el);
                res = _("Document %1$s inserted.");
        } else
                res = _("Could not insert document %1$s");
 
-       owner_->message(bformat(res, disp_fn));
-       owner_->showErrorList(_("Document insertion"));
+       // emit message signal.
+       bv_->message(bformat(res, disp_fn));
+       buffer_->errors("Parse");
        resizeCurrentBuffer();
 }
 
@@ -842,12 +803,6 @@ bool BufferView::Pimpl::workAreaDispatch(FuncRequest const & cmd0)
        // LFUN_FILE_OPEN generated by drag-and-drop.
        FuncRequest cmd = cmd0;
 
-       // Handle drag&drop
-       if (cmd.action == LFUN_FILE_OPEN) {
-               owner_->dispatch(cmd);
-               return true;
-       }
-
        if (!buffer_)
                return false;
 
@@ -896,16 +851,6 @@ bool BufferView::Pimpl::workAreaDispatch(FuncRequest const & cmd0)
                        update(Update::FitCursor | Update::MultiParSel);
        }
 
-       // Skip these when selecting
-       if (cmd.action != LFUN_MOUSE_MOTION) {
-               owner_->updateLayoutChoice();
-               owner_->updateToolbars();
-       }
-
-       // Slight hack: this is only called currently when we
-       // clicked somewhere, so we force through the display
-       // of the new status here.
-       owner_->clearMessage();
        return true;
 }
 
@@ -937,7 +882,6 @@ FuncStatus BufferView::Pimpl::getStatus(FuncRequest const & cmd)
        case LFUN_OUTLINE_DOWN:
        case LFUN_OUTLINE_IN:
        case LFUN_OUTLINE_OUT:
-       case LFUN_ERROR_NEXT:
        case LFUN_NOTE_NEXT:
        case LFUN_REFERENCE_NEXT:
        case LFUN_WORD_FIND:
@@ -1118,10 +1062,6 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & cmd)
                updateLabels(*buffer_);
                break;
 
-       case LFUN_ERROR_NEXT:
-               bv_funcs::gotoInset(bv_, InsetBase::ERROR_CODE, false);
-               break;
-
        case LFUN_NOTE_NEXT:
                bv_funcs::gotoInset(bv_, InsetBase::NOTE_CODE, false);
                break;