#include "BufferList.h"
#include "BufferParams.h"
#include "BufferView.h"
+#include "CmdDef.h"
#include "Color.h"
+#include "Converter.h"
#include "Cursor.h"
#include "CutAndPaste.h"
#include "debug.h"
#include "FuncRequest.h"
#include "FuncStatus.h"
#include "gettext.h"
-#include "Importer.h"
#include "InsetIterator.h"
#include "Intl.h"
#include "KeyMap.h"
#include "support/environment.h"
#include "support/FileFilterList.h"
#include "support/filetools.h"
-#include "support/fs_extras.h"
#include "support/lstrings.h"
#include "support/Path.h"
#include "support/Package.h"
#include "support/os.h"
#include <boost/current_function.hpp>
-#include <boost/filesystem/operations.hpp>
#include <sstream>
using std::string;
using std::istringstream;
using std::ostringstream;
-
-namespace fs = boost::filesystem;
+using std::find;
+using std::vector;
namespace lyx {
using support::trim;
using support::prefixIs;
+
namespace Alert = frontend::Alert;
extern bool quitting;
namespace {
+
+bool import(LyXView * lv, FileName const & filename,
+ string const & format, ErrorList & errorList)
+{
+ docstring const displaypath = makeDisplayPath(filename.absFilename());
+ lv->message(bformat(_("Importing %1$s..."), displaypath));
+
+ FileName const lyxfile(changeExtension(filename.absFilename(), ".lyx"));
+
+ string loader_format;
+ vector<string> loaders = theConverters().loaders();
+ if (find(loaders.begin(), loaders.end(), format) == loaders.end()) {
+ for (vector<string>::const_iterator it = loaders.begin();
+ it != loaders.end(); ++it) {
+ if (theConverters().isReachable(format, *it)) {
+ string const tofile =
+ changeExtension(filename.absFilename(),
+ formats.extension(*it));
+ if (!theConverters().convert(0, filename, FileName(tofile),
+ filename, format, *it, errorList))
+ return false;
+ loader_format = *it;
+ break;
+ }
+ }
+ if (loader_format.empty()) {
+ frontend::Alert::error(_("Couldn't import file"),
+ bformat(_("No information for importing the format %1$s."),
+ formats.prettyName(format)));
+ return false;
+ }
+ } else {
+ loader_format = format;
+ }
+
+
+ if (loader_format == "lyx") {
+ Buffer * buf = lv->loadLyXFile(lyxfile);
+ if (!buf) {
+ // we are done
+ lv->message(_("file not imported!"));
+ return false;
+ }
+ updateLabels(*buf);
+ lv->setBuffer(buf);
+ lv->showErrorList("Parse");
+ } else {
+ Buffer * const b = newFile(lyxfile.absFilename(), string(), true);
+ if (b)
+ lv->setBuffer(b);
+ else
+ return false;
+ bool as_paragraphs = loader_format == "textparagraph";
+ string filename2 = (loader_format == format) ? filename.absFilename()
+ : changeExtension(filename.absFilename(),
+ formats.extension(loader_format));
+ lv->view()->insertPlaintextFile(filename2, as_paragraphs);
+ lv->dispatch(FuncRequest(LFUN_MARK_OFF));
+ }
+
+ // we are done
+ lv->message(_("imported."));
+ return true;
+}
+
+
+
// This function runs "configure" and then rereads lyx.defaults to
// reconfigure the automatic settings.
void reconfigure(LyXView & lv, string const & option)
lv.message(_("Running configure..."));
// Run configure in user lyx directory
- support::Path p(package().user_support());
+ support::PathChanger p(package().user_support());
string configure_command = package().configure_command();
configure_command += option;
Systemcall one;
enable = buf->lyxvc().inUse();
break;
case LFUN_BUFFER_RELOAD:
- enable = !buf->isUnnamed() && fs::exists(buf->absFileName())
+ enable = !buf->isUnnamed() && buf->fileName().exists()
&& (!buf->isClean() || buf->isExternallyModified(Buffer::timestamp_method));
break;
}
}
else if (name == "latexlog")
- enable = FileName(buf->logName().second).isFileReadable();
+ enable = FileName(buf->logName()).isFileReadable();
else if (name == "spellchecker")
#if defined (USE_ASPELL) || defined (USE_ISPELL) || defined (USE_PSPELL)
enable = !buf->isReadonly();
FuncRequest func(lyxaction.lookupFunc(firstcmd));
func.origin = cmd.origin;
flag = getStatus(func);
+ break;
+ }
+
+ case LFUN_CALL: {
+ FuncRequest func;
+ std::string name(to_utf8(cmd.argument()));
+ if (LyX::ref().topLevelCmdDef().lock(name, func)) {
+ func.origin = cmd.origin;
+ flag = getStatus(func);
+ LyX::ref().topLevelCmdDef().release(name);
+ } else {
+ // catch recursion or unknown command definiton
+ // all operations until the recursion or unknown command
+ // definiton occures are performed, so set the state to enabled
+ enable = true;
+ }
+ break;
}
case LFUN_BUFFER_NEW:
if (buf.isClean())
return true;
- docstring const file = makeDisplayPath(buf.absFileName(), 30);
+ docstring const file = buf.fileName().displayName(30);
docstring text = bformat(_("The document %1$s has unsaved "
"changes.\n\nDo you want to save "
"the document?"), file);
string const path = buffer->temppath();
// Prevent the compiler from optimizing away p
FileName pp(path);
- support::Path p(pp);
+ support::PathChanger p(pp);
// there are three cases here:
// 1. we print to a file
if (!data.empty())
lyx_view_->getDialogs().show("character", data);
} else if (name == "latexlog") {
- pair<Buffer::LogType, string> const logfile =
- lyx_view_->buffer()->logName();
- switch (logfile.first) {
+ Buffer::LogType type;
+ string const logfile = lyx_view_->buffer()->logName(&type);
+ switch (type) {
case Buffer::latexlog:
data = "latex ";
break;
data = "literate ";
break;
}
- data += Lexer::quoteString(logfile.second);
+ data += Lexer::quoteString(logfile);
lyx_view_->getDialogs().show("log", data);
} else if (name == "vclog") {
string const data = "vc " +
// default type is requested
data = "include";
InsetCommandParams p(INCLUDE_CODE, data);
- data = InsetIncludeMailer::params2string(p);
+ data = InsetCommandMailer::params2string("include", p);
break;
}
case BOX_CODE: {
break;
}
+ case LFUN_CALL: {
+ FuncRequest func;
+ if (LyX::ref().topLevelCmdDef().lock(argument, func)) {
+ func.origin = cmd.origin;
+ dispatch(func);
+ LyX::ref().topLevelCmdDef().release(argument);
+ } else {
+ if (func.action == LFUN_UNKNOWN_ACTION) {
+ // unknown command definition
+ lyxerr << "Warning: unknown command definition `"
+ << argument << "'"
+ << endl;
+ } else {
+ // recursion detected
+ lyxerr << "Warning: Recursion in the command definition `"
+ << argument << "' detected"
+ << endl;
+ }
+ }
+ break;
+ }
+
case LFUN_PREFERENCES_SAVE: {
lyxrc.write(makeAbsPath("preferences",
package().user_support().absFilename()),
}
bool const graphicsbg_changed =
- (lyx_name == lcolor.getLyXName(Color::graphicsbg) &&
- x11_name != lcolor.getX11Name(Color::graphicsbg));
+ (lyx_name == lcolor.getLyXName(Color_graphicsbg) &&
+ x11_name != lcolor.getX11Name(Color_graphicsbg));
if (!lcolor.setColor(lyx_name, x11_name)) {
setErrorMessage(
&& (inset_code == NO_CODE
|| inset_code == it->lyxCode())) {
Cursor tmpcur = cur;
- tmpcur.pushLeft(*it);
+ tmpcur.pushBackward(*it);
it->dispatch(tmpcur, fr);
}
}
actOnUpdatedPrefs(lyxrc_orig, lyxrc);
+ if (lyx_view_ && lyx_view_->buffer())
+ lyx_view_->updateLayoutChoice(true);
+
/// We force the redraw in any case because there might be
/// some screen font changes.
/// FIXME: only the current view will be updated. the Gui
theSelection().haveSelection(view()->cursor().selection());
if (view()->cursor().inTexted()) {
- lyx_view_->updateLayoutChoice();
+ lyx_view_->updateLayoutChoice(false);
}
}
}
}
}
- docstring const shortcuts = theTopLevelKeymap().printbindings(cmd);
+ docstring const shortcuts = theTopLevelKeymap().printBindings(cmd);
if (!shortcuts.empty())
comname += ": " + shortcuts;
// The template stuff
string templname;
if (fromTemplate) {
- FileDialog fileDlg(_("Select template file"),
- LFUN_SELECT_FILE_SYNC,
- make_pair(_("Documents|#o#O"), from_utf8(lyxrc.document_path)),
- make_pair(_("Templates|#T#t"), from_utf8(lyxrc.template_path)));
+ FileDialog dlg(_("Select template file"));
+ dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
+ dlg.setButton1(_("Templates|#T#t"), from_utf8(lyxrc.template_path));
FileDialog::Result result =
- fileDlg.open(from_utf8(lyxrc.template_path),
+ dlg.open(from_utf8(lyxrc.template_path),
FileFilterList(_("LyX Documents (*.lyx)")),
docstring());
string filename;
if (fname.empty()) {
- FileDialog fileDlg(_("Select document to open"),
- LFUN_FILE_OPEN,
- make_pair(_("Documents|#o#O"), from_utf8(lyxrc.document_path)),
- make_pair(_("Examples|#E#e"), from_utf8(addPath(package().system_support().absFilename(), "examples"))));
+ FileDialog dlg(_("Select document to open"), LFUN_FILE_OPEN);
+ dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
+ dlg.setButton2(_("Examples|#E#e"),
+ from_utf8(addPath(package().system_support().absFilename(), "examples")));
FileDialog::Result result =
- fileDlg.open(from_utf8(initpath),
+ dlg.open(from_utf8(initpath),
FileFilterList(_("LyX Documents (*.lyx)")),
docstring());
docstring const text = bformat(_("Select %1$s file to import"),
formats.prettyName(format));
- FileDialog fileDlg(text,
- LFUN_BUFFER_IMPORT,
- make_pair(_("Documents|#o#O"), from_utf8(lyxrc.document_path)),
- make_pair(_("Examples|#E#e"),
- from_utf8(addPath(package().system_support().absFilename(), "examples"))));
+ FileDialog dlg(text, LFUN_BUFFER_IMPORT);
+ dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
+ dlg.setButton2(_("Examples|#E#e"),
+ from_utf8(addPath(package().system_support().absFilename(), "examples")));
docstring filter = formats.prettyName(format);
filter += " (*.";
filter += ')';
FileDialog::Result result =
- fileDlg.open(from_utf8(initpath),
+ dlg.open(from_utf8(initpath),
FileFilterList(filter),
docstring());
}
ErrorList errorList;
- Importer::Import(lyx_view_, fullname, format, errorList);
+ import(lyx_view_, fullname, format, errorList);
// FIXME (Abdel 12/08/06): Is there a need to display the error list here?
}
case LyXRC::RC_DATE_INSERT_FORMAT:
case LyXRC::RC_DEFAULT_LANGUAGE:
case LyXRC::RC_DEFAULT_PAPERSIZE:
+ case LyXRC::RC_DEFFILE:
case LyXRC::RC_DIALOGS_ICONIFY_WITH_MAIN:
case LyXRC::RC_DISPLAY_GRAPHICS:
case LyXRC::RC_DOCUMENTPATH:
case LyXRC::RC_USE_ESC_CHARS:
case LyXRC::RC_USE_INP_ENC:
case LyXRC::RC_USE_PERS_DICT:
+ case LyXRC::RC_USE_PIXMAP_CACHE:
case LyXRC::RC_USE_SPELL_LIB:
case LyXRC::RC_VIEWDVI_PAPEROPTION:
+ case LyXRC::RC_SORT_LAYOUTS:
case LyXRC::RC_VIEWER:
case LyXRC::RC_LAST:
break;