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 isChildOf(const FXFoldingItem* item) const;
00184
00185
00186 FXbool isParentOf(const FXFoldingItem* item) const;
00187
00188
00189 virtual FXint getWidth(const FXFoldingList* list) const;
00190
00191
00192 virtual FXint getHeight(const FXFoldingList* list) const;
00193
00194
00195 virtual void create();
00196
00197
00198 virtual void detach();
00199
00200
00201 virtual void destroy();
00202
00203
00204 virtual void save(FXStream& store) const;
00205
00206
00207 virtual void load(FXStream& store);
00208
00209
00210 virtual ~FXFoldingItem();
00211 };
00212
00213
00214
00215
00216 typedef FXint (*FXFoldingListSortFunc)(const FXFoldingItem*,const FXFoldingItem*);
00217
00218
00219
00220
00221 class FXAPI FXFoldingList : public FXScrollArea {
00222 FXDECLARE(FXFoldingList)
00223 protected:
00224 FXHeader *header;
00225 FXFoldingItem *firstitem;
00226 FXFoldingItem *lastitem;
00227 FXFoldingItem *anchoritem;
00228 FXFoldingItem *currentitem;
00229 FXFoldingItem *extentitem;
00230 FXFoldingItem *cursoritem;
00231 FXFont *font;
00232 FXFoldingListSortFunc sortfunc;
00233 FXColor textColor;
00234 FXColor selbackColor;
00235 FXColor seltextColor;
00236 FXColor lineColor;
00237 FXint treeWidth;
00238 FXint treeHeight;
00239 FXint visible;
00240 FXint indent;
00241 FXint grabx;
00242 FXint graby;
00243 FXString lookup;
00244 FXString help;
00245 FXbool state;
00246 protected:
00247 FXFoldingList();
00248 virtual FXFoldingItem* createItem(const FXString& text,FXIcon* oi,FXIcon* ci,void* ptr);
00249 virtual void moveContents(FXint x,FXint y);
00250 void sort(FXFoldingItem*& f1,FXFoldingItem*& t1,FXFoldingItem*& f2,FXFoldingItem*& t2,int n);
00251 void mergesort(FXFoldingItem*& list);
00252 void recompute();
00253 private:
00254 FXFoldingList(const FXFoldingList&);
00255 FXFoldingList& operator=(const FXFoldingList&);
00256 public:
00257 long onPaint(FXObject*,FXSelector,void*);
00258 long onEnter(FXObject*,FXSelector,void*);
00259 long onLeave(FXObject*,FXSelector,void*);
00260 long onUngrabbed(FXObject*,FXSelector,void*);
00261 long onMotion(FXObject*,FXSelector,void*);
00262 long onKeyPress(FXObject*,FXSelector,void*);
00263 long onKeyRelease(FXObject*,FXSelector,void*);
00264 long onLeftBtnPress(FXObject*,FXSelector,void*);
00265 long onLeftBtnRelease(FXObject*,FXSelector,void*);
00266 long onRightBtnPress(FXObject*,FXSelector,void*);
00267 long onRightBtnRelease(FXObject*,FXSelector,void*);
00268 long onHeaderChanged(FXObject*,FXSelector,void*);
00269 long onQueryTip(FXObject*,FXSelector,void*);
00270 long onQueryHelp(FXObject*,FXSelector,void*);
00271 long onTipTimer(FXObject*,FXSelector,void*);
00272 long onFocusIn(FXObject*,FXSelector,void*);
00273 long onFocusOut(FXObject*,FXSelector,void*);
00274 long onAutoScroll(FXObject*,FXSelector,void*);
00275 long onClicked(FXObject*,FXSelector,void*);
00276 long onDoubleClicked(FXObject*,FXSelector,void*);
00277 long onTripleClicked(FXObject*,FXSelector,void*);
00278 long onCommand(FXObject*,FXSelector,void*);
00279 long onLookupTimer(FXObject*,FXSelector,void*);
00280 public:
00281 static FXint ascending(const FXFoldingItem*,const FXFoldingItem*);
00282 static FXint descending(const FXFoldingItem*,const FXFoldingItem*);
00283 static FXint ascendingCase(const FXFoldingItem*,const FXFoldingItem*);
00284 static FXint descendingCase(const FXFoldingItem*,const FXFoldingItem*);
00285 public:
00286 enum {
00287 ID_LOOKUPTIMER=FXScrollArea::ID_LAST,
00288 ID_HEADER_CHANGE,
00289 ID_LAST
00290 };
00291 public:
00292
00293
00294 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);
00295
00296
00297 virtual void create();
00298
00299
00300 virtual void detach();
00301
00302
00303 virtual void layout();
00304
00305
00306 virtual FXint getDefaultWidth();
00307
00308
00309 virtual FXint getDefaultHeight();
00310
00311
00312 virtual FXint getContentWidth();
00313
00314
00315 virtual FXint getContentHeight();
00316
00317
00318 virtual void recalc();
00319
00320
00321 virtual FXbool canFocus() const;
00322
00323
00324 virtual void setFocus();
00325
00326
00327 virtual void killFocus();
00328
00329
00330 FXHeader* getHeader() const { return header; }
00331
00332
00333 void appendHeader(const FXString& text,FXIcon *icon=NULL,FXint size=1);
00334
00335
00336 void removeHeader(FXint index);
00337
00338
00339 void setHeaderText(FXint index,const FXString& text);
00340
00341
00342 FXString getHeaderText(FXint index) const;
00343
00344
00345 void setHeaderIcon(FXint index,FXIcon *icon);
00346
00347
00348 FXIcon* getHeaderIcon(FXint index) const;
00349
00350
00351 void setHeaderSize(FXint index,FXint size);
00352
00353
00354 FXint getHeaderSize(FXint index) const;
00355
00356
00357 FXint getNumHeaders() const;
00358
00359
00360 FXint getNumItems() const;
00361
00362
00363 FXint getNumVisible() const { return visible; }
00364
00365
00366 void setNumVisible(FXint nvis);
00367
00368
00369 FXFoldingItem* getFirstItem() const { return firstitem; }
00370
00371
00372 FXFoldingItem* getLastItem() const { return lastitem; }
00373
00374
00375 FXFoldingItem* addItemFirst(FXFoldingItem* p,FXFoldingItem* item,FXbool notify=FALSE);
00376
00377
00378 FXFoldingItem* addItemFirst(FXFoldingItem* p,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE);
00379
00380
00381 FXFoldingItem* addItemLast(FXFoldingItem* p,FXFoldingItem* item,FXbool notify=FALSE);
00382
00383
00384 FXFoldingItem* addItemLast(FXFoldingItem* p,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE);
00385
00386
00387 FXFoldingItem* addItemAfter(FXFoldingItem* other,FXFoldingItem* item,FXbool notify=FALSE);
00388
00389
00390 FXFoldingItem* addItemAfter(FXFoldingItem* other,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE);
00391
00392
00393 FXFoldingItem* addItemBefore(FXFoldingItem* other,FXFoldingItem* item,FXbool notify=FALSE);
00394
00395
00396 FXFoldingItem* addItemBefore(FXFoldingItem* other,const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL,FXbool notify=FALSE);
00397
00398
00399 void reparentItem(FXFoldingItem* item,FXFoldingItem* p);
00400
00401
00402 FXFoldingItem* moveItemBefore(FXFoldingItem* other,FXFoldingItem* item);
00403
00404
00405 FXFoldingItem* moveItemAfter(FXFoldingItem* other,FXFoldingItem* item);
00406
00407
00408 void removeItem(FXFoldingItem* item,FXbool notify=FALSE);
00409
00410
00411 void removeItems(FXFoldingItem* fm,FXFoldingItem* to,FXbool notify=FALSE);
00412
00413
00414 void clearItems(FXbool notify=FALSE);
00415
00416
00417 FXint getItemWidth(const FXFoldingItem* item) const { return item->getWidth(this); }
00418
00419
00420 FXint getItemHeight(const FXFoldingItem* item) const { return item->getHeight(this); }
00421
00422
00423 FXFoldingItem* getItemAt(FXint x,FXint y) const;
00424
00425
00426
00427
00428
00429 FXFoldingItem* findItem(const FXString& text,FXFoldingItem* start=NULL,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const;
00430
00431
00432 void makeItemVisible(FXFoldingItem* item);
00433
00434
00435 void setItemText(FXFoldingItem* item,const FXString& text);
00436
00437
00438 FXString getItemText(const FXFoldingItem* item) const;
00439
00440
00441 void setItemOpenIcon(FXFoldingItem* item,FXIcon* icon);
00442
00443
00444 FXIcon* getItemOpenIcon(const FXFoldingItem* item) const;
00445
00446
00447 void setItemClosedIcon(FXFoldingItem* item,FXIcon* icon);
00448
00449
00450 FXIcon* getItemClosedIcon(const FXFoldingItem* item) const;
00451
00452
00453 void setItemData(FXFoldingItem* item,void* ptr) const;
00454
00455
00456 void* getItemData(const FXFoldingItem* item) const;
00457
00458
00459 FXbool isItemSelected(const FXFoldingItem* item) const;
00460
00461
00462 FXbool isItemCurrent(const FXFoldingItem* item) const;
00463
00464
00465 FXbool isItemVisible(const FXFoldingItem* item) const;
00466
00467
00468 FXbool isItemOpened(const FXFoldingItem* item) const;
00469
00470
00471 FXbool isItemExpanded(const FXFoldingItem* item) const;
00472
00473
00474 FXbool isItemLeaf(const FXFoldingItem* item) const;
00475
00476
00477 FXbool isItemEnabled(const FXFoldingItem* item) const;
00478
00479
00480 FXint hitItem(const FXFoldingItem* item,FXint x,FXint y) const;
00481
00482
00483 void updateItem(FXFoldingItem* item);
00484
00485
00486 FXbool enableItem(FXFoldingItem* item);
00487
00488
00489 FXbool disableItem(FXFoldingItem* item);
00490
00491
00492 FXbool selectItem(FXFoldingItem* item,FXbool notify=FALSE);
00493
00494
00495 FXbool deselectItem(FXFoldingItem* item,FXbool notify=FALSE);
00496
00497
00498 FXbool toggleItem(FXFoldingItem* item,FXbool notify=FALSE);
00499
00500
00501 FXbool extendSelection(FXFoldingItem* item,FXbool notify=FALSE);
00502
00503
00504 FXbool killSelection(FXbool notify=FALSE);
00505
00506
00507 FXbool openItem(FXFoldingItem* item,FXbool notify=FALSE);
00508
00509
00510 FXbool closeItem(FXFoldingItem* item,FXbool notify=FALSE);
00511
00512
00513 FXbool collapseTree(FXFoldingItem* tree,FXbool notify=FALSE);
00514
00515
00516 FXbool expandTree(FXFoldingItem* tree,FXbool notify=FALSE);
00517
00518
00519 void setCurrentItem(FXFoldingItem* item,FXbool notify=FALSE);
00520
00521
00522 FXFoldingItem* getCurrentItem() const { return currentitem; }
00523
00524
00525 void setAnchorItem(FXFoldingItem* item);
00526
00527
00528 FXFoldingItem* getAnchorItem() const { return anchoritem; }
00529
00530
00531 FXFoldingItem* getCursorItem() const { return cursoritem; }
00532
00533
00534 void sortItems();
00535
00536
00537 void sortRootItems();
00538
00539
00540 void sortChildItems(FXFoldingItem* item);
00541
00542
00543 void setFont(FXFont* fnt);
00544
00545
00546 FXFont* getFont() const { return font; }
00547
00548
00549 void setIndent(FXint in);
00550
00551
00552 FXint getIndent() const { return indent; }
00553
00554
00555 FXColor getTextColor() const { return textColor; }
00556
00557
00558 void setTextColor(FXColor clr);
00559
00560
00561 FXColor getSelBackColor() const { return selbackColor; }
00562
00563
00564 void setSelBackColor(FXColor clr);
00565
00566
00567 FXColor getSelTextColor() const { return seltextColor; }
00568
00569
00570 void setSelTextColor(FXColor clr);
00571
00572
00573 FXColor getLineColor() const { return lineColor; }
00574
00575
00576 void setLineColor(FXColor clr);
00577
00578
00579 FXFoldingListSortFunc getSortFunc() const { return sortfunc; }
00580
00581
00582 void setSortFunc(FXFoldingListSortFunc func){ sortfunc=func; }
00583
00584
00585 FXuint getListStyle() const;
00586
00587
00588 void setListStyle(FXuint style);
00589
00590
00591 void setHelpText(const FXString& text);
00592
00593
00594 FXString getHelpText() const { return help; }
00595
00596
00597 virtual void save(FXStream& store) const;
00598
00599
00600 virtual void load(FXStream& store);
00601
00602
00603 virtual ~FXFoldingList();
00604 };
00605
00606 }
00607
00608
00609 #endif