-/**\r
- * \file frontend/Application.h\r
- * This file is part of LyX, the document processor.\r
- * Licence details can be found in the file COPYING.\r
- *\r
- * \author Abdelrazak Younes\r
- *\r
- * Full author contact details are available in file CREDITS.\r
- */\r
-\r
-#ifndef LYX_APPLICATION_H\r
-#define LYX_APPLICATION_H\r
-\r
-#include "lyxfunc.h"\r
-#include "lyxserver.h"\r
-#include "lyxsocket.h"\r
-\r
-#include <boost/scoped_ptr.hpp>\r
-\r
-#include <string>\r
-\r
-class BufferView;\r
-class LyXView;\r
-\r
-namespace lyx {\r
-namespace frontend {\r
-\r
-class Clipboard;\r
-class Gui;\r
-class Selection;\r
-\r
-\r
-/// The main application class\r
-/**\r
-There should be only one instance of this class. No Qt object\r
-initialisation should be done before the instanciation of this class.\r
-\r
-\todo The work areas handling could be moved to a base virtual class\r
-comon to all frontends.\r
-*/\r
-class Application\r
-{\r
-public:\r
- Application(int & argc, char ** argv);\r
-\r
- int start(std::string const & batch);\r
- ///\r
- virtual Gui & gui() = 0;\r
- ///\r
- virtual int const exec() = 0;\r
- ///\r
- virtual void exit(int status) = 0;\r
-\r
- ///\r
- virtual Clipboard & clipboard() = 0;\r
- ///\r
- virtual Selection & selection() = 0;\r
-\r
- ///\r
- LyXFunc & lyxFunc();\r
- LyXFunc const & lyxFunc() const;\r
- ///\r
- LyXServer & server();\r
- LyXServer const & server() const;\r
- ///\r
- LyXServerSocket & socket();\r
- LyXServerSocket const & socket() const;\r
- ///\r
- void setBufferView(BufferView * buffer_view);\r
-\r
-protected:\r
- ///\r
- BufferView * buffer_view_;\r
-\r
- // FIXME: lyxfunc_ should be private. But the actual construction is done in\r
- // GuiApplication for now.\r
-\r
- /// our function handler\r
- boost::scoped_ptr<LyXFunc> lyxfunc_;\r
-\r
-private:\r
- ///\r
- boost::scoped_ptr<LyXServer> lyx_server_;\r
- ///\r
- boost::scoped_ptr<LyXServerSocket> lyx_socket_;\r
-\r
-}; // Application\r
-\r
-} // namespace frontend\r
-} // namespace lyx\r
-\r
-extern lyx::frontend::Application * theApp;\r
-\r
-\r
-#endif // LYX_APPLICATION_H\r
+/**
+ * \file frontend/Application.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Abdelrazak Younes
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#ifndef LYX_APPLICATION_H
+#define LYX_APPLICATION_H
+
+#include <boost/function.hpp>
+
+#include <string>
+
+namespace lyx {
+
+class BufferView;
+class LyXView;
+class LColor_color;
+struct RGBColor;
+
+namespace frontend {
+
+class Clipboard;
+class FontLoader;
+class Gui;
+class Selection;
+
+/// The main application class
+/**
+There should be only one instance of this class. No Qt object
+initialisation should be done before the instanciation of this class.
+
+\todo The work areas handling could be moved to a base virtual class
+common to all frontends.
+*/
+class Application
+{
+public:
+ ///
+ Application(int & argc, char ** argv);
+ ///
+ virtual ~Application() {}
+
+ /// Start the main event loop, after executing the given batch
+ /// commands.
+ int start(std::string const & batch);
+ ///
+ virtual Gui & gui() = 0;
+ ///
+ virtual int const exec() = 0;
+
+ /// Quit running LyX.
+ /**
+ * This may either quit directly or record the exit status
+ * and only stop the event loop.
+ */
+ virtual void exit(int status) = 0;
+
+ /**
+ * Synchronise all pending events.
+ */
+ virtual void syncEvents() = 0;
+ ///
+ virtual Clipboard & clipboard() = 0;
+ ///
+ virtual Selection & selection() = 0;
+ ///
+ virtual FontLoader & fontLoader() = 0;
+
+ /// return a suitable serif font name.
+ virtual std::string const romanFontName() = 0;
+
+ /// return a suitable sans serif font name.
+ virtual std::string const sansFontName() = 0;
+
+ /// return a suitable monospaced font name.
+ virtual std::string const typewriterFontName() = 0;
+
+ /**
+ * Given col, fills r, g, b in the range 0-255.
+ * The function returns true if successful.
+ * It returns false on failure and sets r, g, b to 0.
+ */
+ virtual bool getRgbColor(LColor_color col, RGBColor & rgbcol) = 0;
+
+ /** Eg, passing LColor::black returns "000000",
+ * passing LColor::white returns "ffffff".
+ */
+ virtual std::string const hexName(LColor_color col) = 0;
+
+ /**
+ * update an altered GUI color
+ */
+ virtual void updateColor(LColor_color col) = 0;
+
+ /**
+ * add a callback for socket read notification
+ * @param fd socket descriptor (file/socket/etc)
+ */
+ virtual void registerSocketCallback(
+ int fd, boost::function<void()> func) = 0;
+
+ /**
+ * remove a I/O read callback
+ * @param fd socket descriptor (file/socket/etc)
+ */
+ virtual void unregisterSocketCallback(int fd) = 0;
+
+ /// Create the main window with given geometry settings.
+ LyXView & createView(unsigned int width, unsigned int height,
+ int posx, int posy, bool maximize);
+
+ ///
+ LyXView const & currentView() const;
+
+ ///
+ LyXView & currentView();
+
+ ///
+ void setCurrentView(LyXView & current_view);
+
+private:
+ /// This LyXView is the one receiving Clipboard and Selection
+ /// Events
+ LyXView * current_view_;
+
+}; // Application
+
+} // namespace frontend
+
+extern frontend::Application * theApp;
+frontend::Application * createApplication(int & argc, char * argv[]);
+
+
+} // namespace lyx
+
+
+#endif // LYX_APPLICATION_H