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