Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members

FXApp.h
1 /********************************************************************************
2 * *
3 * A p p l i c a t i o n O b j e c t *
4 * *
5 *********************************************************************************
6 * Copyright (C) 1997,2017 by Jeroen van der Zijp. All Rights Reserved. *
7 *********************************************************************************
8 * This library is free software; you can redistribute it and/or modify *
9 * it under the terms of the GNU Lesser General Public License as published by *
10 * the Free Software Foundation; either version 3 of the License, or *
11 * (at your option) any later version. *
12 * *
13 * This library is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16 * GNU Lesser General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU Lesser General Public License *
19 * along with this program. If not, see <http://www.gnu.org/licenses/> *
20 ********************************************************************************/
21 #ifndef FXAPP_H
22 #define FXAPP_H
23 
24 #ifndef FXOBJECT_H
25 #include "FXObject.h"
26 #endif
27 
28 namespace FX {
29 
30 
31 // Forward declarations
32 class FXApp;
33 class FXWindow;
34 class FXIcon;
35 class FXBitmap;
36 class FXCursor;
37 class FXRootWindow;
38 class FXMainWindow;
39 class FXPopup;
40 class FXFont;
41 class FXDC;
42 class FXDCWindow;
43 class FXVisual;
44 class FXGLVisual;
45 class FXGLContext;
46 class FXTranslator;
47 class FXComposeContext;
48 
49 // Opaque FOX objects
50 struct FXTimer;
51 struct FXChore;
52 struct FXSignal;
53 struct FXRepaint;
54 struct FXInput;
55 struct FXHandles;
56 struct FXInvocation;
57 
58 
59 
61 enum FXInputMode {
62  INPUT_NONE = 0,
63  INPUT_READ = 1,
64  INPUT_WRITE = 2,
65  INPUT_EXCEPT = 4
66  };
67 
68 
70 enum FXModality {
71  MODAL_FOR_NONE,
72  MODAL_FOR_WINDOW,
73  MODAL_FOR_POPUP
74  };
75 
76 
78 enum FXDefaultCursor {
79  DEF_ARROW_CURSOR,
80  DEF_RARROW_CURSOR,
81  DEF_TEXT_CURSOR,
82  DEF_HSPLIT_CURSOR,
83  DEF_VSPLIT_CURSOR,
84  DEF_XSPLIT_CURSOR,
85  DEF_SWATCH_CURSOR,
86  DEF_MOVE_CURSOR,
87  DEF_DRAGH_CURSOR,
88  DEF_DRAGV_CURSOR,
89  DEF_DRAGTL_CURSOR,
90  DEF_DRAGBR_CURSOR=DEF_DRAGTL_CURSOR,
91  DEF_DRAGTR_CURSOR,
92  DEF_DRAGBL_CURSOR=DEF_DRAGTR_CURSOR,
93  DEF_DNDSTOP_CURSOR,
94  DEF_DNDASK_CURSOR,
95  DEF_DNDCOPY_CURSOR,
96  DEF_DNDMOVE_CURSOR,
97  DEF_DNDLINK_CURSOR,
98  DEF_CROSSHAIR_CURSOR,
99  DEF_CORNERNE_CURSOR,
100  DEF_CORNERNW_CURSOR,
101  DEF_CORNERSE_CURSOR,
102  DEF_CORNERSW_CURSOR,
103  DEF_HELP_CURSOR,
104  DEF_HAND_CURSOR,
105  DEF_ROTATE_CURSOR,
106  DEF_BLANK_CURSOR,
107  DEF_WAIT_CURSOR
108  };
109 
110 
134 class FXAPI FXApp : public FXObject {
135  FXDECLARE(FXApp)
136 
137  // We've got many friends
138  friend class FXId;
139  friend class FXBitmap;
140  friend class FXImage;
141  friend class FXIcon;
142  friend class FXCursor;
143  friend class FXDrawable;
144  friend class FXWindow;
145  friend class FXShell;
146  friend class FXRootWindow;
147  friend class FXTopWindow;
148  friend class FXMainWindow;
149  friend class FXPopup;
150  friend class FXFont;
151  friend class FXVisual;
152  friend class FXGLVisual;
153  friend class FXGLContext;
154  friend class FXDC;
155  friend class FXDCWindow;
156  friend class FXDragCorner;
157  friend class FXDockHandler;
158  friend class FXComposeContext;
159 
160 private:
161 
162  // Platform independent private data
163  void *display; // Display we're talking to
164  FXHash hash; // Window handle hash table
165  FXRegistry registry; // Application setting registry
166  FXWindow *activeWindow; // Active toplevel window
167  FXWindow *cursorWindow; // Window under the cursor
168  FXWindow *mouseGrabWindow; // Window which grabbed the mouse
169  FXWindow *keyboardGrabWindow; // Window which grabbed the keyboard
170  FXWindow *keyWindow; // Window in which keyboard key was pressed
171  FXWindow *selectionWindow; // Selection window
172  FXWindow *clipboardWindow; // Clipboard window
173  FXWindow *dropWindow; // Drop target window
174  FXWindow *dragWindow; // Drag source window
175  FXWindow *refresher; // GUI refresher pointer
176  FXWindow *refresherstop; // GUI refresher end pointer
177  FXPopup *popupWindow; // Current popup window
178  FXRootWindow *root; // Root window
179  FXVisual *monoVisual; // Monochrome visual
180  FXVisual *defaultVisual; // Default [color] visual
181  FXTimer *timers; // List of timers, sorted by time
182  FXChore *chores; // List of chores
183  FXRepaint *repaints; // Unhandled repaint rectangles
184  FXTimer *timerrecs; // List of recycled timer records
185  FXChore *chorerecs; // List of recycled chore records
186  FXRepaint *repaintrecs; // List of recycled repaint records
187  FXInvocation *invocation; // Modal loop invocation
188  FXSignal *signals; // Array of signal records
189  FXint signalreceived; // Latest signal received
190  FXFont *normalFont; // Normal font
191  FXFont *stockFont; // Stock font
192  FXMutex appMutex; // Application wide mutex
193  FXEvent event; // Event
194  FXuint stickyMods; // Sticky modifier state
195  FXInput *inputs; // Input file descriptors being watched
196  FXint ninputs; // Number of inputs
197  FXHandles *handles; // Input handles
198  FXint maxhandle; // Maximum handle number
199  FXuchar *ddeData; // DDE array
200  FXuint ddeSize; // DDE array size
201  FXuint maxcolors; // Maximum number of colors to allocate
202  FXTime typingSpeed; // Typing speed
203  FXTime clickSpeed; // Double click speed
204  FXTime scrollSpeed; // Scroll speed
205  FXTime scrollDelay; // Scroll delay
206  FXTime blinkSpeed; // Cursor blink speed
207  FXTime animSpeed; // Animation speed
208  FXTime menuPause; // Menu popup delay
209  FXTime toolTipPause; // Tooltip popup delay
210  FXTime toolTipTime; // Tooltip display time
211  FXTime autoHideDelay; // Cursor autohide delay time
212  FXint dragDelta; // Minimum distance considered a move
213  FXint wheelLines; // Scroll by this many lines
214  FXint scrollBarSize; // Scrollbar size
215  FXColor borderColor; // Border color
216  FXColor baseColor; // Background color of GUI controls
217  FXColor hiliteColor; // Highlight color of GUI controls
218  FXColor shadowColor; // Shadow color of GUI controls
219  FXColor backColor; // Background color
220  FXColor foreColor; // Foreground color
221  FXColor selforeColor; // Select foreground color
222  FXColor selbackColor; // Select background color
223  FXColor tipforeColor; // Tooltip foreground color
224  FXColor tipbackColor; // Tooltip background color
225  FXColor selMenuTextColor; // Select foreground color in menus
226  FXColor selMenuBackColor; // Select background color in menus
227  FXCursor *waitCursor; // Current wait cursor
228  FXuint waitCount; // Number of times wait cursor was called
229  FXuint windowCount; // Number of windows
230  FXCursor *cursor[DEF_WAIT_CURSOR+1];
231  FXTranslator *translator; // Message translator
232  FXint appArgc; // Argument count
233  const FXchar *const *appArgv; // Argument vector
234  const FXchar *inputmethod; // Input method name
235  const FXchar *inputstyle; // Input method style
236  FXbool initialized; // Has been initialized
237 
238 private:
239  static FXApp *app; // Application pointer
240 
241  // Platform dependent private stuff
242 #ifdef WIN32
243 
244  FXushort ddeTargets; // DDE targets atom
245  FXushort ddeAtom; // DDE Exchange Atom
246  FXDragType ddeDelete; // DDE Delete Target Atom
247  FXDragType *ddeTypeList; // DDE drop type list
248  FXuint ddeNumTypes; // DDE number of drop types
249  FXDragAction ddeAction; // DDE action
250  FXDragAction ansAction; // Reply action
251  FXDragType *xselTypeList; // Selection type list
252  FXuint xselNumTypes; // Selection number of types on list
253  void* xdndTypes; // Handle to file mapping object for types list
254  FXushort xdndAware; // XDND awareness atom
255  FXID xdndSource; // XDND drag source window
256  FXID xdndTarget; // XDND drop target window
257  FXbool xdndStatusPending; // XDND waiting for status feedback
258  FXbool xdndFinishPending; // XDND waiting for drop-confirmation
259  FXbool xdndStatusReceived; // XDND received at least one status
260  FXbool xdndFinishSent; // XDND finish sent
261  FXRectangle xdndRect; // XDND rectangle bounding target
262  FXID stipples[17]; // Standard stipple bitmaps
263 
264 #else
265 
266 private:
267  FXID wmDeleteWindow; // Catch delete window
268  FXID wmSaveYourself; // Catch shutdown
269  FXID wmQuitApp; // Catch quit application
270  FXID wmProtocols; // Window manager protocols
271  FXID wmMotifHints; // Motif hints
272  FXID wmTakeFocus; // Focus explicitly set by app
273  FXID wmClientMachine; // Client machine
274  FXID wmState; // Window state
275  FXID wmNetState; // Extended Window Manager window state
276  FXID wmNetIconName; // Extended Window Manager icon name
277  FXID wmNetWindowName; // Extended Window Manager window name
278  FXID wmNetSupported; // Extended Window Manager states list
279  FXID wmNetHidden; // Extended Window Manager hidden
280  FXID wmNetShaded; // Extended Window Manager shaded
281  FXID wmNetHMaximized; // Extended Window Manager horizontally maximized
282  FXID wmNetVMaximized; // Extended Window Manager vertically maximized
283  FXID wmNetFullScreen; // Extended Window Manager full screen
284  FXID wmNetBelowOthers; // Extended Window Manager below others
285  FXID wmNetAboveOthers; // Extended Window Manager above others
286  FXID wmNetNeedAttention; // Extended Window Manager need attention
287  FXID wmNetMoveResize; // Extended Window Manager drag corner
288  FXID wmNetRestack; // Extended Window Manager change stacking order
289  FXID wmNetPing; // Extended Window Manager ping
290  FXID wmNetProcessId; // Extended Window Manager process id
291  FXID wmNetWindowType; // Extended Window Manager window type
292  FXID wmWindowTypes[14]; // Window types
293  FXID wmWindowRole; // Window Role
294  FXID wmClientLeader; // Client leader
295  FXID wmClientId; // Client id
296  FXID embedAtom; // XEMBED support
297  FXID embedInfoAtom; // XEMBED info support
298  FXID timestampAtom; // Server time
299  FXID ddeTargets; // DDE targets atom
300  FXID ddeAtom; // DDE exchange atom
301  FXID ddeDelete; // DDE delete target atom
302  FXID ddeIncr; // DDE incremental data exchange atom
303  FXDragType *ddeTypeList; // DDE drop type list
304  FXuint ddeNumTypes; // DDE number of drop types
305  FXDragAction ddeAction; // DDE action
306  FXDragAction ansAction; // Reply action
307  FXID xcbSelection; // Clipboard selection
308  FXDragType *xcbTypeList; // Clipboard type list
309  FXuint xcbNumTypes; // Clipboard number of types on list
310  FXDragType *xselTypeList; // Selection type list
311  FXuint xselNumTypes; // Selection number of types on list
312  FXDragType *xdndTypeList; // XDND type list
313  FXuint xdndNumTypes; // XDND number of types
314  FXID xdndProxy; // XDND proxy atom
315  FXID xdndAware; // XDND awareness atom
316  FXID xdndEnter; // XDND enter window message
317  FXID xdndLeave; // XDND leave window message
318  FXID xdndPosition; // XDND position update message
319  FXID xdndStatus; // XDND status feedback message
320  FXID xdndDrop; // XDND drop message
321  FXID xdndFinished; // XDND finished message
322  FXID xdndSelection; // XDND selection atom
323  FXID xdndTypes; // XDND type list atom
324  FXID xdndActions; // XDND action list atom
325  FXID xdndActionList[6]; // XDND actions
326  FXID xdndSource; // XDND drag source window
327  FXID xdndTarget; // XDND drop target window
328  FXID xdndProxyTarget; // XDND window to set messages to
329  FXbool xdndStatusPending; // XDND waiting for status feedback
330  FXbool xdndStatusReceived; // XDND received at least one status
331  FXbool xdndWantUpdates; // XDND target wants new positions while in rect
332  FXbool xdndFinishSent; // XDND finish sent
333  FXRectangle xdndRect; // XDND rectangle bounding target
334  FXint xrrScreenChange; // Xrandr ScreenChange event
335  FXint xfxFixesSelection; // Xfixes selection event
336  FXint xInputOpcode; // XInput2 opcode
337  FXint xsbDevice; // Space ball input device id
338  FXID stipples[23]; // Standard stipple patterns
339  void *xim; // Input method
340  FXbool shmi; // Use XSHM Image possible
341  FXbool shmp; // Use XSHM Pixmap possible
342  FXbool xrender; // XRender available
343  FXbool synchronize; // Synchronized
344 
345 #endif
346 
347 private:
348 
349  // Internal helper functions
350  FXApp(const FXApp&);
351  FXApp &operator=(const FXApp&);
352  static void CDECL signalhandler(int sig);
353  static void CDECL immediatesignalhandler(int sig);
354  void leaveWindow(FXWindow *window,FXWindow *ancestor);
355  void enterWindow(FXWindow *window,FXWindow *ancestor);
356  void selectionSetData(const FXWindow* window,FXDragType type,FXuchar* data,FXuint size);
357  void selectionGetData(const FXWindow* window,FXDragType type,FXuchar*& data,FXuint& size);
358  void selectionGetTypes(const FXWindow* window,FXDragType*& types,FXuint& numtypes);
359  void clipboardSetData(const FXWindow* window,FXDragType type,FXuchar* data,FXuint size);
360  void clipboardGetData(const FXWindow* window,FXDragType type,FXuchar*& data,FXuint& size);
361  void clipboardGetTypes(const FXWindow* window,FXDragType*& types,FXuint& numtypes);
362  void dragdropSetData(const FXWindow* window,FXDragType type,FXuchar* data,FXuint size);
363  void dragdropGetData(const FXWindow* window,FXDragType type,FXuchar*& data,FXuint& size);
364  void dragdropGetTypes(const FXWindow* window,FXDragType*& types,FXuint& numtypes);
365  void openInputDevices();
366  void closeInputDevices();
367 #ifdef WIN32
368  static FXival CALLBACK wndproc(FXID hwnd,FXuint iMsg,FXuval wParam,FXival lParam);
369 protected:
370  virtual FXival dispatchEvent(FXID hwnd,FXuint iMsg,FXuval wParam,FXival lParam);
371 #else
372  void addRepaint(FXID win,FXint x,FXint y,FXint w,FXint h,FXbool synth=false);
373  void removeRepaints(FXID win,FXint x,FXint y,FXint w,FXint h);
374  void scrollRepaints(FXID win,FXint dx,FXint dy);
375  static void imcreatecallback(void*,FXApp*,void*);
376  static void imdestroycallback(void*,FXApp*,void*);
377 #endif
378 
379 protected:
380 
382  virtual FXbool getNextEvent(FXRawEvent& ev,FXTime blocking=forever);
383 
385  virtual FXbool dispatchEvent(FXRawEvent& ev);
386 
387 public:
388  long onCmdQuit(FXObject*,FXSelector,void*);
389  long onCmdDump(FXObject*,FXSelector,void*);
390  long onCmdHover(FXObject*,FXSelector,void*);
391 
392 public:
393 
395  enum {
396  ID_QUIT=1,
399  ID_LAST
400  };
401 
402 public:
403 
405  static const FXuchar copyright[];
406 
407 public:
408 
414  FXApp(const FXString& name="Application",const FXString& vendor=FXString::null);
415 
417  void setAppName(const FXString& name);
418 
420  const FXString& getAppName() const;
421 
423  void setVendorName(const FXString& name);
424 
426  const FXString& getVendorName() const;
427 
429  FXbool hasInputMethod() const;
430 
432  void setDefaultVisual(FXVisual* vis);
433 
435  FXVisual* getDefaultVisual() const { return defaultVisual; }
436 
438  FXVisual* getMonoVisual() const { return monoVisual; }
439 
441  void setRootWindow(FXRootWindow* rt);
442 
444  FXRootWindow* getRootWindow() const { return root; }
445 
447  FXWindow *getFocusWindow() const;
448 
450  FXWindow *getCursorWindow() const { return cursorWindow; }
451 
453  FXWindow *getActiveWindow() const { return activeWindow; }
454 
456  FXPopup* getPopupWindow() const { return popupWindow; }
457 
459  FXWindow* getSelectionWindow() const { return selectionWindow; }
460 
462  FXWindow* getClipboardWindow() const { return clipboardWindow; }
463 
465  FXWindow* getDragWindow() const { return dragWindow; }
466 
468  FXWindow* findWindowWithId(FXID xid) const;
469 
471  FXWindow* findWindowAt(FXint rx,FXint ry,FXID window=0) const;
472 
474  void setNormalFont(FXFont* font);
475 
477  FXFont* getNormalFont() const { return normalFont; }
478 
480  void beginWaitCursor();
481 
483  void endWaitCursor();
484 
486  void setWaitCursor(FXCursor *cur);
487 
489  FXCursor* getWaitCursor() const { return waitCursor; }
490 
492  void setDefaultCursor(FXDefaultCursor which,FXCursor* cur);
493 
495  FXCursor* getDefaultCursor(FXDefaultCursor which) const { return cursor[which]; }
496 
498  FXDragType registerDragType(const FXString& name) const;
499 
501  FXString getDragTypeName(FXDragType type) const;
502 
507  void setTranslator(FXTranslator* trans);
508 
512  FXTranslator* getTranslator() const { return translator; }
513 
515  void* getDisplay() const { return display; }
516 
518  virtual FXbool openDisplay(const FXchar* dpy=NULL);
519 
521  virtual FXbool closeDisplay();
522 
534  FXptr addTimeout(FXObject* tgt,FXSelector sel,FXTime ns=1000000000,FXptr ptr=NULL);
535 
545  FXptr addDeadline(FXObject* tgt,FXSelector sel,FXTime due=forever,FXptr ptr=NULL);
546 
552  FXptr removeTimeout(FXObject* tgt,FXSelector sel=0);
553 
558  FXbool hasTimeout(FXObject *tgt,FXSelector sel=0) const;
559 
567  FXTime remainingTimeout(FXObject *tgt,FXSelector sel=0) const;
568 
577  FXptr addChore(FXObject* tgt,FXSelector sel,FXptr ptr=NULL);
578 
584  FXptr removeChore(FXObject* tgt,FXSelector sel=0);
585 
590  FXbool hasChore(FXObject *tgt,FXSelector sel=0) const;
591 
599  void addSignal(FXint sig,FXObject* tgt,FXSelector sel,FXbool immediate=false,FXuint flags=0);
600 
602  void removeSignal(FXint sig);
603 
614  FXbool addInput(FXObject *tgt,FXSelector sel,FXInputHandle fd,FXuint mode=INPUT_READ,FXptr ptr=NULL);
615 
622  FXbool removeInput(FXInputHandle fd,FXuint mode=INPUT_READ);
623 
625  FXbool getKeyState(FXuint keysym) const;
626 
628  FXbool peekEvent();
629 
631  FXbool runOneEvent(FXTime blocking=forever);
632 
637  FXint run();
638 
643  FXint runUntil(FXuint& condition);
644 
650  FXint runWhileEvents(FXTime blocking=0);
651 
659  FXint runModalWhileEvents(FXWindow* window=NULL,FXTime blocking=0);
660 
665  FXint runModal();
666 
672  FXint runModalFor(FXWindow* window);
673 
679  FXint runModalWhileShown(FXWindow* window);
680 
685  FXint runPopup(FXWindow* window);
686 
688  FXbool isModal(FXWindow* window) const;
689 
691  FXWindow* getModalWindow() const;
692 
694  FXModality getModality() const;
695 
701  void stop(FXint value=0);
702 
707  void stopModal(FXWindow* window,FXint value=0);
708 
712  void stopModal(FXint value=0);
713 
718  void refresh();
719 
723  void forceRefresh();
724 
729  void flush(FXbool sync=false);
730 
735  void repaint();
736 
738  FXint getArgc() const { return appArgc; }
739 
741  const FXchar *const *getArgv() const { return appArgv; }
742 
744  FXbool isInitialized() const { return initialized; }
745 
751  virtual void init(int& argc,char** argv,FXbool connect=true);
752 
757  virtual void exit(FXint code=0);
758 
765  FXRegistry& reg(){ return registry; }
766 
779  FXMutex& mutex(){ return appMutex; }
780 
782  void beep();
783 
785  FXTime getTypingSpeed() const { return typingSpeed; }
786  FXTime getClickSpeed() const { return clickSpeed; }
787  FXTime getScrollSpeed() const { return scrollSpeed; }
788  FXTime getScrollDelay() const { return scrollDelay; }
789  FXTime getBlinkSpeed() const { return blinkSpeed; }
790  FXTime getAnimSpeed() const { return animSpeed; }
791  FXTime getMenuPause() const { return menuPause; }
792  FXTime getToolTipPause() const { return toolTipPause; }
793  FXTime getToolTipTime() const { return toolTipTime; }
794  FXTime getAutoHideDelay() const { return autoHideDelay; }
795 
797  void setTypingSpeed(FXTime speed);
798  void setClickSpeed(FXTime speed);
799  void setScrollSpeed(FXTime speed);
800  void setScrollDelay(FXTime delay);
801  void setBlinkSpeed(FXTime speed);
802  void setAnimSpeed(FXTime speed);
803  void setMenuPause(FXTime pause);
804  void setToolTipPause(FXTime pause);
805  void setToolTipTime(FXTime time);
806  void setAutoHideDelay(FXTime time);
807 
809  void setDragDelta(FXint delta);
810  FXint getDragDelta() const { return dragDelta; }
811 
813  void setWheelLines(FXint lines);
814  FXint getWheelLines() const { return wheelLines; }
815 
817  void setScrollBarSize(FXint size);
818  FXint getScrollBarSize() const { return scrollBarSize; }
819 
821  FXColor getBorderColor() const { return borderColor; }
822  FXColor getBaseColor() const { return baseColor; }
823  FXColor getHiliteColor() const { return hiliteColor; }
824  FXColor getShadowColor() const { return shadowColor; }
825  FXColor getBackColor() const { return backColor; }
826  FXColor getForeColor() const { return foreColor; }
827  FXColor getSelforeColor() const { return selforeColor; }
828  FXColor getSelbackColor() const { return selbackColor; }
829  FXColor getTipforeColor() const { return tipforeColor; }
830  FXColor getTipbackColor() const { return tipbackColor; }
831  FXColor getSelMenuTextColor() const { return selMenuTextColor; }
832  FXColor getSelMenuBackColor() const { return selMenuBackColor; }
833 
835  void setBorderColor(FXColor color);
836  void setBaseColor(FXColor color);
837  void setHiliteColor(FXColor color);
838  void setShadowColor(FXColor color);
839  void setBackColor(FXColor color);
840  void setForeColor(FXColor color);
841  void setSelforeColor(FXColor color);
842  void setSelbackColor(FXColor color);
843  void setTipforeColor(FXColor color);
844  void setTipbackColor(FXColor color);
845  void setSelMenuTextColor(FXColor color);
846  void setSelMenuBackColor(FXColor color);
847 
849  FXuint getWindowCount() const { return windowCount; }
850 
852  virtual void create();
853 
855  virtual void destroy();
856 
858  virtual void detach();
859 
861  virtual void save(FXStream& store) const;
862 
864  virtual void load(FXStream& store);
865 
867  void dumpWidgets() const;
868 
870  static inline FXApp* instance(){ return app; }
871 
873  virtual ~FXApp();
874  };
875 
876 }
877 
878 #endif

Copyright © 1997-2016 Jeroen van der Zijp