00001 #ifndef _LISTBOX_H_ 00002 #define _LISTBOX_H_ 00003 00004 #include "scrollingpanel.h" 00005 #include "listdataeventhandler.h" 00006 #include "listdata.h" 00007 #include "listboxdataitem.h" 00008 #include "gadgetstyle.h" 00009 #include "listboxbase.h" 00010 00011 namespace WoopsiUI { 00012 00021 class ListBox : public ListBoxBase, public ScrollingPanel, public ListDataEventHandler { 00022 public: 00023 00035 ListBox(s16 x, s16 y, u16 width, u16 height, GadgetStyle* style = NULL); 00036 00042 virtual void addOption(const WoopsiString& text, const u32 value); 00043 00048 virtual void addOption(ListBoxDataItem* option); 00049 00054 virtual void removeOption(const s32 index); 00055 00059 virtual void removeAllOptions(); 00060 00070 virtual void addOption(const WoopsiString& text, const u32 value, const u16 normalTextColour, const u16 normalBackColour, const u16 selectedTextColour, const u16 selectedBackColour); 00071 00077 virtual void selectOption(const s32 index); 00078 00084 virtual void deselectOption(const s32 index); 00085 00090 virtual void selectAllOptions(); 00091 00096 virtual void deselectAllOptions(); 00097 00103 virtual const s32 getSelectedIndex() const; 00104 00111 virtual void setSelectedIndex(const s32 index); 00112 00117 virtual const ListBoxDataItem* getSelectedOption() const; 00118 00123 virtual inline void setAllowMultipleSelections(const bool allowMultipleSelections) { _options.setAllowMultipleSelections(allowMultipleSelections); }; 00124 00129 virtual inline const bool allowsMultipleSelections() const { return _options.allowsMultipleSelections(); }; 00130 00134 virtual void resizeCanvas(); 00135 00140 virtual inline const ListBoxDataItem* getOption(const s32 index) { 00141 return (const ListBoxDataItem*)_options.getItem(index); 00142 }; 00143 00147 virtual void sort(); 00148 00153 virtual inline const s32 getOptionCount() const { 00154 return _options.getItemCount(); 00155 }; 00156 00161 virtual const u16 getOptionHeight() const; 00162 00167 virtual inline void setSortInsertedItems(const bool sortInsertedItems) { 00168 _options.setSortInsertedItems(sortInsertedItems); 00169 }; 00170 00175 virtual void handleListDataChangedEvent(const ListDataEventArgs& e); 00176 00181 virtual void handleListDataSelectionChangedEvent(const ListDataEventArgs& e); 00182 00190 virtual void getPreferredDimensions(Rect& rect) const; 00191 00198 virtual bool isDoubleClick(s16 x, s16 y); 00199 00200 protected: 00201 ListData _options; 00202 u8 _optionPadding; 00203 s32 _lastSelectedIndex; 00211 virtual void drawContents(GraphicsPort* port); 00212 00219 virtual void drawBorder(GraphicsPort* port); 00220 00227 virtual void onClick(s16 x, s16 y); 00228 00234 virtual void onDoubleClick(s16 x, s16 y); 00235 00239 virtual ~ListBox(); 00240 00248 virtual void setOptionSelected(const s32 index, const bool selected); 00249 00253 inline ListBox(const ListBox& listBox) : ScrollingPanel(listBox) { }; 00254 }; 00255 } 00256 00257 #endif