* \author André Pönitz
* \author Dekel Tsur
* \author Jürgen Vigna
+ * \author Abdelrazak Younes
*
* Full author contact details are available in file CREDITS.
*/
#include "CutAndPaste.h"
#include "debug.h"
#include "dispatchresult.h"
+#include "errorlist.h"
#include "factory.h"
#include "FloatList.h"
#include "funcrequest.h"
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) {
}
-lyx::frontend::Gui & BufferView::Pimpl::gui() const
-{
- return owner_->gui();
-}
-
-
int BufferView::Pimpl::width() const
{
return width_;
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) {
<< " 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;
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;
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();
void BufferView::Pimpl::resizeCurrentBuffer()
{
lyxerr[Debug::DEBUG] << BOOST_CURRENT_FUNCTION << endl;
- owner_->busy(true);
- owner_->message(_("Formatting document..."));
LyXText * text = bv_->text();
if (!text)
text->init(bv_);
update();
-
switchKeyMap();
- owner_->busy(false);
-
- // Reset the "Formatting..." message
- owner_->clearMessage();
}
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;
t.setCursorFromCoordinates(cur, 0, newy);
}
}
- owner_->updateLayoutChoice();
}
}
-void BufferView::Pimpl::workAreaKeyPress(LyXKeySymPtr key,
- key_modifier::state state)
-{
- owner_->getLyXFunc().processKeySym(key, state);
-}
-
-
void BufferView::Pimpl::selectionRequested()
{
static string sel;
height_ = height;
if (buffer_ && widthChange) {
- // The visible LyXView need a resize
+ // The WorkArea content needs a resize
resizeCurrentBuffer();
}
if (widthChange || heightChange)
update();
-
- owner_->updateLayoutChoice();
}
bool const need_second_step =
(flags & (Update::Force | Update::FitCursor | Update::MultiParSel))
&& (fitCursor() || multiParSel());
-
+
return need_second_step;
}
string res;
Buffer buf("", false);
- buf.error.connect(boost::bind(&LyXView::addError, 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();
}
// 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;
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;
}
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:
case LFUN_BIBTEX_DATABASE_ADD:
case LFUN_BIBTEX_DATABASE_DEL:
case LFUN_WORDS_COUNT:
+ case LFUN_NEXT_INSET_TOGGLE:
flag.enabled(true);
break;
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;
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;
}