#include "support/filetools.h"
#include "support/lyxlib.h"
#include "support/convert.h"
+#include "support/ExceptionMessage.h"
#include "support/os.h"
#include "support/package.h"
#include "support/path.h"
#include "support/systemcall.h"
-#include "support/unicode.h"
#include <boost/bind.hpp>
#include <boost/filesystem/operations.hpp>
using support::addName;
using support::addPath;
using support::bformat;
+using support::changeExtension;
using support::createDirectory;
using support::createLyXTmpDir;
using support::destroyDir;
/// The main application class private implementation.
struct LyX::Singletons
{
- Singletons(): iconv(ucs4_codeset, "UTF-8")
+ Singletons()
{
+ // Set the default User Interface language as soon as possible.
+ // The language used will be derived from the environment
+ // variables.
+ messages_["GUI"] = Messages();
}
/// our function handler
LyXFunc lyxfunc_;
/// lyx session, containing lastfiles, lastfilepos, and lastopened
boost::scoped_ptr<Session> session_;
- ///
- IconvProcessor iconv;
-
/// Files to load at start.
vector<FileName> files_to_load_;
- ///
+ /// The messages translators.
map<string, Messages> messages_;
+
+ /// The file converters.
+ Converters converters_;
+
+ // The system converters copy after reading lyxrc.defaults.
+ Converters system_converters_;
+
+ ///
+ Movers movers_;
+
+ ///
+ Movers system_movers_;
};
///
frontend::Application * theApp()
{
if (singleton_)
- return &singleton_->application();
+ return singleton_->pimpl_->application_.get();
else
return 0;
}
{
singleton_ = this;
pimpl_.reset(new Singletons);
- geometryArg.clear();
}
}
-IconvProcessor & LyX::iconvProcessor()
+Converters & LyX::converters()
+{
+ return pimpl_->converters_;
+}
+
+
+Converters & LyX::systemConverters()
{
- return pimpl_->iconv;
+ return pimpl_->system_converters_;
}
// we need to parse for "-dbg" and "-help"
easyParse(argc, argv);
- support::init_package(to_utf8(from_local8bit(argv[0])),
+ try { support::init_package(to_utf8(from_local8bit(argv[0])),
cl_system_support, cl_user_support,
support::top_build_dir_is_one_level_up);
+ } catch (support::ExceptionMessage const & message) {
+ if (message.type_ == support::ErrorException) {
+ Alert::error(message.title_, message.details_);
+ exit(1);
+ } else if (message.type_ == support::WarningException) {
+ Alert::warning(message.title_, message.details_);
+ }
+ }
if (!use_gui) {
// FIXME: create a ConsoleApplication
// such that package().temp_dir() is properly initialized.
pimpl_->lyx_server_.reset(new LyXServer(&pimpl_->lyxfunc_, lyxrc.lyxpipes));
pimpl_->lyx_socket_.reset(new LyXServerSocket(&pimpl_->lyxfunc_,
- support::os::internal_path(package().temp_dir() + "/lyxsocket")));
+ os::internal_path(package().temp_dir() + "/lyxsocket")));
// Start the real execution loop.
exit_status = pimpl_->application_->exec();
unsigned int height = 510;
// default icon size, will be overwritten by stored session value
unsigned int iconSizeXY = 0;
- bool maximize = false;
+ int maximized = LyXView::NotMaximized;
// first try lyxrc
if (lyxrc.geometry_width != 0 && lyxrc.geometry_height != 0 ) {
width = lyxrc.geometry_width;
val = session().sessionInfo().load("WindowHeight");
if (!val.empty())
height = convert<unsigned int>(val);
- if (session().sessionInfo().load("WindowIsMaximized") == "yes")
- maximize = true;
+ val = session().sessionInfo().load("WindowMaximized");
+ if (!val.empty())
+ maximized = convert<int>(val);
val = session().sessionInfo().load("IconSizeXY");
if (!val.empty())
iconSizeXY = convert<unsigned int>(val);
}
// create the main window
- LyXView * view = &pimpl_->application_->createView(width, height, posx, posy, maximize, iconSizeXY, geometryArg);
+ LyXView * view = &pimpl_->application_->createView(width, height, posx, posy, maximized, iconSizeXY, geometryArg);
return view;
}
if (!readRcFile("lyxrc.dist"))
return false;
- // Set the User Interface language.
- pimpl_->messages_["GUI"] = Messages();
+ // Set the language defined by the distributor.
+ //setGuiLanguage(lyxrc.gui_language);
// Set the PATH correctly.
#if !defined (USE_POSIX_PACKAGING)
system_lyxrc = lyxrc;
system_formats = formats;
- system_converters = converters;
- system_movers = movers;
+ pimpl_->system_converters_ = pimpl_->converters_;
+ pimpl_->system_movers_ = pimpl_->movers_;
system_lcolor = lcolor;
// This one is edited through the preferences dialog.
if (!readRcFile("preferences"))
return false;
- if (!readEncodingsFile("encodings"))
+ if (!readEncodingsFile("encodings", "unicodesymbols"))
return false;
if (!readLanguagesFile("languages"))
return false;
return false;
if (use_gui) {
+ // Set the language defined by the user.
+ //setGuiLanguage(lyxrc.gui_language);
+
// Set up bindings
pimpl_->toplevel_keymap_.reset(new kb_keymap);
defaultKeyBindings(pimpl_->toplevel_keymap_.get());
// Read the ui file `name'
-bool LyX::readUIFile(string const & name)
+bool LyX::readUIFile(string const & name, bool include)
{
enum Uitags {
ui_menuset = 1,
lyxerr[Debug::INIT] << "About to read " << name << "..." << endl;
- FileName const ui_path = libFileSearch("ui", name, "ui");
-
+
+ FileName ui_path;
+ if (include) {
+ ui_path = libFileSearch("ui", name, "inc");
+ if (ui_path.empty())
+ ui_path = libFileSearch("ui",
+ changeExtension(name, "inc"));
+ }
+ else
+ ui_path = libFileSearch("ui", name, "ui");
+
if (ui_path.empty()) {
lyxerr[Debug::INIT] << "Could not find " << name << endl;
showFileError(name);
return false;
}
+
uifiles.push_back(name);
lyxerr[Debug::INIT] << "Found " << name
case ui_include: {
lex.next(true);
string const file = lex.getString();
- if (!readUIFile(file))
+ if (!readUIFile(file, true))
return false;
break;
}
// Read the encodings file `name'
-bool LyX::readEncodingsFile(string const & name)
+bool LyX::readEncodingsFile(string const & enc_name,
+ string const & symbols_name)
{
- lyxerr[Debug::INIT] << "About to read " << name << "..." << endl;
+ lyxerr[Debug::INIT] << "About to read " << enc_name << " and "
+ << symbols_name << "..." << endl;
- FileName const enc_path = libFileSearch(string(), name);
+ FileName const symbols_path = libFileSearch(string(), symbols_name);
+ if (symbols_path.empty()) {
+ showFileError(symbols_name);
+ return false;
+ }
+
+ FileName const enc_path = libFileSearch(string(), enc_name);
if (enc_path.empty()) {
- showFileError(name);
+ showFileError(enc_name);
return false;
}
- encodings.read(enc_path);
+ encodings.read(enc_path, symbols_path);
return true;
}
int parse_sysdir(string const & arg, string const &)
{
if (arg.empty()) {
- lyxerr << to_utf8(_("Missing directory for -sysdir switch")) << endl;
+ Alert::error(_("No system directory"),
+ _("Missing directory for -sysdir switch"));
exit(1);
}
cl_system_support = arg;
int parse_userdir(string const & arg, string const &)
{
if (arg.empty()) {
- lyxerr << to_utf8(_("Missing directory for -userdir switch")) << endl;
+ Alert::error(_("No user directory"),
+ _("Missing directory for -userdir switch"));
exit(1);
}
cl_user_support = arg;
int parse_execute(string const & arg, string const &)
{
if (arg.empty()) {
- lyxerr << to_utf8(_("Missing command string after --execute switch")) << endl;
+ Alert::error(_("Incomplete command"),
+ _("Missing command string after --execute switch"));
exit(1);
}
batch = arg;
}
-IconvProcessor & utf8ToUcs4()
+Converters & theConverters()
+{
+ return LyX::ref().converters();
+}
+
+
+Converters & theSystemConverters()
+{
+ return LyX::ref().systemConverters();
+}
+
+
+Movers & theMovers()
+{
+ return LyX::ref().pimpl_->movers_;
+}
+
+
+Mover const & getMover(std::string const & fmt)
+{
+ return LyX::ref().pimpl_->movers_(fmt);
+}
+
+
+void setMover(std::string const & fmt, std::string const & command)
+{
+ LyX::ref().pimpl_->movers_.set(fmt, command);
+}
+
+
+Movers & theSystemMovers()
{
- return LyX::ref().iconvProcessor();
+ return LyX::ref().pimpl_->system_movers_;
}