X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyx_main.h;h=6c53bc6a01dd8ee1c2f853a0cf2b9c1c8b572c53;hb=e5a46922e916a06ad1b958d5895cc3cfb4f13d2c;hp=550619784aa5ed4f3d7564f6659533e9601e7372;hpb=04cfa65a96b89e51a0c5f8077a0eec732490b2ce;p=lyx.git diff --git a/src/lyx_main.h b/src/lyx_main.h index 550619784a..6c53bc6a01 100644 --- a/src/lyx_main.h +++ b/src/lyx_main.h @@ -15,64 +15,123 @@ #define LYX_MAIN_H #include -#include #include -#include #include +namespace lyx { + class Buffer; +class BufferList; +class Converters; class ErrorItem; +class IconvProcessor; class InsetBase; +class LyXFunc; +class LyXServer; +class LyXServerSocket; class LyXView; +class Messages; +class Mover; +class Movers; +class Session; class kb_keymap; -namespace lyx { - class Session; -} +extern bool use_gui; + +namespace frontend { class Application; } /// initial startup class LyX : boost::noncopyable { public: - /** - * Execute LyX. The startup sequence is as follows: - * -# LyX::exec() - * -# LyX::priv_exec() - * -# lyx_gui::exec() - * -# LyX::exec2() - * Step 3 is omitted if no gui is wanted. We need lyx_gui::exec() - * only to create the QApplication object in the qt frontend. All - * attempts with static and dynamically allocated QApplication - * objects lead either to harmless error messages on exit - * ("Mutex destroy failure") or crashes (OS X). - */ - static void exec(int & argc, char * argv[]); - /// Execute LyX (inner execution loop, \sa exec) - void exec2(int & argc, char * argv[]); + + LyX(); + ~LyX(); + + /// Execute LyX. + int exec(int & argc, char * argv[]); + static LyX & ref(); static LyX const & cref(); /// in the case of failure void emergencyCleanup() const; - lyx::Session & session(); - lyx::Session const & session() const; + /// + BufferList & bufferList(); + BufferList const & bufferList() const; + /// + Session & session(); + Session const & session() const; + /// + LyXFunc & lyxFunc(); + LyXFunc const & lyxFunc() const; + /// + LyXServer & server(); + LyXServer const & server() const; + /// + LyXServerSocket & socket(); + LyXServerSocket const & socket() const; - void addLyXView(boost::shared_ptr const & lyxview); + /// + frontend::Application & application(); + frontend::Application const & application() const; + + /// + kb_keymap & topLevelKeymap(); + kb_keymap const & topLevelKeymap() const; + + /// + Converters & converters(); + Converters & systemConverters(); + + /// + Messages & getMessages(std::string const & language); + /// + Messages & getGuiMessages(); + /// + void setGuiLanguage(std::string const & language); + + /// + IconvProcessor & iconvProcessor(); + + 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(InsetBase const *) const; + /// Execute batch commands if available. + void execBatchCommands(); + private: - static boost::scoped_ptr singleton_; + /// Do some cleanup in preparation of an exit. + void prepareExit(); - LyX(); - void priv_exec(int & argc, char * argv[]); + /// Early exit during the initialisation process. + void earlyExit(int status); + + /// Initialise LyX and fills-in the vector of files to be loaded. + /** + \return exit code failure if any. + */ + int init(int & argc, char * argv[]); + + /// Load files passed at command-line. + /** + 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(); /// initial LyX set up - void init(); + bool init(); /// set up the default key bindings void defaultKeyBindings(kb_keymap * kbmap); /// set up the default dead key bindings if requested @@ -85,15 +144,18 @@ private: */ bool queryUserLyXDir(bool explicit_userdir); /// read lyxrc/preferences - void readRcFile(std::string const & name); + bool readRcFile(std::string const & name); /// read the given ui (menu/toolbar) file - void readUIFile(std::string const & name); + bool readUIFile(std::string const & name, bool include = false); /// read the given languages file - void readLanguagesFile(std::string const & name); - /// read the given encodings file - void readEncodingsFile(std::string const & name); - /// parsing of non-gui LyX options. Returns true if gui - bool easyParse(int & argc, char * argv[]); + bool readLanguagesFile(std::string const & name); + /// read the encodings. + /// \param enc_name encodings definition file + /// \param symbols_name unicode->LaTeX mapping file + bool readEncodingsFile(std::string const & enc_name, + std::string const & symbols_name); + /// parsing of non-gui LyX options. + void easyParse(int & argc, char * argv[]); /// shows up a parsing error on screen void printError(ErrorItem const &); @@ -102,15 +164,17 @@ private: /// the parsed command line batch command if any std::string batch_command; - /// lyx session, containing lastfiles, lastfilepos, and lastopened - boost::scoped_ptr session_; - /// - typedef std::list > ViewList; - ViewList views_; - - /// - bool geometryOption_; + /// Use the Pimpl idiom to hide the internals. + struct Singletons; + boost::scoped_ptr pimpl_; + 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(); }; +} // namespace lyx + #endif // LYX_MAIN_H