#include "LyXFunc.h"
#include "Lexer.h"
#include "LyXRC.h"
-#include "LyXServer.h"
-#include "LyXServerSocket.h"
-#include "LyXTextClassList.h"
+#include "Server.h"
+#include "ServerSocket.h"
+#include "TextClassList.h"
#include "MenuBackend.h"
#include "Messages.h"
#include "Mover.h"
#include "frontends/alert.h"
#include "frontends/Application.h"
+#include "frontends/Dialogs.h"
#include "frontends/Gui.h"
#include "frontends/LyXView.h"
#include <boost/bind.hpp>
#include <boost/filesystem/operations.hpp>
+#include <algorithm>
#include <iostream>
#include <csignal>
#include <map>
#include <string>
#include <vector>
+using std::endl;
+using std::for_each;
+using std::map;
+using std::make_pair;
+using std::string;
+using std::vector;
+
+#ifndef CXX_GLOBAL_CSTD
+using std::exit;
+using std::signal;
+using std::system;
+#endif
+
+namespace fs = boost::filesystem;
namespace lyx {
using support::prependEnvPath;
using support::rtrim;
using support::Systemcall;
+using frontend::LyXView;
namespace Alert = frontend::Alert;
namespace os = support::os;
-namespace fs = boost::filesystem;
-
-using std::endl;
-using std::for_each;
-using std::map;
-using std::make_pair;
-using std::string;
-using std::vector;
-#ifndef CXX_GLOBAL_CSTD
-using std::exit;
-using std::signal;
-using std::system;
-#endif
/// are we using the GUI at all?
-/**
+/**
* We default to true and this is changed to false when the export feature is used.
*/
bool use_gui = true;
/// The main application class private implementation.
-struct LyX::Singletons
+struct LyX::Singletons
{
Singletons()
{
///
boost::scoped_ptr<KeyMap> toplevel_keymap_;
///
- boost::scoped_ptr<LyXServer> lyx_server_;
+ boost::scoped_ptr<Server> lyx_server_;
///
- boost::scoped_ptr<LyXServerSocket> lyx_socket_;
+ boost::scoped_ptr<ServerSocket> lyx_socket_;
///
boost::scoped_ptr<frontend::Application> application_;
/// lyx session, containing lastfiles, lastfilepos, and lastopened
// The system converters copy after reading lyxrc.defaults.
Converters system_converters_;
-
+
///
Movers movers_;
-
+
///
Movers system_movers_;
};
}
-LyXServer & LyX::server()
+Server & LyX::server()
{
BOOST_ASSERT(pimpl_->lyx_server_.get());
- return *pimpl_->lyx_server_.get();
+ return *pimpl_->lyx_server_.get();
}
-LyXServer const & LyX::server() const
+Server const & LyX::server() const
{
BOOST_ASSERT(pimpl_->lyx_server_.get());
- return *pimpl_->lyx_server_.get();
+ return *pimpl_->lyx_server_.get();
}
-LyXServerSocket & LyX::socket()
+ServerSocket & LyX::socket()
{
BOOST_ASSERT(pimpl_->lyx_socket_.get());
return *pimpl_->lyx_socket_.get();
}
-LyXServerSocket const & LyX::socket() const
+ServerSocket const & LyX::socket() const
{
BOOST_ASSERT(pimpl_->lyx_socket_.get());
return *pimpl_->lyx_socket_.get();
if (it != pimpl_->messages_.end())
return it->second;
- std::pair<map<string, Messages>::iterator, bool> result =
+ std::pair<map<string, Messages>::iterator, bool> result =
pimpl_->messages_.insert(std::make_pair(language, Messages(language)));
BOOST_ASSERT(result.second);
Buffer const * const LyX::updateInset(Inset const * inset) const
{
- if (!inset)
+ if (quitting || !inset)
return 0;
Buffer const * buffer_ptr = 0;
}
+void LyX::hideDialogs(std::string const & name, Inset * inset) const
+{
+ if (quitting || !use_gui)
+ return;
+
+ vector<int> const & view_ids = pimpl_->application_->gui().viewIds();
+ vector<int>::const_iterator it = view_ids.begin();
+ vector<int>::const_iterator const end = view_ids.end();
+ for (; it != end; ++it)
+ pimpl_->application_->gui().view(*it).getDialogs().
+ hide(name, inset);
+}
+
+
int LyX::exec(int & argc, char * argv[])
{
// Here we need to parse the command line. At least
easyParse(argc, argv);
try { support::init_package(to_utf8(from_local8bit(argv[0])),
- cl_system_support, cl_user_support,
- support::top_build_dir_is_one_level_up);
+ 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_);
}
}
+ // Reinit the messages machinery in case package() knows
+ // something interesting about the locale directory.
+ Messages::init();
+
if (!use_gui) {
// FIXME: create a ConsoleApplication
int exit_status = init(argc, argv);
Buffer * buf = *I;
bool success = false;
buf->dispatch(batch_command, &success);
- final_success |= success;
+ final_success |= success;
}
prepareExit();
return !final_success;
*/
// Note: socket callback must be registered after init(argc, argv)
// 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_,
+ pimpl_->lyx_server_.reset(new Server(&pimpl_->lyxfunc_, lyxrc.lyxpipes));
+ pimpl_->lyx_socket_.reset(new ServerSocket(&pimpl_->lyxfunc_,
FileName(package().temp_dir().absFilename() + "/lyxsocket")));
// Start the real execution loop.
exit_status = pimpl_->application_->exec();
-
+
prepareExit();
// Restore original font resources after Application is destroyed.
}
+void LyX::addFileToLoad(FileName const & fname)
+{
+ vector<FileName>::const_iterator cit = std::find(
+ pimpl_->files_to_load_.begin(), pimpl_->files_to_load_.end(),
+ fname);
+
+ if (cit == pimpl_->files_to_load_.end())
+ pimpl_->files_to_load_.push_back(fname);
+}
+
+
void LyX::loadFiles()
{
vector<FileName>::const_iterator it = pimpl_->files_to_load_.begin();
if (!pimpl_->files_to_load_.empty()) {
for_each(pimpl_->files_to_load_.begin(),
pimpl_->files_to_load_.end(),
- bind(&LyXView::loadLyXFile, view, _1, true));
+ bind(&LyXView::loadLyXFile, view, _1, true, false, false));
// clear this list to save a few bytes of RAM
pimpl_->files_to_load_.clear();
pimpl_->session_->lastOpened().clear();
// last session, and should be already there (regular files), or should
// not be added at all (help files).
for_each(lastopened.begin(), lastopened.end(),
- bind(&LyXView::loadLyXFile, view, _1, false));
+ bind(&LyXView::loadLyXFile, view, _1, false, false, false));
// clear this list to save a few bytes of RAM
pimpl_->session_->lastOpened().clear();
posy = convert<int>(val);
}
- if (!geometryArg.empty())
+ if (!geometryArg.empty())
{
width = 0;
height = 0;
lyxrc.sans_font_name = pimpl_->application_->sansFontName();
if (lyxrc.typewriter_font_name.empty())
- lyxrc.typewriter_font_name
+ lyxrc.typewriter_font_name
= pimpl_->application_->typewriterFontName();
}
}
LYXERR(Debug::INIT) << "LyX tmp dir: `"
- << package().temp_dir().absFilename()
- << '\'' << endl;
+ << package().temp_dir().absFilename()
+ << '\'' << endl;
LYXERR(Debug::INIT) << "Reading session information '.lyx/session'..." << endl;
pimpl_->session_.reset(new Session(lyxrc.num_lastfiles));
LYXERR(Debug::INIT) << "About to read " << name << "..." << endl;
-
+
FileName ui_path;
if (include) {
ui_path = libFileSearch("ui", name, "inc");
}
else
ui_path = libFileSearch("ui", name, "ui");
-
+
if (ui_path.empty()) {
LYXERR(Debug::INIT) << "Could not find " << name << endl;
showFileError(name);
// Read the encodings file `name'
bool LyX::readEncodingsFile(string const & enc_name,
- string const & symbols_name)
+ string const & symbols_name)
{
LYXERR(Debug::INIT) << "About to read " << enc_name << " and "
- << symbols_name << "..." << endl;
+ << symbols_name << "..." << endl;
FileName const symbols_path = libFileSearch(string(), symbols_name);
if (symbols_path.empty()) {
}
-LyXServer & theLyXServer()
+Server & theServer()
{
// FIXME: this should not be use_gui dependent
BOOST_ASSERT(use_gui);
}
-LyXServerSocket & theLyXServerSocket()
+ServerSocket & theServerSocket()
{
// FIXME: this should not be use_gui dependent
BOOST_ASSERT(use_gui);