mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-23 02:14:50 +00:00
Improve handling of local layout files. There are two bugs here that still need fixing, though: 4593 and 4594.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23372 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
c3e4e47fb7
commit
9dfbadcb2c
@ -189,22 +189,13 @@ string const BaseClassList::localPrefix = "LOCAL:";
|
||||
LayoutFileIndex
|
||||
BaseClassList::addLayoutFile(string const & textclass, string const & path)
|
||||
{
|
||||
// FIXME BUGS
|
||||
// There be bugs here. The way this presently works, the local class gets
|
||||
// added to the global list of available document classes. It will then
|
||||
// appear on the list in Document>Settings, where it could be chosen in,
|
||||
// say, a new document, with no real warning that the class may not be
|
||||
// available when the document is saved, since the new document may not be
|
||||
// in the same directory as the layout file.
|
||||
//
|
||||
// Another bug is this: If the Document>Settings dialog is open when a file
|
||||
// with a local layout is opened, the dialog doesn't update.
|
||||
// FIXME There is a bug here: 4593
|
||||
//
|
||||
// only check for textclass.layout file, .cls can be anywhere in $TEXINPUTS
|
||||
// NOTE: latex class name is defined in textclass.layout, which can be
|
||||
// different from textclass
|
||||
string fullName = addName(path, textclass + ".layout");
|
||||
string localIndex = localPrefix + textclass;
|
||||
string localIndex = localPrefix + fullName;
|
||||
|
||||
// if the local file has already been loaded, return it
|
||||
if (haveClass(localIndex))
|
||||
@ -231,14 +222,6 @@ LayoutFileIndex
|
||||
// now, create a TextClass with description containing path information
|
||||
LayoutFile tmpl(textclass, sub.str(2) == "" ? textclass : sub.str(2),
|
||||
sub.str(3) + " <" + path + ">", true);
|
||||
// Do not add this local TextClass to classmap_ if it has
|
||||
// already been loaded by, for example, a master buffer.
|
||||
if (haveClass(textclass)
|
||||
// FIXME I don't understand this comment (rgh)
|
||||
// only layouts from the same directory are considered to be identical.
|
||||
&& classmap_[textclass].description() == tmpl.description()
|
||||
)
|
||||
return textclass;
|
||||
classmap_[localIndex] = tmpl;
|
||||
// This textclass is added on request so it will definitely be
|
||||
// used. Load it now because other load() calls may fail if they
|
||||
|
@ -1386,22 +1386,18 @@ void BufferParams::setDocumentClass(DocumentClass const * const tc) {
|
||||
|
||||
bool BufferParams::setBaseClass(string const & classname)
|
||||
{
|
||||
string localtc = classname;
|
||||
LYXERR(Debug::TCLASS, "setBaseClass: " << classname);
|
||||
BaseClassList const & bcl = BaseClassList::get();
|
||||
if (!bcl.haveClass(localtc)) {
|
||||
// OK, let's try again assuming it's a local file
|
||||
localtc = BaseClassList::localPrefix + localtc;
|
||||
if (!bcl.haveClass(localtc)) {
|
||||
if (!bcl.haveClass(classname)) {
|
||||
docstring s =
|
||||
bformat(_("The document class %1$s could not be found."),
|
||||
from_utf8(classname));
|
||||
frontend::Alert::error(_("Class not found"), s);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (bcl[localtc].load()) {
|
||||
pimpl_->baseClass_ = localtc;
|
||||
if (bcl[classname].load()) {
|
||||
pimpl_->baseClass_ = classname;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -901,9 +901,6 @@ GuiDocument::GuiDocument(GuiView & lv)
|
||||
latexModule->psdriverCO->addItem(enc);
|
||||
}
|
||||
// latex classes
|
||||
//FIXME This seems too involved with the kernel. Some of this
|
||||
//should be moved to the kernel---which should perhaps just
|
||||
//give us a list of entries or something of the sort.
|
||||
latexModule->classCO->setModel(&classes_model_);
|
||||
BaseClassList const & bcl = BaseClassList::get();
|
||||
vector<LayoutFileIndex> classList = bcl.classList();
|
||||
@ -916,7 +913,7 @@ GuiDocument::GuiDocument(GuiView & lv)
|
||||
docstring item = (tc.isTeXClassAvailable()) ?
|
||||
from_utf8(tc.description()) :
|
||||
bformat(_("Unavailable: %1$s"), from_utf8(tc.description()));
|
||||
classes_model_.insertRow(i, toqstr(item), tc.name());
|
||||
classes_model_.insertRow(i, toqstr(item), *cit);
|
||||
}
|
||||
|
||||
// branches
|
||||
@ -1245,6 +1242,7 @@ void GuiDocument::classChanged()
|
||||
if (idx < 0)
|
||||
return;
|
||||
string const classname = classes_model_.getIDString(idx);
|
||||
// FIXME There is a bug here: 4594
|
||||
if (!bp_.setBaseClass(classname)) {
|
||||
Alert::error(_("Error"), _("Unable to set document class."));
|
||||
return;
|
||||
@ -1832,7 +1830,7 @@ void GuiDocument::updateParams(BufferParams const & params)
|
||||
}
|
||||
|
||||
// text layout
|
||||
string const & classname = params.baseClass()->name();
|
||||
string const & classname = params.baseClassID();
|
||||
int idx = classes_model_.findIDString(classname);
|
||||
if (idx < 0)
|
||||
lyxerr << "Unable to set layout for classname " << classname << std::endl;
|
||||
|
Loading…
Reference in New Issue
Block a user