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