00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef FXAPP_H
00025 #define FXAPP_H
00026
00027 #ifndef FXOBJECT_H
00028 #include "FXObject.h"
00029 #endif
00030
00031 namespace FX {
00032
00033
00034
00035 class FXWindow;
00036 class FXIcon;
00037 class FXBitmap;
00038 class FXCursor;
00039 class FXRootWindow;
00040 class FXMainWindow;
00041 class FXPopup;
00042 class FXFont;
00043 class FXDC;
00044 class FXDCWindow;
00045 class FXVisual;
00046 class FXGLVisual;
00047 class FXGLContext;
00048
00049
00050
00051 struct FXTimer;
00052 struct FXChore;
00053 struct FXSignal;
00054 struct FXRepaint;
00055 struct FXInput;
00056 struct FXInvocation;
00057
00058
00059
00060
00061 enum FXInputMode {
00062 INPUT_NONE = 0,
00063 INPUT_READ = 1,
00064 INPUT_WRITE = 2,
00065 INPUT_EXCEPT = 4
00066 };
00067
00068
00069
00070 enum FXModality {
00071 MODAL_FOR_NONE,
00072 MODAL_FOR_WINDOW,
00073 MODAL_FOR_POPUP
00074 };
00075
00076
00077
00078 enum FXDefaultCursor {
00079 DEF_ARROW_CURSOR,
00080 DEF_RARROW_CURSOR,
00081 DEF_TEXT_CURSOR,
00082 DEF_HSPLIT_CURSOR,
00083 DEF_VSPLIT_CURSOR,
00084 DEF_XSPLIT_CURSOR,
00085 DEF_SWATCH_CURSOR,
00086 DEF_MOVE_CURSOR,
00087 DEF_DRAGH_CURSOR,
00088 DEF_DRAGV_CURSOR,
00089 DEF_DRAGTL_CURSOR,
00090 DEF_DRAGBR_CURSOR=DEF_DRAGTL_CURSOR,
00091 DEF_DRAGTR_CURSOR,
00092 DEF_DRAGBL_CURSOR=DEF_DRAGTR_CURSOR,
00093 DEF_DNDSTOP_CURSOR,
00094 DEF_DNDCOPY_CURSOR,
00095 DEF_DNDMOVE_CURSOR,
00096 DEF_DNDLINK_CURSOR,
00097 DEF_CROSSHAIR_CURSOR,
00098 DEF_CORNERNE_CURSOR,
00099 DEF_CORNERNW_CURSOR,
00100 DEF_CORNERSE_CURSOR,
00101 DEF_CORNERSW_CURSOR,
00102 DEF_HELP_CURSOR,
00103 DEF_HAND_CURSOR,
00104 DEF_ROTATE_CURSOR
00105 };
00106
00107
00108
00109
00110 struct FXAPI FXEvent {
00111 FXuint type;
00112 FXuint time;
00113 FXint win_x;
00114 FXint win_y;
00115 FXint root_x;
00116 FXint root_y;
00117 FXint state;
00118 FXint code;
00119 FXString text;
00120 FXint last_x;
00121 FXint last_y;
00122 FXint click_x;
00123 FXint click_y;
00124 FXint rootclick_x;
00125 FXint rootclick_y;
00126 FXuint click_time;
00127 FXuint click_button;
00128 FXint click_count;
00129 FXbool moved;
00130 FXRectangle rect;
00131 FXbool synthetic;
00132 FXDragType target;
00133 };
00134
00135
00136
00137 class FXAPI FXApp : public FXObject {
00138 FXDECLARE(FXApp)
00139
00140
00141 friend class FXId;
00142 friend class FXBitmap;
00143 friend class FXImage;
00144 friend class FXIcon;
00145 friend class FXCursor;
00146 friend class FXDrawable;
00147 friend class FXWindow;
00148 friend class FXShell;
00149 friend class FXRootWindow;
00150 friend class FXTopWindow;
00151 friend class FXMainWindow;
00152 friend class FXPopup;
00153 friend class FXFont;
00154 friend class FXVisual;
00155 friend class FXGLVisual;
00156 friend class FXGLContext;
00157 friend class FXDC;
00158 friend class FXDCWindow;
00159
00160 private:
00161
00162
00163 void *display;
00164 const FXchar *dpy;
00165 FXHash hash;
00166 FXRegistry registry;
00167 FXWindow *focusWindow;
00168 FXWindow *cursorWindow;
00169 FXWindow *mouseGrabWindow;
00170 FXWindow *keyboardGrabWindow;
00171 FXWindow *keyWindow;
00172 FXWindow *selectionWindow;
00173 FXWindow *clipboardWindow;
00174 FXWindow *dropWindow;
00175 FXWindow *dragWindow;
00176 FXWindow *refresher;
00177 FXWindow *refresherstop;
00178 FXPopup *popupWindow;
00179 FXRootWindow *root;
00180 FXVisual *monoVisual;
00181 FXVisual *defaultVisual;
00182 FXTimer *timers;
00183 FXChore *chores;
00184 FXRepaint *repaints;
00185 FXTimer *timerrecs;
00186 FXChore *chorerecs;
00187 FXRepaint *repaintrecs;
00188 FXInvocation *invocation;
00189 FXSignal *signals;
00190 FXint nsignals;
00191 FXFont *normalFont;
00192 FXFont *stockFont;
00193 FXuint maxcolors;
00194 FXEvent event;
00195 FXInput *inputs;
00196 FXint ninputs;
00197 FXint maxinput;
00198 FXuchar *ddeData;
00199 FXuint ddeSize;
00200 FXuint typingSpeed;
00201 FXuint clickSpeed;
00202 FXuint scrollSpeed;
00203 FXuint scrollDelay;
00204 FXuint blinkSpeed;
00205 FXuint animSpeed;
00206 FXuint menuPause;
00207 FXuint tooltipPause;
00208 FXuint tooltipTime;
00209 FXint dragDelta;
00210 FXint wheelLines;
00211 FXColor borderColor;
00212 FXColor baseColor;
00213 FXColor hiliteColor;
00214 FXColor shadowColor;
00215 FXColor backColor;
00216 FXColor foreColor;
00217 FXColor selforeColor;
00218 FXColor selbackColor;
00219 FXColor tipforeColor;
00220 FXColor tipbackColor;
00221 FXCursor *waitCursor;
00222 FXuint waitcount;
00223 FXCursor *cursor[DEF_ROTATE_CURSOR+1];
00224 FXint appArgc;
00225 const FXchar *const *appArgv;
00226 FXbool initialized;
00227
00228 private:
00229 static FXApp *app;
00230
00231
00232 #ifndef WIN32
00233 private:
00234 FXID wmDeleteWindow;
00235 FXID wmQuitApp;
00236 FXID wmProtocols;
00237 FXID wmMotifHints;
00238 FXID wmTakeFocus;
00239 FXID wmState;
00240 FXID wmNetSupported;
00241 FXID wmNetState;
00242 FXID wmNetHMaximized;
00243 FXID wmNetVMaximized;
00244 FXID ddeTargets;
00245 FXID ddeAtom;
00246 FXID ddeDelete;
00247 FXID ddeIncr;
00248 FXDragType *ddeTypeList;
00249 FXuint ddeNumTypes;
00250 FXDragAction ddeAction;
00251 FXDragAction ansAction;
00252 FXID xcbSelection;
00253 FXDragType *xcbTypeList;
00254 FXuint xcbNumTypes;
00255 FXDragType *xselTypeList;
00256 FXuint xselNumTypes;
00257 FXDragType *xdndTypeList;
00258 FXuint xdndNumTypes;
00259 FXID xdndProxy;
00260 FXID xdndAware;
00261 FXID xdndEnter;
00262 FXID xdndLeave;
00263 FXID xdndPosition;
00264 FXID xdndStatus;
00265 FXID xdndDrop;
00266 FXID xdndFinished;
00267 FXID xdndSelection;
00268 FXID xdndActionMove;
00269 FXID xdndActionCopy;
00270 FXID xdndActionLink;
00271 FXID xdndActionPrivate;
00272 FXID xdndTypes;
00273 FXID xdndSource;
00274 FXID xdndTarget;
00275 FXID xdndProxyTarget;
00276 FXbool xdndStatusPending;
00277 FXbool xdndStatusReceived;
00278 FXbool xdndWantUpdates;
00279 FXRectangle xdndRect;
00280 FXID stipples[23];
00281 void *r_fds;
00282 void *w_fds;
00283 void *e_fds;
00284 void *xim;
00285 void *xic;
00286 FXbool shmi;
00287 FXbool shmp;
00288 FXbool synchronize;
00289
00290 #else
00291
00292 FXushort ddeTargets;
00293 FXushort ddeAtom;
00294 FXDragType ddeDelete;
00295 FXDragType *ddeTypeList;
00296 FXuint ddeNumTypes;
00297 FXDragAction ddeAction;
00298 FXDragAction ansAction;
00299 FXDragType *xselTypeList;
00300 FXuint xselNumTypes;
00301 void* xdndTypes;
00302 FXushort xdndAware;
00303 FXID xdndSource;
00304 FXID xdndTarget;
00305 FXbool xdndStatusPending;
00306 FXbool xdndFinishPending;
00307 FXbool xdndStatusReceived;
00308 FXRectangle xdndRect;
00309 FXID stipples[17];
00310 void **handles;
00311
00312 #endif
00313
00314 private:
00315
00316
00317 FXApp(const FXApp&);
00318 FXApp &operator=(const FXApp&);
00319 static void signalhandler(int sig);
00320 static void immediatesignalhandler(int sig);
00321 void dragdropSetData(const FXWindow* window,FXDragType type,FXuchar* data,FXuint size);
00322 void dragdropGetData(const FXWindow* window,FXDragType type,FXuchar*& data,FXuint& size);
00323 void dragdropGetTypes(const FXWindow* window,FXDragType*& types,FXuint& numtypes);
00324 void selectionSetData(const FXWindow* window,FXDragType type,FXuchar* data,FXuint size);
00325 void selectionGetData(const FXWindow* window,FXDragType type,FXuchar*& data,FXuint& size);
00326 void selectionGetTypes(const FXWindow* window,FXDragType*& types,FXuint& numtypes);
00327 void clipboardSetData(const FXWindow* window,FXDragType type,FXuchar* data,FXuint size);
00328 void clipboardGetData(const FXWindow* window,FXDragType type,FXuchar*& data,FXuint& size);
00329 void clipboardGetTypes(const FXWindow* window,FXDragType*& types,FXuint& numtypes);
00330 #ifndef WIN32
00331 void addRepaint(FXID win,FXint x,FXint y,FXint w,FXint h,FXbool synth=0);
00332 void removeRepaints(FXID win,FXint x,FXint y,FXint w,FXint h);
00333 void scrollRepaints(FXID win,FXint dx,FXint dy);
00334 #else
00335 void leaveWindow(FXWindow *win,FXWindow *anc);
00336 void enterWindow(FXWindow *win,FXWindow *anc);
00337 static long CALLBACK wndproc(FXID hwnd,unsigned int iMsg,unsigned int wParam,long lParam);
00338 protected:
00339 virtual long dispatchEvent(FXID hwnd,unsigned int iMsg,unsigned int wParam,long lParam);
00340 #endif
00341
00342 protected:
00343
00344
00345 virtual FXbool getNextEvent(FXRawEvent& ev,FXbool blocking=TRUE);
00346
00347
00348 virtual FXbool dispatchEvent(FXRawEvent& ev);
00349
00350 public:
00351 long onCmdQuit(FXObject*,FXSelector,void*);
00352 long onCmdDump(FXObject*,FXSelector,void*);
00353
00354 public:
00355
00356
00357 enum {
00358 ID_QUIT=0,
00359 ID_DUMP,
00360 ID_LAST
00361 };
00362
00363 public:
00364
00365
00366 static const FXuchar copyright[];
00367
00368 public:
00369
00370
00371
00372
00373
00374 FXApp(const FXString& name="Application",const FXString& vendor="FoxDefault");
00375
00376
00377 FXString getAppName() const { return registry.getAppKey(); }
00378
00379
00380 FXString getVendorName() const { return registry.getVendorKey(); }
00381
00382
00383 FXbool openDisplay(const FXchar* dpyname=NULL);
00384
00385
00386 FXbool closeDisplay();
00387
00388
00389 void* getDisplay() const { return display; }
00390
00391
00392 FXbool isInitialized() const { return initialized; }
00393
00394
00395 FXint getArgc() const { return appArgc; }
00396
00397
00398 const FXchar *const *getArgv() const { return appArgv; }
00399
00400
00401 FXVisual* getDefaultVisual() const { return defaultVisual; }
00402
00403
00404 void setDefaultVisual(FXVisual* vis);
00405
00406
00407 FXVisual* getMonoVisual() const { return monoVisual; }
00408
00409
00410 FXRootWindow* getRootWindow() const { return root; }
00411
00412
00413 FXWindow *getCursorWindow() const { return cursorWindow; }
00414
00415
00416 FXWindow *getFocusWindow() const { return focusWindow; }
00417
00418
00419 FXPopup* getPopupWindow() const { return popupWindow; }
00420
00421
00422 FXWindow* findWindowWithId(FXID xid) const;
00423
00424
00425 FXWindow* findWindowAt(FXint rx,FXint ry,FXID window=0) const;
00426
00427
00428
00429
00430
00431
00432
00433
00434 FXTimer* addTimeout(FXObject* tgt,FXSelector sel,FXuint ms=1000,void* ptr=NULL);
00435
00436
00437
00438
00439 FXTimer* removeTimeout(FXObject* tgt,FXSelector sel);
00440
00441
00442
00443
00444 FXTimer* removeTimeout(FXTimer *t);
00445
00446
00447
00448
00449 FXbool hasTimeout(FXObject *tgt,FXSelector sel) const;
00450
00451
00452
00453
00454
00455
00456 FXuint remainingTimeout(FXObject *tgt,FXSelector sel) const;
00457
00458
00459
00460
00461
00462
00463 FXuint remainingTimeout(FXTimer *t) const;
00464
00465
00466
00467
00468
00469
00470
00471
00472 FXChore* addChore(FXObject* tgt,FXSelector sel,void *ptr=NULL);
00473
00474
00475
00476
00477 FXChore* removeChore(FXObject* tgt,FXSelector sel);
00478
00479
00480
00481
00482 FXChore* removeChore(FXChore *c);
00483
00484
00485
00486
00487 FXbool hasChore(FXObject *tgt,FXSelector sel) const;
00488
00489
00490
00491
00492
00493
00494
00495
00496 void addSignal(FXint sig,FXObject* tgt,FXSelector sel,FXbool immediate=FALSE,FXuint flags=0);
00497
00498
00499 void removeSignal(FXint sig);
00500
00501
00502
00503
00504
00505
00506
00507 FXbool addInput(FXInputHandle fd,FXuint mode,FXObject *tgt,FXSelector sel);
00508
00509
00510
00511
00512
00513 FXbool removeInput(FXInputHandle fd,FXuint mode);
00514
00515
00516 virtual void create();
00517
00518
00519 virtual void destroy();
00520
00521
00522 virtual void detach();
00523
00524
00525 FXbool peekEvent();
00526
00527
00528 FXbool runOneEvent(FXbool blocking=TRUE);
00529
00530
00531
00532
00533
00534 FXint run();
00535
00536
00537
00538
00539
00540 FXint runUntil(FXuint& condition);
00541
00542
00543
00544
00545
00546 FXint runWhileEvents();
00547
00548
00549
00550
00551
00552
00553
00554
00555 FXint runModalWhileEvents(FXWindow* window=NULL);
00556
00557
00558
00559
00560
00561 FXint runModal();
00562
00563
00564
00565
00566
00567
00568 FXint runModalFor(FXWindow* window);
00569
00570
00571
00572
00573
00574
00575 FXint runModalWhileShown(FXWindow* window);
00576
00577
00578
00579
00580
00581 FXint runPopup(FXWindow* window);
00582
00583
00584 FXbool isModal(FXWindow* window) const;
00585
00586
00587 FXWindow* getModalWindow() const;
00588
00589
00590 FXModality getModality() const;
00591
00592
00593
00594
00595
00596
00597 void stop(FXint value=0);
00598
00599
00600
00601
00602
00603 void stopModal(FXWindow* window,FXint value=0);
00604
00605
00606
00607
00608 void stopModal(FXint value=0);
00609
00610
00611 void forceRefresh();
00612
00613
00614 void refresh();
00615
00616
00617 void flush(FXbool sync=FALSE);
00618
00619
00620
00621
00622
00623 void repaint();
00624
00625
00626
00627
00628
00629
00630 virtual void init(int& argc,char** argv,FXbool connect=TRUE);
00631
00632
00633
00634
00635
00636 virtual void exit(FXint code=0);
00637
00638
00639 FXRegistry& reg(){ return registry; }
00640
00641
00642 FXDragType registerDragType(const FXString& name) const;
00643
00644
00645 FXString getDragTypeName(FXDragType type) const;
00646
00647
00648 FXWindow* getDragWindow() const { return dragWindow; }
00649
00650
00651 void beep();
00652
00653
00654 static inline FXApp* instance(){ return app; }
00655
00656
00657 void setNormalFont(FXFont* font);
00658
00659
00660 FXFont* getNormalFont() const { return normalFont; }
00661
00662
00663 void beginWaitCursor();
00664
00665
00666 void endWaitCursor();
00667
00668
00669 void setWaitCursor(FXCursor *cur);
00670
00671
00672 FXCursor* getWaitCursor() const { return waitCursor; }
00673
00674
00675 FXCursor* getDefaultCursor(FXDefaultCursor which) const { return cursor[which]; }
00676
00677
00678 void setDefaultCursor(FXDefaultCursor which,FXCursor* cur);
00679
00680
00681 FXuint getTypingSpeed() const { return typingSpeed; }
00682 FXuint getClickSpeed() const { return clickSpeed; }
00683 FXuint getScrollSpeed() const { return scrollSpeed; }
00684 FXuint getScrollDelay() const { return scrollDelay; }
00685 FXuint getBlinkSpeed() const { return blinkSpeed; }
00686 FXuint getAnimSpeed() const { return animSpeed; }
00687 FXuint getMenuPause() const { return menuPause; }
00688 FXuint getTooltipPause() const { return tooltipPause; }
00689 FXuint getTooltipTime() const { return tooltipTime; }
00690 FXint getDragDelta() const { return dragDelta; }
00691 FXint getWheelLines() const { return wheelLines; }
00692
00693
00694 void setTypingSpeed(FXuint speed);
00695 void setClickSpeed(FXuint speed);
00696 void setScrollSpeed(FXuint speed);
00697 void setScrollDelay(FXuint delay);
00698 void setBlinkSpeed(FXuint speed);
00699 void setAnimSpeed(FXuint speed);
00700 void setMenuPause(FXuint pause);
00701 void setTooltipPause(FXuint pause);
00702 void setTooltipTime(FXuint time);
00703 void setDragDelta(FXint delta);
00704 void setWheelLines(FXint lines);
00705
00706
00707 FXColor getBorderColor() const { return borderColor; }
00708 FXColor getBaseColor() const { return baseColor; }
00709 FXColor getHiliteColor() const { return hiliteColor; }
00710 FXColor getShadowColor() const { return shadowColor; }
00711 FXColor getBackColor() const { return backColor; }
00712 FXColor getForeColor() const { return foreColor; }
00713 FXColor getSelforeColor() const { return selforeColor; }
00714 FXColor getSelbackColor() const { return selbackColor; }
00715 FXColor getTipforeColor() const { return tipforeColor; }
00716 FXColor getTipbackColor() const { return tipbackColor; }
00717
00718
00719 void setBorderColor(FXColor color);
00720 void setBaseColor(FXColor color);
00721 void setHiliteColor(FXColor color);
00722 void setShadowColor(FXColor color);
00723 void setBackColor(FXColor color);
00724 void setForeColor(FXColor color);
00725 void setSelforeColor(FXColor color);
00726 void setSelbackColor(FXColor color);
00727 void setTipforeColor(FXColor color);
00728 void setTipbackColor(FXColor color);
00729
00730
00731 virtual void save(FXStream& store) const;
00732
00733
00734 virtual void load(FXStream& store);
00735
00736
00737 void dumpWidgets() const;
00738
00739
00740 virtual ~FXApp();
00741 };
00742
00743 }
00744
00745 #endif