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