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