]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiDocument.cpp
cosmetics
[lyx.git] / src / frontends / qt4 / GuiDocument.cpp
index e678a8170b0554242a8f9b0cdafb3e60e9909fa1..4fc4c75c315e109aa6558e49e8307bfcc9e8df06 100644 (file)
@@ -474,7 +474,7 @@ void PreambleModule::update(BufferParams const & params, BufferId id)
        Coords::const_iterator it = preamble_coords_.find(current_id_);
        if (it == preamble_coords_.end())
                // First time we open this one.
-               preamble_coords_[current_id_] = make_pair(0,0);
+               preamble_coords_[current_id_] = make_pair(0, 0);
        else {
                // Restore saved coords.
                QTextCursor cur = preambleTE->textCursor();
@@ -559,9 +559,9 @@ GuiDocument::GuiDocument(GuiView & lv)
        connect(textLayoutModule->bypassCB, SIGNAL(clicked()), 
                this, SLOT(change_adaptor()));
        connect(textLayoutModule->bypassCB, SIGNAL(clicked()), 
-               this, SLOT(set_listings_msg()));
+               this, SLOT(setListingsMessage()));
        connect(textLayoutModule->listingsED, SIGNAL(textChanged()),
-               this, SLOT(set_listings_msg()));
+               this, SLOT(setListingsMessage()));
        textLayoutModule->listingsTB->setPlainText(
                qt_("Input listings parameters on the right. Enter ? for a list of parameters."));
        textLayoutModule->lspacingLE->setValidator(new QDoubleValidator(
@@ -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)),
@@ -794,12 +796,14 @@ GuiDocument::GuiDocument(GuiView & lv)
        langModule->languageCO->setModel(language_model);
 
        // Always put the default encoding in the first position.
-       // It is special because the displayed text is translated.
-       langModule->encodingCO->addItem(qt_("LaTeX default"));
+       langModule->encodingCO->addItem(qt_("Language Default (no inputenc)"));
+       QStringList encodinglist;
        Encodings::const_iterator it = encodings.begin();
        Encodings::const_iterator const end = encodings.end();
        for (; it != end; ++it)
-               langModule->encodingCO->addItem(toqstr(it->latexName()));
+               encodinglist.append(qt_(it->guiName()));
+       encodinglist.sort();
+       langModule->encodingCO->addItems(encodinglist);
 
        langModule->quoteStyleCO->addItem(qt_("``text''"));
        langModule->quoteStyleCO->addItem(qt_("''text''"));
@@ -874,6 +878,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 &)),
@@ -1017,40 +1023,41 @@ void GuiDocument::change_adaptor()
 }
 
 
-docstring GuiDocument::validate_listings_params()
+QString GuiDocument::validateListingsParameters()
 {
        // use a cache here to avoid repeated validation
        // of the same parameters
-       static string param_cache = string();
-       static docstring msg_cache = docstring();
+       static string param_cache;
+       static QString msg_cache;
        
        if (textLayoutModule->bypassCB->isChecked())
-               return docstring();
+               return QString();
 
        string params = fromqstr(textLayoutModule->listingsED->toPlainText());
        if (params != param_cache) {
                param_cache = params;
-               msg_cache = InsetListingsParams(params).validate();
+               msg_cache = toqstr(InsetListingsParams(params).validate());
        }
        return msg_cache;
 }
 
 
-void GuiDocument::set_listings_msg()
+void GuiDocument::setListingsMessage()
 {
        static bool isOK = true;
-       docstring msg = validate_listings_params();
-       if (msg.empty()) {
+       QString msg = validateListingsParameters();
+       if (msg.isEmpty()) {
                if (isOK)
                        return;
                isOK = true;
                // listingsTB->setTextColor("black");
                textLayoutModule->listingsTB->setPlainText(
-                       qt_("Input listings parameters on the right. Enter ? for a list of parameters."));
+                       qt_("Input listings parameters on the right. "
+                "Enter ? for a list of parameters."));
        } else {
                isOK = false;
                // listingsTB->setTextColor("red");
-               textLayoutModule->listingsTB->setPlainText(toqstr(msg));
+               textLayoutModule->listingsTB->setPlainText(msg);
        }
 }
 
@@ -1237,13 +1244,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 +1278,7 @@ void GuiDocument::browseLayout()
                latexModule->classCO->setCurrentIndex(0);
        } else
                latexModule->classCO->setCurrentIndex(idx);
+       
        classChanged();
 }
 
@@ -1286,20 +1303,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
@@ -1320,6 +1324,11 @@ void GuiDocument::classChanged()
                bp_.useClassDefaults();
                paramsToDialog(bp_);
        }
+       // FIXME There's a little bug here connected with auto_reset, namely,
+       // that, if the preceding is skipped and the user has changed the
+       // modules before changing the class, those changes will be lost on
+       // update. But maybe that's what we want?
+       updateSelectedModules();
 }
 
 
@@ -1480,9 +1489,25 @@ void GuiDocument::apply(BufferParams & params)
                int i = langModule->encodingCO->currentIndex();
                if (i == 0)
                        params.inputenc = "default";
-               else
-                       params.inputenc =
-                               fromqstr(langModule->encodingCO->currentText());
+               else {
+                       QString const enc_gui =
+                               langModule->encodingCO->currentText();
+                       Encodings::const_iterator it = encodings.begin();
+                       Encodings::const_iterator const end = encodings.end();
+                       bool found = false;
+                       for (; it != end; ++it) {
+                               if (qt_(it->guiName()) == enc_gui) {
+                                       params.inputenc = it->latexName();
+                                       found = true;
+                                       break;
+                               }
+                       }
+                       if (!found) {
+                               // should not happen
+                               lyxerr << "GuiDocument::apply: Unknown encoding! Resetting to default" << endl;
+                               params.inputenc = "default";
+                       }
+               }
        }
 
        InsetQuotes::QuoteLanguage lga = InsetQuotes::EnglishQuotes;
@@ -1519,10 +1544,10 @@ void GuiDocument::apply(BufferParams & params)
        }
 
        // bullets
-       params.user_defined_bullet(0) = bulletsModule->getBullet(0);
-       params.user_defined_bullet(1) = bulletsModule->getBullet(1);
-       params.user_defined_bullet(2) = bulletsModule->getBullet(2);
-       params.user_defined_bullet(3) = bulletsModule->getBullet(3);
+       params.user_defined_bullet(0) = bulletsModule->bullet(0);
+       params.user_defined_bullet(1) = bulletsModule->bullet(1);
+       params.user_defined_bullet(2) = bulletsModule->bullet(2);
+       params.user_defined_bullet(3) = bulletsModule->bullet(3);
 
        // packages
        params.graphicsDriver =
@@ -1541,6 +1566,27 @@ void GuiDocument::apply(BufferParams & params)
        vector<string> selModList;
        for (int i = 0; i < srows; ++i)
                params.addLayoutModule(modules_sel_model_.getIDString(i));
+       // update the list of removed modules
+       params.clearRemovedModules();
+       set<string> const & reqmods = params.baseClass()->defaultModules();
+       set<string>::const_iterator rit = reqmods.begin();
+       set<string>::const_iterator ren = reqmods.end();
+       // check each of the required modules
+       for (; rit != ren; rit++) {
+               vector<string>::const_iterator mit = params.getModules().begin();
+               vector<string>::const_iterator men = params.getModules().end();
+               bool found = false;
+               for (; mit != men; mit++) {
+                       if (*rit == *mit) {
+                               found = true;
+                               break;
+                       }
+               }
+               if (!found) {
+                       // the module isn't present so must have been removed by the user
+                       params.addRemovedModule(*rit);
+               }
+       }
 
        if (mathsModule->amsautoCB->isChecked()) {
                params.use_amsmath = BufferParams::package_auto;
@@ -1647,6 +1693,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();
@@ -1792,8 +1841,17 @@ void GuiDocument::paramsToDialog(BufferParams const & params)
                if (params.inputenc == "default") {
                        langModule->encodingCO->setCurrentIndex(0);
                } else {
+                       string enc_gui;
+                       Encodings::const_iterator it = encodings.begin();
+                       Encodings::const_iterator const end = encodings.end();
+                       for (; it != end; ++it) {
+                               if (it->latexName() == params.inputenc) {
+                                       enc_gui = it->guiName();
+                                       break;
+                               }
+                       }
                        int const i = langModule->encodingCO->findText(
-                                       toqstr(params.inputenc));
+                                       qt_(enc_gui));
                        if (i >= 0)
                                langModule->encodingCO->setCurrentIndex(i);
                        else
@@ -1945,6 +2003,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);
@@ -2115,7 +2179,7 @@ void GuiDocument::setLayoutComboByIDString(std::string const & idString)
 
 bool GuiDocument::isValid()
 {
-       return validate_listings_params().empty()
+       return validateListingsParameters().isEmpty()
                && (textLayoutModule->skipCO->currentIndex() != 3
                        || !textLayoutModule->skipLE->text().isEmpty());
 }