Crazy Eddies GUI System 0.7.5
CEGUIListHeader.h
00001 /***********************************************************************
00002         filename:       CEGUIListHeader.h
00003         created:        13/4/2004
00004         author:         Paul D Turner
00005         
00006         purpose:        Interface to base class for ListHeader 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 _CEGUIListHeader_h_
00031 #define _CEGUIListHeader_h_
00032 
00033 #include "../CEGUIBase.h"
00034 #include "../CEGUIWindow.h"
00035 #include "CEGUIListHeaderSegment.h"
00036 #include "CEGUIListHeaderProperties.h"
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 {
00052 class CEGUIEXPORT HeaderSequenceEventArgs : public WindowEventArgs
00053 {
00054 public:
00055         HeaderSequenceEventArgs(Window* wnd, uint old_idx, uint new_idx) : WindowEventArgs(wnd), d_oldIdx(old_idx), d_newIdx(new_idx) {};
00056 
00057         uint d_oldIdx;          
00058         uint d_newIdx;          
00059 };
00060 
00065 class CEGUIEXPORT ListHeaderWindowRenderer : public WindowRenderer
00066 {
00067 public:
00072     ListHeaderWindowRenderer(const String& name);
00073 
00085     virtual ListHeaderSegment*  createNewSegment(const String& name) const  = 0;
00086 
00098     virtual void    destroyListSegment(ListHeaderSegment* segment) const = 0;
00099 };
00100 
00101 
00106 class CEGUIEXPORT ListHeader : public Window
00107 {
00108 public:
00109         static const String EventNamespace;                             
00110     static const String WidgetTypeName;             
00111 
00112 
00113         /*************************************************************************
00114                 Constants
00115         *************************************************************************/
00116         // Event names
00122         static const String EventSortColumnChanged;
00128         static const String EventSortDirectionChanged;
00133         static const String EventSegmentSized;
00138         static const String EventSegmentClicked;
00144         static const String EventSplitterDoubleClicked;
00152         static const String EventSegmentSequenceChanged;
00158         static const String EventSegmentAdded;
00164         static const String EventSegmentRemoved;
00171         static const String EventSortSettingChanged;
00178         static const String EventDragMoveSettingChanged;
00185         static const String EventDragSizeSettingChanged;
00191         static const String EventSegmentRenderOffsetChanged;
00192 
00193         // values
00194         static const float      ScrollSpeed;                            
00195         static const float      MinimumSegmentPixelWidth;       
00196 
00197     /*************************************************************************
00198         Child Widget name suffix constants
00199     *************************************************************************/
00200     static const char SegmentNameSuffix[];          
00201 
00202 
00203         /*************************************************************************
00204                 Accessor Methods
00205         *************************************************************************/
00213         uint    getColumnCount(void) const;
00214 
00215         
00228         ListHeaderSegment&      getSegmentFromColumn(uint column) const;
00229 
00230 
00244         ListHeaderSegment&      getSegmentFromID(uint id) const;
00245 
00246 
00257         ListHeaderSegment&      getSortSegment(void) const;
00258 
00259 
00272         uint    getColumnFromSegment(const ListHeaderSegment& segment) const;
00273 
00274 
00287         uint    getColumnFromID(uint id) const;
00288 
00289 
00300         uint    getSortColumn(void) const;
00301 
00302 
00315         uint    getColumnWithText(const String& text) const;
00316 
00317 
00330         float   getPixelOffsetToSegment(const ListHeaderSegment& segment) const;
00331 
00332 
00346         float   getPixelOffsetToColumn(uint column) const;
00347 
00348 
00356         float   getTotalSegmentsPixelExtent(void) const;
00357 
00358 
00372         UDim getColumnWidth(uint column) const;
00373 
00374 
00382         ListHeaderSegment::SortDirection        getSortDirection(void) const;
00383 
00384 
00393         bool    isSortingEnabled(void) const;
00394 
00395 
00403         bool    isColumnSizingEnabled(void) const;
00404 
00405 
00413         bool    isColumnDraggingEnabled(void) const;
00414 
00415 
00424         float   getSegmentOffset(void) const    {return d_segmentOffset;}
00425 
00426 
00427         /*************************************************************************
00428                 Manipulator Methods
00429         *************************************************************************/
00441         void    setSortingEnabled(bool setting);
00442 
00443 
00454         void    setSortDirection(ListHeaderSegment::SortDirection direction);
00455 
00456 
00469         void    setSortSegment(const ListHeaderSegment& segment);
00470 
00471 
00484         void    setSortColumn(uint column);
00485 
00486 
00499         void    setSortColumnFromID(uint id);
00500 
00501 
00513         void    setColumnSizingEnabled(bool setting);
00514 
00515 
00527         void    setColumnDraggingEnabled(bool setting);
00528 
00529 
00546         void    addColumn(const String& text, uint id, const UDim& width);
00547 
00548 
00569         void    insertColumn(const String& text, uint id, const UDim& width, uint position);
00570 
00571 
00594         void    insertColumn(const String& text, uint id, const UDim& width, const ListHeaderSegment& position);
00595 
00596 
00609         void    removeColumn(uint column);
00610 
00611 
00624         void    removeSegment(const ListHeaderSegment& segment);
00625 
00626 
00643         void    moveColumn(uint column, uint position);
00644 
00645 
00664         void    moveColumn(uint column, const ListHeaderSegment& position);
00665 
00666 
00683         void    moveSegment(const ListHeaderSegment& segment, uint position);
00684 
00685 
00703         void    moveSegment(const ListHeaderSegment& segment, const ListHeaderSegment& position);
00704 
00705 
00718         void    setSegmentOffset(float offset);
00719 
00720 
00737         void    setColumnWidth(uint column, const UDim& width);
00738 
00739 
00740         /*************************************************************************
00741                 Construction and Destruction
00742         *************************************************************************/
00747         ListHeader(const String& type, const String& name);
00748 
00749 
00754         virtual ~ListHeader(void);
00755 
00756 
00757 protected:
00758         /*************************************************************************
00759                 Abstract Implementation Methods
00760         *************************************************************************/
00772         //virtual ListHeaderSegment*    createNewSegment_impl(const String& name) const = 0;
00773 
00774 
00786         //virtual void  destroyListSegment_impl(ListHeaderSegment* segment) const = 0;
00787 
00788 
00789         /*************************************************************************
00790                 Implementation Methods
00791         *************************************************************************/
00796         ListHeaderSegment*      createInitialisedSegment(const String& text, uint id, const UDim& width);
00797 
00798 
00803         void    layoutSegments(void);
00804 
00805 
00816         virtual bool    testClassName_impl(const String& class_name) const
00817         {
00818                 if (class_name=="ListHeader")   return true;
00819                 return Window::testClassName_impl(class_name);
00820         }
00821 
00822 
00834     ListHeaderSegment*  createNewSegment(const String& name) const;
00835 
00836 
00848     void    destroyListSegment(ListHeaderSegment* segment) const;
00849 
00850     // validate window renderer
00851     virtual bool validateWindowRenderer(const String& name) const
00852     {
00853         return (name == "ListHeader");
00854     }
00855 
00856         /*************************************************************************
00857                 New List header event handlers
00858         *************************************************************************/
00863         virtual void    onSortColumnChanged(WindowEventArgs& e);
00864 
00865 
00870         virtual void    onSortDirectionChanged(WindowEventArgs& e);
00871 
00872 
00877         virtual void    onSegmentSized(WindowEventArgs& e);
00878 
00879 
00884         virtual void    onSegmentClicked(WindowEventArgs& e);
00885 
00886 
00891         virtual void    onSplitterDoubleClicked(WindowEventArgs& e);
00892 
00893 
00898         virtual void    onSegmentSequenceChanged(WindowEventArgs& e);
00899 
00900 
00905         virtual void    onSegmentAdded(WindowEventArgs& e);
00906 
00907 
00912         virtual void    onSegmentRemoved(WindowEventArgs& e);
00913 
00914 
00919         virtual void    onSortSettingChanged(WindowEventArgs& e);
00920 
00921 
00926         virtual void    onDragMoveSettingChanged(WindowEventArgs& e);
00927 
00928 
00933         virtual void    onDragSizeSettingChanged(WindowEventArgs& e);
00934 
00935 
00940         virtual void    onSegmentOffsetChanged(WindowEventArgs& e);
00941 
00942         /*************************************************************************
00943                 handlers for events we subscribe to from segments
00944         *************************************************************************/
00945         bool    segmentSizedHandler(const EventArgs& e);
00946         bool    segmentMovedHandler(const EventArgs& e);
00947         bool    segmentClickedHandler(const EventArgs& e);
00948         bool    segmentDoubleClickHandler(const EventArgs& e);
00949         bool    segmentDragHandler(const EventArgs& e);
00950 
00951 
00952         /*************************************************************************
00953                 Implementation Data
00954         *************************************************************************/
00955         typedef std::vector<ListHeaderSegment*>         SegmentList;
00956         SegmentList     d_segments;                     
00957         ListHeaderSegment*      d_sortSegment;  
00958         bool    d_sizingEnabled;                
00959         bool    d_sortingEnabled;               
00960         bool    d_movingEnabled;                
00961         uint    d_uniqueIDNumber;               
00962         float   d_segmentOffset;                
00963         ListHeaderSegment::SortDirection        d_sortDir;              
00964 
00965 
00966 private:
00967         /*************************************************************************
00968                 Static Properties for this class
00969         *************************************************************************/
00970         static ListHeaderProperties::SortSettingEnabled         d_sortSettingProperty;
00971         static ListHeaderProperties::ColumnsSizable                     d_sizableProperty;
00972         static ListHeaderProperties::ColumnsMovable                     d_movableProperty;
00973         static ListHeaderProperties::SortColumnID                       d_sortColumnIDProperty;
00974         static ListHeaderProperties::SortDirection                      d_sortDirectionProperty;
00975 
00976 
00977         /*************************************************************************
00978                 Private methods
00979         *************************************************************************/
00980         void    addHeaderProperties(void);
00981 };
00982 
00983 
00984 } // End of  CEGUI namespace section
00985 
00986 
00987 #if defined(_MSC_VER)
00988 #       pragma warning(pop)
00989 #endif
00990 
00991 #endif  // end of guard _CEGUIListHeader_h_