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 FXICONLIST_H
00025 #define FXICONLIST_H
00026
00027 #ifndef FXSCROLLAREA_H
00028 #include "FXScrollArea.h"
00029 #endif
00030
00031 namespace FX {
00032
00033
00034
00035 enum {
00036 ICONLIST_EXTENDEDSELECT = 0,
00037 ICONLIST_SINGLESELECT = 0x00100000,
00038 ICONLIST_BROWSESELECT = 0x00200000,
00039 ICONLIST_MULTIPLESELECT = 0x00300000,
00040 ICONLIST_AUTOSIZE = 0x00400000,
00041 ICONLIST_DETAILED = 0,
00042 ICONLIST_MINI_ICONS = 0x00800000,
00043 ICONLIST_BIG_ICONS = 0x01000000,
00044 ICONLIST_ROWS = 0,
00045 ICONLIST_COLUMNS = 0x02000000,
00046 ICONLIST_NORMAL = ICONLIST_EXTENDEDSELECT
00047 };
00048
00049
00050 class FXIcon;
00051 class FXHeader;
00052 class FXFont;
00053 class FXIconList;
00054 class FXFileList;
00055
00056
00057
00058 class FXAPI FXIconItem : public FXObject {
00059 FXDECLARE(FXIconItem)
00060 friend class FXIconList;
00061 friend class FXFileList;
00062 protected:
00063 FXString label;
00064 FXIcon *bigIcon;
00065 FXIcon *miniIcon;
00066 void *data;
00067 FXuint state;
00068 private:
00069 FXIconItem(const FXIconItem&);
00070 FXIconItem& operator=(const FXIconItem&);
00071 protected:
00072 FXIconItem():bigIcon(NULL),miniIcon(NULL),data(NULL),state(0){}
00073 virtual void draw(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00074 virtual FXint hitItem(const FXIconList* list,FXint rx,FXint ry,FXint rw=1,FXint rh=1) const;
00075 protected:
00076 virtual void drawBigIcon(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00077 virtual void drawMiniIcon(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00078 virtual void drawDetails(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00079 public:
00080 enum {
00081 SELECTED = 1,
00082 FOCUS = 2,
00083 DISABLED = 4,
00084 DRAGGABLE = 8,
00085 BIGICONOWNED = 16,
00086 MINIICONOWNED = 32
00087 };
00088 public:
00089
00090
00091 FXIconItem(const FXString& text,FXIcon* bi=NULL,FXIcon* mi=NULL,void* ptr=NULL):label(text),bigIcon(bi),miniIcon(mi),data(ptr),state(0){}
00092
00093
00094 virtual void setText(const FXString& txt);
00095
00096
00097 const FXString& getText() const { return label; }
00098
00099
00100 virtual void setBigIcon(FXIcon* icn,FXbool owned=FALSE);
00101
00102
00103 FXIcon* getBigIcon() const { return bigIcon; }
00104
00105
00106 virtual void setMiniIcon(FXIcon* icn,FXbool owned=FALSE);
00107
00108
00109 FXIcon* getMiniIcon() const { return miniIcon; }
00110
00111
00112 void setData(void* ptr){ data=ptr; }
00113
00114
00115 void* getData() const { return data; }
00116
00117
00118 virtual void setFocus(FXbool focus);
00119
00120
00121 FXbool hasFocus() const { return (state&FOCUS)!=0; }
00122
00123
00124 virtual void setSelected(FXbool selected);
00125
00126
00127 FXbool isSelected() const { return (state&SELECTED)!=0; }
00128
00129
00130 virtual void setEnabled(FXbool enabled);
00131
00132
00133 FXbool isEnabled() const { return (state&DISABLED)==0; }
00134
00135
00136 virtual void setDraggable(FXbool draggable);
00137
00138
00139 FXbool isDraggable() const { return (state&DRAGGABLE)!=0; }
00140
00141
00142 virtual FXint getWidth(const FXIconList* list) const;
00143
00144
00145 virtual FXint getHeight(const FXIconList* list) const;
00146
00147
00148 virtual void create();
00149
00150
00151 virtual void detach();
00152
00153
00154 virtual void destroy();
00155
00156
00157 virtual void save(FXStream& store) const;
00158
00159
00160 virtual void load(FXStream& store);
00161
00162
00163 virtual ~FXIconItem();
00164 };
00165
00166
00167
00168 typedef FXint (*FXIconListSortFunc)(const FXIconItem*,const FXIconItem*);
00169
00170
00171
00172 typedef FXObjectListOf<FXIconItem> FXIconItemList;
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195 class FXAPI FXIconList : public FXScrollArea {
00196 FXDECLARE(FXIconList)
00197 protected:
00198 FXHeader *header;
00199 FXIconItemList items;
00200 FXint nrows;
00201 FXint ncols;
00202 FXint anchor;
00203 FXint current;
00204 FXint extent;
00205 FXint cursor;
00206 FXint viewable;
00207 FXFont *font;
00208 FXIconListSortFunc sortfunc;
00209 FXColor textColor;
00210 FXColor selbackColor;
00211 FXColor seltextColor;
00212 FXint itemWidth;
00213 FXint itemHeight;
00214 FXint itemSpace;
00215 FXint anchorx;
00216 FXint anchory;
00217 FXint currentx;
00218 FXint currenty;
00219 FXint grabx;
00220 FXint graby;
00221 FXString lookup;
00222 FXString help;
00223 FXbool state;
00224 protected:
00225 FXIconList();
00226 void recompute();
00227 void getrowscols(FXint& nr,FXint& nc,FXint w,FXint h) const;
00228 void drawLasso(FXint x0,FXint y0,FXint x1,FXint y1);
00229 void lassoChanged(FXint ox,FXint oy,FXint ow,FXint oh,FXint nx,FXint ny,FXint nw,FXint nh,FXbool notify);
00230 virtual void moveContents(FXint x,FXint y);
00231 virtual FXIconItem *createItem(const FXString& text,FXIcon *big,FXIcon* mini,void* ptr);
00232 static FXint compareSection(const FXchar *p,const FXchar* q,FXint s);
00233 static FXint compareSectionCase(const FXchar *p,const FXchar* q,FXint s);
00234 private:
00235 FXIconList(const FXIconList&);
00236 FXIconList &operator=(const FXIconList&);
00237 public:
00238 long onPaint(FXObject*,FXSelector,void*);
00239 long onEnter(FXObject*,FXSelector,void*);
00240 long onLeave(FXObject*,FXSelector,void*);
00241 long onUngrabbed(FXObject*,FXSelector,void*);
00242 long onKeyPress(FXObject*,FXSelector,void*);
00243 long onKeyRelease(FXObject*,FXSelector,void*);
00244 long onLeftBtnPress(FXObject*,FXSelector,void*);
00245 long onLeftBtnRelease(FXObject*,FXSelector,void*);
00246 long onRightBtnPress(FXObject*,FXSelector,void*);
00247 long onRightBtnRelease(FXObject*,FXSelector,void*);
00248 long onMotion(FXObject*,FXSelector,void*);
00249 long onQueryTip(FXObject*,FXSelector,void*);
00250 long onQueryHelp(FXObject*,FXSelector,void*);
00251 long onTipTimer(FXObject*,FXSelector,void*);
00252 long onCmdSelectAll(FXObject*,FXSelector,void*);
00253 long onCmdDeselectAll(FXObject*,FXSelector,void*);
00254 long onCmdSelectInverse(FXObject*,FXSelector,void*);
00255 long onCmdArrangeByRows(FXObject*,FXSelector,void*);
00256 long onUpdArrangeByRows(FXObject*,FXSelector,void*);
00257 long onCmdArrangeByColumns(FXObject*,FXSelector,void*);
00258 long onUpdArrangeByColumns(FXObject*,FXSelector,void*);
00259 long onCmdShowDetails(FXObject*,FXSelector,void*);
00260 long onUpdShowDetails(FXObject*,FXSelector,void*);
00261 long onCmdShowBigIcons(FXObject*,FXSelector,void*);
00262 long onUpdShowBigIcons(FXObject*,FXSelector,void*);
00263 long onCmdShowMiniIcons(FXObject*,FXSelector,void*);
00264 long onUpdShowMiniIcons(FXObject*,FXSelector,void*);
00265 long onHeaderChanged(FXObject*,FXSelector,void*);
00266 long onHeaderResize(FXObject*,FXSelector,void*);
00267 long onFocusIn(FXObject*,FXSelector,void*);
00268 long onFocusOut(FXObject*,FXSelector,void*);
00269 long onClicked(FXObject*,FXSelector,void*);
00270 long onDoubleClicked(FXObject*,FXSelector,void*);
00271 long onTripleClicked(FXObject*,FXSelector,void*);
00272 long onCommand(FXObject*,FXSelector,void*);
00273 long onAutoScroll(FXObject*,FXSelector,void*);
00274 long onLookupTimer(FXObject*,FXSelector,void*);
00275 long onCmdSetValue(FXObject*,FXSelector,void*);
00276 long onCmdGetIntValue(FXObject*,FXSelector,void*);
00277 long onCmdSetIntValue(FXObject*,FXSelector,void*);
00278 public:
00279 static FXint ascending(const FXIconItem* a,const FXIconItem* b);
00280 static FXint descending(const FXIconItem* a,const FXIconItem* b);
00281 static FXint ascendingCase(const FXIconItem* a,const FXIconItem* b);
00282 static FXint descendingCase(const FXIconItem* a,const FXIconItem* b);
00283 public:
00284 enum {
00285 ID_SHOW_DETAILS=FXScrollArea::ID_LAST,
00286 ID_SHOW_MINI_ICONS,
00287 ID_SHOW_BIG_ICONS,
00288 ID_ARRANGE_BY_ROWS,
00289 ID_ARRANGE_BY_COLUMNS,
00290 ID_HEADER_CHANGE,
00291 ID_LOOKUPTIMER,
00292 ID_SELECT_ALL,
00293 ID_DESELECT_ALL,
00294 ID_SELECT_INVERSE,
00295 ID_LAST
00296 };
00297 public:
00298
00299
00300 FXIconList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=ICONLIST_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0);
00301
00302
00303 virtual void create();
00304
00305
00306 virtual void detach();
00307
00308
00309 virtual void recalc();
00310
00311
00312 virtual void layout();
00313
00314
00315 virtual FXint getContentWidth();
00316
00317
00318 virtual FXint getContentHeight();
00319
00320
00321 virtual bool canFocus() const;
00322
00323
00324 virtual void setFocus();
00325
00326
00327 virtual void killFocus();
00328
00329
00330 virtual FXint getViewportHeight();
00331
00332
00333 virtual void resize(FXint w,FXint h);
00334
00335
00336 virtual void position(FXint x,FXint y,FXint w,FXint h);
00337
00338
00339 FXint getNumItems() const { return items.no(); }
00340
00341
00342 FXint getNumRows() const { return nrows; }
00343
00344
00345 FXint getNumCols() const { return ncols; }
00346
00347
00348 FXHeader* getHeader() const { return header; }
00349
00350
00351 void setHeaders(const FXchar** strings,FXint size=1);
00352
00353
00354 void setHeaders(const FXString& strings,FXint size=1);
00355
00356
00357 void appendHeader(const FXString& text,FXIcon *icon=NULL,FXint size=1);
00358
00359
00360 void removeHeader(FXint index);
00361
00362
00363 void setHeaderText(FXint index,const FXString& text);
00364
00365
00366 FXString getHeaderText(FXint index) const;
00367
00368
00369 void setHeaderIcon(FXint index,FXIcon *icon);
00370
00371
00372 FXIcon* getHeaderIcon(FXint index) const;
00373
00374
00375 void setHeaderSize(FXint index,FXint size);
00376
00377
00378 FXint getHeaderSize(FXint index) const;
00379
00380
00381 FXint getNumHeaders() const;
00382
00383
00384 FXIconItem *getItem(FXint index) const;
00385
00386
00387 FXint setItem(FXint index,FXIconItem* item,FXbool notify=FALSE);
00388
00389
00390 FXint setItem(FXint index,const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE);
00391
00392
00393 FXint fillItems(const FXchar** strings,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE);
00394
00395
00396 FXint fillItems(const FXString& strings,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE);
00397
00398
00399 FXint insertItem(FXint index,FXIconItem* item,FXbool notify=FALSE);
00400
00401
00402 FXint insertItem(FXint index,const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE);
00403
00404
00405 FXint appendItem(FXIconItem* item,FXbool notify=FALSE);
00406
00407
00408 FXint appendItem(const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE);
00409
00410
00411 FXint prependItem(FXIconItem* item,FXbool notify=FALSE);
00412
00413
00414 FXint prependItem(const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE);
00415
00416
00417 FXint moveItem(FXint newindex,FXint oldindex,FXbool notify=FALSE);
00418
00419
00420 FXIconItem* extractItem(FXint index,FXbool notify=FALSE);
00421
00422
00423 void removeItem(FXint index,FXbool notify=FALSE);
00424
00425
00426 void clearItems(FXbool notify=FALSE);
00427
00428
00429 FXint getItemWidth() const { return itemWidth; }
00430
00431
00432 FXint getItemHeight() const { return itemHeight; }
00433
00434
00435 virtual FXint getItemAt(FXint x,FXint y) const;
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447 FXint findItem(const FXString& text,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const;
00448
00449
00450
00451
00452
00453
00454
00455
00456 FXint findItemByData(const void *ptr,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const;
00457
00458
00459 virtual void makeItemVisible(FXint index);
00460
00461
00462 void setItemText(FXint index,const FXString& text);
00463
00464
00465 FXString getItemText(FXint index) const;
00466
00467
00468 void setItemBigIcon(FXint index,FXIcon* icon,FXbool owned=FALSE);
00469
00470
00471 FXIcon* getItemBigIcon(FXint index) const;
00472
00473
00474 void setItemMiniIcon(FXint index,FXIcon* icon,FXbool owned=FALSE);
00475
00476
00477 FXIcon* getItemMiniIcon(FXint index) const;
00478
00479
00480 void setItemData(FXint index,void* ptr);
00481
00482
00483 void* getItemData(FXint index) const;
00484
00485
00486 FXbool isItemSelected(FXint index) const;
00487
00488
00489 FXbool isItemCurrent(FXint index) const;
00490
00491
00492 FXbool isItemVisible(FXint index) const;
00493
00494
00495 FXbool isItemEnabled(FXint index) const;
00496
00497
00498 FXint hitItem(FXint index,FXint x,FXint y,FXint ww=1,FXint hh=1) const;
00499
00500
00501 void updateItem(FXint index) const;
00502
00503
00504 virtual FXbool enableItem(FXint index);
00505
00506
00507 virtual FXbool disableItem(FXint index);
00508
00509
00510 virtual FXbool selectItem(FXint index,FXbool notify=FALSE);
00511
00512
00513 virtual FXbool deselectItem(FXint index,FXbool notify=FALSE);
00514
00515
00516 virtual FXbool toggleItem(FXint index,FXbool notify=FALSE);
00517
00518
00519 virtual FXbool selectInRectangle(FXint x,FXint y,FXint w,FXint h,FXbool notify=FALSE);
00520
00521
00522 virtual FXbool extendSelection(FXint index,FXbool notify=FALSE);
00523
00524
00525 virtual FXbool killSelection(FXbool notify=FALSE);
00526
00527
00528 virtual void setCurrentItem(FXint index,FXbool notify=FALSE);
00529
00530
00531 FXint getCurrentItem() const { return current; }
00532
00533
00534 void setAnchorItem(FXint index);
00535
00536
00537 FXint getAnchorItem() const { return anchor; }
00538
00539
00540 FXint getCursorItem() const { return cursor; }
00541
00542
00543 void sortItems();
00544
00545
00546 FXIconListSortFunc getSortFunc() const { return sortfunc; }
00547
00548
00549 void setSortFunc(FXIconListSortFunc func){ sortfunc=func; }
00550
00551
00552 void setFont(FXFont* fnt);
00553
00554
00555 FXFont* getFont() const { return font; }
00556
00557
00558 FXColor getTextColor() const { return textColor; }
00559
00560
00561 void setTextColor(FXColor clr);
00562
00563
00564 FXColor getSelBackColor() const { return selbackColor; }
00565
00566
00567 void setSelBackColor(FXColor clr);
00568
00569
00570 FXColor getSelTextColor() const { return seltextColor; }
00571
00572
00573 void setSelTextColor(FXColor clr);
00574
00575
00576 void setItemSpace(FXint s);
00577
00578
00579 FXint getItemSpace() const { return itemSpace; }
00580
00581
00582 FXuint getListStyle() const;
00583
00584
00585 void setListStyle(FXuint style);
00586
00587
00588 void setHelpText(const FXString& text);
00589
00590
00591 const FXString& getHelpText() const { return help; }
00592
00593
00594 virtual void save(FXStream& store) const;
00595
00596
00597 virtual void load(FXStream& store);
00598
00599
00600 virtual ~FXIconList();
00601 };
00602
00603 }
00604
00605 #endif