]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
A GUI for nomencl settings. Adds the possibility to enter a custom length.
[lyx.git] / src / Buffer.cpp
index 3b5a45bc02bc95d99efe072d94a9d217c01fa127..d9d9547df5d00f26556036b5e141fd24718756d5 100644 (file)
@@ -32,6 +32,7 @@
 #include "Format.h"
 #include "FuncRequest.h"
 #include "FuncStatus.h"
+#include "IndicesList.h"
 #include "InsetIterator.h"
 #include "InsetList.h"
 #include "Language.h"
@@ -124,7 +125,7 @@ namespace {
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-int const LYX_FORMAT = 349;  // jspitzm: initial XeTeX support
+int const LYX_FORMAT = 360;  // jspitzm: nomencl custom width
 
 typedef map<string, bool> DepClean;
 typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
@@ -523,6 +524,8 @@ int Buffer::readHeader(Lexer & lex)
        params().clearLayoutModules();
        params().clearRemovedModules();
        params().pdfoptions().clear();
+       params().indiceslist().clear();
+       params().backgroundcolor = lyx::rgbFromHexName("#ffffff");
 
        for (int i = 0; i < 4; ++i) {
                params().user_defined_bullet(i) = ITEMIZE_DEFAULTS[i];
@@ -1566,156 +1569,156 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr)
        bool dispatched = true;
 
        switch (func.action) {
-               case LFUN_BUFFER_EXPORT: {
-                       bool success = doExport(to_utf8(func.argument()), false);
-                       dr.setError(success);
-                       if (!success)
-                               dr.setMessage(bformat(_("Error exporting to format: %1$s."), 
-                                                     func.argument()));
+       case LFUN_BUFFER_EXPORT: {
+               bool success = doExport(to_utf8(func.argument()), false);
+               dr.setError(success);
+               if (!success)
+                       dr.setMessage(bformat(_("Error exporting to format: %1$s."), 
+                                             func.argument()));
+               break;
+       }
+
+       case LFUN_BRANCH_ACTIVATE:
+       case LFUN_BRANCH_DEACTIVATE: {
+               BranchList & branchList = params().branchlist();
+               docstring const branchName = func.argument();
+               // the case without a branch name is handled elsewhere
+               if (branchName.empty()) {
+                       dispatched = false;
                        break;
                }
+               Branch * branch = branchList.find(branchName);
+               if (!branch) {
+                       LYXERR0("Branch " << branchName << " does not exist.");
+                       dr.setError(true);
+                       docstring const msg = 
+                               bformat(_("Branch \"%1$s\" does not exist."), branchName);
+                       dr.setMessage(msg);
+               } else {
+                       branch->setSelected(func.action == LFUN_BRANCH_ACTIVATE);
+                       dr.setError(false);
+                       dr.update(Update::Force);
+               }
+               break;
+       }
 
-               case LFUN_BRANCH_ACTIVATE:
-               case LFUN_BRANCH_DEACTIVATE: {
-                       BranchList & branchList = params().branchlist();
-                       docstring const branchName = func.argument();
-                       // the case without a branch name is handled elsewhere
-                       if (branchName.empty()) {
-                               dispatched = false;
-                               break;
-                       }
-                       Branch * branch = branchList.find(branchName);
-                       if (!branch) {
-                               LYXERR0("Branch " << branchName << " does not exist.");
-                               dr.setError(true);
-                               docstring const msg = 
-                                       bformat(_("Branch \%1$s\" does not exist."), branchName);
-                               dr.setMessage(msg);
-                       } else {
-                               branch->setSelected(func.action == LFUN_BRANCH_ACTIVATE);
-                               dr.setError(false);
-                               dr.update(Update::Force);
-                       }
+       case LFUN_BUFFER_PRINT: {
+               // we'll assume there's a problem until we succeed
+               dr.setError(true); 
+               string target = func.getArg(0);
+               string target_name = func.getArg(1);
+               string command = func.getArg(2);
+
+               if (target.empty()
+                   || target_name.empty()
+                   || command.empty()) {
+                       LYXERR0("Unable to parse " << func.argument());
+                       docstring const msg = 
+                               bformat(_("Unable to parse \"%1$s\""), func.argument());
+                       dr.setMessage(msg);
+                       break;
+               }
+               if (target != "printer" && target != "file") {
+                       LYXERR0("Unrecognized target \"" << target << '"');
+                       docstring const msg = 
+                               bformat(_("Unrecognized target \"%1$s\""), from_utf8(target));
+                       dr.setMessage(msg);
                        break;
                }
 
-               case LFUN_BUFFER_PRINT: {
-                       // we'll assume there's a problem until we succeed
-                       dr.setError(true); 
-                       string target = func.getArg(0);
-                       string target_name = func.getArg(1);
-                       string command = func.getArg(2);
-
-                       if (target.empty()
-                           || target_name.empty()
-                           || command.empty()) {
-                               LYXERR0("Unable to parse " << func.argument());
-                               docstring const msg = 
-                                       bformat(_("Unable to parse \"%1$s\""), func.argument());
-                               dr.setMessage(msg);
-                               break;
-                       }
-                       if (target != "printer" && target != "file") {
-                               LYXERR0("Unrecognized target \"" << target << '"');
-                               docstring const msg = 
-                                       bformat(_("Unrecognized target \"%1$s\""), from_utf8(target));
-                               dr.setMessage(msg);
-                               break;
-                       }
+               if (!doExport("dvi", true)) {
+                       showPrintError(absFileName());
+                       dr.setMessage(_("Error exporting to DVI."));
+                       break;
+               }
 
-                       if (!doExport("dvi", true)) {
-                               showPrintError(absFileName());
-                               dr.setMessage(_("Error exporting to DVI."));
-                               break;
-                       }
+               // Push directory path.
+               string const path = temppath();
+               // Prevent the compiler from optimizing away p
+               FileName pp(path);
+               PathChanger p(pp);
+
+               // there are three cases here:
+               // 1. we print to a file
+               // 2. we print directly to a printer
+               // 3. we print using a spool command (print to file first)
+               Systemcall one;
+               int res = 0;
+               string const dviname = changeExtension(latexName(true), "dvi");
+
+               if (target == "printer") {
+                       if (!lyxrc.print_spool_command.empty()) {
+                               // case 3: print using a spool
+                               string const psname = changeExtension(dviname,".ps");
+                               command += ' ' + lyxrc.print_to_file
+                                       + quoteName(psname)
+                                       + ' '
+                                       + quoteName(dviname);
 
-                       // Push directory path.
-                       string const path = temppath();
-                       // Prevent the compiler from optimizing away p
-                       FileName pp(path);
-                       PathChanger p(pp);
-
-                       // there are three cases here:
-                       // 1. we print to a file
-                       // 2. we print directly to a printer
-                       // 3. we print using a spool command (print to file first)
-                       Systemcall one;
-                       int res = 0;
-                       string const dviname = changeExtension(latexName(true), "dvi");
-
-                       if (target == "printer") {
-                               if (!lyxrc.print_spool_command.empty()) {
-                                       // case 3: print using a spool
-                                       string const psname = changeExtension(dviname,".ps");
-                                       command += ' ' + lyxrc.print_to_file
-                                               + quoteName(psname)
-                                               + ' '
-                                               + quoteName(dviname);
-
-                                       string command2 = lyxrc.print_spool_command + ' ';
-                                       if (target_name != "default") {
-                                               command2 += lyxrc.print_spool_printerprefix
-                                                       + target_name
-                                                       + ' ';
-                                       }
-                                       command2 += quoteName(psname);
-                                       // First run dvips.
-                                       // If successful, then spool command
-                                       res = one.startscript(Systemcall::Wait, command);
-
-                                       if (res == 0) {
-                                               // If there's no GUI, we have to wait on this command. Otherwise,
-                                               // LyX deletes the temporary directory, and with it the spooled
-                                               // file, before it can be printed!!
-                                               Systemcall::Starttype stype = use_gui ?
-                                                       Systemcall::DontWait : Systemcall::Wait;
-                                               res = one.startscript(stype, command2);
-                                       }
-                               } else {
-                                       // case 2: print directly to a printer
-                                       if (target_name != "default")
-                                               command += ' ' + lyxrc.print_to_printer + target_name + ' ';
-                                       // as above....
+                               string command2 = lyxrc.print_spool_command + ' ';
+                               if (target_name != "default") {
+                                       command2 += lyxrc.print_spool_printerprefix
+                                               + target_name
+                                               + ' ';
+                               }
+                               command2 += quoteName(psname);
+                               // First run dvips.
+                               // If successful, then spool command
+                               res = one.startscript(Systemcall::Wait, command);
+
+                               if (res == 0) {
+                                       // If there's no GUI, we have to wait on this command. Otherwise,
+                                       // LyX deletes the temporary directory, and with it the spooled
+                                       // file, before it can be printed!!
                                        Systemcall::Starttype stype = use_gui ?
                                                Systemcall::DontWait : Systemcall::Wait;
-                                       res = one.startscript(stype, command + quoteName(dviname));
+                                       res = one.startscript(stype, command2);
                                }
-
                        } else {
-                               // case 1: print to a file
-                               FileName const filename(makeAbsPath(target_name, filePath()));
-                               FileName const dvifile(makeAbsPath(dviname, path));
-                               if (filename.exists()) {
-                                       docstring text = bformat(
-                                               _("The file %1$s already exists.\n\n"
-                                                 "Do you want to overwrite that file?"),
-                                               makeDisplayPath(filename.absFilename()));
-                                       if (Alert::prompt(_("Overwrite file?"),
-                                           text, 0, 1, _("&Overwrite"), _("&Cancel")) != 0)
-                                               break;
-                               }
-                               command += ' ' + lyxrc.print_to_file
-                                       + quoteName(filename.toFilesystemEncoding())
-                                       + ' '
-                                       + quoteName(dvifile.toFilesystemEncoding());
+                               // case 2: print directly to a printer
+                               if (target_name != "default")
+                                       command += ' ' + lyxrc.print_to_printer + target_name + ' ';
                                // as above....
                                Systemcall::Starttype stype = use_gui ?
                                        Systemcall::DontWait : Systemcall::Wait;
-                               res = one.startscript(stype, command);
+                               res = one.startscript(stype, command + quoteName(dviname));
                        }
 
-                       if (res == 0) 
-                               dr.setError(false);
-                       else {
-                               dr.setMessage(_("Error running external commands."));
-                               showPrintError(absFileName());
+               } else {
+                       // case 1: print to a file
+                       FileName const filename(makeAbsPath(target_name, filePath()));
+                       FileName const dvifile(makeAbsPath(dviname, path));
+                       if (filename.exists()) {
+                               docstring text = bformat(
+                                       _("The file %1$s already exists.\n\n"
+                                         "Do you want to overwrite that file?"),
+                                       makeDisplayPath(filename.absFilename()));
+                               if (Alert::prompt(_("Overwrite file?"),
+                                                 text, 0, 1, _("&Overwrite"), _("&Cancel")) != 0)
+                                       break;
                        }
-                       break;
+                       command += ' ' + lyxrc.print_to_file
+                               + quoteName(filename.toFilesystemEncoding())
+                               + ' '
+                               + quoteName(dvifile.toFilesystemEncoding());
+                       // as above....
+                       Systemcall::Starttype stype = use_gui ?
+                               Systemcall::DontWait : Systemcall::Wait;
+                       res = one.startscript(stype, command);
                }
 
-               default:
-                       dispatched = false;
-                       break;
+               if (res == 0) 
+                       dr.setError(false);
+               else {
+                       dr.setMessage(_("Error running external commands."));
+                       showPrintError(absFileName());
+               }
+               break;
+       }
+
+       default:
+               dispatched = false;
+               break;
        }
        dr.dispatched(dispatched);
 }
@@ -2605,7 +2608,16 @@ int AutoSaveBuffer::generateChild()
 
 FileName Buffer::getAutosaveFilename() const
 {
-       string const fpath = isUnnamed() ? lyxrc.document_path : filePath();
+       // if the document is unnamed try to save in the backup dir, else
+       // in the default document path, and as a last try in the filePath, 
+       // which will most often be the temporary directory
+       string fpath;
+       if (isUnnamed())
+               fpath = lyxrc.backupdir_path.empty() ? lyxrc.document_path
+                       : lyxrc.backupdir_path;
+       if (!isUnnamed() || fpath.empty() || !FileName(fpath).exists())
+               fpath = filePath();
+
        string const fname = "#" + d->filename.onlyFileName() + "#";
        return makeAbsPath(fname, fpath);
 }
@@ -2619,6 +2631,14 @@ void Buffer::removeAutosaveFile() const
 }
 
 
+void Buffer::moveAutosaveFile(support::FileName const & oldauto) const
+{
+       FileName const newauto = getAutosaveFilename();
+       if (!(oldauto == newauto || oldauto.moveTo(newauto)))
+               LYXERR0("Unable to remove autosave file `" << oldauto << "'!");
+}
+
+
 // Perfect target for a thread...
 void Buffer::autoSave() const
 {
@@ -2654,14 +2674,20 @@ string Buffer::bufferFormat() const
 
 string Buffer::getDefaultOutputFormat() const
 {
+       if (!params().defaultOutputFormat.empty()
+           && params().defaultOutputFormat != "default")
+               return params().defaultOutputFormat;
        typedef vector<Format const *> Formats;
        Formats formats = exportableFormats(true);
        if (isDocBook()
            || isLiterate()
            || params().useXetex
-           || params().encoding().package() == Encoding::japanese)
+           || params().encoding().package() == Encoding::japanese) {
+               if (formats.empty())
+                       return string();
                // return the first we find
                return formats.front()->name();
+       }
        return lyxrc.default_view_format;
 }