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 FXLIST_H
00025 #define FXLIST_H
00026
00027 #ifndef FXSCROLLAREA_H
00028 #include "FXScrollArea.h"
00029 #endif
00030
00031 namespace FX {
00032
00033
00034
00035 enum {
00036 LIST_EXTENDEDSELECT = 0,
00037 LIST_SINGLESELECT = 0x00100000,
00038 LIST_BROWSESELECT = 0x00200000,
00039 LIST_MULTIPLESELECT = 0x00300000,
00040 LIST_AUTOSELECT = 0x00400000,
00041 LIST_NORMAL = LIST_EXTENDEDSELECT
00042 };
00043
00044
00045 class FXIcon;
00046 class FXFont;
00047 class FXList;
00048
00049
00050
00051 class FXAPI FXListItem : public FXObject {
00052 FXDECLARE(FXListItem)
00053 friend class FXList;
00054 protected:
00055 FXString label;
00056 FXIcon *icon;
00057 void *data;
00058 FXuint state;
00059 FXint x,y;
00060 protected:
00061 FXListItem():icon(NULL),data(NULL),state(0),x(0),y(0){}
00062 virtual void draw(const FXList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h);
00063 virtual FXint hitItem(const FXList* list,FXint x,FXint y) const;
00064 protected:
00065 enum {
00066 SELECTED = 1,
00067 FOCUS = 2,
00068 DISABLED = 4,
00069 DRAGGABLE = 8,
00070 ICONOWNED = 16
00071 };
00072 public:
00073 FXListItem(const FXString& text,FXIcon* ic=NULL,void* ptr=NULL):label(text),icon(ic),data(ptr),state(0),x(0),y(0){}
00074 virtual void setText(const FXString& txt){ label=txt; }
00075 const FXString& getText() const { return label; }
00076 virtual void setIcon(FXIcon* icn){ icon=icn; }
00077 FXIcon* getIcon() const { return icon; }
00078 void setData(void* ptr){ data=ptr; }
00079 void* getData() const { return data; }
00080 virtual void setFocus(FXbool focus);
00081 FXbool hasFocus() const { return (state&FOCUS)!=0; }
00082 virtual void setSelected(FXbool selected);
00083 FXbool isSelected() const { return (state&SELECTED)!=0; }
00084 virtual void setEnabled(FXbool enabled);
00085 FXbool isEnabled() const { return (state&DISABLED)==0; }
00086 virtual void setDraggable(FXbool draggable);
00087 FXbool isDraggable() const { return (state&DRAGGABLE)!=0; }
00088 virtual void setIconOwned(FXuint owned=ICONOWNED);
00089 FXuint isIconOwned() const { return (state&ICONOWNED); }
00090 virtual FXint getWidth(const FXList* list) const;
00091 virtual FXint getHeight(const FXList* list) const;
00092 virtual void create();
00093 virtual void detach();
00094 virtual void destroy();
00095 virtual void save(FXStream& store) const;
00096 virtual void load(FXStream& store);
00097 virtual ~FXListItem();
00098 };
00099
00100
00101
00102 typedef FXint (*FXListSortFunc)(const FXListItem*,const FXListItem*);
00103
00104
00105
00106 class FXAPI FXList : public FXScrollArea {
00107 FXDECLARE(FXList)
00108 protected:
00109 FXListItem **items;
00110 FXint nitems;
00111 FXint anchor;
00112 FXint current;
00113 FXint extent;
00114 FXint cursor;
00115 FXFont *font;
00116 FXColor textColor;
00117 FXColor selbackColor;
00118 FXColor seltextColor;
00119 FXint listWidth;
00120 FXint listHeight;
00121 FXint visible;
00122 FXString help;
00123 FXListSortFunc sortfunc;
00124 FXint grabx;
00125 FXint graby;
00126 FXString lookup;
00127 FXbool state;
00128 protected:
00129 FXList();
00130 void recompute();
00131 virtual FXListItem *createItem(const FXString& text,FXIcon* icon,void* ptr);
00132 private:
00133 FXList(const FXList&);
00134 FXList &operator=(const FXList&);
00135 public:
00136 long onPaint(FXObject*,FXSelector,void*);
00137 long onEnter(FXObject*,FXSelector,void*);
00138 long onLeave(FXObject*,FXSelector,void*);
00139 long onUngrabbed(FXObject*,FXSelector,void*);
00140 long onKeyPress(FXObject*,FXSelector,void*);
00141 long onKeyRelease(FXObject*,FXSelector,void*);
00142 long onLeftBtnPress(FXObject*,FXSelector,void*);
00143 long onLeftBtnRelease(FXObject*,FXSelector,void*);
00144 long onRightBtnPress(FXObject*,FXSelector,void*);
00145 long onRightBtnRelease(FXObject*,FXSelector,void*);
00146 long onMotion(FXObject*,FXSelector,void*);
00147 long onFocusIn(FXObject*,FXSelector,void*);
00148 long onFocusOut(FXObject*,FXSelector,void*);
00149 long onAutoScroll(FXObject*,FXSelector,void*);
00150 long onClicked(FXObject*,FXSelector,void*);
00151 long onDoubleClicked(FXObject*,FXSelector,void*);
00152 long onTripleClicked(FXObject*,FXSelector,void*);
00153 long onCommand(FXObject*,FXSelector,void*);
00154 long onQueryTip(FXObject*,FXSelector,void*);
00155 long onQueryHelp(FXObject*,FXSelector,void*);
00156 long onTipTimer(FXObject*,FXSelector,void*);
00157 long onLookupTimer(FXObject*,FXSelector,void*);
00158 long onCmdSetValue(FXObject*,FXSelector,void*);public:
00159 long onCmdGetIntValue(FXObject*,FXSelector,void*);
00160 long onCmdSetIntValue(FXObject*,FXSelector,void*);
00161 public:
00162 static FXint ascending(const FXListItem* a,const FXListItem* b);
00163 static FXint descending(const FXListItem* a,const FXListItem* b);
00164 static FXint ascendingCase(const FXListItem* a,const FXListItem* b);
00165 static FXint descendingCase(const FXListItem* a,const FXListItem* b);
00166 public:
00167 enum {
00168 ID_LOOKUPTIMER=FXScrollArea::ID_LAST,
00169 ID_LAST
00170 };
00171 public:
00172
00173
00174 FXList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=LIST_NORMAL,FXint x=0,FXint y=0,FXint w=0,FXint h=0);
00175
00176
00177 virtual void create();
00178
00179
00180 virtual void detach();
00181
00182
00183 virtual void layout();
00184
00185
00186 virtual FXint getDefaultWidth();
00187
00188
00189 virtual FXint getDefaultHeight();
00190
00191
00192 virtual FXint getContentWidth();
00193
00194
00195 virtual FXint getContentHeight();
00196
00197
00198 virtual void recalc();
00199
00200
00201 virtual FXbool canFocus() const;
00202
00203
00204 virtual void setFocus();
00205
00206
00207 virtual void killFocus();
00208
00209
00210 FXint getNumItems() const { return nitems; }
00211
00212
00213 FXint getNumVisible() const { return visible; }
00214
00215
00216 void setNumVisible(FXint nvis);
00217
00218
00219 FXListItem *getItem(FXint index) const;
00220
00221
00222 FXint setItem(FXint index,FXListItem* item,FXbool notify=FALSE);
00223
00224
00225 FXint setItem(FXint index,const FXString& text,FXIcon *icon=NULL,void* ptr=NULL,FXbool notify=FALSE);
00226
00227
00228 FXint insertItem(FXint index,FXListItem* item,FXbool notify=FALSE);
00229
00230
00231 FXint insertItem(FXint index,const FXString& text,FXIcon *icon=NULL,void* ptr=NULL,FXbool notify=FALSE);
00232
00233
00234 FXint appendItem(FXListItem* item,FXbool notify=FALSE);
00235
00236
00237 FXint appendItem(const FXString& text,FXIcon *icon=NULL,void* ptr=NULL,FXbool notify=FALSE);
00238
00239
00240 FXint prependItem(FXListItem* item,FXbool notify=FALSE);
00241
00242
00243 FXint prependItem(const FXString& text,FXIcon *icon=NULL,void* ptr=NULL,FXbool notify=FALSE);
00244
00245
00246 FXint moveItem(FXint newindex,FXint oldindex,FXbool notify=FALSE);
00247
00248
00249 void removeItem(FXint index,FXbool notify=FALSE);
00250
00251
00252 void clearItems(FXbool notify=FALSE);
00253
00254
00255 FXint getItemWidth(FXint index) const;
00256
00257
00258 FXint getItemHeight(FXint index) const;
00259
00260
00261 FXint getItemAt(FXint x,FXint y) const;
00262
00263
00264 FXint hitItem(FXint index,FXint x,FXint y) const;
00265
00266
00267
00268
00269
00270 FXint findItem(const FXString& text,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const;
00271
00272
00273 void makeItemVisible(FXint index);
00274
00275
00276 void setItemText(FXint index,const FXString& text);
00277
00278
00279 FXString getItemText(FXint index) const;
00280
00281
00282 void setItemIcon(FXint index,FXIcon* icon);
00283
00284
00285 FXIcon* getItemIcon(FXint index) const;
00286
00287
00288 void setItemData(FXint index,void* ptr);
00289
00290
00291 void* getItemData(FXint index) const;
00292
00293
00294 FXbool isItemSelected(FXint index) const;
00295
00296
00297 FXbool isItemCurrent(FXint index) const;
00298
00299
00300 FXbool isItemVisible(FXint index) const;
00301
00302
00303 FXbool isItemEnabled(FXint index) const;
00304
00305
00306 void updateItem(FXint index) const;
00307
00308
00309 FXbool enableItem(FXint index);
00310
00311
00312 FXbool disableItem(FXint index);
00313
00314
00315 virtual FXbool selectItem(FXint index,FXbool notify=FALSE);
00316
00317
00318 virtual FXbool deselectItem(FXint index,FXbool notify=FALSE);
00319
00320
00321 virtual FXbool toggleItem(FXint index,FXbool notify=FALSE);
00322
00323
00324 virtual FXbool extendSelection(FXint index,FXbool notify=FALSE);
00325
00326
00327 virtual FXbool killSelection(FXbool notify=FALSE);
00328
00329
00330 virtual void setCurrentItem(FXint index,FXbool notify=FALSE);
00331
00332
00333 FXint getCurrentItem() const { return current; }
00334
00335
00336 void setAnchorItem(FXint index);
00337
00338
00339 FXint getAnchorItem() const { return anchor; }
00340
00341
00342 FXint getCursorItem() const { return cursor; }
00343
00344
00345 void sortItems();
00346
00347
00348 void setFont(FXFont* fnt);
00349
00350
00351 FXFont* getFont() const { return font; }
00352
00353
00354 FXColor getTextColor() const { return textColor; }
00355
00356
00357 void setTextColor(FXColor clr);
00358
00359
00360 FXColor getSelBackColor() const { return selbackColor; }
00361
00362
00363 void setSelBackColor(FXColor clr);
00364
00365
00366 FXColor getSelTextColor() const { return seltextColor; }
00367
00368
00369 void setSelTextColor(FXColor clr);
00370
00371
00372 FXListSortFunc getSortFunc() const { return sortfunc; }
00373
00374
00375 void setSortFunc(FXListSortFunc func){ sortfunc=func; }
00376
00377
00378 FXuint getListStyle() const;
00379
00380
00381 void setListStyle(FXuint style);
00382
00383
00384 void setHelpText(const FXString& text);
00385
00386
00387 FXString getHelpText() const { return help; }
00388
00389
00390 virtual void save(FXStream& store) const;
00391
00392
00393 virtual void load(FXStream& store);
00394
00395
00396 virtual ~FXList();
00397 };
00398
00399 }
00400
00401 #endif