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 friend class
FXDockHandler;
00160 friend class FXEmbedderWindow;
00161
00162 private:
00163
00164
00165
void *display;
00166 const FXchar *dpy;
00167
FXHash hash;
00168
FXRegistry registry;
00169 FXWindow *focusWindow;
00170 FXWindow *cursorWindow;
00171 FXWindow *mouseGrabWindow;
00172 FXWindow *keyboardGrabWindow;
00173 FXWindow *keyWindow;
00174 FXWindow *selectionWindow;
00175 FXWindow *clipboardWindow;
00176 FXWindow *dropWindow;
00177 FXWindow *dragWindow;
00178 FXWindow *refresher;
00179 FXWindow *refresherstop;
00180 FXPopup *popupWindow;
00181 FXRootWindow *root;
00182 FXVisual *monoVisual;
00183 FXVisual *defaultVisual;
00184 FXTimer *timers;
00185 FXChore *chores;
00186 FXRepaint *repaints;
00187 FXTimer *timerrecs;
00188 FXChore *chorerecs;
00189 FXRepaint *repaintrecs;
00190 FXInvocation *invocation;
00191 FXSignal *signals;
00192 FXint nsignals;
00193 FXFont *normalFont;
00194 FXFont *stockFont;
00195
FXMutex appMutex;
00196 FXEvent event;
00197 FXInput *inputs;
00198 FXint ninputs;
00199 FXint maxinput;
00200 FXuchar *ddeData;
00201 FXuint ddeSize;
00202 FXuint maxcolors;
00203 FXuint typingSpeed;
00204 FXuint clickSpeed;
00205 FXuint scrollSpeed;
00206 FXuint scrollDelay;
00207 FXuint blinkSpeed;
00208 FXuint animSpeed;
00209 FXuint menuPause;
00210 FXuint tooltipPause;
00211 FXuint tooltipTime;
00212 FXint dragDelta;
00213 FXint wheelLines;
00214 FXColor borderColor;
00215 FXColor baseColor;
00216 FXColor hiliteColor;
00217 FXColor shadowColor;
00218 FXColor backColor;
00219 FXColor foreColor;
00220 FXColor selforeColor;
00221 FXColor selbackColor;
00222 FXColor tipforeColor;
00223 FXColor tipbackColor;
00224 FXColor selMenuTextColor;
00225 FXColor selMenuBackColor;
00226 FXCursor *waitCursor;
00227 FXuint waitCount;
00228 FXCursor *cursor[DEF_ROTATE_CURSOR+1];
00229 FXint appArgc;
00230 const FXchar *const *appArgv;
00231 FXbool initialized;
00232
00233 private:
00234 static FXApp *app;
00235
00236
00237 #ifndef WIN32
00238 private:
00239 FXID wmDeleteWindow;
00240 FXID wmQuitApp;
00241 FXID wmProtocols;
00242 FXID wmMotifHints;
00243 FXID wmTakeFocus;
00244 FXID wmState;
00245 FXID wmNetSupported;
00246 FXID wmNetState;
00247 FXID wmNetHMaximized;
00248 FXID wmNetVMaximized;
00249 FXID embedAtom;
00250 FXID embedInfoAtom;
00251 FXID timestampAtom;
00252 FXID ddeTargets;
00253 FXID ddeAtom;
00254 FXID ddeDelete;
00255 FXID ddeIncr;
00256 FXDragType *ddeTypeList;
00257 FXuint ddeNumTypes;
00258 FXDragAction ddeAction;
00259 FXDragAction ansAction;
00260 FXID xcbSelection;
00261 FXDragType *xcbTypeList;
00262 FXuint xcbNumTypes;
00263 FXDragType *xselTypeList;
00264 FXuint xselNumTypes;
00265 FXDragType *xdndTypeList;
00266 FXuint xdndNumTypes;
00267 FXID xdndProxy;
00268 FXID xdndAware;
00269 FXID xdndEnter;
00270 FXID xdndLeave;
00271 FXID xdndPosition;
00272 FXID xdndStatus;
00273 FXID xdndDrop;
00274 FXID xdndFinished;
00275 FXID xdndSelection;
00276 FXID xdndActionMove;
00277 FXID xdndActionCopy;
00278 FXID xdndActionLink;
00279 FXID xdndActionPrivate;
00280 FXID xdndTypes;
00281 FXID xdndSource;
00282 FXID xdndTarget;
00283 FXID xdndProxyTarget;
00284 FXbool xdndStatusPending;
00285 FXbool xdndStatusReceived;
00286 FXbool xdndWantUpdates;
00287
FXRectangle xdndRect;
00288 FXint xrreventbase;
00289 FXID stipples[23];
00290
void *r_fds;
00291
void *w_fds;
00292
void *e_fds;
00293
void *xim;
00294
void *xic;
00295 FXbool shmi;
00296 FXbool shmp;
00297 FXbool synchronize;
00298
00299 #else
00300
00301 FXushort ddeTargets;
00302 FXushort ddeAtom;
00303 FXDragType ddeDelete;
00304 FXDragType *ddeTypeList;
00305 FXuint ddeNumTypes;
00306 FXDragAction ddeAction;
00307 FXDragAction ansAction;
00308 FXDragType *xselTypeList;
00309 FXuint xselNumTypes;
00310
void* xdndTypes;
00311 FXushort xdndAware;
00312 FXID xdndSource;
00313 FXID xdndTarget;
00314 FXbool xdndStatusPending;
00315 FXbool xdndFinishPending;
00316 FXbool xdndStatusReceived;
00317
FXRectangle xdndRect;
00318 FXID stipples[17];
00319
void **handles;
00320
00321 #endif
00322
00323 private:
00324
00325
00326 FXApp(const FXApp&);
00327 FXApp &operator=(const FXApp&);
00328 static
void signalhandler(
int sig);
00329 static
void immediatesignalhandler(
int sig);
00330
void leaveWindow(FXWindow *window,FXWindow *ancestor);
00331
void enterWindow(FXWindow *window,FXWindow *ancestor);
00332
void selectionSetData(const FXWindow* window,FXDragType type,FXuchar* data,FXuint size);
00333
void selectionGetData(const FXWindow* window,FXDragType type,FXuchar*& data,FXuint& size);
00334
void selectionGetTypes(const FXWindow* window,FXDragType*& types,FXuint& numtypes);
00335
void clipboardSetData(const FXWindow* window,FXDragType type,FXuchar* data,FXuint size);
00336
void clipboardGetData(const FXWindow* window,FXDragType type,FXuchar*& data,FXuint& size);
00337
void clipboardGetTypes(const FXWindow* window,FXDragType*& types,FXuint& numtypes);
00338
void dragdropSetData(const FXWindow* window,FXDragType type,FXuchar* data,FXuint size);
00339
void dragdropGetData(const FXWindow* window,FXDragType type,FXuchar*& data,FXuint& size);
00340
void dragdropGetTypes(const FXWindow* window,FXDragType*& types,FXuint& numtypes);
00341 #ifndef WIN32
00342
void addRepaint(FXID win,FXint x,FXint y,FXint w,FXint h,FXbool synth=0);
00343
void removeRepaints(FXID win,FXint x,FXint y,FXint w,FXint h);
00344
void scrollRepaints(FXID win,FXint dx,FXint dy);
00345 #else
00346 static
long CALLBACK wndproc(FXID hwnd,
unsigned int iMsg,
unsigned int wParam,
long lParam);
00347 protected:
00348 virtual
long dispatchEvent(FXID hwnd,
unsigned int iMsg,
unsigned int wParam,
long lParam);
00349 #endif
00350
00351 protected:
00352
00353
00354 virtual FXbool getNextEvent(FXRawEvent& ev,FXbool blocking=TRUE);
00355
00356
00357 virtual FXbool dispatchEvent(FXRawEvent& ev);
00358
00359 public:
00360
long onCmdQuit(
FXObject*,FXSelector,
void*);
00361
long onCmdDump(FXObject*,FXSelector,
void*);
00362
long onCmdHover(FXObject*,FXSelector,
void*);
00363
00364 public:
00365
00366
00367 enum {
00368 ID_QUIT=1,
00369 ID_DUMP,
00370 ID_HOVER,
00371 ID_LAST
00372 };
00373
00374
public:
00375
00376
00377
static const FXuchar copyright[];
00378
00379
public:
00380
00381
00382
00383
00384
00385
00386 FXApp(
const FXString& name=
"Application",
const FXString& vendor=
"FoxDefault");
00387
00388
00389
const FXString& getAppName()
const {
return registry.getAppKey(); }
00390
00391
00392
const FXString& getVendorName()
const {
return registry.getVendorKey(); }
00393
00394
00395 FXbool openDisplay(
const FXchar* dpyname=NULL);
00396
00397
00398 FXbool closeDisplay();
00399
00400
00401
void* getDisplay()
const {
return display; }
00402
00403
00404 FXbool isInitialized()
const {
return initialized; }
00405
00406
00407 FXint getArgc()
const {
return appArgc; }
00408
00409
00410
const FXchar *
const *getArgv()
const {
return appArgv; }
00411
00412
00413 FXVisual* getDefaultVisual()
const {
return defaultVisual; }
00414
00415
00416
void setDefaultVisual(FXVisual* vis);
00417
00418
00419 FXVisual* getMonoVisual()
const {
return monoVisual; }
00420
00421
00422 FXRootWindow* getRootWindow()
const {
return root; }
00423
00424
00425
void setRootWindow(FXRootWindow* rt);
00426
00427
00428 FXWindow *getCursorWindow()
const {
return cursorWindow; }
00429
00430
00431 FXWindow *getFocusWindow()
const {
return focusWindow; }
00432
00433
00434 FXPopup* getPopupWindow()
const {
return popupWindow; }
00435
00436
00437 FXWindow* findWindowWithId(FXID xid)
const;
00438
00439
00440 FXWindow* findWindowAt(FXint rx,FXint ry,FXID window=0)
const;
00441
00442
00443
virtual void create();
00444
00445
00446
virtual void destroy();
00447
00448
00449
virtual void detach();
00450
00451
00452
00453
00454
00455
00456
00457
00458
void addTimeout(FXObject* tgt,FXSelector sel,FXuint ms=1000,
void* ptr=NULL);
00459
00460
00461
00462
00463
void removeTimeout(FXObject* tgt,FXSelector sel);
00464
00465
00466
00467
00468 FXbool hasTimeout(FXObject *tgt,FXSelector sel)
const;
00469
00470
00471
00472
00473
00474
00475 FXuint remainingTimeout(
FXObject *tgt,FXSelector sel);
00476
00477
00478
00479
00480 void handleTimouts();
00481
00482
00483
00484
00485
00486
00487
00488
00489
void addChore(
FXObject* tgt,FXSelector sel,
void *ptr=NULL);
00490
00491
00492
00493
00494
void removeChore(
FXObject* tgt,FXSelector sel);
00495
00496
00497
00498
00499 FXbool hasChore(
FXObject *tgt,FXSelector sel)
const;
00500
00501
00502
00503
00504
00505
00506
00507
00508
void addSignal(FXint sig,
FXObject* tgt,FXSelector sel,FXbool immediate=FALSE,FXuint flags=0);
00509
00510
00511
void removeSignal(FXint sig);
00512
00513
00514
00515
00516
00517
00518
00519 FXbool addInput(FXInputHandle fd,FXuint mode,
FXObject *tgt,FXSelector sel);
00520
00521
00522
00523
00524
00525 FXbool removeInput(FXInputHandle fd,FXuint mode);
00526
00527
00528 FXbool getKeyState(FXuint keysym)
const;
00529
00530
00531 FXbool peekEvent();
00532
00533
00534 FXbool runOneEvent(FXbool blocking=TRUE);
00535
00536
00537
00538
00539
00540 FXint run();
00541
00542
00543
00544
00545
00546 FXint runUntil(FXuint& condition);
00547
00548
00549
00550
00551
00552 FXint runWhileEvents();
00553
00554
00555
00556
00557
00558
00559
00560
00561 FXint runModalWhileEvents(
FXWindow* window=NULL);
00562
00563
00564
00565
00566
00567 FXint runModal();
00568
00569
00570
00571
00572
00573
00574 FXint runModalFor(
FXWindow* window);
00575
00576
00577
00578
00579
00580
00581 FXint runModalWhileShown(
FXWindow* window);
00582
00583
00584
00585
00586
00587 FXint runPopup(
FXWindow* window);
00588
00589
00590 FXbool isModal(
FXWindow* window)
const;
00591
00592
00593
FXWindow* getModalWindow() const;
00594
00595
00596 FXModality getModality() const;
00597
00598
00599
00600
00601
00602
00603
void stop(FXint value=0);
00604
00605
00606
00607
00608
00609
void stopModal(
FXWindow* window,FXint value=0);
00610
00611
00612
00613
00614
void stopModal(FXint value=0);
00615
00616
00617
void forceRefresh();
00618
00619
00620
void refresh();
00621
00622
00623
void flush(FXbool sync=FALSE);
00624
00625
00626
00627
00628
00629
void repaint();
00630
00631
00632
00633
00634
00635
00636 virtual
void init(
int& argc,
char** argv,FXbool connect=TRUE);
00637
00638
00639
00640
00641
00642 virtual
void exit(FXint code=0);
00643
00644
00645
00646
00647
00648
00649
00650
FXRegistry& reg(){
return registry; }
00651
00652
00653 FXDragType registerDragType(
const FXString& name)
const;
00654
00655
00656
FXString getDragTypeName(FXDragType type)
const;
00657
00658
00659
FXWindow* getDragWindow()
const {
return dragWindow; }
00660
00661
00662
void beep();
00663
00664
00665
static inline FXApp* instance(){
return app; }
00666
00667
00668
void setNormalFont(FXFont* font);
00669
00670
00671 FXFont* getNormalFont()
const {
return normalFont; }
00672
00673
00674
void beginWaitCursor();
00675
00676
00677
void endWaitCursor();
00678
00679
00680
void setWaitCursor(FXCursor *cur);
00681
00682
00683 FXCursor* getWaitCursor()
const {
return waitCursor; }
00684
00685
00686 FXCursor* getDefaultCursor(FXDefaultCursor which)
const {
return cursor[which]; }
00687
00688
00689
void setDefaultCursor(FXDefaultCursor which,FXCursor* cur);
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703 FXMutex& mutex(){
return appMutex; }
00704
00705
00706 FXuint getTypingSpeed()
const {
return typingSpeed; }
00707 FXuint getClickSpeed()
const {
return clickSpeed; }
00708 FXuint getScrollSpeed()
const {
return scrollSpeed; }
00709 FXuint getScrollDelay()
const {
return scrollDelay; }
00710 FXuint getBlinkSpeed()
const {
return blinkSpeed; }
00711 FXuint getAnimSpeed()
const {
return animSpeed; }
00712 FXuint getMenuPause()
const {
return menuPause; }
00713 FXuint getTooltipPause()
const {
return tooltipPause; }
00714 FXuint getTooltipTime()
const {
return tooltipTime; }
00715 FXint getDragDelta()
const {
return dragDelta; }
00716 FXint getWheelLines()
const {
return wheelLines; }
00717
00718
00719
void setTypingSpeed(FXuint speed);
00720
void setClickSpeed(FXuint speed);
00721
void setScrollSpeed(FXuint speed);
00722
void setScrollDelay(FXuint delay);
00723
void setBlinkSpeed(FXuint speed);
00724
void setAnimSpeed(FXuint speed);
00725
void setMenuPause(FXuint pause);
00726
void setTooltipPause(FXuint pause);
00727
void setTooltipTime(FXuint time);
00728
void setDragDelta(FXint delta);
00729
void setWheelLines(FXint lines);
00730
00731
00732 FXColor getBorderColor()
const {
return borderColor; }
00733 FXColor getBaseColor()
const {
return baseColor; }
00734 FXColor getHiliteColor()
const {
return hiliteColor; }
00735 FXColor getShadowColor()
const {
return shadowColor; }
00736 FXColor getBackColor()
const {
return backColor; }
00737 FXColor getForeColor()
const {
return foreColor; }
00738 FXColor getSelforeColor()
const {
return selforeColor; }
00739 FXColor getSelbackColor()
const {
return selbackColor; }
00740 FXColor getTipforeColor()
const {
return tipforeColor; }
00741 FXColor getTipbackColor()
const {
return tipbackColor; }
00742 FXColor getSelMenuTextColor()
const {
return selMenuTextColor; }
00743 FXColor getSelMenuBackColor()
const {
return selMenuBackColor; }
00744
00745
00746
void setBorderColor(FXColor color);
00747
void setBaseColor(FXColor color);
00748
void setHiliteColor(FXColor color);
00749
void setShadowColor(FXColor color);
00750
void setBackColor(FXColor color);
00751
void setForeColor(FXColor color);
00752
void setSelforeColor(FXColor color);
00753
void setSelbackColor(FXColor color);
00754
void setTipforeColor(FXColor color);
00755
void setTipbackColor(FXColor color);
00756
void setSelMenuTextColor(FXColor color);
00757
void setSelMenuBackColor(FXColor color);
00758
00759
00760
virtual void save(FXStream& store)
const;
00761
00762
00763
virtual void load(FXStream& store);
00764
00765
00766
void dumpWidgets() const;
00767
00768
00769 virtual ~FXApp();
00770 };
00771
00772 }
00773
00774 #endif