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