* Licence details can be found in the file COPYING.
*
* \author Alfredo Braunstein
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
* \author Jean-Marc Lasgouttes
* \author John Levon
- * \author André Pönitz
+ * \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#include "Buffer.h"
#include "BufferList.h"
#include "CmdDef.h"
-#include "Color.h"
+#include "ColorSet.h"
#include "ConverterCache.h"
#include "Converter.h"
#include "CutAndPaste.h"
#include "frontends/alert.h"
#include "frontends/Application.h"
+#include "graphics/Previews.h"
+
#include "support/lassert.h"
#include "support/debug.h"
#include "support/environment.h"
bool first_start;
/// the parsed command line batch command if any
vector<string> batch_commands;
+
+ ///
+ graphics::Previews preview_;
};
///
LyX::~LyX()
{
+ singleton_ = 0;
delete pimpl_;
}
-void LyX::exit(int exit_code) const
+void lyx_exit(int exit_code)
{
if (exit_code)
// Something wrong happened so better save everything, just in
}
-LyX & LyX::ref()
-{
- LASSERT(singleton_, /**/);
- return *singleton_;
-}
-
-
-LyX const & LyX::cref()
-{
- LASSERT(singleton_, /**/);
- return *singleton_;
-}
-
-
LyX::LyX()
: first_start(false)
{
}
-BufferList & LyX::bufferList()
-{
- return pimpl_->buffer_list_;
-}
-
-
-BufferList const & LyX::bufferList() const
-{
- return pimpl_->buffer_list_;
-}
-
-
-Session & LyX::session()
-{
- LASSERT(pimpl_->session_.get(), /**/);
- return *pimpl_->session_.get();
-}
-
-
-Session const & LyX::session() const
-{
- LASSERT(pimpl_->session_.get(), /**/);
- return *pimpl_->session_.get();
-}
-
-
-LyXFunc & LyX::lyxFunc()
-{
- return pimpl_->lyxfunc_;
-}
-
-
-LyXFunc const & LyX::lyxFunc() const
-{
- return pimpl_->lyxfunc_;
-}
-
-
-Server & LyX::server()
-{
- LASSERT(pimpl_->lyx_server_.get(), /**/);
- return *pimpl_->lyx_server_.get();
-}
-
-
-Server const & LyX::server() const
-{
- LASSERT(pimpl_->lyx_server_.get(), /**/);
- return *pimpl_->lyx_server_.get();
-}
-
-
-ServerSocket & LyX::socket()
-{
- LASSERT(pimpl_->lyx_socket_.get(), /**/);
- return *pimpl_->lyx_socket_.get();
-}
-
-
-ServerSocket const & LyX::socket() const
-{
- LASSERT(pimpl_->lyx_socket_.get(), /**/);
- return *pimpl_->lyx_socket_.get();
-}
-
-
-frontend::Application & LyX::application()
-{
- LASSERT(pimpl_->application_.get(), /**/);
- return *pimpl_->application_.get();
-}
-
-
-frontend::Application const & LyX::application() const
-{
- LASSERT(pimpl_->application_.get(), /**/);
- return *pimpl_->application_.get();
-}
-
-
-CmdDef & LyX::topLevelCmdDef()
-{
- return pimpl_->toplevel_cmddef_;
-}
-
-
-Converters & LyX::converters()
-{
- return pimpl_->converters_;
-}
-
-
-Converters & LyX::systemConverters()
-{
- return pimpl_->system_converters_;
-}
-
-
-Messages & LyX::getMessages(string const & language)
+Messages & LyX::messages(string const & language)
{
map<string, Messages>::iterator it = pimpl_->messages_.find(language);
}
-Messages & LyX::getGuiMessages()
-{
- return pimpl_->messages_["GUI"];
-}
-
-
-void LyX::setRcGuiLanguage()
+void setRcGuiLanguage()
{
+ LASSERT(singleton_, /**/);
if (lyxrc.gui_language == "auto")
return;
- LYXERR(Debug::LOCALE, "Setting LANGUAGE to " << lyxrc.gui_language);
- if (!setEnv("LANGUAGE", lyxrc.gui_language))
- LYXERR(Debug::LOCALE, "\t... failed!");
+ Language const * language = languages.getLanguage(lyxrc.gui_language);
+ if (language) {
+ LYXERR(Debug::LOCALE, "Setting LANGUAGE to " << language->code());
+ if (!setEnv("LANGUAGE", language->code()))
+ LYXERR(Debug::LOCALE, "\t... failed!");
+ }
LYXERR(Debug::LOCALE, "Setting LC_ALL to en_US");
if (!setEnv("LC_ALL", "en_US"))
LYXERR(Debug::LOCALE, "\t... failed!");
- pimpl_->messages_["GUI"] = Messages();
+ Messages::init();
+ singleton_->pimpl_->messages_["GUI"] = Messages();
}
} catch (ExceptionMessage const & message) {
if (message.type_ == ErrorException) {
Alert::error(message.title_, message.details_);
- exit(1);
+ lyx_exit(1);
} else if (message.type_ == WarningException) {
Alert::warning(message.title_, message.details_);
}
vector<string>::const_iterator bcit = pimpl_->batch_commands.begin();
vector<string>::const_iterator bcend = pimpl_->batch_commands.end();
for (; bcit != bcend; bcit++) {
+ LYXERR(Debug::ACTION, "Buffer::dispatch: cmd: " << *bcit);
buf->dispatch(*bcit, &success);
final_success |= success;
}
prepareExit();
return exit_status;
}
-
+
// FIXME
/* Create a CoreApplication class that will provide the main event loop
* and the socket callback registering. With Qt4, only QtCore
}
-void LyX::execBatchCommands()
+void execBatchCommands()
+{
+ LASSERT(singleton_, /**/);
+ singleton_->execCommands();
+}
+
+
+void LyX::execCommands()
{
// The advantage of doing this here is that the event loop
// is already started. So any need for interaction will be
}
// clear this list to save a few bytes of RAM
pimpl_->files_to_load_.clear();
- }
- else
+ } else
pimpl_->application_->restoreGuiSession();
// Execute batch commands if available
Windows handles SIGFPE and SIGSEGV signals as expected.
-Cntl+C interrupts (mapped to SIGINT by Windows' POSIX compatability layer)
+Ctrl+C interrupts (mapped to SIGINT by Windows' POSIX compatability layer)
cause a new thread to be spawned. This may well result in unexpected
behaviour by the single-threaded LyX.
// We have received a signal indicating a fatal error, so
// try and save the data ASAP.
- LyX::cref().emergencyCleanup();
+ emergencyCleanup();
// These lyxerr calls may or may not work:
// Read lyxrc.dist again to be able to override viewer auto-detection.
readRcFile("lyxrc.dist");
+ // Set again the language defined by the distributor.
+ setRcGuiLanguage();
+
system_lyxrc = lyxrc;
system_formats = formats;
pimpl_->system_converters_ = pimpl_->converters_;
if (!LyXSetStyle())
return false;
//...and the modules
- moduleList.load();
+ moduleList.read();
// read keymap and ui files in batch mode as well
// because InsetInfo needs to know these to produce
}
-void LyX::emergencyCleanup() const
+void emergencyCleanup()
{
// what to do about tmpfiles is non-obvious. we would
// like to delete any we find, but our lyxdir might
// contain documents etc. which might be helpful on
// a crash
- pimpl_->buffer_list_.emergencyWriteAll();
+ singleton_->pimpl_->buffer_list_.emergencyWriteAll();
if (use_gui) {
- if (pimpl_->lyx_server_)
- pimpl_->lyx_server_->emergencyCleanup();
- pimpl_->lyx_server_.reset();
- pimpl_->lyx_socket_.reset();
+ if (singleton_->pimpl_->lyx_server_)
+ singleton_->pimpl_->lyx_server_->emergencyCleanup();
+ singleton_->pimpl_->lyx_server_.reset();
+ singleton_->pimpl_->lyx_socket_.reset();
}
}
" where fmt is the export format of choice.\n"
" Look on Tools->Preferences->File formats->Format\n"
" to get an idea which parameters should be passed.\n"
+ " Note that the order of -e and -x switches matters."
"\t-i [--import] fmt file.xxx\n"
" where fmt is the import format of choice\n"
" and file.xxx is the file to be imported.\n"
int parse_geometry(string const & arg1, string const &, string &)
{
geometryArg = arg1;
-#if defined(_WIN32) || (defined(__CYGWIN__) && defined(X_DISPLAY_MISSING))
- // remove also the arg
- return 1;
-#else
- // don't remove "-geometry"
+ // don't remove "-geometry", it will be pruned out later in the
+ // frontend if need be.
return -1;
-#endif
}
FuncStatus getStatus(FuncRequest const & action)
{
- return LyX::ref().lyxFunc().getStatus(action);
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->lyxfunc_.getStatus(action);
}
void dispatch(FuncRequest const & action)
{
- LyX::ref().lyxFunc().dispatch(action);
+ LASSERT(singleton_, /**/);
+ singleton_->pimpl_->lyxfunc_.dispatch(action);
}
BufferList & theBufferList()
{
- return LyX::ref().bufferList();
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->buffer_list_;
}
LyXFunc & theLyXFunc()
{
- return LyX::ref().lyxFunc();
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->lyxfunc_;
}
{
// FIXME: this should not be use_gui dependent
LASSERT(use_gui, /**/);
- return LyX::ref().server();
+ LASSERT(singleton_, /**/);
+ return *singleton_->pimpl_->lyx_server_.get();
}
{
// FIXME: this should not be use_gui dependent
LASSERT(use_gui, /**/);
- return LyX::ref().socket();
+ LASSERT(singleton_, /**/);
+ return *singleton_->pimpl_->lyx_socket_.get();
}
KeyMap & theTopLevelKeymap()
{
- return LyX::ref().pimpl_->toplevel_keymap_;
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->toplevel_keymap_;
}
Converters & theConverters()
{
- return LyX::ref().converters();
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->converters_;
}
Converters & theSystemConverters()
{
- return LyX::ref().systemConverters();
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->system_converters_;
}
Movers & theMovers()
{
- return LyX::ref().pimpl_->movers_;
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->movers_;
}
Mover const & getMover(string const & fmt)
{
- return LyX::ref().pimpl_->movers_(fmt);
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->movers_(fmt);
}
void setMover(string const & fmt, string const & command)
{
- LyX::ref().pimpl_->movers_.set(fmt, command);
+ LASSERT(singleton_, /**/);
+ singleton_->pimpl_->movers_.set(fmt, command);
}
Movers & theSystemMovers()
{
- return LyX::ref().pimpl_->system_movers_;
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->system_movers_;
}
Messages & getMessages(string const & language)
{
- return LyX::ref().getMessages(language);
+ LASSERT(singleton_, /**/);
+ return singleton_->messages(language);
}
Messages & getGuiMessages()
{
- return LyX::ref().getGuiMessages();
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->messages_["GUI"];
+}
+
+
+graphics::Previews & thePreviews()
+{
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->preview_;
+}
+
+
+Session & theSession()
+{
+ LASSERT(singleton_, /**/);
+ return *singleton_->pimpl_->session_.get();
+}
+
+
+CmdDef & theTopLevelCmdDef()
+{
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->toplevel_cmddef_;
}
} // namespace lyx