]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiDocument.cpp
Improve the local layout feature by better handling of unknown textclass, unknown...
[lyx.git] / src / frontends / qt4 / GuiDocument.cpp
index e678a8170b0554242a8f9b0cdafb3e60e9909fa1..1a7780cbddb43de51d40680c03278c54e458834b 100644 (file)
@@ -605,6 +605,8 @@ GuiDocument::GuiDocument(GuiView & lv)
                this, SLOT(change_adaptor()));
        connect(fontModule->fontsizeCO, SIGNAL(activated(int)),
                this, SLOT(change_adaptor()));
+       connect(fontModule->cjkFontLE, SIGNAL(textChanged(const QString &)),
+               this, SLOT(change_adaptor()));
        connect(fontModule->scaleSansSB, SIGNAL(valueChanged(int)),
                this, SLOT(change_adaptor()));
        connect(fontModule->scaleTypewriterSB, SIGNAL(valueChanged(int)),
@@ -874,6 +876,8 @@ GuiDocument::GuiDocument(GuiView & lv)
                this, SLOT(change_adaptor()));
        connect(latexModule->layoutPB, SIGNAL(clicked()),
                this, SLOT(browseLayout()));
+       connect(latexModule->layoutPB, SIGNAL(clicked()),
+               this, SLOT(change_adaptor()));
        connect(latexModule->childDocGB, SIGNAL(clicked()),
                this, SLOT(change_adaptor()));
        connect(latexModule->childDocLE, SIGNAL(textChanged(const QString &)),
@@ -1237,13 +1241,22 @@ void GuiDocument::browseLayout()
        FileName layoutFile = support::makeAbsPath(fromqstr(file),
                fromqstr(bufferFilepath()));
        
+       int const ret = Alert::prompt(_("Local layout file"),
+               _("The layout file you have selected is a local layout\n"
+                 "file, not one in the system or user directory. Your\n"
+                 "document may not work with this layout if you do not\n"
+                 "keep the layout file in the document directory."),
+                 1, 1, _("&Set Layout"), _("&Cancel"));
+       if (ret == 1)
+               return;
+
        // load the layout file
        LayoutFileList & bcl = LayoutFileList::get();
        string classname = layoutFile.onlyFileName();
-       LayoutFileIndex name = bcl.addLayoutFile(
+       // this will update an existing layout if that layout has been loaded before.
+       LayoutFileIndex name = bcl.addLocalLayout(
                classname.substr(0, classname.size() - 7),
-               layoutFile.onlyPath().absFilename(),
-               LayoutFileList::Local);
+               layoutFile.onlyPath().absFilename());
 
        if (name.empty()) {
                Alert::error(_("Error"),
@@ -1262,6 +1275,7 @@ void GuiDocument::browseLayout()
                latexModule->classCO->setCurrentIndex(0);
        } else
                latexModule->classCO->setCurrentIndex(idx);
+       
        classChanged();
 }
 
@@ -1286,20 +1300,7 @@ void GuiDocument::classChanged()
        if (idx < 0) 
                return;
        string const classname = classes_model_.getIDString(idx);
-       // check if this is a local layout file
-       if (prefixIs(classname, LayoutFileList::localPrefix)) {
-               int const ret = Alert::prompt(_("Local layout file"),
-                               _("The layout file you have selected is a local layout\n"
-                                 "file, not one in the system or user directory. Your\n"
-                                 "document may not work with this layout if you do not\n"
-                                 "keep the layout file in the same directory."),
-                                 1, 1, _("&Set Layout"), _("&Cancel"));
-               if (ret == 1) {
-                       // try to reset the layout combo
-                       setLayoutComboByIDString(bp_.baseClassID());
-                       return;
-               }
-       }
+
        // FIXME Note that by doing things this way, we load the TextClass
        // as soon as it is selected. So, if you use the scroll wheel when
        // sitting on the combo box, we'll load a lot of TextClass objects
@@ -1647,6 +1648,9 @@ void GuiDocument::apply(BufferParams & params)
        params.fontsTypewriter =
                tex_fonts_monospaced[fontModule->fontsTypewriterCO->currentIndex()];
 
+       params.fontsCJK =
+               fromqstr(fontModule->cjkFontLE->text());
+
        params.fontsSansScale = fontModule->scaleSansSB->value();
 
        params.fontsTypewriterScale = fontModule->scaleTypewriterSB->value();
@@ -1945,6 +1949,12 @@ void GuiDocument::paramsToDialog(BufferParams const & params)
                ttChanged(n);
        }
 
+       if (!params.fontsCJK.empty())
+               fontModule->cjkFontLE->setText(
+                       toqstr(params.fontsCJK));
+       else
+               fontModule->cjkFontLE->setText(QString());
+
        fontModule->fontScCB->setChecked(params.fontsSC);
        fontModule->fontOsfCB->setChecked(params.fontsOSF);
        fontModule->scaleSansSB->setValue(params.fontsSansScale);