Crazy Eddies GUI System: CEGUIListbox.h Source File

Crazy Eddies GUI System 0.7.6

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List

CEGUIListbox.h

    00001 /***********************************************************************
    00002         filename:       CEGUIListbox.h
    00003         created:        13/4/2004
    00004         author:         Paul D Turner
    00005
    00006         purpose:        Interface to base class for Listbox widget
    00007 *************************************************************************/
    00008 /***************************************************************************
    00009  *   Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
    00010  *
    00011  *   Permission is hereby granted, free of charge, to any person obtaining
    00012  *   a copy of this software and associated documentation files (the
    00013  *   "Software"), to deal in the Software without restriction, including
    00014  *   without limitation the rights to use, copy, modify, merge, publish,
    00015  *   distribute, sublicense, and/or sell copies of the Software, and to
    00016  *   permit persons to whom the Software is furnished to do so, subject to
    00017  *   the following conditions:
    00018  *
    00019  *   The above copyright notice and this permission notice shall be
    00020  *   included in all copies or substantial portions of the Software.
    00021  *
    00022  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    00023  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    00024  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    00025  *   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
    00026  *   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
    00027  *   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    00028  *   OTHER DEALINGS IN THE SOFTWARE.
    00029  ***************************************************************************/
    00030 #ifndef _CEGUIListbox_h_
    00031 #define _CEGUIListbox_h_
    00032
    00033 #include "../CEGUIBase.h"
    00034 #include "../CEGUIWindow.h"
    00035 #include "CEGUIListboxProperties.h"
    00036 #include <vector>
    00037
    00038
    00039 #if defined(_MSC_VER)
    00040 #       pragma warning(push)
    00041 #       pragma warning(disable : 4251)
    00042 #endif
    00043
    00044
    00045 // Start of CEGUI namespace section
    00046 namespace CEGUI
    00047 {
    00048
    00053 class CEGUIEXPORT ListboxWindowRenderer : public WindowRenderer
    00054 {
    00055 public:
    00060     ListboxWindowRenderer(const String& name);
    00061
    00071     virtual Rect getListRenderArea(void) const = 0;
    00072 };
    00073
    00078 class CEGUIEXPORT Listbox : public Window
    00079 {
    00080 public:
    00081         static const String EventNamespace;
    00082     static const String WidgetTypeName;
    00083
    00084         /*************************************************************************
    00085                 Constants
    00086         *************************************************************************/
    00087         // event names
    00092         static const String EventListContentsChanged;
    00099         static const String EventSelectionChanged;
    00105         static const String EventSortModeChanged;
    00111         static const String EventMultiselectModeChanged;
    00118         static const String EventVertScrollbarModeChanged;
    00125         static const String EventHorzScrollbarModeChanged;
    00126
    00127     /*************************************************************************
    00128         Child Widget name suffix constants
    00129     *************************************************************************/
    00130     static const String VertScrollbarNameSuffix;
    00131     static const String HorzScrollbarNameSuffix;
    00132
    00133         /*************************************************************************
    00134                 Accessor Methods
    00135         *************************************************************************/
    00143         size_t  getItemCount(void) const                {return d_listItems.size();}
    00144
    00145
    00153         size_t  getSelectedCount(void) const;
    00154
    00155
    00164         ListboxItem*    getFirstSelectedItem(void) const;
    00165
    00166
    00181         ListboxItem*    getNextSelected(const ListboxItem* start_item) const;
    00182
    00183
    00196         ListboxItem*    getListboxItemFromIndex(size_t index) const;
    00197
    00198
    00211         size_t  getItemIndex(const ListboxItem* item) const;
    00212
    00213
    00221         bool    isSortEnabled(void) const               {return d_sorted;}
    00222
    00230         bool    isMultiselectEnabled(void) const        {return d_multiselect;}
    00231
    00232         bool    isItemTooltipsEnabled(void) const       {return d_itemTooltips;}
    00233
    00246         bool    isItemSelected(size_t index) const;
    00247
    00248
    00266         ListboxItem*    findItemWithText(const String& text, const ListboxItem* start_item);
    00267
    00268
    00276         bool    isListboxItemInList(const ListboxItem* item) const;
    00277
    00278
    00287         bool    isVertScrollbarAlwaysShown(void) const;
    00288
    00289
    00298         bool    isHorzScrollbarAlwaysShown(void) const;
    00299
    00300
    00301         /*************************************************************************
    00302                 Manipulator Methods
    00303         *************************************************************************/
    00314         virtual void    initialiseComponents(void);
    00315
    00316
    00323         void    resetList(void);
    00324
    00325
    00337         void    addItem(ListboxItem* item);
    00338
    00339
    00363         void    insertItem(ListboxItem* item, const ListboxItem* position);
    00364
    00365
    00377         void    removeItem(const ListboxItem* item);
    00378
    00379
    00387         void    clearAllSelections(void);
    00388
    00389
    00400         void    setSortingEnabled(bool setting);
    00401
    00402
    00414         void    setMultiselectEnabled(bool setting);
    00415
    00416
    00428         void    setShowVertScrollbar(bool setting);
    00429
    00430
    00442         void    setShowHorzScrollbar(bool setting);
    00443
    00444         void    setItemTooltipsEnabled(bool setting);
    00464         void    setItemSelectState(ListboxItem* item, bool state);
    00465
    00466
    00486         void    setItemSelectState(size_t item_index, bool state);
    00487
    00488
    00501         void    handleUpdatedItemData(void);
    00502
    00503
    00515         void    ensureItemIsVisible(size_t item_index);
    00516
    00517
    00530         void    ensureItemIsVisible(const ListboxItem* item);
    00531
    00532
    00542     virtual Rect    getListRenderArea(void) const;
    00543
    00544
    00556     Scrollbar* getVertScrollbar() const;
    00557
    00569     Scrollbar* getHorzScrollbar() const;
    00570
    00571
    00576     float   getTotalItemsHeight(void) const;
    00577
    00578
    00583     float   getWidestItemWidth(void) const;
    00584
    00585
    00596     ListboxItem* getItemAtPoint(const Point& pt) const;
    00597
    00598
    00599         /*************************************************************************
    00600                 Construction and Destruction
    00601         *************************************************************************/
    00606         Listbox(const String& type, const String& name);
    00607
    00608
    00613         virtual ~Listbox(void);
    00614
    00615
    00616 protected:
    00617         /*************************************************************************
    00618                 Abstract Implementation Functions (must be provided by derived class)
    00619         *************************************************************************/
    00629         //virtual       Rect    getListRenderArea_impl(void) const = 0;
    00630
    00631
    00632         /*************************************************************************
    00633                 Implementation Functions
    00634         *************************************************************************/
    00639         void    configureScrollbars(void);
    00640
    00646         void    selectRange(size_t start, size_t end);
    00647
    00648
    00656         bool    clearAllSelections_impl(void);
    00657
    00658
    00670         bool    resetList_impl(void);
    00671
    00672
    00683         virtual bool    testClassName_impl(const String& class_name) const
    00684         {
    00685                 if (class_name=="Listbox")      return true;
    00686                 return Window::testClassName_impl(class_name);
    00687         }
    00688
    00693     bool handle_scrollChange(const EventArgs& args);
    00694
    00695
    00696     // validate window renderer
    00697     virtual bool validateWindowRenderer(const String& name) const
    00698     {
    00699         return (name == "Listbox");
    00700     }
    00701
    00706     void resortList();
    00707
    00708         /*************************************************************************
    00709                 New event handlers
    00710         *************************************************************************/
    00715         virtual void    onListContentsChanged(WindowEventArgs& e);
    00716
    00717
    00722         virtual void    onSelectionChanged(WindowEventArgs& e);
    00723
    00724
    00729         virtual void    onSortModeChanged(WindowEventArgs& e);
    00730
    00731
    00736         virtual void    onMultiselectModeChanged(WindowEventArgs& e);
    00737
    00738
    00743         virtual void    onVertScrollbarModeChanged(WindowEventArgs& e);
    00744
    00745
    00750         virtual void    onHorzScrollbarModeChanged(WindowEventArgs& e);
    00751
    00752
    00753         /*************************************************************************
    00754                 Overridden Event handlers
    00755         *************************************************************************/
    00756         virtual void    onSized(WindowEventArgs& e);
    00757         virtual void    onMouseButtonDown(MouseEventArgs& e);
    00758         virtual void    onMouseWheel(MouseEventArgs& e);
    00759         virtual void    onMouseMove(MouseEventArgs& e);
    00760
    00761
    00762         /*************************************************************************
    00763                 Implementation Data
    00764         *************************************************************************/
    00765         typedef std::vector<ListboxItem*>       LBItemList;
    00766         bool    d_sorted;
    00767         bool    d_multiselect;
    00768         bool    d_forceVertScroll;
    00769         bool    d_forceHorzScroll;
    00770         bool    d_itemTooltips;
    00771         LBItemList      d_listItems;
    00772         ListboxItem*    d_lastSelected;
    00773
    00774     friend class ListboxWindowRenderer;
    00775
    00776 private:
    00777         /*************************************************************************
    00778                 Static Properties for this class
    00779         *************************************************************************/
    00780         static ListboxProperties::Sort                                  d_sortProperty;
    00781         static ListboxProperties::MultiSelect                   d_multiSelectProperty;
    00782         static ListboxProperties::ForceVertScrollbar    d_forceVertProperty;
    00783         static ListboxProperties::ForceHorzScrollbar    d_forceHorzProperty;
    00784         static ListboxProperties::ItemTooltips                  d_itemTooltipsProperty;
    00785
    00786         /*************************************************************************
    00787                 Private methods
    00788         *************************************************************************/
    00789         void    addListboxProperties(void);
    00790 };
    00791
    00792
    00798 bool lbi_less(const ListboxItem* a, const ListboxItem* b);
    00799
    00800
    00806 bool lbi_greater(const ListboxItem* a, const ListboxItem* b);
    00807
    00808 } // End of  CEGUI namespace section
    00809
    00810
    00811 #if defined(_MSC_VER)
    00812 #       pragma warning(pop)
    00813 #endif
    00814
    00815 #endif  // end of guard _CEGUIListbox_h_