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 FXFOLDINGLIST_H
00025
#define FXFOLDINGLIST_H
00026
00027
#ifndef FXSCROLLAREA_H
00028
#include "FXScrollArea.h"
00029
#endif
00030
00031
namespace FX {
00032
00033
00034
class FXIcon;
00035
class FXFont;
00036
class FXHeader;
00037
class FXFoldingList;
00038
00039
00040
00041
enum {
00042
FOLDINGLIST_EXTENDEDSELECT = 0,
00043
FOLDINGLIST_SINGLESELECT = 0x00100000,
00044
FOLDINGLIST_BROWSESELECT = 0x00200000,
00045
FOLDINGLIST_MULTIPLESELECT = 0x00300000,
00046
FOLDINGLIST_AUTOSELECT = 0x00400000,
00047
FOLDINGLIST_SHOWS_LINES = 0x00800000,
00048
FOLDINGLIST_SHOWS_BOXES = 0x01000000,
00049
FOLDINGLIST_ROOT_BOXES = 0x02000000,
00050 FOLDINGLIST_NORMAL =
FOLDINGLIST_EXTENDEDSELECT
00051 };
00052
00053
00054
00055
class FXAPI FXFoldingItem :
public FXObject {
00056 FXDECLARE(FXFoldingItem)
00057 friend class FXFoldingList;
00058 friend class FXDirList;
00059 protected:
00060 FXFoldingItem *parent;
00061 FXFoldingItem *prev;
00062 FXFoldingItem *next;
00063 FXFoldingItem *first;
00064 FXFoldingItem *last;
00065
FXString label;
00066
FXIcon *openIcon;
00067
FXIcon *closedIcon;
00068
void *data;
00069 FXuint state;
00070 FXint x,y;
00071 protected:
00072 FXFoldingItem():parent(NULL),prev(NULL),next(NULL),first(NULL),last(NULL),openIcon(NULL),closedIcon(NULL),data(NULL),state(0),x(0),y(0){}
00073 virtual void draw(
const FXFoldingList* list,
FXDC& dc,FXint x,FXint y,FXint w,FXint h)
const;
00074
virtual FXint hitItem(
const FXFoldingList* list,FXint x,FXint y)
const;
00075
protected:
00076 enum{
00077 SELECTED = 1,
00078 FOCUS = 2,
00079 DISABLED = 4,
00080 OPENED = 8,
00081 EXPANDED = 16,
00082 HASITEMS = 32,
00083 DRAGGABLE = 64,
00084 OPENICONOWNED = 128,
00085 CLOSEDICONOWNED = 256
00086 };
00087
public:
00088
00089
00090 FXFoldingItem(
const FXString& text,
FXIcon* oi=NULL,
FXIcon* ci=NULL,
void* ptr=NULL):parent(NULL),prev(NULL),next(NULL),first(NULL),last(NULL),label(text),openIcon(oi),closedIcon(ci),data(ptr),state(0),x(0),y(0){}
00091
00092
00093 FXFoldingItem* getParent()
const {
return parent; }
00094
00095
00096 FXFoldingItem* getNext()
const {
return next; }
00097
00098
00099 FXFoldingItem* getPrev()
const {
return prev; }
00100
00101
00102 FXFoldingItem* getFirst()
const {
return first; }
00103
00104
00105 FXFoldingItem* getLast()
const {
return last; }
00106
00107
00108 FXFoldingItem* getBelow() const;
00109
00110
00111 FXFoldingItem* getAbove() const;
00112
00113
00114 FXint getNumChildren() const;
00115
00116
00117 virtual
void setText(const
FXString& txt){ label=txt; }
00118
00119
00120
const FXString& getText()
const {
return label; }
00121
00122
00123
virtual void setOpenIcon(
FXIcon* icn){ openIcon=icn; }
00124
00125
00126
FXIcon* getOpenIcon()
const {
return openIcon; }
00127
00128
00129
virtual void setClosedIcon(
FXIcon* icn){ closedIcon=icn; }
00130
00131
00132
FXIcon* getClosedIcon()
const {
return closedIcon; }
00133
00134
00135
void setData(
void* ptr){ data=ptr; }
00136
00137
00138
void* getData()
const {
return data; }
00139
00140
00141
virtual void setFocus(FXbool focus);
00142
00143
00144 FXbool hasFocus()
const {
return (state&FOCUS)!=0; }
00145
00146
00147
virtual void setSelected(FXbool selected);
00148
00149
00150 FXbool isSelected()
const {
return (state&SELECTED)!=0; }
00151
00152
00153
virtual void setOpened(FXbool opened);
00154
00155
00156 FXbool isOpened()
const {
return (state&OPENED)!=0; }
00157
00158
00159
virtual void setExpanded(FXbool expanded);
00160
00161
00162 FXbool isExpanded()
const {
return (state&EXPANDED)!=0; }
00163
00164
00165
virtual void setEnabled(FXbool enabled);
00166
00167
00168 FXbool isEnabled()
const {
return (state&DISABLED)==0; }
00169
00170
00171
virtual void setDraggable(FXbool draggable);
00172
00173
00174 FXbool isDraggable()
const {
return (state&DRAGGABLE)!=0; }
00175
00176
00177
virtual void setIconOwned(FXuint owned=(OPENICONOWNED|CLOSEDICONOWNED));
00178
00179
00180 FXuint isIconOwned()
const {
return (state&(OPENICONOWNED|CLOSEDICONOWNED)); }
00181
00182
00183 FXbool hasItems()
const {
return (state&HASITEMS)!=0; }
00184
00185
00186
void setHasItems(FXbool flag);
00187
00188
00189 FXbool isChildOf(
const FXFoldingItem* item)
const;
00190
00191
00192 FXbool isParentOf(
const FXFoldingItem* item)
const;
00193
00194
00195
virtual FXint getWidth(
const FXFoldingList* list)
const;
00196
00197
00198
virtual FXint getHeight(
const FXFoldingList* list)
const;
00199
00200
00201
virtual void create();
00202
00203
00204
virtual void detach();
00205
00206
00207
virtual void destroy();
00208
00209
00210
virtual void save(FXStream& store)
const;
00211
00212
00213
virtual void load(FXStream& store);
00214
00215
00216
virtual ~FXFoldingItem();
00217 };
00218
00219
00220
00221
00222
typedef FXint (*FXFoldingListSortFunc)(
const FXFoldingItem*,
const FXFoldingItem*);
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
class FXAPI FXFoldingList :
public FXScrollArea {
00248 FXDECLARE(FXFoldingList)
00249
protected:
00250
FXHeader *header;
00251 FXFoldingItem *firstitem;
00252 FXFoldingItem *lastitem;
00253 FXFoldingItem *anchoritem;
00254 FXFoldingItem *currentitem;
00255 FXFoldingItem *extentitem;
00256 FXFoldingItem *cursoritem;
00257
FXFont *font;
00258 FXFoldingListSortFunc sortfunc;
00259 FXColor textColor;
00260 FXColor selbackColor;
00261 FXColor seltextColor;
00262 FXColor lineColor;
00263 FXint treeWidth;
00264 FXint treeHeight;
00265 FXint visible;
00266 FXint indent;
00267 FXint grabx;
00268 FXint graby;
00269
FXString lookup;
00270
FXString help;
00271 FXbool state;
00272
protected:
00273 FXFoldingList();
00274
virtual FXFoldingItem* createItem(
const FXString& text,
FXIcon* oi,
FXIcon* ci,
void* ptr);
00275
virtual void moveContents(FXint x,FXint y);
00276
void sort(FXFoldingItem*& f1,FXFoldingItem*& t1,FXFoldingItem*& f2,FXFoldingItem*& t2,
int n);
00277
void mergesort(FXFoldingItem*& list);
00278
void recompute();
00279
private:
00280 FXFoldingList(
const FXFoldingList&);
00281 FXFoldingList& operator=(
const FXFoldingList&);
00282
public:
00283
long onPaint(
FXObject*,FXSelector,
void*);
00284
long onEnter(
FXObject*,FXSelector,
void*);
00285
long onLeave(
FXObject*,FXSelector,
void*);
00286
long onUngrabbed(
FXObject*,FXSelector,
void*);
00287
long onMotion(
FXObject*,FXSelector,
void*);
00288
long onKeyPress(
FXObject*,FXSelector,
void*);
00289
long onKeyRelease(
FXObject*,FXSelector,
void*);
00290
long onLeftBtnPress(
FXObject*,FXSelector,
void*);
00291
long onLeftBtnRelease(
FXObject*,FXSelector,
void*);
00292
long onRightBtnPress(
FXObject*,FXSelector,
void*);
00293
long onRightBtnRelease(
FXObject*,FXSelector,
void*);
00294
long onHeaderChanged(
FXObject*,FXSelector,
void*);
00295
long onQueryTip(
FXObject*,FXSelector,
void*);
00296
long onQueryHelp(
FXObject*,FXSelector,
void*);
00297
long onTipTimer(
FXObject*,FXSelector,
void*);
00298
long onFocusIn(
FXObject*,FXSelector,
void*);
00299
long onFocusOut(
FXObject*,FXSelector,
void*);
00300
long onAutoScroll(
FXObject*,FXSelector,
void*);
00301 long onClicked(
FXObject*,FXSelector,
void*);
00302
long onDoubleClicked(
FXObject*,FXSelector,
void*);
00303
long onTripleClicked(
FXObject*,FXSelector,
void*);
00304
long onCommand(
FXObject*,FXSelector,
void*);
00305
long onLookupTimer(
FXObject*,FXSelector,
void*);
00306
public:
00307
static FXint ascending(
const FXFoldingItem*,
const FXFoldingItem*);
00308
static FXint descending(
const FXFoldingItem*,
const FXFoldingItem*);
00309
static FXint ascendingCase(
const FXFoldingItem*,
const FXFoldingItem*);
00310
static FXint descendingCase(
const FXFoldingItem*,
const FXFoldingItem*);
00311
public:
00312
enum {
00313 ID_LOOKUPTIMER=FXScrollArea::ID_LAST,
00314 ID_HEADER_CHANGE,
00315 ID_LAST
00316 };
00317
public:
00318
00319
00320 FXFoldingList(
FXComposite *p,
FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=FOLDINGLIST_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0);
00321
00322
00323
virtual void create();
00324
00325
00326
virtual void detach();
00327
00328
00329
virtual void layout();
00330
00331
00332
virtual FXint getDefaultWidth();
00333
00334
00335
virtual FXint getDefaultHeight();
00336
00337
00338
virtual FXint getContentWidth();
00339
00340
00341
virtual FXint getContentHeight();
00342
00343
00344
virtual void recalc();
00345
00346
00347
virtual FXbool canFocus() const;
00348
00349
00350 virtual
void setFocus();
00351
00352
00353 virtual
void killFocus();
00354
00355
00356
FXHeader* getHeader()
const {
return header; }
00357
00358
00359
void appendHeader(
const FXString& text,
FXIcon *icon=NULL,FXint size=1);
00360
00361
00362
void removeHeader(FXint index);
00363
00364
00365
void setHeaderText(FXint index,
const FXString& text);
00366
00367
00368
FXString getHeaderText(FXint index)
const;
00369
00370
00371
void setHeaderIcon(FXint index,
FXIcon *icon);
00372
00373
00374
FXIcon* getHeaderIcon(FXint index)
const;
00375
00376
00377
void setHeaderSize(FXint index,FXint size);
00378
00379
00380 FXint getHeaderSize(FXint index)
const;
00381
00382
00383 FXint getNumHeaders() const;
00384
00385
00386 FXint getNumItems() const;
00387
00388
00389 FXint getNumVisible()
const {
return visible; }
00390
00391
00392
void setNumVisible(FXint nvis);
00393
00394
00395 FXFoldingItem* getFirstItem()
const {
return firstitem; }
00396
00397
00398 FXFoldingItem* getLastItem()
const {
return lastitem; }
00399
00400
00401 FXFoldingItem* addItemFirst(FXFoldingItem* p,FXFoldingItem* item,FXbool notify=FALSE);
00402
00403
00404 FXFoldingItem* addItemFirst(FXFoldingItem* p,
const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,
void* ptr=NULL,FXbool notify=FALSE);
00405
00406
00407 FXFoldingItem* addItemLast(FXFoldingItem* p,FXFoldingItem* item,FXbool notify=FALSE);
00408
00409
00410 FXFoldingItem* addItemLast(FXFoldingItem* p,
const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,
void* ptr=NULL,FXbool notify=FALSE);
00411
00412
00413 FXFoldingItem* addItemAfter(FXFoldingItem* other,FXFoldingItem* item,FXbool notify=FALSE);
00414
00415
00416 FXFoldingItem* addItemAfter(FXFoldingItem* other,
const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,
void* ptr=NULL,FXbool notify=FALSE);
00417
00418
00419 FXFoldingItem* addItemBefore(FXFoldingItem* other,FXFoldingItem* item,FXbool notify=FALSE);
00420
00421
00422 FXFoldingItem* addItemBefore(FXFoldingItem* other,
const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,
void* ptr=NULL,FXbool notify=FALSE);
00423
00424
00425
void reparentItem(FXFoldingItem* item,FXFoldingItem* p);
00426
00427
00428 FXFoldingItem* moveItemBefore(FXFoldingItem* other,FXFoldingItem* item);
00429
00430
00431 FXFoldingItem* moveItemAfter(FXFoldingItem* other,FXFoldingItem* item);
00432
00433
00434
void removeItem(FXFoldingItem* item,FXbool notify=FALSE);
00435
00436
00437
void removeItems(FXFoldingItem* fm,FXFoldingItem* to,FXbool notify=FALSE);
00438
00439
00440
void clearItems(FXbool notify=FALSE);
00441
00442
00443 FXint getItemWidth(
const FXFoldingItem* item)
const {
return item->getWidth(
this); }
00444
00445
00446 FXint getItemHeight(
const FXFoldingItem* item)
const {
return item->getHeight(
this); }
00447
00448
00449 FXFoldingItem* getItemAt(FXint x,FXint y)
const;
00450
00451
00452
00453
00454
00455 FXFoldingItem* findItem(
const FXString& text,FXFoldingItem* start=NULL,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP)
const;
00456
00457
00458
void makeItemVisible(FXFoldingItem* item);
00459
00460
00461
void setItemText(FXFoldingItem* item,
const FXString& text);
00462
00463
00464 FXString getItemText(
const FXFoldingItem* item)
const;
00465
00466
00467
void setItemOpenIcon(FXFoldingItem* item,FXIcon* icon);
00468
00469
00470 FXIcon* getItemOpenIcon(
const FXFoldingItem* item)
const;
00471
00472
00473
void setItemClosedIcon(FXFoldingItem* item,FXIcon* icon);
00474
00475
00476 FXIcon* getItemClosedIcon(
const FXFoldingItem* item)
const;
00477
00478
00479
void setItemData(FXFoldingItem* item,
void* ptr)
const;
00480
00481
00482
void* getItemData(
const FXFoldingItem* item)
const;
00483
00484
00485 FXbool isItemSelected(
const FXFoldingItem* item)
const;
00486
00487
00488 FXbool isItemCurrent(
const FXFoldingItem* item)
const;
00489
00490
00491 FXbool isItemVisible(
const FXFoldingItem* item)
const;
00492
00493
00494 FXbool isItemOpened(
const FXFoldingItem* item)
const;
00495
00496
00497 FXbool isItemExpanded(
const FXFoldingItem* item)
const;
00498
00499
00500 FXbool isItemLeaf(
const FXFoldingItem* item)
const;
00501
00502
00503 FXbool isItemEnabled(
const FXFoldingItem* item)
const;
00504
00505
00506 FXint hitItem(
const FXFoldingItem* item,FXint x,FXint y)
const;
00507
00508
00509
void updateItem(FXFoldingItem* item);
00510
00511
00512 FXbool enableItem(FXFoldingItem* item);
00513
00514
00515 FXbool disableItem(FXFoldingItem* item);
00516
00517
00518 FXbool selectItem(FXFoldingItem* item,FXbool notify=FALSE);
00519
00520
00521 FXbool deselectItem(FXFoldingItem* item,FXbool notify=FALSE);
00522
00523
00524 FXbool toggleItem(FXFoldingItem* item,FXbool notify=FALSE);
00525
00526
00527 FXbool extendSelection(FXFoldingItem* item,FXbool notify=FALSE);
00528
00529
00530 FXbool killSelection(FXbool notify=FALSE);
00531
00532
00533 FXbool openItem(FXFoldingItem* item,FXbool notify=FALSE);
00534
00535
00536 FXbool closeItem(FXFoldingItem* item,FXbool notify=FALSE);
00537
00538
00539 FXbool collapseTree(FXFoldingItem* tree,FXbool notify=FALSE);
00540
00541
00542 FXbool expandTree(FXFoldingItem* tree,FXbool notify=FALSE);
00543
00544
00545
void setCurrentItem(FXFoldingItem* item,FXbool notify=FALSE);
00546
00547
00548 FXFoldingItem* getCurrentItem()
const {
return currentitem; }
00549
00550
00551
void setAnchorItem(FXFoldingItem* item);
00552
00553
00554 FXFoldingItem* getAnchorItem()
const {
return anchoritem; }
00555
00556
00557 FXFoldingItem* getCursorItem()
const {
return cursoritem; }
00558
00559
00560
void sortItems();
00561
00562
00563
void sortRootItems();
00564
00565
00566
void sortChildItems(FXFoldingItem* item);
00567
00568
00569 FXFoldingListSortFunc getSortFunc()
const {
return sortfunc; }
00570
00571
00572
void setSortFunc(FXFoldingListSortFunc func){ sortfunc=func; }
00573
00574
00575
void setFont(FXFont* fnt);
00576
00577
00578 FXFont* getFont()
const {
return font; }
00579
00580
00581
void setIndent(FXint in);
00582
00583
00584 FXint getIndent()
const {
return indent; }
00585
00586
00587 FXColor getTextColor()
const {
return textColor; }
00588
00589
00590
void setTextColor(FXColor clr);
00591
00592
00593 FXColor getSelBackColor()
const {
return selbackColor; }
00594
00595
00596
void setSelBackColor(FXColor clr);
00597
00598
00599 FXColor getSelTextColor()
const {
return seltextColor; }
00600
00601
00602
void setSelTextColor(FXColor clr);
00603
00604
00605 FXColor getLineColor()
const {
return lineColor; }
00606
00607
00608
void setLineColor(FXColor clr);
00609
00610
00611 FXuint getListStyle() const;
00612
00613
00614
void setListStyle(FXuint style);
00615
00616
00617
void setHelpText(const FXString& text);
00618
00619
00620 FXString getHelpText()
const {
return help; }
00621
00622
00623
virtual void save(FXStream& store)
const;
00624
00625
00626
virtual void load(FXStream& store);
00627
00628
00629
virtual ~FXFoldingList();
00630 };
00631
00632 }
00633
00634
00635
#endif