1 /********************************************************************************
2 *                                                                               *
3 *                         I c o n   L i s t   W i d g e t                       *
4 *                                                                               *
5 *********************************************************************************
6 * Copyright (C) 1999,2020 by Jeroen van der Zijp.   All Rights Reserved.        *
7 *********************************************************************************
8 * This library is free software; you can redistribute it and/or modify          *
9 * it under the terms of the GNU Lesser General Public License as published by   *
10 * the Free Software Foundation; either version 3 of the License, or             *
11 * (at your option) any later version.                                           *
12 *                                                                               *
13 * This library is distributed in the hope that it will be useful,               *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of                *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                 *
16 * GNU Lesser General Public License for more details.                           *
17 *                                                                               *
18 * You should have received a copy of the GNU Lesser General Public License      *
19 * along with this program.  If not, see <http://www.gnu.org/licenses/>          *
20 ********************************************************************************/
21 #ifndef FXICONLIST_H
22 #define FXICONLIST_H
23 
24 #ifndef FXSCROLLAREA_H
25 #include "FXScrollArea.h"
26 #endif
27 
28 namespace FX {
29 
30 
31 /// Icon list styles
32 enum {
33   ICONLIST_EXTENDEDSELECT = 0,                /// Extended selection mode
34   ICONLIST_SINGLESELECT   = 0x00100000,       /// At most one selected item
35   ICONLIST_BROWSESELECT   = 0x00200000,       /// Always exactly one selected item
36   ICONLIST_MULTIPLESELECT = 0x00300000,       /// Multiple selection mode
37   ICONLIST_AUTOSIZE       = 0x00400000,       /// Automatically size item spacing
38   ICONLIST_DETAILED       = 0,                /// List mode
39   ICONLIST_MINI_ICONS     = 0x00800000,       /// Mini Icon mode
40   ICONLIST_BIG_ICONS      = 0x01000000,       /// Big Icon mode
41   ICONLIST_ROWS           = 0,                /// Row-wise mode
42   ICONLIST_COLUMNS        = 0x02000000,       /// Column-wise mode
43   ICONLIST_NORMAL         = ICONLIST_EXTENDEDSELECT
44   };
45 
46 
47 class FXIcon;
48 class FXHeader;
49 class FXFont;
50 class FXIconList;
51 class FXFileList;
52 
53 
54 /// Icon item
55 class FXAPI FXIconItem : public FXObject {
56   FXDECLARE(FXIconItem)
57   friend class FXIconList;
58   friend class FXFileList;
59 protected:
60   FXString  label;      // Text of item
61   FXIcon   *bigIcon;    // Big icon shown in big icon mode
62   FXIcon   *miniIcon;   // Mini icon shown in mini icon mode
63   FXptr     data;       // User data pointer
64   FXuint    state;      // State flags
65 private:
66   FXIconItem(const FXIconItem&);
67   FXIconItem& operator=(const FXIconItem&);
68 protected:
FXIconItem()69   FXIconItem():bigIcon(NULL),miniIcon(NULL),data(NULL),state(0){}
70   virtual void draw(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
71   virtual FXint hitItem(const FXIconList* list,FXint rx,FXint ry,FXint rw=1,FXint rh=1) const;
72 protected:
73   virtual void drawBigIcon(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
74   virtual void drawMiniIcon(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
75   virtual void drawDetails(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
76 public:
77   enum {
78     SELECTED      = 1,  /// Selected
79     FOCUS         = 2,  /// Focus
80     DISABLED      = 4,  /// Disabled
81     DRAGGABLE     = 8,  /// Draggable
82     BIGICONOWNED  = 16, /// Big icon owned by item
83     MINIICONOWNED = 32  /// Mini icon owned by item
84     };
85 public:
86 
87   /// Construct new item with given text, icons, and user-data
label(text)88   FXIconItem(const FXString& text,FXIcon* bi=NULL,FXIcon* mi=NULL,FXptr ptr=NULL):label(text),bigIcon(bi),miniIcon(mi),data(ptr),state(0){}
89 
90   /// Change item's text label
91   virtual void setText(const FXString& txt);
92 
93   /// Return item's text label
getText()94   const FXString& getText() const { return label; }
95 
96   /// Change item's big icon, deleting the old icon if it was owned
97   virtual void setBigIcon(FXIcon* icn,FXbool owned=false);
98 
99   /// Return item's big icon
getBigIcon()100   FXIcon* getBigIcon() const { return bigIcon; }
101 
102   /// Change item's mini icon, deleting the old icon if it was owned
103   virtual void setMiniIcon(FXIcon* icn,FXbool owned=false);
104 
105   /// Return item's mini icon
getMiniIcon()106   FXIcon* getMiniIcon() const { return miniIcon; }
107 
108   /// Change item's user data
setData(FXptr ptr)109   void setData(FXptr ptr){ data=ptr; }
110 
111   /// Get item's user data
getData()112   FXptr getData() const { return data; }
113 
114   /// Make item draw as focused
115   virtual void setFocus(FXbool focus);
116 
117   /// Return true if item has focus
hasFocus()118   FXbool hasFocus() const { return (state&FOCUS)!=0; }
119 
120   /// Select item
121   virtual void setSelected(FXbool selected);
122 
123   /// Return true if this item is selected
isSelected()124   FXbool isSelected() const { return (state&SELECTED)!=0; }
125 
126   /// Enable or disable item
127   virtual void setEnabled(FXbool enabled);
128 
129   /// Return true if this item is enabled
isEnabled()130   FXbool isEnabled() const { return (state&DISABLED)==0; }
131 
132   /// Make item draggable
133   virtual void setDraggable(FXbool draggable);
134 
135   /// Return true if this item is draggable
isDraggable()136   FXbool isDraggable() const { return (state&DRAGGABLE)!=0; }
137 
138   /// Return tip text
139   virtual FXString getTipText() const;
140 
141   /// Return width of item as drawn in list
142   virtual FXint getWidth(const FXIconList* list) const;
143 
144   /// Return height of item as drawn in list
145   virtual FXint getHeight(const FXIconList* list) const;
146 
147   /// Create server-side resources
148   virtual void create();
149 
150   /// Detach server-side resources
151   virtual void detach();
152 
153   /// Destroy server-side resources
154   virtual void destroy();
155 
156   /// Save to stream
157   virtual void save(FXStream& store) const;
158 
159   /// Load from stream
160   virtual void load(FXStream& store);
161 
162   /// Destroy item and free icons if owned
163   virtual ~FXIconItem();
164   };
165 
166 
167 /// Icon item collate function
168 typedef FXint (*FXIconListSortFunc)(const FXIconItem*,const FXIconItem*);
169 
170 
171 /// List of FXIconItem's
172 typedef FXObjectListOf<FXIconItem> FXIconItemList;
173 
174 
175 /**
176 * A Icon List Widget displays a list of items, each with a text and
177 * optional icon.  Icon List can display its items in essentially three
178 * different ways; in big-icon mode, the bigger of the two icons is used
179 * for each item, and the text is placed underneath the icon. In mini-
180 * icon mode, the icons are listed in rows and columns, with the smaller
181 * icon preceding the text.  Finally, in detail mode the icons are listed
182 * in a single column, and all fields of the text are shown under a
183 * header control with one button for each subfield.
184 * When an item's selected state changes, the icon list sends
185 * a SEL_SELECTED or SEL_DESELECTED message.  A change of the current
186 * item is signified by the SEL_CHANGED message.
187 * The icon list sends SEL_COMMAND messages when the user clicks on an item,
188 * and SEL_CLICKED, SEL_DOUBLECLICKED, and SEL_TRIPLECLICKED when the user
189 * clicks once, twice, or thrice, respectively.
190 * When items are inserted or removed, the icon list sends messages
191 * of the type SEL_INSERTED or SEL_DELETED.
192 * In each of these cases, the index to the item, if any, is passed in the
193 * 3rd argument of the message.
194 * The text in each item is a string separated by tabs for each column;
195 * in mini- or big-icon mode, only the text before the first tab is shown.
196 * In detail-mode, the text before the first tab is shown in the first column,
197 * the text between the first and second tab is shown in the second column,
198 * and so on.
199 */
200 class FXAPI FXIconList : public FXScrollArea {
201   FXDECLARE(FXIconList)
202 protected:
203   FXHeader          *header;            // Header control
204   FXIconItemList     items;		// Item list
205   FXint              nrows;             // Number of rows
206   FXint              ncols;             // Number of columns
207   FXint              anchor;            // Anchor item
208   FXint              current;           // Current item
209   FXint              extent;            // Extent item
210   FXint              viewable;          // Visible item
211   FXFont            *font;              // Font
212   FXIconListSortFunc sortfunc;          // Item sort function
213   FXColor            textColor;         // Text color
214   FXColor            selbackColor;      // Selected back color
215   FXColor            seltextColor;      // Selected text color
216   FXint              itemSpace;         // Space for item label
217   FXint              itemWidth;         // Item width
218   FXint              itemHeight;        // Item height
219   FXint              anchorx;           // Rectangular selection
220   FXint              anchory;
221   FXint              currentx;
222   FXint              currenty;
223   FXint              grabx;             // Grab point x
224   FXint              graby;             // Grab point y
225   FXString           lookup;            // Lookup string
226   FXString           help;              // Help text
227   FXbool             state;             // State of item
228 protected:
229   FXIconList();
230   void recompute();
231   void startLasso(FXint ax,FXint ay);
232   void updateLasso(FXint cx,FXint cy);
233   void endLasso();
234   void getrowscols(FXint& nr,FXint& nc,FXint w,FXint h) const;
235   void lassoChanged(FXint ox,FXint oy,FXint ow,FXint oh,FXint nx,FXint ny,FXint nw,FXint nh,FXbool notify);
236   virtual void moveContents(FXint x,FXint y);
237   virtual FXIconItem *createItem(const FXString& text,FXIcon *big,FXIcon* mini,FXptr ptr);
238   static FXint compareSection(const FXchar *p,const FXchar* q,FXint s);
239   static FXint compareSectionCase(const FXchar *p,const FXchar* q,FXint s);
240 private:
241   FXIconList(const FXIconList&);
242   FXIconList &operator=(const FXIconList&);
243 public:
244   long onPaint(FXObject*,FXSelector,void*);
245   long onEnter(FXObject*,FXSelector,void*);
246   long onLeave(FXObject*,FXSelector,void*);
247   long onUngrabbed(FXObject*,FXSelector,void*);
248   long onKeyPress(FXObject*,FXSelector,void*);
249   long onKeyRelease(FXObject*,FXSelector,void*);
250   long onLeftBtnPress(FXObject*,FXSelector,void*);
251   long onLeftBtnRelease(FXObject*,FXSelector,void*);
252   long onRightBtnPress(FXObject*,FXSelector,void*);
253   long onRightBtnRelease(FXObject*,FXSelector,void*);
254   long onMotion(FXObject*,FXSelector,void*);
255   long onQueryTip(FXObject*,FXSelector,void*);
256   long onQueryHelp(FXObject*,FXSelector,void*);
257   long onTipTimer(FXObject*,FXSelector,void*);
258   long onCmdSelectAll(FXObject*,FXSelector,void*);
259   long onCmdDeselectAll(FXObject*,FXSelector,void*);
260   long onCmdSelectInverse(FXObject*,FXSelector,void*);
261   long onCmdArrangeByRows(FXObject*,FXSelector,void*);
262   long onUpdArrangeByRows(FXObject*,FXSelector,void*);
263   long onCmdArrangeByColumns(FXObject*,FXSelector,void*);
264   long onUpdArrangeByColumns(FXObject*,FXSelector,void*);
265   long onCmdShowDetails(FXObject*,FXSelector,void*);
266   long onUpdShowDetails(FXObject*,FXSelector,void*);
267   long onCmdShowBigIcons(FXObject*,FXSelector,void*);
268   long onUpdShowBigIcons(FXObject*,FXSelector,void*);
269   long onCmdShowMiniIcons(FXObject*,FXSelector,void*);
270   long onUpdShowMiniIcons(FXObject*,FXSelector,void*);
271   long onChgHeader(FXObject*,FXSelector,void*);
272   long onClkHeader(FXObject*,FXSelector,void*);
273   long onFocusIn(FXObject*,FXSelector,void*);
274   long onFocusOut(FXObject*,FXSelector,void*);
275   long onClicked(FXObject*,FXSelector,void*);
276   long onDoubleClicked(FXObject*,FXSelector,void*);
277   long onTripleClicked(FXObject*,FXSelector,void*);
278   long onCommand(FXObject*,FXSelector,void*);
279   long onAutoScroll(FXObject*,FXSelector,void*);
280   long onLookupTimer(FXObject*,FXSelector,void*);
281   long onCmdSetValue(FXObject*,FXSelector,void*);
282   long onCmdGetIntValue(FXObject*,FXSelector,void*);
283   long onCmdSetIntValue(FXObject*,FXSelector,void*);
284 public:
285   static FXint ascending(const FXIconItem* a,const FXIconItem* b);
286   static FXint descending(const FXIconItem* a,const FXIconItem* b);
287   static FXint ascendingCase(const FXIconItem* a,const FXIconItem* b);
288   static FXint descendingCase(const FXIconItem* a,const FXIconItem* b);
289 public:
290   enum {
291     ID_LOOKUPTIMER=FXScrollArea::ID_LAST,
292     ID_HEADER,
293     ID_SHOW_DETAILS,
294     ID_SHOW_MINI_ICONS,
295     ID_SHOW_BIG_ICONS,
296     ID_ARRANGE_BY_ROWS,
297     ID_ARRANGE_BY_COLUMNS,
298     ID_SELECT_ALL,
299     ID_DESELECT_ALL,
300     ID_SELECT_INVERSE,
301     ID_LAST
302     };
303 public:
304 
305   /// Construct icon list with no items in it initially
306   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);
307 
308   /// Create server-side resources
309   virtual void create();
310 
311   /// Detach server-side resources
312   virtual void detach();
313 
314   /// Recalculate layout
315   virtual void recalc();
316 
317   /// Perform layout
318   virtual void layout();
319 
320   /// Compute and return content width
321   virtual FXint getContentWidth();
322 
323   /// Return content height
324   virtual FXint getContentHeight();
325 
326   /// Return visible area y position
327   virtual FXint getVisibleY() const;
328 
329   /// Return visible area height
330   virtual FXint getVisibleHeight() const;
331 
332   /// Icon list can receive focus
333   virtual FXbool canFocus() const;
334 
335   /// Move the focus to this window
336   virtual void setFocus();
337 
338   /// Remove the focus from this window
339   virtual void killFocus();
340 
341   /// Resize this window to the specified width and height
342   virtual void resize(FXint w,FXint h);
343 
344   /// Move and resize this window in the parent's coordinates
345   virtual void position(FXint x,FXint y,FXint w,FXint h);
346 
347   /// Return number of items
getNumItems()348   FXint getNumItems() const { return (FXint)items.no(); }
349 
350   /// Return number of rows
getNumRows()351   FXint getNumRows() const { return nrows; }
352 
353   /// Return number of columns
getNumCols()354   FXint getNumCols() const { return ncols; }
355 
356   /// Return header control
getHeader()357   FXHeader* getHeader() const { return header; }
358 
359   /// Set headers from array of strings
360   void setHeaders(const FXchar** strings,FXint size=1);
361 
362   /// Set headers from newline separated strings
363   void setHeaders(const FXString& strings,FXint size=1);
364 
365   /// Append header with given text and optional icon
366   void appendHeader(const FXString& text,FXIcon *icon=NULL,FXint size=1);
367 
368   /// Remove header at index
369   void removeHeader(FXint index);
370 
371   /// Change text of header at index
372   void setHeaderText(FXint index,const FXString& text);
373 
374   /// Return text of header at index
375   FXString getHeaderText(FXint index) const;
376 
377   /// Change icon of header at index
378   void setHeaderIcon(FXint index,FXIcon *icon);
379 
380   /// Return icon of header at index
381   FXIcon* getHeaderIcon(FXint index) const;
382 
383   /// Change size of header at index
384   void setHeaderSize(FXint index,FXint size);
385 
386   /// Return width of header at index
387   FXint getHeaderSize(FXint index) const;
388 
389   /// Return number of headers
390   FXint getNumHeaders() const;
391 
392   /// Return the item at the given index
393   FXIconItem *getItem(FXint index) const;
394 
395   /// Replace the item with a [possibly subclassed] item
396   FXint setItem(FXint index,FXIconItem* item,FXbool notify=false);
397 
398   /// Replace items text, icons, and user-data pointer
399   FXint setItem(FXint index,const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,FXptr ptr=NULL,FXbool notify=false);
400 
401   /// Fill list by appending items from array of strings
402   FXint fillItems(const FXchar** strings,FXIcon *big=NULL,FXIcon* mini=NULL,FXptr ptr=NULL,FXbool notify=false);
403 
404   /// Fill list by appending items from array of strings
405   FXint fillItems(const FXString* strings,FXIcon *big=NULL,FXIcon* mini=NULL,FXptr ptr=NULL,FXbool notify=false);
406 
407   /// Fill list by appending items from newline separated strings
408   FXint fillItems(const FXString& strings,FXIcon *big=NULL,FXIcon* mini=NULL,FXptr ptr=NULL,FXbool notify=false);
409 
410   /// Insert a new [possibly subclassed] item at the give index
411   FXint insertItem(FXint index,FXIconItem* item,FXbool notify=false);
412 
413   /// Insert item at index with given text, icons, and user-data pointer
414   FXint insertItem(FXint index,const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,FXptr ptr=NULL,FXbool notify=false);
415 
416   /// Append a [possibly subclassed] item to the end of the list
417   FXint appendItem(FXIconItem* item,FXbool notify=false);
418 
419   /// Append new item with given text and optional icons, and user-data pointer
420   FXint appendItem(const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,FXptr ptr=NULL,FXbool notify=false);
421 
422   /// Prepend a [possibly subclassed] item to the end of the list
423   FXint prependItem(FXIconItem* item,FXbool notify=false);
424 
425   /// Prepend new item with given text and optional icons, and user-data pointer
426   FXint prependItem(const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,FXptr ptr=NULL,FXbool notify=false);
427 
428   /// Move item from oldindex to newindex
429   FXint moveItem(FXint newindex,FXint oldindex,FXbool notify=false);
430 
431   /// Extract item from list
432   FXIconItem* extractItem(FXint index,FXbool notify=false);
433 
434   /// Remove item from list
435   void removeItem(FXint index,FXbool notify=false);
436 
437   /// Remove all items from list
438   void clearItems(FXbool notify=false);
439 
440   /// Return item width
getItemWidth()441   FXint getItemWidth() const { return itemWidth; }
442 
443   /// Return item height
getItemHeight()444   FXint getItemHeight() const { return itemHeight; }
445 
446   /// Return index of item at x,y, or -1 if none
447   virtual FXint getItemAt(FXint x,FXint y) const;
448 
449   /**
450   * Search items by name, beginning from item start.  If the start
451   * item is -1 the search will start at the first item in the list.
452   * Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control the
453   * search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP
454   * to control whether the search wraps at the start or end of the list.
455   * The option SEARCH_IGNORECASE causes a case-insensitive match.  Finally,
456   * passing SEARCH_PREFIX causes searching for a prefix of the item name.
457   * Return -1 if no matching item is found.
458   */
459   FXint findItem(const FXString& text,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const;
460 
461   /**
462   * Search items by associated user data, beginning from item start. If the
463   * start item is -1 the search will start at the first item in the list.
464   * Flags may be SEARCH_FORWARD or SEARCH_BACKWARD to control the
465   * search direction; this can be combined with SEARCH_NOWRAP or SEARCH_WRAP
466   * to control whether the search wraps at the start or end of the list.
467   */
468   FXint findItemByData(FXptr ptr,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const;
469 
470   /// Scroll to make item at index visible
471   virtual void makeItemVisible(FXint index);
472 
473   /// Change item text
474   void setItemText(FXint index,const FXString& text);
475 
476   /// Return item text
477   FXString getItemText(FXint index) const;
478 
479   /// Change item big icon
480   void setItemBigIcon(FXint index,FXIcon* icon,FXbool owned=false);
481 
482   /// Return big icon of item at index
483   FXIcon* getItemBigIcon(FXint index) const;
484 
485   /// Change item mini icon
486   void setItemMiniIcon(FXint index,FXIcon* icon,FXbool owned=false);
487 
488   /// Return mini icon of item at index
489   FXIcon* getItemMiniIcon(FXint index) const;
490 
491   /// Change item user-data pointer
492   void setItemData(FXint index,FXptr ptr);
493 
494   /// Return item user-data pointer
495   FXptr getItemData(FXint index) const;
496 
497   /// Return true if item at index is selected
498   FXbool isItemSelected(FXint index) const;
499 
500   /// Return true if item at index is current
501   FXbool isItemCurrent(FXint index) const;
502 
503   /// Return true if item at index is visible
504   FXbool isItemVisible(FXint index) const;
505 
506   /// Return true if item at index is enabled
507   FXbool isItemEnabled(FXint index) const;
508 
509   /// Return item hit code: 0 outside, 1 icon, 2 text
510   FXint hitItem(FXint index,FXint x,FXint y,FXint ww=1,FXint hh=1) const;
511 
512   /// Repaint item at index
513   void updateItem(FXint index) const;
514 
515   /// Enable item at index
516   virtual FXbool enableItem(FXint index);
517 
518   /// Disable item at index
519   virtual FXbool disableItem(FXint index);
520 
521   /// Select item at index
522   virtual FXbool selectItem(FXint index,FXbool notify=false);
523 
524   /// Deselect item at index
525   virtual FXbool deselectItem(FXint index,FXbool notify=false);
526 
527   /// Toggle item at index
528   virtual FXbool toggleItem(FXint index,FXbool notify=false);
529 
530   /// Select items in rectangle
531   virtual FXbool selectInRectangle(FXint x,FXint y,FXint w,FXint h,FXbool notify=false);
532 
533   /// Extend selection from anchor index to index
534   virtual FXbool extendSelection(FXint index,FXbool notify=false);
535 
536   /// Select all items
537   virtual FXbool selectAll(FXbool notify=false);
538 
539   /// Deselect all items
540   virtual FXbool killSelection(FXbool notify=false);
541 
542   /// Change current item index
543   virtual void setCurrentItem(FXint index,FXbool notify=false);
544 
545   /// Return current item index, or -1 if none
getCurrentItem()546   FXint getCurrentItem() const { return current; }
547 
548   /// Change anchor item index
549   void setAnchorItem(FXint index);
550 
551   /// Return anchor item index, or -1 if none
getAnchorItem()552   FXint getAnchorItem() const { return anchor; }
553 
554   /// Sort items
555   void sortItems();
556 
557   /// Return sort function
getSortFunc()558   FXIconListSortFunc getSortFunc() const { return sortfunc; }
559 
560   /// Change sort function
setSortFunc(FXIconListSortFunc func)561   void setSortFunc(FXIconListSortFunc func){ sortfunc=func; }
562 
563   /// Change text font
564   void setFont(FXFont* fnt);
565 
566   /// Return text font
getFont()567   FXFont* getFont() const { return font; }
568 
569   /// Return normal text color
getTextColor()570   FXColor getTextColor() const { return textColor; }
571 
572   /// Change normal text color
573   void setTextColor(FXColor clr);
574 
575   /// Return selected text background
getSelBackColor()576   FXColor getSelBackColor() const { return selbackColor; }
577 
578   /// Change selected text background
579   void setSelBackColor(FXColor clr);
580 
581   /// Return selected text color
getSelTextColor()582   FXColor getSelTextColor() const { return seltextColor; }
583 
584   /// Change selected text color
585   void setSelTextColor(FXColor clr);
586 
587   /// Change maximum item space for each item
588   void setItemSpace(FXint s);
589 
590   /// Return maximum item space
getItemSpace()591   FXint getItemSpace() const { return itemSpace; }
592 
593   /// Get the current icon list style
594   FXuint getListStyle() const;
595 
596   /// Set the current icon list style.
597   void setListStyle(FXuint style);
598 
599   /// Set the status line help text for this widget
600   void setHelpText(const FXString& text);
601 
602   /// Get the status line help text for this widget
getHelpText()603   const FXString& getHelpText() const { return help; }
604 
605   /// Save list to a stream
606   virtual void save(FXStream& store) const;
607 
608   /// Load list from a stream
609   virtual void load(FXStream& store);
610 
611   /// Destructor
612   virtual ~FXIconList();
613   };
614 
615 }
616 
617 #endif
618