]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView_pimpl.C
revert recent change to development/FORMAT (don't change history)
[lyx.git] / src / BufferView_pimpl.C
index 2c4e1e7d4256cfd0e2f653ec23eb04b03abcef26..eeefd6d4f16e2b5d1262f9b6e0dae5e532626ad0 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"
@@ -189,14 +191,17 @@ bool BufferView::Pimpl::loadLyXFile(string const & filename, bool tolastfiles)
                int const ret = Alert::prompt(_("Create new document?"),
                         text, 0, 1, _("&Create"), _("Cancel"));
 
-               if (ret == 0)
+               if (ret == 0) {
                        b = newFile(s, string(), true);
-               else
+                       if (!b)
+                               return false;
+               } else
                        return false;
        }
 
        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) {
@@ -227,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_;
@@ -261,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) {
@@ -268,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;
@@ -279,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;
@@ -299,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();
@@ -338,8 +332,6 @@ string BufferView::Pimpl::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)
@@ -347,12 +339,7 @@ void BufferView::Pimpl::resizeCurrentBuffer()
 
        text->init(bv_);
        update();
-
        switchKeyMap();
-       owner_->busy(false);
-
-       // Reset the "Formatting..." message
-       owner_->clearMessage();
 }
 
 
@@ -437,10 +424,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;
@@ -466,7 +455,6 @@ void BufferView::Pimpl::scrollDocView(int value)
                        t.setCursorFromCoordinates(cur, 0, newy);
                }
        }
-       owner_->updateLayoutChoice();
 }
 
 
@@ -492,13 +480,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;
@@ -546,14 +527,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();
 }
 
 
@@ -615,7 +594,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;
 }
 
@@ -787,17 +766,18 @@ void BufferView::Pimpl::menuInsertLyXFile(string const & filenm)
 
        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"));
+       buffer_->errors("Parse");
        resizeCurrentBuffer();
 }
 
@@ -840,12 +820,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;
 
@@ -894,16 +868,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;
 }
 
@@ -935,7 +899,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:
@@ -947,6 +910,7 @@ FuncStatus BufferView::Pimpl::getStatus(FuncRequest const & cmd)
        case LFUN_BIBTEX_DATABASE_ADD:
        case LFUN_BIBTEX_DATABASE_DEL:
        case LFUN_WORDS_COUNT:
+       case LFUN_NEXT_INSET_TOGGLE:
                flag.enabled(true);
                break;
 
@@ -1115,10 +1079,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;
@@ -1263,6 +1223,30 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & cmd)
                buffer_->params().compressed = !buffer_->params().compressed;
                break;
 
+       case LFUN_NEXT_INSET_TOGGLE: {
+               // this is the real function we want to invoke
+               FuncRequest tmpcmd = FuncRequest(LFUN_INSET_TOGGLE, cmd.origin);
+               // if there is an inset at cursor, see whether it
+               // wants to toggle.
+               InsetBase * inset = cur.nextInset();
+               if (inset && inset->isActive()) {
+                       LCursor tmpcur = cur;
+                       tmpcur.pushLeft(*inset);
+                       inset->dispatch(tmpcur, tmpcmd);
+                       if (tmpcur.result().dispatched()) {
+                               cur.dispatched();
+                       }
+               }
+               // if it did not work, try the underlying inset.
+               if (!cur.result().dispatched())
+                       cur.dispatch(tmpcmd);
+
+               if (cur.result().dispatched()) 
+                       cur.clearSelection();
+               
+               break;
+       }
+
        default:
                return false;
        }