]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiApplication.h
Add missing initialization
[lyx.git] / src / frontends / qt4 / GuiApplication.h
index cd4f1caa79bbd287d212f3d10a42997d2890449e..de6013d4c7e691fa127e128d9de5a37fcc0fbcb3 100644 (file)
 #define GUIAPPLICATION_H
 
 #include "frontends/Application.h"
+#include "support/filetools.h"
 
 #include <QApplication>
 #include <QList>
+#ifdef QPA_XCB
+#include <QAbstractNativeEventFilter>
+#endif
 
 class QAbstractItemModel;
 class QIcon;
-class QObject;
 class QSessionManager;
-class QSortFilterProxyModel;
+class QFont;
 
 namespace lyx {
 
@@ -30,10 +33,13 @@ class BufferView;
 class ColorCache;
 class KeySymbol;
 
+namespace support {
+class FileName;
+}
+
 namespace frontend {
 
 class GuiView;
-class GlobalMenuBar;
 class GuiWorkArea;
 class Menus;
 class SocketNotifier;
@@ -42,9 +48,12 @@ class Toolbars;
 /// 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.
+initialisation should be done before the instantiation of this class.
 */
 class GuiApplication : public QApplication, public Application
+#ifdef QPA_XCB
+                    , public QAbstractNativeEventFilter
+#endif
 {
        Q_OBJECT
 
@@ -54,7 +63,7 @@ public:
 
        /// \name Methods inherited from Application class
        //@{
-       void dispatch(FuncRequest const &);
+       DispatchResult const & dispatch(FuncRequest const &);
        void dispatch(FuncRequest const &, DispatchResult & dr);
        FuncStatus getStatus(FuncRequest const & cmd) const;
        void restoreGuiSession();
@@ -67,7 +76,6 @@ public:
        void registerSocketCallback(int fd, SocketCallback func);
        void unregisterSocketCallback(int fd);
        bool searchMenu(FuncRequest const & func, docstring_list & names) const;
-       docstring iconName(FuncRequest const & f, bool unknown);
        void handleKeyFunc(FuncCode action);
        //@}
 
@@ -100,6 +108,9 @@ public:
        void commitData(QSessionManager & sm);
 #ifdef Q_WS_X11
        bool x11EventFilter(XEvent * ev);
+#elif defined(QPA_XCB)
+       virtual bool nativeEventFilter(const QByteArray & eventType, void * message,
+                                      long * result) Q_DECL_OVERRIDE;
 #endif
        //@}
 
@@ -118,7 +129,7 @@ public:
        void setCurrentView(GuiView * view) { current_view_ = view; }
        ///
        QList<int> viewIds() const;
-       
+
        /// Clear all session information.
        void clearSession();
 
@@ -135,19 +146,47 @@ public:
 
        /// return a suitable monospaced font name.
        QString const typewriterFontName();
+       QFont const typewriterSystemFont();
+
        ///
        void unregisterView(GuiView * gv);
        ///
        GuiView & view(int id) const;
+
+       /// Current ratio between physical pixels and device-independent pixels
+       double pixelRatio() const;
+
+       /// How to load image files
+       support::search_mode imageSearchMode() const {
+#if QT_VERSION >= 0x050000
+               return pixelRatio() > 1 ? support::check_hidpi : support::must_exist;
+#else
+               return support::must_exist;
+#endif
+       }
+
+       /// return true if the key is part of a shortcut
+       bool queryKeySym(KeySymbol const & key, KeyModifier state) const;
        ///
        void processKeySym(KeySymbol const & key, KeyModifier state);
        /// return the status bar state string
        docstring viewStatusMessage();
 
-       /// add a func request to the queue for later procession
-       void addtoFuncRequestQueue(FuncRequest const &);
-       /// process the func request in the queue asynchronously
+       /// \name Methods to process FuncRequests
+       //@{
+       /// process the func request
+       void processFuncRequest(FuncRequest const &);
+       /// add a func request to the queue and process it asynchronously
+       /// \note As a side-effect this will also process the
+       /// func requests that were added to the queue before.
+       void processFuncRequestAsync(FuncRequest const &);
+       /// process the func requests in the queue
+       void processFuncRequestQueue();
+       /// process the func requests in the queue asynchronously
        void processFuncRequestQueueAsync();
+       /// add a func request to the queue for later processing
+       void addToFuncRequestQueue(FuncRequest const &);
+       //@}
 
        /// goto a bookmark
        /// openFile: whether or not open a file if the file is not opened
@@ -155,6 +194,14 @@ public:
        ///             not the current buffer
        void gotoBookmark(unsigned int idx, bool openFile, bool switchToBuffer);
 
+       /// Start a long operation with some cancel possibility (button or ESC)
+       void startLongOperation();
+       /// This needs to be periodically called to avoid freezing the GUI
+       bool longOperationCancelled();
+       /// Stop the long operation mode (i.e., release the GUI)
+       void stopLongOperation();
+       /// A started long operation is still in progress ?
+       bool longOperationStarted();
 private Q_SLOTS:
        ///
        void execBatchCommands();
@@ -165,19 +212,32 @@ private Q_SLOTS:
        ///
        void onLastWindowClosed();
        ///
-       void processFuncRequestQueue();
+       void slotProcessFuncRequestQueue() { processFuncRequestQueue(); }
 
 private:
+       ///
+       void validateCurrentView();
+       ///
+       void updateCurrentView(FuncRequest const & cmd, DispatchResult & dr);
        ///
        bool closeAllViews();
+       /// Things that need to be done when the OSes session manager
+       /// requests a log out.
+       bool prepareAllViewsForLogout();
        /// read the given ui (menu/toolbar) file
        bool readUIFile(QString const & name, bool include = false);
        ///
+       enum ReturnValues {
+               ReadOK,
+               ReadError,
+               FormatMismatch
+       };
+       ///
+       ReturnValues readUIFile(support::FileName);
+       ///
        void setGuiLanguage();
        ///
        void reconfigure(std::string const & option);
-       /// add a func request to the queue and process it asynchronously
-       void dispatchDelayed(FuncRequest const &);
 
        /// This GuiView is the one receiving Clipboard and Selection
        /// events
@@ -194,7 +254,12 @@ extern GuiApplication * guiApp;
 QString iconName(FuncRequest const & f, bool unknown);
 
 /// \return the pixmap for the given path, name and extension.
+/// in case of errors a warning is produced and an empty pixmap is returned.
 QPixmap getPixmap(QString const & path, QString const & name, QString const & ext);
+/// Load the file at \param path and convert it to a pixmap.
+/// \return true on success otherwise invalidate the pixmap and return false.
+/// The caller is responsible for error reporting.
+bool getPixmap(QPixmap & pixmap, QString const & path);
 
 /// \return an icon for the given action.
 QIcon getIcon(FuncRequest const & f, bool unknown);