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 _CEGUIListHeaderSegment_h_
00031 #define _CEGUIListHeaderSegment_h_
00032
00033 #include "../CEGUIBase.h"
00034 #include "../CEGUIWindow.h"
00035 #include "CEGUIListHeaderSegmentProperties.h"
00036
00037
00038 #if defined(_MSC_VER)
00039 # pragma warning(push)
00040 # pragma warning(disable : 4251)
00041 #endif
00042
00043
00044
00045 namespace CEGUI
00046 {
00051 class CEGUIEXPORT ListHeaderSegment : public Window
00052 {
00053 public:
00054 static const String EventNamespace;
00055 static const String WidgetTypeName;
00056
00057
00058
00059
00060
00061
00066 static const String EventSegmentClicked;
00072 static const String EventSplitterDoubleClicked;
00078 static const String EventSizingSettingChanged;
00084 static const String EventSortDirectionChanged;
00090 static const String EventMovableSettingChanged;
00096 static const String EventSegmentDragStart;
00102 static const String EventSegmentDragStop;
00108 static const String EventSegmentDragPositionChanged;
00114 static const String EventSegmentSized;
00120 static const String EventClickableSettingChanged;
00121
00122
00123 static const float DefaultSizingArea;
00124 static const float SegmentMoveThreshold;
00125
00126
00127
00128
00129
00134 enum SortDirection
00135 {
00136 None,
00137 Ascending,
00138 Descending
00139 };
00140
00141
00142
00143
00144
00152 bool isSizingEnabled(void) const {return d_sizingEnabled;}
00153
00154
00167 SortDirection getSortDirection(void) const {return d_sortDir;}
00168
00169
00177 bool isDragMovingEnabled(void) const {return d_movingEnabled;}
00178
00179
00187 const Point& getDragMoveOffset(void) const {return d_dragPosition;}
00188
00189
00197 bool isClickable(void) const {return d_allowClicks;}
00198
00199
00204 bool isSegmentHovering(void) const {return d_segmentHover;}
00205
00206
00211 bool isSegmentPushed(void) const {return d_segmentPushed;}
00212
00213
00218 bool isSplitterHovering(void) const {return d_splitterHover;}
00219
00220
00225 bool isBeingDragMoved(void) const {return d_dragMoving;}
00226
00227
00232 bool isBeingDragSized(void) const {return d_dragSizing;}
00233
00234
00235 const Image* getSizingCursorImage() const;
00236 const Image* getMovingCursorImage() const;
00237
00238
00239
00240
00241
00252 void setSizingEnabled(bool setting);
00253
00254
00270 void setSortDirection(SortDirection sort_dir);
00271
00272
00283 void setDragMovingEnabled(bool setting);
00284
00285
00296 void setClickable(bool setting);
00297
00298
00299 void setSizingCursorImage(const Image* image);
00300 void setSizingCursorImage(const String& imageset, const String& image);
00301 void setMovingCursorImage(const Image* image);
00302 void setMovingCursorImage(const String& imageset, const String& image);
00303
00304
00305
00306
00307
00312 ListHeaderSegment(const String& type, const String& name);
00313
00314
00319 virtual ~ListHeaderSegment(void);
00320
00321
00322 protected:
00323
00324
00325
00336 void doDragSizing(const Point& local_mouse);
00337
00338
00349 void doDragMoving(const Point& local_mouse);
00350
00351
00356 void initDragMoving(void);
00357
00358
00363 void initSizingHoverState(void);
00364
00365
00370 void initSegmentHoverState(void);
00371
00372
00385 bool isDragMoveThresholdExceeded(const Point& local_mouse);
00386
00387
00398 virtual bool testClassName_impl(const String& class_name) const
00399 {
00400 if (class_name=="ListHeaderSegment") return true;
00401 return Window::testClassName_impl(class_name);
00402 }
00403
00404
00405
00406
00407
00412 virtual void onSegmentClicked(WindowEventArgs& e);
00413
00414
00419 virtual void onSplitterDoubleClicked(WindowEventArgs& e);
00420
00421
00426 virtual void onSizingSettingChanged(WindowEventArgs& e);
00427
00428
00433 virtual void onSortDirectionChanged(WindowEventArgs& e);
00434
00435
00440 virtual void onMovableSettingChanged(WindowEventArgs& e);
00441
00442
00447 virtual void onSegmentDragStart(WindowEventArgs& e);
00448
00449
00454 virtual void onSegmentDragStop(WindowEventArgs& e);
00455
00456
00461 virtual void onSegmentDragPositionChanged(WindowEventArgs& e);
00462
00463
00468 virtual void onSegmentSized(WindowEventArgs& e);
00469
00470
00475 virtual void onClickableSettingChanged(WindowEventArgs& e);
00476
00477
00478
00479
00480
00481 virtual void onMouseMove(MouseEventArgs& e);
00482 virtual void onMouseButtonDown(MouseEventArgs& e);
00483 virtual void onMouseButtonUp(MouseEventArgs& e);
00484 virtual void onMouseDoubleClicked(MouseEventArgs& e);
00485 virtual void onMouseLeaves(MouseEventArgs& e);
00486 virtual void onCaptureLost(WindowEventArgs& e);
00487
00488
00489
00490
00491
00492 const Image* d_sizingMouseCursor;
00493 const Image* d_movingMouseCursor;
00494
00495 float d_splitterSize;
00496 bool d_splitterHover;
00497
00498 bool d_dragSizing;
00499 Point d_dragPoint;
00500
00501 SortDirection d_sortDir;
00502
00503 bool d_segmentHover;
00504 bool d_segmentPushed;
00505 bool d_sizingEnabled;
00506 bool d_movingEnabled;
00507 bool d_dragMoving;
00508 Point d_dragPosition;
00509 bool d_allowClicks;
00510
00511 private:
00512
00513
00514
00515 static ListHeaderSegmentProperties::Clickable d_clickableProperty;
00516 static ListHeaderSegmentProperties::Dragable d_dragableProperty;
00517 static ListHeaderSegmentProperties::Sizable d_sizableProperty;
00518 static ListHeaderSegmentProperties::SortDirection d_sortDirectionProperty;
00519 static ListHeaderSegmentProperties::SizingCursorImage d_sizingCursorProperty;
00520 static ListHeaderSegmentProperties::MovingCursorImage d_movingCursorProperty;
00521
00522
00523
00524
00525
00526 void addHeaderSegmentProperties(void);
00527 };
00528
00529 }
00530
00531 #if defined(_MSC_VER)
00532 # pragma warning(pop)
00533 #endif
00534
00535 #endif // end of guard _CEGUIListHeaderSegment_h_