Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members

/home/jeroen/FOX/fox/fox-1.7.33/include/FXIconList.h
00001 /********************************************************************************
00002 *                                                                               *
00003 *                         I c o n   L i s t   W i d g e t                       *
00004 *                                                                               *
00005 *********************************************************************************
00006 * Copyright (C) 1999,2012 by Jeroen van der Zijp.   All Rights Reserved.        *
00007 *********************************************************************************
00008 * This library is free software; you can redistribute it and/or modify          *
00009 * it under the terms of the GNU Lesser General Public License as published by   *
00010 * the Free Software Foundation; either version 3 of the License, or             *
00011 * (at your option) any later version.                                           *
00012 *                                                                               *
00013 * This library is distributed in the hope that it will be useful,               *
00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of                *
00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                 *
00016 * GNU Lesser General Public License for more details.                           *
00017 *                                                                               *
00018 * You should have received a copy of the GNU Lesser General Public License      *
00019 * along with this program.  If not, see <http://www.gnu.org/licenses/>          *
00020 ********************************************************************************/
00021 #ifndef FXICONLIST_H
00022 #define FXICONLIST_H
00023 
00024 #ifndef FXSCROLLAREA_H
00025 #include "FXScrollArea.h"
00026 #endif
00027 
00028 namespace FX {
00029 
00030 
00032 enum {
00033   ICONLIST_EXTENDEDSELECT = 0,                
00034   ICONLIST_SINGLESELECT   = 0x00100000,       
00035   ICONLIST_BROWSESELECT   = 0x00200000,       
00036   ICONLIST_MULTIPLESELECT = 0x00300000,       
00037   ICONLIST_AUTOSIZE       = 0x00400000,       
00038   ICONLIST_DETAILED       = 0,                
00039   ICONLIST_MINI_ICONS     = 0x00800000,       
00040   ICONLIST_BIG_ICONS      = 0x01000000,       
00041   ICONLIST_ROWS           = 0,                
00042   ICONLIST_COLUMNS        = 0x02000000,       
00043   ICONLIST_NORMAL         = ICONLIST_EXTENDEDSELECT
00044   };
00045 
00046 
00047 class FXIcon;
00048 class FXHeader;
00049 class FXFont;
00050 class FXIconList;
00051 class FXFileList;
00052 
00053 
00055 class FXAPI FXIconItem : public FXObject {
00056   FXDECLARE(FXIconItem)
00057   friend class FXIconList;
00058   friend class FXFileList;
00059 protected:
00060   FXString  label;      // Text of item
00061   FXIcon   *bigIcon;    // Big icon shown in big icon mode
00062   FXIcon   *miniIcon;   // Mini icon shown in mini icon mode
00063   void     *data;       // User data pointer
00064   FXuint    state;      // State flags
00065 private:
00066   FXIconItem(const FXIconItem&);
00067   FXIconItem& operator=(const FXIconItem&);
00068 protected:
00069   FXIconItem():bigIcon(NULL),miniIcon(NULL),data(NULL),state(0){}
00070   virtual void draw(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00071   virtual FXint hitItem(const FXIconList* list,FXint rx,FXint ry,FXint rw=1,FXint rh=1) const;
00072 protected:
00073   virtual void drawBigIcon(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00074   virtual void drawMiniIcon(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00075   virtual void drawDetails(const FXIconList* list,FXDC& dc,FXint x,FXint y,FXint w,FXint h) const;
00076 public:
00077   enum {
00078     SELECTED      = 1,  
00079     FOCUS         = 2,  
00080     DISABLED      = 4,  
00081     DRAGGABLE     = 8,  
00082     BIGICONOWNED  = 16, 
00083     MINIICONOWNED = 32  
00084     };
00085 public:
00086 
00088   FXIconItem(const FXString& text,FXIcon* bi=NULL,FXIcon* mi=NULL,void* ptr=NULL):label(text),bigIcon(bi),miniIcon(mi),data(ptr),state(0){}
00089 
00091   virtual void setText(const FXString& txt);
00092 
00094   const FXString& getText() const { return label; }
00095 
00097   virtual void setBigIcon(FXIcon* icn,FXbool owned=false);
00098 
00100   FXIcon* getBigIcon() const { return bigIcon; }
00101 
00103   virtual void setMiniIcon(FXIcon* icn,FXbool owned=false);
00104 
00106   FXIcon* getMiniIcon() const { return miniIcon; }
00107 
00109   void setData(void* ptr){ data=ptr; }
00110 
00112   void* getData() const { return data; }
00113 
00115   virtual void setFocus(FXbool focus);
00116 
00118   FXbool hasFocus() const { return (state&FOCUS)!=0; }
00119 
00121   virtual void setSelected(FXbool selected);
00122 
00124   FXbool isSelected() const { return (state&SELECTED)!=0; }
00125 
00127   virtual void setEnabled(FXbool enabled);
00128 
00130   FXbool isEnabled() const { return (state&DISABLED)==0; }
00131 
00133   virtual void setDraggable(FXbool draggable);
00134 
00136   FXbool isDraggable() const { return (state&DRAGGABLE)!=0; }
00137 
00139   virtual FXString getTipText() const;
00140 
00142   virtual FXint getWidth(const FXIconList* list) const;
00143 
00145   virtual FXint getHeight(const FXIconList* list) const;
00146 
00148   virtual void create();
00149 
00151   virtual void detach();
00152 
00154   virtual void destroy();
00155 
00157   virtual void save(FXStream& store) const;
00158 
00160   virtual void load(FXStream& store);
00161 
00163   virtual ~FXIconItem();
00164   };
00165 
00166 
00168 typedef FXint (*FXIconListSortFunc)(const FXIconItem*,const FXIconItem*);
00169 
00170 
00172 typedef FXObjectListOf<FXIconItem> FXIconItemList;
00173 
00174 
00200 class FXAPI FXIconList : public FXScrollArea {
00201   FXDECLARE(FXIconList)
00202 protected:
00203   FXHeader          *header;            // Header control
00204   FXIconItemList     items;   // Item list
00205   FXint              nrows;             // Number of rows
00206   FXint              ncols;             // Number of columns
00207   FXint              anchor;            // Anchor item
00208   FXint              current;           // Current item
00209   FXint              extent;            // Extent item
00210   FXint              viewable;          // Visible item
00211   FXFont            *font;              // Font
00212   FXIconListSortFunc sortfunc;          // Item sort function
00213   FXColor            textColor;         // Text color
00214   FXColor            selbackColor;      // Selected back color
00215   FXColor            seltextColor;      // Selected text color
00216   FXint              itemSpace;         // Space for item label
00217   FXint              itemWidth;         // Item width
00218   FXint              itemHeight;        // Item height
00219   FXint              anchorx;           // Rectangular selection
00220   FXint              anchory;
00221   FXint              currentx;
00222   FXint              currenty;
00223   FXint              grabx;             // Grab point x
00224   FXint              graby;             // Grab point y
00225   FXString           lookup;            // Lookup string
00226   FXString           help;              // Help text
00227   FXbool             state;             // State of item
00228 protected:
00229   FXIconList();
00230   void recompute();
00231   void startLasso(FXint ax,FXint ay);
00232   void updateLasso(FXint cx,FXint cy);
00233   void endLasso();
00234   void getrowscols(FXint& nr,FXint& nc,FXint w,FXint h) const;
00235   void lassoChanged(FXint ox,FXint oy,FXint ow,FXint oh,FXint nx,FXint ny,FXint nw,FXint nh,FXbool notify);
00236   virtual void moveContents(FXint x,FXint y);
00237   virtual FXIconItem *createItem(const FXString& text,FXIcon *big,FXIcon* mini,void* ptr);
00238   static FXint compareSection(const FXchar *p,const FXchar* q,FXint s);
00239   static FXint compareSectionCase(const FXchar *p,const FXchar* q,FXint s);
00240 private:
00241   FXIconList(const FXIconList&);
00242   FXIconList &operator=(const FXIconList&);
00243 public:
00244   long onPaint(FXObject*,FXSelector,void*);
00245   long onEnter(FXObject*,FXSelector,void*);
00246   long onLeave(FXObject*,FXSelector,void*);
00247   long onUngrabbed(FXObject*,FXSelector,void*);
00248   long onKeyPress(FXObject*,FXSelector,void*);
00249   long onKeyRelease(FXObject*,FXSelector,void*);
00250   long onLeftBtnPress(FXObject*,FXSelector,void*);
00251   long onLeftBtnRelease(FXObject*,FXSelector,void*);
00252   long onRightBtnPress(FXObject*,FXSelector,void*);
00253   long onRightBtnRelease(FXObject*,FXSelector,void*);
00254   long onMotion(FXObject*,FXSelector,void*);
00255   long onQueryTip(FXObject*,FXSelector,void*);
00256   long onQueryHelp(FXObject*,FXSelector,void*);
00257   long onTipTimer(FXObject*,FXSelector,void*);
00258   long onCmdSelectAll(FXObject*,FXSelector,void*);
00259   long onCmdDeselectAll(FXObject*,FXSelector,void*);
00260   long onCmdSelectInverse(FXObject*,FXSelector,void*);
00261   long onCmdArrangeByRows(FXObject*,FXSelector,void*);
00262   long onUpdArrangeByRows(FXObject*,FXSelector,void*);
00263   long onCmdArrangeByColumns(FXObject*,FXSelector,void*);
00264   long onUpdArrangeByColumns(FXObject*,FXSelector,void*);
00265   long onCmdShowDetails(FXObject*,FXSelector,void*);
00266   long onUpdShowDetails(FXObject*,FXSelector,void*);
00267   long onCmdShowBigIcons(FXObject*,FXSelector,void*);
00268   long onUpdShowBigIcons(FXObject*,FXSelector,void*);
00269   long onCmdShowMiniIcons(FXObject*,FXSelector,void*);
00270   long onUpdShowMiniIcons(FXObject*,FXSelector,void*);
00271   long onChgHeader(FXObject*,FXSelector,void*);
00272   long onClkHeader(FXObject*,FXSelector,void*);
00273   long onFocusIn(FXObject*,FXSelector,void*);
00274   long onFocusOut(FXObject*,FXSelector,void*);
00275   long onClicked(FXObject*,FXSelector,void*);
00276   long onDoubleClicked(FXObject*,FXSelector,void*);
00277   long onTripleClicked(FXObject*,FXSelector,void*);
00278   long onCommand(FXObject*,FXSelector,void*);
00279   long onAutoScroll(FXObject*,FXSelector,void*);
00280   long onLookupTimer(FXObject*,FXSelector,void*);
00281   long onCmdSetValue(FXObject*,FXSelector,void*);
00282   long onCmdGetIntValue(FXObject*,FXSelector,void*);
00283   long onCmdSetIntValue(FXObject*,FXSelector,void*);
00284 public:
00285   static FXint ascending(const FXIconItem* a,const FXIconItem* b);
00286   static FXint descending(const FXIconItem* a,const FXIconItem* b);
00287   static FXint ascendingCase(const FXIconItem* a,const FXIconItem* b);
00288   static FXint descendingCase(const FXIconItem* a,const FXIconItem* b);
00289 public:
00290   enum {
00291     ID_LOOKUPTIMER=FXScrollArea::ID_LAST,
00292     ID_HEADER,
00293     ID_SHOW_DETAILS,
00294     ID_SHOW_MINI_ICONS,
00295     ID_SHOW_BIG_ICONS,
00296     ID_ARRANGE_BY_ROWS,
00297     ID_ARRANGE_BY_COLUMNS,
00298     ID_SELECT_ALL,
00299     ID_DESELECT_ALL,
00300     ID_SELECT_INVERSE,
00301     ID_LAST
00302     };
00303 public:
00304 
00306   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);
00307 
00309   virtual void create();
00310 
00312   virtual void detach();
00313 
00315   virtual void recalc();
00316 
00318   virtual void layout();
00319 
00321   virtual FXint getVisibleY() const;
00322 
00324   virtual FXint getVisibleHeight() const;
00325 
00327   virtual FXint getContentWidth();
00328 
00330   virtual FXint getContentHeight();
00331 
00333   virtual FXbool canFocus() const;
00334 
00336   virtual void setFocus();
00337 
00339   virtual void killFocus();
00340 
00342   virtual void resize(FXint w,FXint h);
00343 
00345   virtual void position(FXint x,FXint y,FXint w,FXint h);
00346 
00348   FXint getNumItems() const { return items.no(); }
00349 
00351   FXint getNumRows() const { return nrows; }
00352 
00354   FXint getNumCols() const { return ncols; }
00355 
00357   FXHeader* getHeader() const { return header; }
00358 
00360   void setHeaders(const FXchar** strings,FXint size=1);
00361 
00363   void setHeaders(const FXString& strings,FXint size=1);
00364 
00366   void appendHeader(const FXString& text,FXIcon *icon=NULL,FXint size=1);
00367 
00369   void removeHeader(FXint index);
00370 
00372   void setHeaderText(FXint index,const FXString& text);
00373 
00375   FXString getHeaderText(FXint index) const;
00376 
00378   void setHeaderIcon(FXint index,FXIcon *icon);
00379 
00381   FXIcon* getHeaderIcon(FXint index) const;
00382 
00384   void setHeaderSize(FXint index,FXint size);
00385 
00387   FXint getHeaderSize(FXint index) const;
00388 
00390   FXint getNumHeaders() const;
00391 
00393   FXIconItem *getItem(FXint index) const;
00394 
00396   FXint setItem(FXint index,FXIconItem* item,FXbool notify=false);
00397 
00399   FXint setItem(FXint index,const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=false);
00400 
00402   FXint fillItems(const FXchar** strings,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=false);
00403 
00405   FXint fillItems(const FXString& strings,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=false);
00406 
00408   FXint insertItem(FXint index,FXIconItem* item,FXbool notify=false);
00409 
00411   FXint insertItem(FXint index,const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=false);
00412 
00414   FXint appendItem(FXIconItem* item,FXbool notify=false);
00415 
00417   FXint appendItem(const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=false);
00418 
00420   FXint prependItem(FXIconItem* item,FXbool notify=false);
00421 
00423   FXint prependItem(const FXString& text,FXIcon *big=NULL,FXIcon* mini=NULL,void* ptr=NULL,FXbool notify=false);
00424 
00426   FXint moveItem(FXint newindex,FXint oldindex,FXbool notify=false);
00427 
00429   FXIconItem* extractItem(FXint index,FXbool notify=false);
00430 
00432   void removeItem(FXint index,FXbool notify=false);
00433 
00435   void clearItems(FXbool notify=false);
00436 
00438   FXint getItemWidth() const { return itemWidth; }
00439 
00441   FXint getItemHeight() const { return itemHeight; }
00442 
00444   virtual FXint getItemAt(FXint x,FXint y) const;
00445 
00456   FXint findItem(const FXString& text,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const;
00457 
00465   FXint findItemByData(const void *ptr,FXint start=-1,FXuint flags=SEARCH_FORWARD|SEARCH_WRAP) const;
00466 
00468   virtual void makeItemVisible(FXint index);
00469 
00471   void setItemText(FXint index,const FXString& text);
00472 
00474   FXString getItemText(FXint index) const;
00475 
00477   void setItemBigIcon(FXint index,FXIcon* icon,FXbool owned=false);
00478 
00480   FXIcon* getItemBigIcon(FXint index) const;
00481 
00483   void setItemMiniIcon(FXint index,FXIcon* icon,FXbool owned=false);
00484 
00486   FXIcon* getItemMiniIcon(FXint index) const;
00487 
00489   void setItemData(FXint index,void* ptr);
00490 
00492   void* getItemData(FXint index) const;
00493 
00495   FXbool isItemSelected(FXint index) const;
00496 
00498   FXbool isItemCurrent(FXint index) const;
00499 
00501   FXbool isItemVisible(FXint index) const;
00502 
00504   FXbool isItemEnabled(FXint index) const;
00505 
00507   FXint hitItem(FXint index,FXint x,FXint y,FXint ww=1,FXint hh=1) const;
00508 
00510   void updateItem(FXint index) const;
00511 
00513   virtual FXbool enableItem(FXint index);
00514 
00516   virtual FXbool disableItem(FXint index);
00517 
00519   virtual FXbool selectItem(FXint index,FXbool notify=false);
00520 
00522   virtual FXbool deselectItem(FXint index,FXbool notify=false);
00523 
00525   virtual FXbool toggleItem(FXint index,FXbool notify=false);
00526 
00528   virtual FXbool selectInRectangle(FXint x,FXint y,FXint w,FXint h,FXbool notify=false);
00529 
00531   virtual FXbool extendSelection(FXint index,FXbool notify=false);
00532 
00534   virtual FXbool killSelection(FXbool notify=false);
00535 
00537   virtual void setCurrentItem(FXint index,FXbool notify=false);
00538 
00540   FXint getCurrentItem() const { return current; }
00541 
00543   void setAnchorItem(FXint index);
00544 
00546   FXint getAnchorItem() const { return anchor; }
00547 
00549   void sortItems();
00550 
00552   FXIconListSortFunc getSortFunc() const { return sortfunc; }
00553 
00555   void setSortFunc(FXIconListSortFunc func){ sortfunc=func; }
00556 
00558   void setFont(FXFont* fnt);
00559 
00561   FXFont* getFont() const { return font; }
00562 
00564   FXColor getTextColor() const { return textColor; }
00565 
00567   void setTextColor(FXColor clr);
00568 
00570   FXColor getSelBackColor() const { return selbackColor; }
00571 
00573   void setSelBackColor(FXColor clr);
00574 
00576   FXColor getSelTextColor() const { return seltextColor; }
00577 
00579   void setSelTextColor(FXColor clr);
00580 
00582   void setItemSpace(FXint s);
00583 
00585   FXint getItemSpace() const { return itemSpace; }
00586 
00588   FXuint getListStyle() const;
00589 
00591   void setListStyle(FXuint style);
00592 
00594   void setHelpText(const FXString& text);
00595 
00597   const FXString& getHelpText() const { return help; }
00598 
00600   virtual void save(FXStream& store) const;
00601 
00603   virtual void load(FXStream& store);
00604 
00606   virtual ~FXIconList();
00607   };
00608 
00609 }
00610 
00611 #endif

Copyright © 1997-2011 Jeroen van der Zijp