]> 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 be7b69276d7aff89f6630e9373ad1bb02c2bb0ec..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 <boost/scoped_ptr.hpp>
-
+#include <QObject>
 #include <QApplication>
+#include <QTimer>
 #include <QTranslator>
 
+#include <map>
+#include <vector>
+
 class QSessionManager;
 
 namespace lyx {
 
 class BufferView;
-class socket_callback;
 
 namespace frontend {
 
+class GuiView;
+class LyXView;
 class GuiWorkArea;
-class MenuTranslator;
+class SocketNotifier;
 
 /// The Qt 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
-comon to all frontends.
 */
 class GuiApplication : public QApplication, public Application
 {
@@ -57,44 +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_; }
-       virtual int const exec();
-       virtual Gui & gui() { return gui_; }
+       MenuBackend const & menuBackend() const { return menus_; }
+       MenuBackend & menuBackend() { return menus_; }
+       virtual int exec();
        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(Color_color col, RGBColor & rgbcol);
-       virtual std::string const hexName(Color_color col);
-       virtual void updateColor(Color_color col);
-       virtual void registerSocketCallback(
-               int fd, boost::function<void()> func);
+       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);
        //@}
 
+       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_;
        ///
@@ -106,25 +143,39 @@ private:
        ///
        QTranslator qt_trans_;
        ///
-       std::map<int, boost::shared_ptr<socket_callback> > socket_callbacks_;
+       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:
-       bool x11EventFilter (XEvent * ev);
+       bool x11EventFilter(XEvent * ev);
 #endif
-
        /// 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_;
        ///
-       boost::scoped_ptr<MenuTranslator> menu_trans_;
+       std::vector<int> view_ids_;
+       /// This LyXView is the one receiving Clipboard and Selection
+       /// events
+       GuiView * current_view_;
 }; // GuiApplication
 
 extern GuiApplication * guiApp;
 
 } // namespace frontend
-
 } // namespace lyx
 
-
 #endif // GUIAPPLICATION_H