Crazy Eddie's GUI System  0.8.4
ItemListbox.h
00001 /************************************************************************
00002     created:    Tue Sep 27 2005
00003     author:     Tomas Lindquist Olsen
00004 *************************************************************************/
00005 /***************************************************************************
00006  *   Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
00007  *
00008  *   Permission is hereby granted, free of charge, to any person obtaining
00009  *   a copy of this software and associated documentation files (the
00010  *   "Software"), to deal in the Software without restriction, including
00011  *   without limitation the rights to use, copy, modify, merge, publish,
00012  *   distribute, sublicense, and/or sell copies of the Software, and to
00013  *   permit persons to whom the Software is furnished to do so, subject to
00014  *   the following conditions:
00015  *
00016  *   The above copyright notice and this permission notice shall be
00017  *   included in all copies or substantial portions of the Software.
00018  *
00019  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00020  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00021  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
00022  *   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
00023  *   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
00024  *   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
00025  *   OTHER DEALINGS IN THE SOFTWARE.
00026  ***************************************************************************/
00027 #ifndef _CEGUIItemListbox_h_
00028 #define _CEGUIItemListbox_h_
00029 
00030 #include "./ScrolledItemListBase.h"
00031 
00032 #if defined(_MSC_VER)
00033 #       pragma warning(push)
00034 #       pragma warning(disable : 4251)
00035 #endif
00036 
00037 // begin CEGUI namespace
00038 namespace CEGUI
00039 {
00040 
00045 class CEGUIEXPORT ItemListbox : public ScrolledItemListBase
00046 {
00047 public:
00048     static const String EventNamespace; 
00049     static const String WidgetTypeName; 
00050 
00051     /************************************************************************
00052         Constants
00053     *************************************************************************/
00059     static const String EventSelectionChanged;
00065     static const String EventMultiSelectModeChanged;
00066 
00067     /************************************************************************
00068         Accessors
00069     *************************************************************************/
00074     size_t getSelectedCount(void) const;
00075 
00083     ItemEntry* getLastSelectedItem(void) const      {return d_lastSelected;}
00084 
00103     ItemEntry* getFirstSelectedItem(size_t start_index=0) const;
00104 
00123     ItemEntry* getNextSelectedItem(void) const;
00124 
00134     ItemEntry* getNextSelectedItemAfter(const ItemEntry* start_item) const;
00135 
00140     bool isMultiSelectEnabled(void) const   {return d_multiSelect;}
00141 
00146     bool isItemSelected(size_t index) const;
00147 
00148     /************************************************************************
00149         Manipulators
00150     *************************************************************************/
00155     void setMultiSelectEnabled(bool state);
00156 
00161     void clearAllSelections(void);
00162 
00173     void selectRange(size_t a, size_t z);
00174 
00180     void selectAllItems(void);
00181 
00182     /************************************************************************
00183         Object Construction and Destruction
00184     *************************************************************************/
00189     ItemListbox(const String& type, const String& name);
00190 
00195     virtual ~ItemListbox(void) {}
00196 
00197     /************************************************************************
00198         Implementation functions
00199     ************************************************************************/
00204     virtual void layoutItemWidgets();
00205 
00210     virtual Sizef getContentSize() const;
00211 
00217     virtual void notifyItemClicked(ItemEntry* li);
00218 
00224     virtual void notifyItemSelectState(ItemEntry* li, bool state);
00225 
00226 protected:
00227     /************************************************************************
00228         Protected implementation functions
00229     ************************************************************************/
00247     ItemEntry* findSelectedItem(size_t start_index) const;
00248 
00249     // overridden from ItemListBase
00250     bool handle_PaneChildRemoved(const EventArgs& e);
00251 
00252     /************************************************************************
00253         New event handlers
00254     ************************************************************************/
00255     virtual void onSelectionChanged(WindowEventArgs& e);
00256     virtual void onMultiSelectModeChanged(WindowEventArgs& e);
00257 
00258     /************************************************************************
00259         Overridden event handlers
00260     ************************************************************************/
00261     virtual void onKeyDown(KeyEventArgs& e);
00262 
00263     /************************************************************************
00264         Implementation data
00265     ************************************************************************/
00266     bool d_multiSelect; 
00267     ItemEntry* d_lastSelected; 
00268     mutable size_t d_nextSelectionIndex; 
00269 
00270 private:
00271     void addItemListboxProperties(void);
00272 };
00273 
00274 } // end CEGUI namespace
00275 
00276 #if defined(_MSC_VER)
00277 #       pragma warning(pop)
00278 #endif
00279 
00280 #endif // end of guard _CEGUIItemListbox_h_
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends