* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
* \author Jean-Marc Lasgouttes
* \author John Levon
*
#ifndef LYX_H
#define LYX_H
-#include <boost/scoped_ptr.hpp>
-#include <boost/utility.hpp>
+#include "support/strfwd.h"
-#include <string>
+#include <vector>
namespace lyx {
-namespace support {
-class FileName;
-}
-
-class Buffer;
class BufferList;
+class CmdDef;
class Converters;
+class DispatchResult;
class ErrorItem;
-class Inset;
-class LyXFunc;
-class Server;
-class ServerSocket;
-class LyXView;
+class FuncRequest;
+class FuncStatus;
+class KeyMap;
class Messages;
class Mover;
class Movers;
+class Server;
+class ServerSocket;
class Session;
-class KeyMap;
+class SpellChecker;
+
+enum RunMode {
+ NEW_INSTANCE,
+ USE_REMOTE,
+ PREFERRED
+};
+
+enum OverwriteFiles {
+ NO_FILES,
+ MAIN_FILE,
+ ALL_FILES,
+ UNSPECIFIED
+};
extern bool use_gui;
+extern RunMode run_mode;
+extern OverwriteFiles force_overwrite;
-namespace frontend { class Application; }
+namespace frontend {
+class Application;
+}
/// initial startup
-class LyX : boost::noncopyable {
+class LyX {
public:
LyX();
/// Execute LyX.
int exec(int & argc, char * argv[]);
- static LyX & ref();
- static LyX const & cref();
-
- /// in the case of failure
- void emergencyCleanup() const;
-
- ///
- BufferList & bufferList();
- BufferList const & bufferList() const;
- ///
- Session & session();
- Session const & session() const;
- ///
- LyXFunc & lyxFunc();
- LyXFunc const & lyxFunc() const;
- ///
- Server & server();
- Server const & server() const;
- ///
- ServerSocket & socket();
- ServerSocket const & socket() const;
-
- ///
- frontend::Application & application();
- frontend::Application const & application() const;
-
- ///
- KeyMap & topLevelKeymap();
- KeyMap const & topLevelKeymap() const;
-
- ///
- Converters & converters();
- Converters & systemConverters();
-
- ///
- Messages & getMessages(std::string const & language);
- ///
- Messages & getGuiMessages();
- ///
- void setGuiLanguage(std::string const & language);
-
- ///
- LyXView * newLyXView();
-
- /** redraw \c inset in all the BufferViews in which it is currently
- * visible. If successful return a pointer to the owning Buffer.
- */
- Buffer const * const updateInset(Inset const *) const;
-
- /// Execute batch commands if available.
- void execBatchCommands();
-
- ///
- void addFileToLoad(support::FileName const &);
-
private:
+ /// noncopyable
+ LyX(LyX const &);
+ void operator=(LyX const &);
+
/// Do some cleanup in preparation of an exit.
void prepareExit();
*/
int init(int & argc, char * argv[]);
+ /// Execute batch commands if available.
+ void execCommands();
+
/// Load files passed at command-line.
+ /// return true on success false if we encounter an error
/**
This method is used only in non-GUI mode.
*/
- void loadFiles();
-
- /// Create a View, load files and restore GUI Session.
- void restoreGuiSession();
-
- /// Initialize RC font for the GUI.
- void initGuiFont();
+ bool loadFiles();
/// initial LyX set up
bool init();
- /// set up the default key bindings
- void defaultKeyBindings(KeyMap * kbmap);
- /// set up the default dead key bindings if requested
- void deadKeyBindings(KeyMap * kbmap);
/** Check for the existence of the user's support directory and,
* if not present, create it. Exits the program if the directory
* cannot be created.
*/
bool queryUserLyXDir(bool explicit_userdir);
/// read lyxrc/preferences
- bool readRcFile(std::string const & name);
- /// read the given ui (menu/toolbar) file
- bool readUIFile(std::string const & name, bool include = false);
+ /// \param check_format: whether to try to convert the format of
+ /// the file, if there is a mismatch.
+ bool readRcFile(std::string const & name, bool check_format = false);
/// read the given languages file
bool readLanguagesFile(std::string const & name);
/// read the encodings.
/// shows up a parsing error on screen
void printError(ErrorItem const &);
- /// has this user started lyx for the first time?
- bool first_start;
- /// the parsed command line batch command if any
- std::string batch_command;
+ ///
+ Messages & messages(std::string const & language);
/// Use the Pimpl idiom to hide the internals.
- struct Singletons;
- boost::scoped_ptr<Singletons> pimpl_;
+ // Mostly used for singletons.
+ struct Impl;
+ Impl * pimpl_;
+
+ /// has this user started lyx for the first time?
+ bool first_start;
+ friend FuncStatus getStatus(FuncRequest const & action);
+ friend void dispatch(FuncRequest const & action);
+ friend void dispatch(FuncRequest const & action, DispatchResult & dr);
+ friend std::vector<std::string> & theFilesToLoad();
+ friend BufferList & theBufferList();
+ friend Server & theServer();
+ friend ServerSocket & theServerSocket();
+ friend Converters & theConverters();
+ friend Converters & theSystemConverters();
+ friend Messages const & getMessages(std::string const & language);
+ friend Messages const & getGuiMessages();
+ friend KeyMap & theTopLevelKeymap();
friend Movers & theMovers();
friend Mover const & getMover(std::string const & fmt);
friend void setMover(std::string const & fmt, std::string const & command);
friend Movers & theSystemMovers();
friend frontend::Application * theApp();
+ friend Session & theSession();
+ friend CmdDef & theTopLevelCmdDef();
+ friend SpellChecker * theSpellChecker();
+ friend void setSpellChecker();
+ friend void setRcGuiLanguage();
+ friend void emergencyCleanup();
+ friend void execBatchCommands();
+ friend void lyx_exit(int exit_code);
};
+
+/// in the case of failure
+void emergencyCleanup();
+/// Try to exit LyX properly.
+/// \p exit_code is 0 by default, if a non zero value is passed,
+/// emergencyCleanup() will be called before exiting.
+void lyx_exit(int exit_code);
+/// Set the language defined by the user.
+void setRcGuiLanguage();
+/// Execute batch commands if available.
+void execBatchCommands();
+
+///
+FuncStatus getStatus(FuncRequest const & action);
+
+///
+void dispatch(FuncRequest const & action);
+
+///
+void dispatch(FuncRequest const & action, DispatchResult & dr);
+
} // namespace lyx
#endif // LYX_H
+