]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiApplication.h
do what the FIXME suggested
[lyx.git] / src / frontends / qt4 / GuiApplication.h
index 22b55beaf7facf368e0744c15b7ca743eb655019..29b522b647743993c76d5acb36ef6e2b7403c1f1 100644 (file)
 #include "ColorCache.h"
 #include "GuiFontLoader.h"
 #include "GuiClipboard.h"
-#include "GuiImplementation.h"
 #include "GuiSelection.h"
+#include "Menus.h"
 
 #include "frontends/Application.h"
 
+#include <QObject>
 #include <QApplication>
+#include <QTimer>
 #include <QTranslator>
 
+#include <map>
+#include <vector>
+
 class QSessionManager;
 
 namespace lyx {
@@ -32,6 +37,8 @@ class BufferView;
 
 namespace frontend {
 
+class GuiView;
+class LyXView;
 class GuiWorkArea;
 class SocketNotifier;
 
@@ -39,9 +46,6 @@ class SocketNotifier;
 /**
 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
-comon to all frontends.
 */
 class GuiApplication : public QApplication, public Application
 {
@@ -54,47 +58,80 @@ public:
 
        /// Method inherited from \c Application class
        //@{
+       virtual FuncStatus getStatus(FuncRequest const &);
+       virtual bool dispatch(FuncRequest const &);
+       virtual void resetGui();
+       void restoreGuiSession();
        virtual Clipboard & clipboard();
        virtual Selection & selection();
        virtual FontLoader & fontLoader() { return font_loader_; }
+       MenuBackend const & menuBackend() const { return menus_; }
+       MenuBackend & menuBackend() { return menus_; }
        virtual int exec();
-       virtual Gui & gui() { return gui_; }
-       virtual Gui const & gui() const { return gui_; }
        virtual void exit(int status);
        virtual bool event(QEvent * e);
-       void syncEvents();
-       virtual std::string const romanFontName();
-       virtual std::string const sansFontName();
-       virtual std::string const typewriterFontName();
        virtual bool getRgbColor(ColorCode col, RGBColor & rgbcol);
        virtual std::string const hexName(ColorCode col);
        virtual void updateColor(ColorCode col);
        virtual void registerSocketCallback(int fd, SocketCallback func);
        void unregisterSocketCallback(int fd);
-       LyXView & createView(std::string const & geometry_arg);
        //@}
 
+       Menus const & menus() const { return menus_; }
+       Menus & menus() { return menus_; }
        /// Methods inherited from \c QApplication class
        //@{
        bool notify(QObject * receiver, QEvent * event);
        void commitData(QSessionManager & sm);
        //@}
 
+       /// Create the main window with given geometry settings.
+       /// \param geometry_arg: only for Windows platform.
+       void createView(QString const & geometry_arg);
        ///
-       ColorCache & colorCache() { return color_cache_; }
+       GuiView const * currentView() const { return current_view_; }
+       ///
+       GuiView * currentView() { return current_view_; }
+       ///
+       void setCurrentView(GuiView & view) { current_view_ = &view; }
        ///
+       virtual size_t viewCount() const { return view_ids_.size(); }
+       ///
+       std::vector<int> const & viewIds() { return view_ids_; }
+
+       ///
+       ColorCache & colorCache() { return color_cache_; }
        ///
        GuiFontLoader & guiFontLoader() { return font_loader_; }
 
+       /// return a suitable serif font name.
+       virtual QString const romanFontName();
+
+       /// return a suitable sans serif font name.
+       virtual QString const sansFontName();
+
+       /// return a suitable monospaced font name.
+       virtual QString const typewriterFontName();
+       ///
+       virtual bool unregisterView(int id);
+       ///
+       virtual GuiView & view(int id) const;
+       ///
+       virtual void hideDialogs(std::string const & name, Inset * inset) const;
+       ///
+       virtual Buffer const * updateInset(Inset const * inset) const;
+
 private Q_SLOTS:
        ///
        void execBatchCommands();
        ///
        void socketDataReceived(int fd);
+       /// events to be triggered by general_timer_ should go here
+       void handleRegularEvents();
 
 private:
        ///
-       GuiImplementation gui_;
+       bool closeAllViews();
        ///
        GuiClipboard clipboard_;
        ///
@@ -107,6 +144,12 @@ private:
        QTranslator qt_trans_;
        ///
        std::map<int, SocketNotifier *> socket_notifiers_;
+       ///
+       Menus menus_;
+       /// this timer is used for any regular events one wants to
+       /// perform. at present it is used to check if forked processes
+       /// are done.
+       QTimer general_timer_;
 
 #ifdef Q_WS_X11
 public:
@@ -115,6 +158,19 @@ public:
        /// A translator suitable for the entries in the LyX menu.
        /// Only needed with Qt/Mac.
        void addMenuTranslator();
+
+       /// Multiple views container.
+       /**
+       * Warning: This must not be a smart pointer as the destruction of the
+       * object is handled by Qt when the view is closed
+       * \sa Qt::WA_DeleteOnClose attribute.
+       */
+       std::map<int, GuiView *> views_;
+       ///
+       std::vector<int> view_ids_;
+       /// This LyXView is the one receiving Clipboard and Selection
+       /// events
+       GuiView * current_view_;
 }; // GuiApplication
 
 extern GuiApplication * guiApp;