00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
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
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
00115
00116
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
00194 static const float ScrollSpeed;
00195 static const float MinimumSegmentPixelWidth;
00196
00197
00198
00199
00200 static const char SegmentNameSuffix[];
00201
00202
00203
00204
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
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
00742
00747 ListHeader(const String& type, const String& name);
00748
00749
00754 virtual ~ListHeader(void);
00755
00756
00757 protected:
00758
00759
00760
00772
00773
00774
00786
00787
00788
00789
00790
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
00851 virtual bool validateWindowRenderer(const String& name) const
00852 {
00853 return (name == "ListHeader");
00854 }
00855
00856
00857
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
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
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
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
00979
00980 void addHeaderProperties(void);
00981 };
00982
00983
00984 }
00985
00986
00987 #if defined(_MSC_VER)
00988 # pragma warning(pop)
00989 #endif
00990
00991 #endif // end of guard _CEGUIListHeader_h_