X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyx_main.h;h=ab1619f97e7372a30b189ec50a4817141ad1ee43;hb=35204f8f33d7400a5fefeffea533fb4cb4097211;hp=4929f141f1bf738d9b956124bc7813c4d843c1a3;hpb=50257b86904437b6695a7a9a823fbe4301ba0ce3;p=lyx.git diff --git a/src/lyx_main.h b/src/lyx_main.h index 4929f141f1..ab1619f97e 100644 --- a/src/lyx_main.h +++ b/src/lyx_main.h @@ -15,64 +15,140 @@ #define LYX_MAIN_H #include -#include #include -#include #include +#include + +namespace lyx { class Buffer; +class BufferList; class ErrorItem; -class InsetOld; -class LastFiles; +class IconvProcessor; +class InsetBase; +class LyXFunc; +class LyXServer; +class LyXServerSocket; class LyXView; +class Session; class kb_keymap; +extern bool use_gui; + +namespace frontend { class Application; } /// initial startup class LyX : boost::noncopyable { public: - static void exec(int & argc, char * argv[]); + + LyX(); + ~LyX(); + + /** + * Execute LyX. The startup sequence is as follows: + * -# LyX::exec() + * -# LyX::priv_exec() + * -# lyx::createApplication() + * Step 3 is omitted if no gui is wanted. We need lyx::createApplication() + * 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). + */ + int exec(int & argc, char * argv[]); + static LyX & ref(); static LyX const & cref(); /// in the case of failure void emergencyCleanup() const; - LastFiles & lastfiles(); - LastFiles const & lastfiles() const; + /// Ask the LyX class to exit. + /** + In GUI mode, after this function has been called, application_ leaves + the main event loop and returns from the call to Application::start(). + */ + void quit(); - void addLyXView(boost::shared_ptr const & lyxview); + /// + 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; + + /// + frontend::Application & application(); + frontend::Application const & application() const; + + /// + kb_keymap & topLevelKeymap(); + kb_keymap const & topLevelKeymap() const; + + /// + 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(InsetOld const *) const; + Buffer const * const updateInset(InsetBase const *) const; 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 execute batch commands if available. + /** + \param files is filled in with the command-line file names. + \return exit code failure if any. + */ + int execBatchCommands(int & argc, char * argv[], + std::vector & files); + + /// Create a View and restore GUI Session. + void restoreGuiSession(std::vector const & files); + + /// Initialize RC font for the GUI. + void initGuiFont(); /// initial LyX set up - void init(bool); + bool init(); /// set up the default key bindings void defaultKeyBindings(kb_keymap * kbmap); /// set up the default dead key bindings if requested void deadKeyBindings(kb_keymap * kbmap); - /// check, set up and configure the user dir if necessary - void queryUserLyXDir(bool explicit_userdir); + /** 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. + * \returns true if the user-side configuration script + * (lib/configure) should be re-run in this directory. + */ + 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); /// read the given languages file - void readLanguagesFile(std::string const & name); + bool 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 readEncodingsFile(std::string const & name); + /// parsing of non-gui LyX options. + void easyParse(int & argc, char * argv[]); /// shows up a parsing error on screen void printError(ErrorItem const &); @@ -81,11 +157,14 @@ private: /// the parsed command line batch command if any std::string batch_command; - /// last files loaded - boost::scoped_ptr lastfiles_; + /// Use the Pimpl idiom to hide the internals. + struct Singletons; + boost::scoped_ptr pimpl_; + /// - typedef std::list > ViewList; - ViewList views_; + bool geometryOption_; }; +} // namespace lyx + #endif // LYX_MAIN_H