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 #ifndef _CEGUIListHeaderSegment_h_
00027 #define _CEGUIListHeaderSegment_h_
00028
00029 #include "CEGUIBase.h"
00030 #include "CEGUIWindow.h"
00031 #include "elements/CEGUIListHeaderSegmentProperties.h"
00032
00033
00034 #if defined(_MSC_VER)
00035 # pragma warning(push)
00036 # pragma warning(disable : 4251)
00037 #endif
00038
00039
00040
00041 namespace CEGUI
00042 {
00047 class CEGUIEXPORT ListHeaderSegment : public Window
00048 {
00049 public:
00050 static const String EventNamespace;
00051
00052
00053
00054
00055
00056
00057 static const String EventSegmentClicked;
00058 static const String EventSplitterDoubleClicked;
00059 static const String EventSizingSettingChanged;
00060 static const String EventSortDirectionChanged;
00061 static const String EventMovableSettingChanged;
00062 static const String EventSegmentDragStart;
00063 static const String EventSegmentDragStop;
00064 static const String EventSegmentDragPositionChanged;
00065 static const String EventSegmentSized;
00066 static const String EventClickableSettingChanged;
00067
00068
00069 static const float DefaultSizingArea;
00070 static const float SegmentMoveThreshold;
00071
00072
00073
00074
00075
00080 enum SortDirection
00081 {
00082 None,
00083 Ascending,
00084 Descending
00085 };
00086
00087
00088
00089
00090
00098 bool isSizingEnabled(void) const {return d_sizingEnabled;}
00099
00100
00113 SortDirection getSortDirection(void) const {return d_sortDir;}
00114
00115
00123 bool isDragMovingEnabled(void) const {return d_movingEnabled;}
00124
00125
00133 const Point& getDragMoveOffset(void) const {return d_dragPosition;}
00134
00135
00143 bool isClickable(void) const {return d_allowClicks;}
00144
00145
00146
00147
00148
00159 void setSizingEnabled(bool setting);
00160
00161
00177 void setSortDirection(SortDirection sort_dir);
00178
00179
00190 void setDragMovingEnabled(bool setting);
00191
00192
00203 void setClickable(bool setting);
00204
00205
00206
00207
00208
00213 ListHeaderSegment(const String& type, const String& name);
00214
00215
00220 virtual ~ListHeaderSegment(void);
00221
00222
00223 protected:
00224
00225
00226
00231 void addHeaderSegmentEvents(void);
00232
00233
00244 void doDragSizing(const Point& local_mouse);
00245
00246
00257 void doDragMoving(const Point& local_mouse);
00258
00259
00264 void initDragMoving(void);
00265
00266
00271 void initSizingHoverState(void);
00272
00273
00278 void initSegmentHoverState(void);
00279
00280
00293 bool isDragMoveThresholdExceeded(const Point& local_mouse);
00294
00295
00306 virtual bool testClassName_impl(const String& class_name) const
00307 {
00308 if (class_name==(const utf8*)"ListHeaderSegment") return true;
00309 return Window::testClassName_impl(class_name);
00310 }
00311
00312
00313
00314
00315
00320 virtual void onSegmentClicked(WindowEventArgs& e);
00321
00322
00327 virtual void onSplitterDoubleClicked(WindowEventArgs& e);
00328
00329
00334 virtual void onSizingSettingChanged(WindowEventArgs& e);
00335
00336
00341 virtual void onSortDirectionChanged(WindowEventArgs& e);
00342
00343
00348 virtual void onMovableSettingChanged(WindowEventArgs& e);
00349
00350
00355 virtual void onSegmentDragStart(WindowEventArgs& e);
00356
00357
00362 virtual void onSegmentDragStop(WindowEventArgs& e);
00363
00364
00369 virtual void onSegmentDragPositionChanged(WindowEventArgs& e);
00370
00371
00376 virtual void onSegmentSized(WindowEventArgs& e);
00377
00378
00383 virtual void onClickableSettingChanged(WindowEventArgs& e);
00384
00385
00386
00387
00388
00389 virtual void onMouseMove(MouseEventArgs& e);
00390 virtual void onMouseButtonDown(MouseEventArgs& e);
00391 virtual void onMouseButtonUp(MouseEventArgs& e);
00392 virtual void onMouseDoubleClicked(MouseEventArgs& e);
00393 virtual void onMouseLeaves(MouseEventArgs& e);
00394 virtual void onCaptureLost(WindowEventArgs& e);
00395
00396
00397
00398
00399
00400 const Image* d_sizingMouseCursor;
00401 const Image* d_movingMouseCursor;
00402
00403 float d_splitterSize;
00404 bool d_splitterHover;
00405
00406 bool d_dragSizing;
00407 Point d_dragPoint;
00408
00409 SortDirection d_sortDir;
00410
00411 bool d_segmentHover;
00412 bool d_segmentPushed;
00413 bool d_sizingEnabled;
00414 bool d_movingEnabled;
00415 bool d_dragMoving;
00416 Point d_dragPosition;
00417 bool d_allowClicks;
00418
00419
00420 private:
00421
00422
00423
00424 static ListHeaderSegmentProperties::Clickable d_clickableProperty;
00425 static ListHeaderSegmentProperties::Dragable d_dragableProperty;
00426 static ListHeaderSegmentProperties::Sizable d_sizableProperty;
00427 static ListHeaderSegmentProperties::SortDirection d_sortDirectionProperty;
00428
00429
00430
00431
00432
00433 void addHeaderSegmentProperties(void);
00434 };
00435
00436 }
00437
00438 #if defined(_MSC_VER)
00439 # pragma warning(pop)
00440 #endif
00441
00442 #endif // end of guard _CEGUIListHeaderSegment_h_