]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/GuiApplication.h
Remove a redundant deletion of a QObject
[lyx.git] / src / frontends / qt4 / GuiApplication.h
1 /**
2  * \file GuiApplication.h
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author unknown
7  * \author John Levon
8  * \author Abdelrazak Younes
9  *
10  * Full author contact details are available in file CREDITS.
11  */
12
13 #ifndef GUIAPPLICATION_H
14 #define GUIAPPLICATION_H
15
16 #include "frontends/Application.h"
17 #include "support/filetools.h"
18
19 #include <QApplication>
20 #include <QList>
21 #ifdef QPA_XCB
22 #include <QAbstractNativeEventFilter>
23 #endif
24
25 class QAbstractItemModel;
26 class QIcon;
27 class QSessionManager;
28 class QFont;
29
30 namespace lyx {
31
32 class BufferView;
33 class ColorCache;
34 class KeySymbol;
35
36 namespace support {
37 class FileName;
38 }
39
40 namespace frontend {
41
42 class GuiView;
43 class GuiWorkArea;
44 class Menus;
45 class SocketNotifier;
46 class Toolbars;
47
48 /// The Qt main application class
49 /**
50 There should be only one instance of this class. No Qt object
51 initialisation should be done before the instantiation of this class.
52 */
53 class GuiApplication : public QApplication, public Application
54 #ifdef QPA_XCB
55                      , public QAbstractNativeEventFilter
56 #endif
57 {
58         Q_OBJECT
59
60 public:
61         GuiApplication(int & argc, char ** argv);
62         ~GuiApplication();
63
64         /// \name Methods inherited from Application class
65         //@{
66         DispatchResult const & dispatch(FuncRequest const &);
67         void dispatch(FuncRequest const &, DispatchResult & dr);
68         FuncStatus getStatus(FuncRequest const & cmd) const;
69         void restoreGuiSession();
70         Buffer const * updateInset(Inset const * inset) const;
71         int exec();
72         void exit(int status);
73         bool event(QEvent * e);
74         bool getRgbColor(ColorCode col, RGBColor & rgbcol);
75         std::string const hexName(ColorCode col);
76         void registerSocketCallback(int fd, SocketCallback func);
77         void unregisterSocketCallback(int fd);
78         bool searchMenu(FuncRequest const & func, docstring_list & names) const;
79         void handleKeyFunc(FuncCode action);
80         //@}
81
82         ///
83         bool getStatus(FuncRequest const & cmd, FuncStatus & status) const;
84         ///
85         void hideDialogs(std::string const & name, Inset * inset) const;
86         ///
87         void resetGui();
88
89         ///
90         Clipboard & clipboard();
91         ///
92         Selection & selection();
93         ///
94         FontLoader & fontLoader();
95
96         ///
97         Toolbars const & toolbars() const;
98         ///
99         Toolbars & toolbars();
100         ///
101         Menus const & menus() const;
102         ///
103         Menus & menus();
104
105         /// \name Methods inherited from QApplication class
106         //@{
107         bool notify(QObject * receiver, QEvent * event);
108         void commitData(QSessionManager & sm);
109 #ifdef Q_WS_X11
110         bool x11EventFilter(XEvent * ev);
111 #elif defined(QPA_XCB)
112         virtual bool nativeEventFilter(const QByteArray & eventType, void * message,
113                                        long * result) Q_DECL_OVERRIDE;
114 #endif
115         //@}
116
117         /// Create the main window with given geometry settings.
118         /// \param geometry_arg: only for Windows platform.
119         /// \param optional id identifier.
120         void createView(QString const & geometry_arg = QString(),
121                 bool autoShow = true, int id = 0);
122         /// FIXME: this method and the one above are quite ugly.
123         void createView(int id);
124         ///
125         GuiView const * currentView() const { return current_view_; }
126         ///
127         GuiView * currentView() { return current_view_; }
128         ///
129         void setCurrentView(GuiView * view) { current_view_ = view; }
130         ///
131         QList<int> viewIds() const;
132
133         /// Clear all session information.
134         void clearSession();
135
136         ///
137         ColorCache & colorCache();
138         ///
139         QAbstractItemModel * languageModel();
140
141         /// return a suitable serif font name.
142         QString const romanFontName();
143
144         /// return a suitable sans serif font name.
145         QString const sansFontName();
146
147         /// return a suitable monospaced font name.
148         QString const typewriterFontName();
149         QFont const typewriterSystemFont();
150
151         ///
152         void unregisterView(GuiView * gv);
153         ///
154         GuiView & view(int id) const;
155
156         /// Current ratio between physical pixels and device-independent pixels
157         double pixelRatio() const;
158
159         /// How to load image files
160         support::search_mode imageSearchMode() const {
161 #if QT_VERSION >= 0x050000
162                 return pixelRatio() > 1 ? support::check_hidpi : support::must_exist;
163 #else
164                 return support::must_exist;
165 #endif
166         }
167
168         /// return true if the key is part of a shortcut
169         bool queryKeySym(KeySymbol const & key, KeyModifier state) const;
170         ///
171         void processKeySym(KeySymbol const & key, KeyModifier state);
172         /// return the status bar state string
173         docstring viewStatusMessage();
174
175         /// \name Methods to process FuncRequests
176         //@{
177         /// process the func request
178         void processFuncRequest(FuncRequest const &);
179         /// add a func request to the queue and process it asynchronously
180         /// \note As a side-effect this will also process the
181         /// func requests that were added to the queue before.
182         void processFuncRequestAsync(FuncRequest const &);
183         /// process the func requests in the queue
184         void processFuncRequestQueue();
185         /// process the func requests in the queue asynchronously
186         void processFuncRequestQueueAsync();
187         /// add a func request to the queue for later processing
188         void addToFuncRequestQueue(FuncRequest const &);
189         //@}
190
191         /// goto a bookmark
192         /// openFile: whether or not open a file if the file is not opened
193         /// switchToBuffer: whether or not switch to buffer if the buffer is
194         ///             not the current buffer
195         void gotoBookmark(unsigned int idx, bool openFile, bool switchToBuffer);
196
197         /// Start a long operation with some cancel possibility (button or ESC)
198         void startLongOperation();
199         /// This needs to be periodically called to avoid freezing the GUI
200         bool longOperationCancelled();
201         /// Stop the long operation mode (i.e., release the GUI)
202         void stopLongOperation();
203         /// A started long operation is still in progress ?
204         bool longOperationStarted();
205 private Q_SLOTS:
206         ///
207         void execBatchCommands();
208         ///
209         void socketDataReceived(int fd);
210         /// events to be triggered by Private::general_timer_ should go here
211         void handleRegularEvents();
212         ///
213         void onLastWindowClosed();
214         ///
215         void slotProcessFuncRequestQueue() { processFuncRequestQueue(); }
216
217 private:
218         ///
219         void validateCurrentView();
220         ///
221         void updateCurrentView(FuncRequest const & cmd, DispatchResult & dr);
222         ///
223         bool closeAllViews();
224         /// Things that need to be done when the OSes session manager
225         /// requests a log out.
226         bool prepareAllViewsForLogout();
227         /// read the given ui (menu/toolbar) file
228         bool readUIFile(QString const & name, bool include = false);
229         ///
230         enum ReturnValues {
231                 ReadOK,
232                 ReadError,
233                 FormatMismatch
234         };
235         ///
236         ReturnValues readUIFile(support::FileName);
237         ///
238         void setGuiLanguage();
239         ///
240         void reconfigure(std::string const & option);
241
242         /// This GuiView is the one receiving Clipboard and Selection
243         /// events
244         GuiView * current_view_;
245
246         ///
247         struct Private;
248         Private * const d;
249 }; // GuiApplication
250
251 extern GuiApplication * guiApp;
252
253 /// \return the icon file name for the given action.
254 QString iconName(FuncRequest const & f, bool unknown);
255
256 /// \return the pixmap for the given path, name and extension.
257 /// in case of errors a warning is produced and an empty pixmap is returned.
258 QPixmap getPixmap(QString const & path, QString const & name, QString const & ext);
259 /// Load the file at \param path and convert it to a pixmap.
260 /// \return true on success otherwise invalidate the pixmap and return false.
261 /// The caller is responsible for error reporting.
262 bool getPixmap(QPixmap & pixmap, QString const & path);
263
264 /// \return an icon for the given action.
265 QIcon getIcon(FuncRequest const & f, bool unknown);
266
267 ///
268 GuiApplication * theGuiApp();
269
270 } // namespace frontend
271 } // namespace lyx
272
273 #endif // GUIAPPLICATION_H