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