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 struct FXTimer;
00051 class FXIcon;
00052 class FXHeader;
00053 class FXFont;
00054 class FXIconList;
00055 class FXFileList;
00056
00057
00058
00059 class FXAPI FXIconItem : public FXObject {
00060 FXDECLARE(FXIconItem)
00061 friend class FXIconList;
00062 friend class FXFileList;
00063 protected:
00064 FXString label;
00065 FXIcon *bigIcon;
00066 FXIcon *miniIcon;
00067 void *data;
00068 FXuint state;
00069 FXint x,y;
00070 protected:
00071 FXIconItem():bigIcon(NULL),miniIcon(NULL),data(NULL),state(0),x(0),y(0){}
00072 virtual void draw(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00073 virtual FXint hitItem(const FXIconList* list,FXint rx,FXint ry,FXint rw=1,FXint rh=1) const;
00074 protected:
00075 virtual void drawBigIcon(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00076 virtual void drawMiniIcon(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00077 virtual void drawDetails(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00078 protected:
00079 enum {
00080 SELECTED = 1,
00081 FOCUS = 2,
00082 DISABLED = 4,
00083 DRAGGABLE = 8,
00084 BIGICONOWNED = 16,
00085 MINIICONOWNED = 32
00086 };
00087 public:
00088 FXIconItem(const FXString& text,FXIcon* bi=NULL,FXIcon* mi=NULL,void* ptr=NULL):label(text),bigIcon(bi),miniIcon(mi),data(ptr),state(0),x(0),y(0){}
00089 virtual void setText(const FXString& txt){ label=txt; }
00090 FXString getText() const { return label; }
00091 virtual void setBigIcon(FXIcon* icn){ bigIcon=icn; }
00092 FXIcon* getBigIcon() const { return bigIcon; }
00093 virtual void setMiniIcon(FXIcon* icn){ miniIcon=icn; }
00094 FXIcon* getMiniIcon() const { return miniIcon; }
00095 void setData(void* ptr){ data=ptr; }
00096 void* getData() const { return data; }
00097 virtual void setFocus(FXbool focus);
00098 FXbool hasFocus() const { return (state&FOCUS)!=0; }
00099 virtual void setSelected(FXbool selected);
00100 FXbool isSelected() const { return (state&SELECTED)!=0; }
00101 virtual void setEnabled(FXbool enabled);
00102 FXbool isEnabled() const { return (state&DISABLED)==0; }
00103 virtual void setDraggable(FXbool draggable);
00104 FXbool isDraggable() const { return (state&DRAGGABLE)!=0; }
00105 virtual void setIconOwned(FXuint owned=(BIGICONOWNED|MINIICONOWNED));
00106 FXuint isIconOwned() const { return (state&(BIGICONOWNED|MINIICONOWNED)); }
00107 virtual FXint getWidth(const FXIconList* list) const;
00108 virtual FXint getHeight(const FXIconList* list) const;
00109 virtual void create();
00110 virtual void detach();
00111 virtual void destroy();
00112 virtual void save(FXStream& store) const;
00113 virtual void load(FXStream& store);
00114 virtual ~FXIconItem();
00115 };
00116
00117
00118
00119 typedef FXint (*FXIconListSortFunc)(const FXIconItem*,const FXIconItem*);
00120
00121
00122
00123 class FXAPI FXIconList : public FXScrollArea {
00124 FXDECLARE(FXIconList)
00125 protected:
00126 FXHeader *header;
00127 FXIconItem **items;
00128 FXint nitems;
00129 FXint anchor;
00130 FXint current;
00131 FXint extent;
00132 FXint cursor;
00133 FXFont *font;
00134 FXIconListSortFunc sortfunc;
00135 FXColor textColor;
00136 FXColor selbackColor;
00137 FXColor seltextColor;
00138 FXint listWidth;
00139 FXint listHeight;
00140 FXint itemSpace;
00141 FXint anchorx;
00142 FXint anchory;
00143 FXint currentx;
00144 FXint currenty;
00145 FXint grabx;
00146 FXint graby;
00147 FXString lookup;
00148 FXTimer *timer;
00149 FXTimer *lookuptimer;
00150 FXString help;
00151 FXbool state;
00152 protected:
00153 FXIconList();
00154 void drawLasso(FXint x0,FXint y0,FXint x1,FXint y1);
00155 virtual void layout();
00156 void recompute();
00157 virtual FXIconItem *createItem(const FXString& text,FXIcon *big,FXIcon* mini,void* ptr);
00158 void lassoChanged(FXint ox,FXint oy,FXint ow,FXint oh,FXint nx,FXint ny,FXint nw,FXint nh,FXbool notify);
00159 private:
00160 FXIconList(const FXIconList&);
00161 FXIconList &operator=(const FXIconList&);
00162 public:
00163 long onPaint(FXObject*,FXSelector,void*);
00164 long onEnter(FXObject*,FXSelector,void*);
00165 long onLeave(FXObject*,FXSelector,void*);
00166 long onUngrabbed(FXObject*,FXSelector,void*);
00167 long onKeyPress(FXObject*,FXSelector,void*);
00168 long onKeyRelease(FXObject*,FXSelector,void*);
00169 long onLeftBtnPress(FXObject*,FXSelector,void*);
00170 long onLeftBtnRelease(FXObject*,FXSelector,void*);
00171 long onRightBtnPress(FXObject*,FXSelector,void*);
00172 long onRightBtnRelease(FXObject*,FXSelector,void*);
00173 long onMotion(FXObject*,FXSelector,void*);
00174 long onQueryTip(FXObject*,FXSelector,void*);
00175 long onQueryHelp(FXObject*,FXSelector,void*);
00176 long onTipTimer(FXObject*,FXSelector,void*);
00177 long onCmdSelectAll(FXObject*,FXSelector,void*);
00178 long onCmdDeselectAll(FXObject*,FXSelector,void*);
00179 long onCmdSelectInverse(FXObject*,FXSelector,void*);
00180 long onCmdArrangeByRows(FXObject*,FXSelector,void*);
00181 long onUpdArrangeByRows(FXObject*,FXSelector,void*);
00182 long onCmdArrangeByColumns(FXObject*,FXSelector,void*);
00183 long onUpdArrangeByColumns(FXObject*,FXSelector,void*);
00184 long onCmdShowDetails(FXObject*,FXSelector,void*);
00185 long onUpdShowDetails(FXObject*,FXSelector,void*);
00186 long onCmdShowBigIcons(FXObject*,FXSelector,void*);
00187 long onUpdShowBigIcons(FXObject*,FXSelector,void*);
00188 long onCmdShowMiniIcons(FXObject*,FXSelector,void*);
00189 long onUpdShowMiniIcons(FXObject*,FXSelector,void*);
00190 long onHeaderChanged(FXObject*,FXSelector,void*);
00191 long onFocusIn(FXObject*,FXSelector,void*);
00192 long onFocusOut(FXObject*,FXSelector,void*);
00193 long onClicked(FXObject*,FXSelector,void*);
00194 long onDoubleClicked(FXObject*,FXSelector,void*);
00195 long onTripleClicked(FXObject*,FXSelector,void*);
00196 long onCommand(FXObject*,FXSelector,void*);
00197 long onAutoScroll(FXObject*,FXSelector,void*);
00198 long onLookupTimer(FXObject*,FXSelector,void*);
00199 long onCmdSetValue(FXObject*,FXSelector,void*);public:
00200 long onCmdGetIntValue(FXObject*,FXSelector,void*);
00201 long onCmdSetIntValue(FXObject*,FXSelector,void*);
00202 public:
00203 static FXint ascending(const FXIconItem* a,const FXIconItem* b);
00204 static FXint descending(const FXIconItem* a,const FXIconItem* b);
00205 public:
00206 enum {
00207 ID_SHOW_DETAILS=FXScrollArea::ID_LAST,
00208 ID_SHOW_MINI_ICONS,
00209 ID_SHOW_BIG_ICONS,
00210 ID_ARRANGE_BY_ROWS,
00211 ID_ARRANGE_BY_COLUMNS,
00212 ID_HEADER_CHANGE,
00213 ID_TIPTIMER,
00214 ID_LOOKUPTIMER,
00215 ID_SELECT_ALL,
00216 ID_DESELECT_ALL,
00217 ID_SELECT_INVERSE,
00218 ID_LAST
00219 };
00220 public:
00221
00222 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);
00223
00224
00225 virtual void create();
00226
00227
00228 virtual void detach();
00229
00230
00231 virtual void recalc();
00232
00233
00234 virtual FXint getContentWidth();
00235
00236
00237 virtual FXint getContentHeight();
00238
00239
00240 virtual FXbool canFocus() const;
00241
00242
00243 virtual void setFocus();
00244
00245
00246 virtual void killFocus();
00247
00248
00249 virtual FXint getViewportHeight();
00250
00251
00252 virtual void moveContents(FXint x,FXint y);
00253
00254
00255 FXint getNumItems() const { return nitems; }
00256
00257
00258 FXHeader* getHeader() const { return header; }
00259
00260
00261 void appendHeader(const FXString& text,FXIcon *icon=NULL,FXint size=1);
00262
00263
00264 void removeHeader(FXint index);
00265
00266
00267 void setHeaderText(FXint index,const FXString& text);
00268
00269
00270 FXString getHeaderText(FXint index) const;
00271
00272
00273 void setHeaderIcon(FXint index,FXIcon *icon);
00274
00275
00276 FXIcon* getHeaderIcon(FXint index) const;
00277
00278
00279 void setHeaderSize(FXint index,FXint size);
00280
00281
00282 FXint getHeaderSize(FXint index) const;
00283
00284
00285 FXint getNumHeaders() const;
00286
00287
00288 FXIconItem *retrieveItem(FXint index) const;
00289
00290
00291 FXint replaceItem(FXint index,FXIconItem* item,FXbool notify=FALSE);
00292
00293
00294 FXint replaceItem(FXint index,const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE);
00295
00296
00297 FXint insertItem(FXint index,FXIconItem* item,FXbool notify=FALSE);
00298
00299
00300 FXint insertItem(FXint index,const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE);
00301
00302
00303 FXint appendItem(FXIconItem* item,FXbool notify=FALSE);
00304
00305
00306 FXint appendItem(const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE);
00307
00308
00309 FXint prependItem(FXIconItem* item,FXbool notify=FALSE);
00310
00311
00312 FXint prependItem(const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=FALSE);
00313
00314
00315 void removeItem(FXint index,FXbool notify=FALSE);
00316
00317
00318 void clearItems(FXbool notify=FALSE);
00319
00320
00321 FXint getItemWidth(FXint index) const;
00322
00323
00324 FXint getItemHeight(FXint index) const;
00325
00326
00327 FXint getItemAt(FXint x,FXint y) const;
00328
00329
00330
00331
00332
00333 FXint findItem(const FXString& text,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const;
00334
00335
00336 void makeItemVisible(FXint index);
00337
00338
00339 void setItemText(FXint index,const FXString& text);
00340
00341
00342 FXString getItemText(FXint index) const;
00343
00344
00345 void setItemBigIcon(FXint index,FXIcon* icon);
00346
00347
00348 FXIcon* getItemBigIcon(FXint index) const;
00349
00350
00351 void setItemMiniIcon(FXint index,FXIcon* icon);
00352
00353
00354 FXIcon* getItemMiniIcon(FXint index) const;
00355
00356
00357 void setItemData(FXint index,void* ptr);
00358
00359
00360 void* getItemData(FXint index) const;
00361
00362
00363 FXbool isItemSelected(FXint index) const;
00364
00365
00366 FXbool isItemCurrent(FXint index) const;
00367
00368
00369 FXbool isItemVisible(FXint index) const;
00370
00371
00372 FXbool isItemEnabled(FXint index) const;
00373
00374
00375 FXint hitItem(FXint index,FXint x,FXint y,FXint ww=1,FXint hh=1) const;
00376
00377
00378 void updateItem(FXint index) const;
00379
00380
00381 FXbool selectInRectangle(FXint x,FXint y,FXint w,FXint h,FXbool notify=FALSE);
00382
00383
00384 FXbool enableItem(FXint index);
00385
00386
00387 FXbool disableItem(FXint index);
00388
00389
00390 FXbool selectItem(FXint index,FXbool notify=FALSE);
00391
00392
00393 FXbool deselectItem(FXint index,FXbool notify=FALSE);
00394
00395
00396 FXbool toggleItem(FXint index,FXbool notify=FALSE);
00397
00398
00399 void setCurrentItem(FXint index,FXbool notify=FALSE);
00400
00401
00402 FXint getCurrentItem() const { return current; }
00403
00404
00405 void setAnchorItem(FXint index);
00406
00407
00408 FXint getAnchorItem() const { return anchor; }
00409
00410
00411 FXint getCursorItem() const { return cursor; }
00412
00413
00414 FXbool extendSelection(FXint index,FXbool notify=FALSE);
00415
00416
00417 FXbool killSelection(FXbool notify=FALSE);
00418
00419
00420 void sortItems();
00421
00422
00423 void setFont(FXFont* fnt);
00424
00425
00426 FXFont* getFont() const { return font; }
00427
00428
00429 FXColor getTextColor() const { return textColor; }
00430
00431
00432 void setTextColor(FXColor clr);
00433
00434
00435 FXColor getSelBackColor() const { return selbackColor; }
00436
00437
00438 void setSelBackColor(FXColor clr);
00439
00440
00441 FXColor getSelTextColor() const { return seltextColor; }
00442
00443
00444 void setSelTextColor(FXColor clr);
00445
00446
00447 void setItemSpace(FXint s);
00448
00449
00450 FXint getItemSpace() const { return itemSpace; }
00451
00452
00453 FXIconListSortFunc getSortFunc() const { return sortfunc; }
00454
00455
00456 void setSortFunc(FXIconListSortFunc func){ sortfunc=func; }
00457
00458
00459 FXuint getListStyle() const;
00460
00461
00462 void setListStyle(FXuint style);
00463
00464
00465 void setHelpText(const FXString& text);
00466
00467
00468 FXString getHelpText() const { return help; }
00469
00470
00471 virtual void save(FXStream& store) const;
00472
00473
00474 virtual void load(FXStream& store);
00475
00476
00477 virtual ~FXIconList();
00478 };
00479
00480 }
00481
00482 #endif
00483
00484