X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyx_main.h;h=4145c78b842991f0f48065cebe6677cc2ad1df53;hb=89b422b320a352e503c0625820da1073805d74a9;hp=668e5dd7e907e1e4f7165a7ffd63ff6925415ead;hpb=a040c0bc6f017d0591bbc7ad1aa590589dbc40ff;p=lyx.git diff --git a/src/lyx_main.h b/src/lyx_main.h index 668e5dd7e9..4145c78b84 100644 --- a/src/lyx_main.h +++ b/src/lyx_main.h @@ -1,90 +1,177 @@ // -*- C++ -*- -/* This file is part of -* ====================================================== -* -* LyX, The Document Processor -* -* Copyright (C) 1995 1996 Matthias Ettrich -* and the LyX Team. -* -* ====================================================== */ - -/* This is the declaration of the LyX class, there should only - * exist _one_ instance of this in the application. */ +/** + * \file lyx_main.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Lars Gullik Bjønnes + * \author Jean-Marc Lasgouttes + * \author John Levon + * + * Full author contact details are available in file CREDITS. + */ #ifndef LYX_MAIN_H #define LYX_MAIN_H -#include +#include +#include + +#include -#include "LString.h" +namespace lyx { -class LyXGUI; -class LyXRC; -class LastFiles; 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; + +extern bool use_gui; + +namespace frontend { class Application; } + +/// initial startup +class LyX : boost::noncopyable { +public: + LyX(); + ~LyX(); -extern string system_lyxdir; -extern string user_lyxdir; -extern string system_tempdir; + /// Execute LyX. + int exec(int & argc, char * argv[]); -extern LastFiles *lastfiles; /* we should hopefully be able to move this - * inside the LyX class */ + static LyX & ref(); + static LyX const & cref(); -extern LyXRC *lyxrc; + /// 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; + /// + LyXServer & server(); + LyXServer const & server() const; + /// + LyXServerSocket & socket(); + LyXServerSocket const & socket() const; -/** - This is the main LyX object it encapsulates most of the other objects. -*/ -class LyX -{ -public: - /**@name Constructors and Deconstructors */ - //@{ - /// the only allowed constructor - LyX(int *argc, char *argv[]); // constructor - // Always is useful a destructor - ~LyX(); - //@} + /// + frontend::Application & application(); + frontend::Application const & application() const; - /**@name Pointers to... */ - //@{ /// - LyXGUI *lyxGUI; // should be only one of this - //@} -private: - /**@name Constructors and Deconstructors */ - //@{ - /// not allowed - LyX(const LyX &){;} // not allowed - /// not allowed - LyX(){;} // not allowed - //@} - - /**@name Private variables */ - //@{ - /// does this user start lyx for the first time? - bool first_start; + kb_keymap & topLevelKeymap(); + kb_keymap const & topLevelKeymap() const; + /// - struct sigaction act_; - //@} - /**@name Private Members */ - //@{ + Converters & converters(); + Converters & systemConverters(); + /// - void runtime(); + Messages & getMessages(std::string const & language); /// - void init(int *argc, char *argv[]); + Messages & getGuiMessages(); /// - void queryUserLyXDir(); + void setGuiLanguage(std::string const & language); + /// - void ReadRcFile(string const & name); - /// - bool easyParse(int *argc, char *argv[]); - //@} -}; + IconvProcessor & iconvProcessor(); -#endif + 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: + /// Do some cleanup in preparation of an exit. + void prepareExit(); + + /// 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 + 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 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 + bool readRcFile(std::string const & name); + /// read the given ui (menu/toolbar) file + bool readUIFile(std::string const & name, bool include = false); + /// read the given languages file + bool readLanguagesFile(std::string const & name); + /// read the given encodings file + 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 &); + + /// has this user started lyx for the first time? + bool first_start; + /// the parsed command line batch command if any + std::string batch_command; + + /// 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