00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef FXWINDOW_H
00024 #define FXWINDOW_H
00025
00026 #ifndef FXDRAWABLE_H
00027 #include "FXDrawable.h"
00028 #endif
00029
00030
00031 namespace FX {
00032
00033
00034
00035 enum {
00036 LAYOUT_NORMAL = 0,
00037 LAYOUT_SIDE_TOP = 0,
00038 LAYOUT_SIDE_BOTTOM = 0x00000001,
00039 LAYOUT_SIDE_LEFT = 0x00000002,
00040 LAYOUT_SIDE_RIGHT = LAYOUT_SIDE_LEFT|LAYOUT_SIDE_BOTTOM,
00041 LAYOUT_FILL_COLUMN = 0x00000001,
00042 LAYOUT_FILL_ROW = 0x00000002,
00043 LAYOUT_LEFT = 0,
00044 LAYOUT_RIGHT = 0x00000004,
00045 LAYOUT_CENTER_X = 0x00000008,
00046 LAYOUT_FIX_X = LAYOUT_RIGHT|LAYOUT_CENTER_X,
00047 LAYOUT_TOP = 0,
00048 LAYOUT_BOTTOM = 0x00000010,
00049 LAYOUT_CENTER_Y = 0x00000020,
00050 LAYOUT_FIX_Y = LAYOUT_BOTTOM|LAYOUT_CENTER_Y,
00051 LAYOUT_DOCK_SAME = 0,
00052 LAYOUT_DOCK_NEXT = 0x00000040,
00053 LAYOUT_RESERVED_1 = 0x00000080,
00054 LAYOUT_FIX_WIDTH = 0x00000100,
00055 LAYOUT_FIX_HEIGHT = 0x00000200,
00056 LAYOUT_MIN_WIDTH = 0,
00057 LAYOUT_MIN_HEIGHT = 0,
00058 LAYOUT_FILL_X = 0x00000400,
00059 LAYOUT_FILL_Y = 0x00000800,
00060 LAYOUT_FILL = LAYOUT_FILL_X|LAYOUT_FILL_Y,
00061 LAYOUT_EXPLICIT = LAYOUT_FIX_X|LAYOUT_FIX_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT
00062 };
00063
00064
00065
00066 enum {
00067 FRAME_NONE = 0,
00068 FRAME_SUNKEN = 0x00001000,
00069 FRAME_RAISED = 0x00002000,
00070 FRAME_THICK = 0x00004000,
00071 FRAME_GROOVE = FRAME_THICK,
00072 FRAME_RIDGE = FRAME_THICK|FRAME_RAISED|FRAME_SUNKEN,
00073 FRAME_LINE = FRAME_RAISED|FRAME_SUNKEN,
00074 FRAME_NORMAL = FRAME_SUNKEN|FRAME_THICK
00075 };
00076
00077
00078
00079 enum {
00080 PACK_NORMAL = 0,
00081 PACK_UNIFORM_HEIGHT = 0x00008000,
00082 PACK_UNIFORM_WIDTH = 0x00010000
00083 };
00084
00085
00086 class FXIcon;
00087 class FXBitmap;
00088 class FXCursor;
00089 class FXRegion;
00090 class FXComposite;
00091 class FXAccelTable;
00092 class FXComposeContext;
00093
00094
00095
00096 class FXAPI FXWindow : public FXDrawable {
00097 FXDECLARE(FXWindow)
00098 friend class FXApp;
00099 private:
00100 FXWindow *parent;
00101 FXWindow *owner;
00102 FXWindow *first;
00103 FXWindow *last;
00104 FXWindow *next;
00105 FXWindow *prev;
00106 FXWindow *focus;
00107 FXuint wk;
00108 protected:
00109 FXComposeContext *composeContext;
00110 FXCursor *defaultCursor;
00111 FXCursor *dragCursor;
00112 FXAccelTable *accelTable;
00113 FXObject *target;
00114 FXSelector message;
00115 FXint xpos;
00116 FXint ypos;
00117 FXColor backColor;
00118 FXString tag;
00119 FXuint flags;
00120 FXuint options;
00121 public:
00122 static FXDragType octetType;
00123 static FXDragType deleteType;
00124 static FXDragType textType;
00125 static FXDragType colorType;
00126 static FXDragType urilistType;
00127 static FXDragType utf8Type;
00128 static FXDragType utf16Type;
00129 static FXDragType actionType;
00130 static const FXDragType stringType;
00131 static const FXDragType imageType;
00132 protected:
00133 FXWindow();
00134 FXWindow(FXApp* a,FXVisual *vis);
00135 FXWindow(FXApp* a,FXWindow* own,FXuint opts,FXint x,FXint y,FXint w,FXint h);
00136 static FXWindow* findDefault(FXWindow* window);
00137 static FXWindow* findInitial(FXWindow* window);
00138 virtual FXbool doesOverrideRedirect() const;
00139 protected:
00140 #ifdef WIN32
00141 virtual FXID GetDC() const;
00142 virtual int ReleaseDC(FXID) const;
00143 virtual const void* GetClass() const;
00144 #else
00145 void addColormapWindows();
00146 void remColormapWindows();
00147 #endif
00148 private:
00149 FXWindow(const FXWindow&);
00150 FXWindow& operator=(const FXWindow&);
00151 protected:
00152
00153
00154 enum {
00155 FLAG_SHOWN = 0x00000001,
00156 FLAG_ENABLED = 0x00000002,
00157 FLAG_UPDATE = 0x00000004,
00158 FLAG_DROPTARGET = 0x00000008,
00159 FLAG_FOCUSED = 0x00000010,
00160 FLAG_DIRTY = 0x00000020,
00161 FLAG_RECALC = 0x00000040,
00162 FLAG_TIP = 0x00000080,
00163 FLAG_HELP = 0x00000100,
00164 FLAG_DEFAULT = 0x00000200,
00165 FLAG_INITIAL = 0x00000400,
00166 FLAG_SHELL = 0x00000800,
00167 FLAG_ACTIVE = 0x00001000,
00168 FLAG_PRESSED = 0x00002000,
00169 FLAG_KEY = 0x00004000,
00170 FLAG_CARET = 0x00008000,
00171 FLAG_CHANGED = 0x00010000,
00172 FLAG_LASSO = 0x00020000,
00173 FLAG_TRYDRAG = 0x00040000,
00174 FLAG_DODRAG = 0x00080000,
00175 FLAG_SCROLLINSIDE = 0x00100000,
00176 FLAG_SCROLLING = 0x00200000,
00177 FLAG_OWNED = 0x00400000,
00178 FLAG_CURSOR = 0x00800000
00179 };
00180
00181 public:
00182
00183
00184 long onPaint(FXObject*,FXSelector,void*);
00185 long onMap(FXObject*,FXSelector,void*);
00186 long onUnmap(FXObject*,FXSelector,void*);
00187 long onConfigure(FXObject*,FXSelector,void*);
00188 long onUpdate(FXObject*,FXSelector,void*);
00189 long onMotion(FXObject*,FXSelector,void*);
00190 long onMouseWheel(FXObject*,FXSelector,void*);
00191 long onEnter(FXObject*,FXSelector,void*);
00192 long onLeave(FXObject*,FXSelector,void*);
00193 long onLeftBtnPress(FXObject*,FXSelector,void*);
00194 long onLeftBtnRelease(FXObject*,FXSelector,void*);
00195 long onMiddleBtnPress(FXObject*,FXSelector,void*);
00196 long onMiddleBtnRelease(FXObject*,FXSelector,void*);
00197 long onRightBtnPress(FXObject*,FXSelector,void*);
00198 long onRightBtnRelease(FXObject*,FXSelector,void*);
00199 long onSpaceBallMotion(FXObject*,FXSelector,void*);
00200 long onSpaceBallButtonPress(FXObject*,FXSelector,void*);
00201 long onSpaceBallButtonRelease(FXObject*,FXSelector,void*);
00202 long onBeginDrag(FXObject*,FXSelector,void*);
00203 long onEndDrag(FXObject*,FXSelector,void*);
00204 long onDragged(FXObject*,FXSelector,void*);
00205 long onKeyPress(FXObject*,FXSelector,void*);
00206 long onKeyRelease(FXObject*,FXSelector,void*);
00207 long onUngrabbed(FXObject*,FXSelector,void*);
00208 long onDestroy(FXObject*,FXSelector,void*);
00209 long onFocusSelf(FXObject*,FXSelector,void*);
00210 long onFocusIn(FXObject*,FXSelector,void*);
00211 long onFocusOut(FXObject*,FXSelector,void*);
00212 long onSelectionLost(FXObject*,FXSelector,void*);
00213 long onSelectionGained(FXObject*,FXSelector,void*);
00214 long onSelectionRequest(FXObject*,FXSelector,void*);
00215 long onClipboardLost(FXObject*,FXSelector,void*);
00216 long onClipboardGained(FXObject*,FXSelector,void*);
00217 long onClipboardRequest(FXObject*,FXSelector,void*);
00218 long onDNDEnter(FXObject*,FXSelector,void*);
00219 long onDNDLeave(FXObject*,FXSelector,void*);
00220 long onDNDMotion(FXObject*,FXSelector,void*);
00221 long onDNDDrop(FXObject*,FXSelector,void*);
00222 long onDNDRequest(FXObject*,FXSelector,void*);
00223 long onQueryHelp(FXObject*,FXSelector,void*);
00224 long onQueryTip(FXObject*,FXSelector,void*);
00225 long onCmdShow(FXObject*,FXSelector,void*);
00226 long onCmdHide(FXObject*,FXSelector,void*);
00227 long onUpdToggleShown(FXObject*,FXSelector,void*);
00228 long onCmdToggleShown(FXObject*,FXSelector,void*);
00229 long onCmdRaise(FXObject*,FXSelector,void*);
00230 long onCmdLower(FXObject*,FXSelector,void*);
00231 long onCmdEnable(FXObject*,FXSelector,void*);
00232 long onCmdDisable(FXObject*,FXSelector,void*);
00233 long onUpdToggleEnabled(FXObject*,FXSelector,void*);
00234 long onCmdToggleEnabled(FXObject*,FXSelector,void*);
00235 long onCmdUpdate(FXObject*,FXSelector,void*);
00236 long onUpdYes(FXObject*,FXSelector,void*);
00237 long onCmdDelete(FXObject*,FXSelector,void*);
00238
00239 public:
00240
00241
00242 enum {
00243 ID_NONE,
00244 ID_HIDE,
00245 ID_SHOW,
00246 ID_TOGGLESHOWN,
00247 ID_LOWER,
00248 ID_RAISE,
00249 ID_DELETE,
00250 ID_DISABLE,
00251 ID_ENABLE,
00252 ID_TOGGLEENABLED,
00253 ID_UNCHECK,
00254 ID_CHECK,
00255 ID_UNKNOWN,
00256 ID_UPDATE,
00257 ID_AUTOSCROLL,
00258 ID_TIPTIMER,
00259 ID_HSCROLLED,
00260 ID_VSCROLLED,
00261 ID_SETVALUE,
00262 ID_SETINTVALUE,
00263 ID_SETLONGVALUE,
00264 ID_SETREALVALUE,
00265 ID_SETSTRINGVALUE,
00266 ID_SETICONVALUE,
00267 ID_SETINTRANGE,
00268 ID_SETREALRANGE,
00269 ID_GETINTVALUE,
00270 ID_GETLONGVALUE,
00271 ID_GETREALVALUE,
00272 ID_GETSTRINGVALUE,
00273 ID_GETICONVALUE,
00274 ID_GETINTRANGE,
00275 ID_GETREALRANGE,
00276 ID_SETHELPSTRING,
00277 ID_GETHELPSTRING,
00278 ID_SETTIPSTRING,
00279 ID_GETTIPSTRING,
00280 ID_QUERY_MENU,
00281 ID_HOTKEY,
00282 ID_ACCEL,
00283 ID_UNPOST,
00284 ID_POST,
00285 ID_MDI_TILEHORIZONTAL,
00286 ID_MDI_TILEVERTICAL,
00287 ID_MDI_CASCADE,
00288 ID_MDI_MAXIMIZE,
00289 ID_MDI_MINIMIZE,
00290 ID_MDI_RESTORE,
00291 ID_MDI_CLOSE,
00292 ID_MDI_WINDOW,
00293 ID_MDI_MENUWINDOW,
00294 ID_MDI_MENUMINIMIZE,
00295 ID_MDI_MENURESTORE,
00296 ID_MDI_MENUCLOSE,
00297 ID_MDI_NEXT,
00298 ID_MDI_PREV,
00299 ID_LAST
00300 };
00301
00302 public:
00303
00304
00305 static const FXchar octetTypeName[];
00306 static const FXchar deleteTypeName[];
00307 static const FXchar textTypeName[];
00308 static const FXchar colorTypeName[];
00309 static const FXchar urilistTypeName[];
00310 static const FXchar utf8TypeName[];
00311 static const FXchar utf16TypeName[];
00312 static const FXchar actionTypeName[];
00313
00314 public:
00315
00316
00317 FXWindow(FXComposite* p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0);
00318
00319
00320 FXWindow* getParent() const { return parent; }
00321
00322
00323 FXWindow* getOwner() const { return owner; }
00324
00325
00326 FXWindow* getShell() const;
00327
00328
00329 FXWindow* getRoot() const;
00330
00331
00332 FXWindow* getNext() const { return next; }
00333
00334
00335 FXWindow* getPrev() const { return prev; }
00336
00337
00338 FXWindow* getFirst() const { return first; }
00339
00340
00341 FXWindow* getLast() const { return last; }
00342
00343
00344 FXWindow* getFocus() const { return focus; }
00345
00346
00347 void setKey(FXuint k){ wk=k; }
00348
00349
00350 FXuint getKey() const { return wk; }
00351
00352
00353 FXWindow* getChildWithKey(FXuint k) const;
00354
00355
00356 void setTarget(FXObject *t){ target=t; }
00357
00358
00359 FXObject* getTarget() const { return target; }
00360
00361
00362 void setSelector(FXSelector sel){ message=sel; }
00363
00364
00365 FXSelector getSelector() const { return message; }
00366
00367
00368 FXint getX() const { return xpos; }
00369
00370
00371 FXint getY() const { return ypos; }
00372
00373
00374 virtual FXint getDefaultWidth();
00375
00376
00377 virtual FXint getDefaultHeight();
00378
00379
00380 virtual FXint getWidthForHeight(FXint givenheight);
00381
00382
00383 virtual FXint getHeightForWidth(FXint givenwidth);
00384
00385
00386 void setX(FXint x);
00387
00388
00389 void setY(FXint y);
00390
00391
00392
00393
00394
00395
00396 void setWidth(FXint w);
00397
00398
00399
00400
00401
00402
00403 void setHeight(FXint h);
00404
00405
00406 void setLayoutHints(FXuint lout);
00407
00408
00409 FXuint getLayoutHints() const;
00410
00411
00412 FXAccelTable* getAccelTable() const { return accelTable; }
00413
00414
00415 void setAccelTable(FXAccelTable* acceltable){ accelTable=acceltable; }
00416
00417
00418 void addHotKey(FXHotKey code);
00419
00420
00421 void remHotKey(FXHotKey code);
00422
00423
00424 void setHelpTag(const FXString& text){ tag=text; }
00425
00426
00427 const FXString& getHelpTag() const { return tag; }
00428
00429
00430 FXbool isShell() const;
00431
00432
00433 FXbool isOwnerOf(const FXWindow* window) const;
00434
00435
00436 FXbool isChildOf(const FXWindow* window) const;
00437
00438
00439 FXbool containsChild(const FXWindow* child) const;
00440
00441
00442 FXWindow* getChildAt(FXint x,FXint y) const;
00443
00444
00445 FXint numChildren() const;
00446
00447
00448
00449
00450
00451 FXint indexOfChild(const FXWindow *window) const;
00452
00453
00454
00455
00456
00457 FXWindow* childAtIndex(FXint index) const;
00458
00459
00460 static FXWindow* commonAncestor(FXWindow* a,FXWindow* b);
00461
00462
00463 static FXbool before(const FXWindow *a,const FXWindow* b);
00464
00465
00466 static FXbool after(const FXWindow *a,const FXWindow* b);
00467
00468
00469 FXComposeContext* getComposeContext() const { return composeContext; }
00470
00471
00472 void createComposeContext();
00473
00474
00475 void destroyComposeContext();
00476
00477
00478 FXbool cursorShown() const;
00479
00480
00481 void showCursor(FXbool flag=true);
00482
00483
00484 void setDefaultCursor(FXCursor* cur);
00485
00486
00487 FXCursor* getDefaultCursor() const { return defaultCursor; }
00488
00489
00490 void setDragCursor(FXCursor* cur);
00491
00492
00493 FXCursor* getDragCursor() const { return dragCursor; }
00494
00495
00496 FXbool getCursorPosition(FXint& x,FXint& y,FXuint& buttons) const;
00497
00498
00499 FXbool setCursorPosition(FXint x,FXint y);
00500
00501
00502 FXbool isEnabled() const;
00503
00504
00505 FXbool isActive() const;
00506
00507
00508 virtual FXbool canFocus() const;
00509
00510
00511 FXbool hasFocus() const;
00512
00513
00514 FXbool inFocusChain() const;
00515
00516
00517 virtual void setFocus();
00518
00519
00520 virtual void killFocus();
00521
00522
00523 virtual void changeFocus(FXWindow *child);
00524
00525
00526
00527
00528
00529
00530
00531
00532 virtual void setDefault(FXuchar flag=TRUE);
00533
00534
00535 FXbool isDefault() const;
00536
00537
00538 void setInitial(FXbool flag=true);
00539
00540
00541 FXbool isInitial() const;
00542
00543
00544 virtual void enable();
00545
00546
00547 virtual void disable();
00548
00549
00550 virtual void create();
00551
00552
00553 virtual void attach(FXID w);
00554
00555
00556 virtual void detach();
00557
00558
00559 virtual void destroy();
00560
00561
00562 virtual void setShape(const FXRegion& region);
00563
00564
00565 virtual void setShape(FXBitmap* bitmap);
00566
00567
00568 virtual void setShape(FXIcon* icon);
00569
00570
00571 virtual void clearShape();
00572
00573
00574 virtual void raise();
00575
00576
00577 virtual void lower();
00578
00579
00580
00581
00582
00583
00584 virtual void move(FXint x,FXint y);
00585
00586
00587
00588
00589
00590
00591 virtual void resize(FXint w,FXint h);
00592
00593
00594
00595
00596
00597
00598 virtual void position(FXint x,FXint y,FXint w,FXint h);
00599
00600
00601 virtual void recalc();
00602
00603
00604 virtual void layout();
00605
00606
00607 void forceRefresh();
00608
00609
00610 virtual void reparent(FXWindow* father,FXWindow *other=NULL);
00611
00612
00613 void scroll(FXint x,FXint y,FXint w,FXint h,FXint dx,FXint dy) const;
00614
00615
00616 void update(FXint x,FXint y,FXint w,FXint h) const;
00617
00618
00619 void update() const;
00620
00621
00622 void repaint(FXint x,FXint y,FXint w,FXint h) const;
00623
00624
00625 void repaint() const;
00626
00627
00628
00629
00630
00631 void grab();
00632
00633
00634 void ungrab();
00635
00636
00637 FXbool grabbed() const;
00638
00639
00640 void grabKeyboard();
00641
00642
00643 void ungrabKeyboard();
00644
00645
00646 FXbool grabbedKeyboard() const;
00647
00648
00649 virtual void show();
00650
00651
00652 virtual void hide();
00653
00654
00655 FXbool shown() const;
00656
00657
00658 virtual FXbool isComposite() const;
00659
00660
00661 FXbool underCursor() const;
00662
00663
00664 FXbool hasSelection() const;
00665
00666
00667 FXbool acquireSelection(const FXDragType *types,FXuint numtypes);
00668
00669
00670 FXbool releaseSelection();
00671
00672
00673 FXbool hasClipboard() const;
00674
00675
00676 FXbool acquireClipboard(const FXDragType *types,FXuint numtypes);
00677
00678
00679 FXbool releaseClipboard();
00680
00681
00682 virtual void dropEnable();
00683
00684
00685 virtual void dropDisable();
00686
00687
00688 FXbool isDropEnabled() const;
00689
00690
00691 FXbool isDragging() const;
00692
00693
00694 FXbool beginDrag(const FXDragType *types,FXuint numtypes);
00695
00696
00697
00698
00699
00700 FXbool handleDrag(FXint x,FXint y,FXDragAction action=DRAG_COPY);
00701
00702
00703
00704
00705
00706 FXDragAction endDrag(FXbool drop=true);
00707
00708
00709 FXbool isDropTarget() const;
00710
00711
00712
00713
00714
00715 void setDragRectangle(FXint x,FXint y,FXint w,FXint h,FXbool wantupdates=true) const;
00716
00717
00718
00719
00720
00721 void clearDragRectangle() const;
00722
00723
00724 void acceptDrop(FXDragAction action=DRAG_ACCEPT) const;
00725
00726
00727 FXDragAction didAccept() const;
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737