#include "bufferparams.h"
#include "coordcache.h"
#include "cursor.h"
+#include "CutAndPaste.h"
#include "debug.h"
#include "dispatchresult.h"
#include "factory.h"
}
+bool BufferView::Pimpl::multiParSel()
+{
+ if (!cursor_.selection())
+ return false;
+ bool ret = multiparsel_cache_;
+ multiparsel_cache_ = cursor_.selBegin().pit() != cursor_.selEnd().pit();
+ // Either this, or previous selection spans paragraphs
+ return ret || multiparsel_cache_;
+}
+
+
void BufferView::Pimpl::update(Update::flags flags)
{
lyxerr[Debug::DEBUG]
// First drawing step
ViewMetricsInfo vi = metrics(flags & Update::SinglePar);
- bool forceupdate(flags & Update::Force);
+ bool forceupdate(flags & (Update::Force | Update::SinglePar));
if ((flags & Update::FitCursor) && fitCursor()) {
forceupdate = true;
vi = metrics();
}
+ if ((flags & Update::MultiParSel) && multiParSel()) {
+ forceupdate = true;
+ vi = metrics();
+ }
if (forceupdate) {
// Second drawing step
screen().redraw(*bv_, vi);
void BufferView::Pimpl::MenuInsertLyXFile(string const & filenm)
{
+ BOOST_ASSERT(cursor_.inTexted());
string filename = filenm;
if (filename.empty()) {
string const disp_fn = MakeDisplayPath(filename);
owner_->message(bformat(_("Inserting document %1$s..."), disp_fn));
- cursor_.clearSelection();
- bv_->getLyXText()->breakParagraph(cursor_);
-
- BOOST_ASSERT(cursor_.inTexted());
+ string res;
+ Buffer buf("", false);
+ buf.error.connect(boost::bind(&BufferView::Pimpl::addError, this, _1));
+ if (::loadLyXFile(&buf, MakeAbsPath(filename))) {
+ lyx::cap::pasteParagraphList(cursor_, buf.paragraphs(),
+ buf.params().textclass);
+ res = _("Document %1$s inserted.");
+ } else
+ res = _("Could not insert document %1$s");
- string const fname = MakeAbsPath(filename);
- bool const res = buffer_->readFile(fname, cursor_.pit());
+ owner_->message(bformat(res, disp_fn));
+ bv_->showErrorList(_("Document insertion"));
resizeCurrentBuffer();
-
- string s = res ? _("Document %1$s inserted.")
- : _("Could not insert document %1$s");
- owner_->message(bformat(s, disp_fn));
}
buffer_->undostack().clear();
} else {
cursor_.setCursor(doc_iterator_begin(buffer_->inset()));
- bool const found = lyx::find::findNextChange(bv_);
- if (found) {
- // We reset the cursor to the start of the
- // document, since the Changes Dialog is going
- // to search for the next change anyway.
- cursor_.setCursor(doc_iterator_begin(buffer_->inset()));
+ if (lyx::find::findNextChange(bv_)) {
owner_->getDialogs().show("changes");
return;
}
if (cur.result().update())
update(Update::FitCursor | Update::Force);
else
- update();
+ update(Update::FitCursor | Update::MultiParSel);
}
// See workAreaKeyPress
case LFUN_FILE_INSERT:
case LFUN_FILE_INSERT_ASCII_PARA:
case LFUN_FILE_INSERT_ASCII:
+ // FIXME: Actually, these LFUNS should be moved to LyXText
+ flag.enabled(cursor_.inTexted());
+ break;
case LFUN_FONT_STATE:
case LFUN_INSERT_LABEL:
case LFUN_BOOKMARK_SAVE:
}
case LFUN_MERGE_CHANGES:
- owner_->getDialogs().show("changes");
+ if (lyx::find::findNextChange(bv_))
+ owner_->getDialogs().show("changes");
break;
case LFUN_ACCEPT_ALL_CHANGES: {