void LyXFunc::setLyXView(LyXView * lv)
{
- if (!quitting && lyx_view_ && lyx_view_->view() && lyx_view_ != lv)
+ if (lyx_view_ && lyx_view_->view() && lyx_view_ != lv)
// save current selection to the selection buffer to allow
// middle-button paste in another window
cap::saveSelection(lyx_view_->view()->cursor());
view()->processUpdateFlags(Update::FitCursor);
}
-
+//FIXME: bookmark handling is a frontend issue. This code should be transferred
+// to GuiView and be GuiView and be window dependent.
void LyXFunc::gotoBookmark(unsigned int idx, bool openFile, bool switchToBuffer)
{
BOOST_ASSERT(lyx_view_);
dispatch(FuncRequest(LFUN_SELF_INSERT, arg,
FuncRequest::KEYBOARD));
LYXERR(Debug::KEY, "SelfInsert arg[`" << to_utf8(arg) << "']");
- lyx_view_->updateCompletion(true, true);
}
} else {
dispatch(func);
if (!lyx_view_)
return;
- if (func.action == LFUN_CHAR_DELETE_BACKWARD)
- // backspace is not a self-insertion. But it
- // still should not hide the completion popup.
- // FIXME: more clever way to detect those movements
- lyx_view_->updateCompletion(false, true);
- else
- lyx_view_->updateCompletion(false, false);
}
if (lyx_view_)
}
-void loadTextClass(string const & name, string const & buf_path)
+bool loadLayoutFile(string const & name, string const & buf_path)
{
- pair<bool, BaseClassIndex> const tc_pair =
- baseclasslist.numberOfClass(name);
-
- if (!tc_pair.first) {
+ if (!BaseClassList::get().haveClass(name)) {
lyxerr << "Document class \"" << name
<< "\" does not exist."
<< endl;
- return;
+ return false;
}
- BaseClassIndex const tc = tc_pair.second;
-
- if (!baseclasslist[tc].load(buf_path)) {
+ LayoutFile & tc = BaseClassList::get()[name];
+ if (!tc.load(buf_path)) {
docstring s = bformat(_("The document class %1$s."
- "could not be loaded."),
- from_utf8(baseclasslist[tc].name()));
+ "could not be loaded."), from_utf8(name));
Alert::error(_("Could not load class"), s);
+ return false;
}
+ return true;
}
break;
case LFUN_BUFFER_CLOSE:
- closeBuffer();
+ lyx_view_->closeBuffer();
updateFlags = Update::None;
break;
Buffer * buffer = lyx_view_->buffer();
- TextClassPtr oldClass = buffer->params().textClassPtr();
+ DocumentClass * oldClass = buffer->params().documentClassPtr();
Cursor & cur = view()->cursor();
cur.recordUndoFullDocument();
case LFUN_LAYOUT_MODULES_CLEAR: {
BOOST_ASSERT(lyx_view_);
Buffer * buffer = lyx_view_->buffer();
- TextClassPtr oldClass = buffer->params().textClassPtr();
+ DocumentClass * oldClass = buffer->params().documentClassPtr();
view()->cursor().recordUndoFullDocument();
buffer->params().clearLayoutModules();
- buffer->params().makeTextClass();
+ buffer->params().makeDocumentClass();
updateLayout(oldClass, buffer);
updateFlags = Update::Force | Update::FitCursor;
break;
case LFUN_LAYOUT_MODULE_ADD: {
BOOST_ASSERT(lyx_view_);
Buffer * buffer = lyx_view_->buffer();
- TextClassPtr oldClass = buffer->params().textClassPtr();
+ DocumentClass * oldClass = buffer->params().documentClassPtr();
view()->cursor().recordUndoFullDocument();
buffer->params().addLayoutModule(argument);
- buffer->params().makeTextClass();
+ buffer->params().makeDocumentClass();
updateLayout(oldClass, buffer);
updateFlags = Update::Force | Update::FitCursor;
break;
BOOST_ASSERT(lyx_view_);
Buffer * buffer = lyx_view_->buffer();
- loadTextClass(argument, buffer->filePath());
-
- pair<bool, BaseClassIndex> const tc_pair =
- baseclasslist.numberOfClass(argument);
-
- if (!tc_pair.first)
+ if (!loadLayoutFile(argument, buffer->filePath()))
break;
- BaseClassIndex const old_class = buffer->params().baseClass();
- BaseClassIndex const new_class = tc_pair.second;
+ LayoutFile const * old_layout = buffer->params().baseClass();
+ LayoutFile const * new_layout = &(BaseClassList::get()[argument]);
- if (old_class == new_class)
+ if (old_layout == new_layout)
// nothing to do
break;
//Save the old, possibly modular, layout for use in conversion.
- TextClassPtr oldClass = buffer->params().textClassPtr();
+ DocumentClass * oldDocClass = buffer->params().documentClassPtr();
view()->cursor().recordUndoFullDocument();
- buffer->params().setBaseClass(new_class);
- buffer->params().makeTextClass();
- updateLayout(oldClass, buffer);
+ buffer->params().setBaseClass(argument);
+ buffer->params().makeDocumentClass();
+ updateLayout(oldDocClass, buffer);
updateFlags = Update::Force | Update::FitCursor;
break;
}
case LFUN_LAYOUT_RELOAD: {
BOOST_ASSERT(lyx_view_);
Buffer * buffer = lyx_view_->buffer();
- TextClassPtr oldClass = buffer->params().textClassPtr();
- BaseClassIndex const tc = buffer->params().baseClass();
- baseclasslist.reset(tc);
- buffer->params().setBaseClass(tc);
- buffer->params().makeTextClass();
+ DocumentClass * oldClass = buffer->params().documentClassPtr();
+ LayoutFileIndex bc = buffer->params().baseClassID();
+ BaseClassList::get().reset(bc);
+ buffer->params().makeDocumentClass();
updateLayout(oldClass, buffer);
updateFlags = Update::Force | Update::FitCursor;
break;
}
case LFUN_TEXTCLASS_LOAD:
- loadTextClass(argument, lyx_view_->buffer()->filePath());
+ loadLayoutFile(argument, lyx_view_->buffer()->filePath());
break;
case LFUN_LYXRC_APPLY: {
view()->cursor().fixIfBroken();
}
+ // update completion. We do it here and not in
+ // processKeySym to avoid another redraw just for a
+ // changed inline completion
+ if (cmd.origin == FuncRequest::KEYBOARD) {
+ if (cmd.action == LFUN_SELF_INSERT)
+ lyx_view_->updateCompletion(view()->cursor(), true, true);
+ else if (cmd.action == LFUN_CHAR_DELETE_BACKWARD)
+ lyx_view_->updateCompletion(view()->cursor(), false, true);
+ else
+ lyx_view_->updateCompletion(view()->cursor(), false, false);
+ }
+
updateFlags = view()->cursor().result().update();
}
theSelection().haveSelection(view()->cursor().selection());
}
}
- if (!quitting && lyx_view_) {
+ if (lyx_view_) {
// Some messages may already be translated, so we cannot use _()
sendDispatchMessage(translateIfPossible(getMessage()), cmd);
}
}
-void LyXFunc::closeBuffer()
-{
- // goto bookmark to update bookmark pit.
- for (size_t i = 0; i < LyX::ref().session().bookmarks().size(); ++i)
- gotoBookmark(i+1, false, false);
-
- lyx_view_->closeBuffer();
-}
-
-
void LyXFunc::reloadBuffer()
{
FileName filename = lyx_view_->buffer()->fileName();
}
-void LyXFunc::updateLayout(TextClassPtr const & oldlayout,
- Buffer * buffer)
+void LyXFunc::updateLayout(DocumentClass * oldlayout,Buffer * buffer)
{
lyx_view_->message(_("Converting document to new document class..."));
StableDocIterator backcur(view()->cursor());
ErrorList & el = buffer->errorList("Class Switch");
cap::switchBetweenClasses(
- oldlayout, buffer->params().textClassPtr(),
+ oldlayout, buffer->params().documentClassPtr(),
static_cast<InsetText &>(buffer->inset()), el);
view()->setCursor(backcur.asDocIterator(&(buffer->inset())));