void BufferView::Pimpl::addError(ErrorItem const & ei)
{
errorlist_.push_back(ei);
+}
+
+
+void BufferView::Pimpl::connectBuffer(Buffer & buf)
+{
+ if (errorConnection_.connected())
+ disconnectBuffer();
+
+ errorConnection_ = buf.error.connect(boost::bind(&BufferView::Pimpl::addError, this, _1));
+ messageConnection_ = buf.message.connect(boost::bind(&LyXView::message, owner_, _1));
+ busyConnection_ = buf.busy.connect(boost::bind(&LyXView::busy, owner_, _1));
+}
+
+void BufferView::Pimpl::disconnectBuffer()
+{
+ errorConnection_.disconnect();
+ messageConnection_.disconnect();
+ busyConnection_.disconnect();
+}
+
+
+bool BufferView::Pimpl::newFile(string const & filename,
+ string const & tname,
+ bool isNamed)
+{
+ Buffer * b = ::newFile(filename, tname, isNamed);
+ buffer(b);
+ return true;
}
}
Buffer * b = bufferlist.newBuffer(s);
- //attach to the error signal in the buffer
- b->parseError.connect(boost::bind(&BufferView::Pimpl::addError,
- this, _1));
-
- bool loaded = ::loadLyXFile(b, s);
+ connectBuffer(*b);
- if (! loaded) {
+ if (! ::loadLyXFile(b, s)) {
bufferlist.release(b);
- string text = bformat(_("The document %1$s does "
- "not yet exist.\n\n"
- "Do you want to create "
+ string text = bformat(_("The document %1$s does not yet "
+ "exist.\n\nDo you want to create "
"a new document?"), s);
int const ret = Alert::prompt(_("Create new document?"),
text, 0, 1, _("&Create"), _("Cancel"));
- if (ret == 0)
- b = newFile(s, string(), true);
- else
+ if (ret != 0)
return false;
-
}
buffer(b);
if (tolastfiles)
lastfiles->newFile(b->fileName());
- if (loaded)
- bv_->showErrorList(_("Parse"));
+ bv_->showErrorList(_("Parse"));
return true;
}
+
WorkArea & BufferView::Pimpl::workarea() const
{
return *workarea_.get();
lyxerr[Debug::INFO] << "Setting buffer in BufferView ("
<< b << ')' << endl;
if (buffer_) {
+ disconnectBuffer();
buffer_->delUser(bv_);
// Put the old text into the TextCache, but
if (buffer_) {
lyxerr[Debug::INFO] << "Buffer addr: " << buffer_ << endl;
buffer_->addUser(bv_);
+ connectBuffer(*buffer_);
// If we don't have a text object for this, we make one
if (bv_->text == 0) {
mark_set = bv_->text->selection.mark();
the_locking_inset = bv_->theLockingInset();
buffer_->resizeInsets(bv_);
- // I don't think the delete and new are necessary here we
- // just could call only init! (Jug 20020419)
- delete bv_->text;
- bv_->text = new LyXText(bv_);
bv_->text->init(bv_);
} else {
+ lyxerr << "text not available!\n";
// See if we have a text in TextCache that fits
// the new buffer_ with the correct width.
bv_->text = textcache.findFit(buffer_, workarea().workWidth());
if (bv_->text) {
+ lyxerr << "text in cache!\n";
if (lyxerr.debugging()) {
lyxerr << "Found a LyXText that fits:\n";
textcache.show(lyxerr, make_pair(buffer_, make_pair(workarea().workWidth(), bv_->text)));
buffer_->resizeInsets(bv_);
} else {
+ lyxerr << "no text in cache!\n";
bv_->text = new LyXText(bv_);
+ buffer_->resizeInsets(bv_);
bv_->text->init(bv_);
- //buffer_->resizeInsets(bv_);
}
par = bv_->text->ownerParagraphs().end();
owner_->message(bformat(_("Document %1$s inserted."), disp_fn));
else
owner_->message(bformat(_("Could not insert document %1$s"), disp_fn));
+
+#warning remove this if update() is gone
+ bv_->text->fullRebreak();
}