Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _XNV_SELECTABLE_SLIDER_2D_H_
00010 #define _XNV_SELECTABLE_SLIDER_2D_H_
00011
00012 #include <XnOpenNI.h>
00013 #include "XnVNiteDefs.h"
00014 #include "XnVPointControl.h"
00015 #include "XnVDirection.h"
00016 #include "XnVSlider2D.h"
00017 #include "XnVMultiItemHysteresis2D.h"
00018 #include "XnVSlider1D.h"
00019 #include "XnVMultiItemHysteresis1D.h"
00020
00021 class XnVBorderScrollController2D;
00022 class XnVIntIntSpecificEvent;
00023 class XnVFloatFloatSpecificEvent;
00024 class XnVFloatFloatSpecificEvent;
00025 class XnVItemSelectSpecificEvent;
00026 class XnVDirectionSpecificEvent;
00027
00034 class XNV_NITE_API XnVSelectableSlider2D :
00035 public XnVPointControl
00036 {
00037 public:
00041 typedef void (XN_CALLBACK_TYPE *ItemHoverCB)(XnInt32 nXIndex, XnInt32 nYIndex, void* pUserCxt);
00045 typedef void (XN_CALLBACK_TYPE *ItemSelectCB)(XnInt32 nXIndex, XnInt32 nYIndex, XnVDirection eDir, void* pUserCxt);
00049 typedef void (XN_CALLBACK_TYPE *OffAxisMovementCB)(XnVDirection eDir, void* pUserCxt);
00054 typedef void (XN_CALLBACK_TYPE *ValueChangeCB)(XnFloat fXValue, XnFloat fYValue, void* pUserCxt);
00059 typedef void (XN_CALLBACK_TYPE *ScrollCB)(XnFloat fXValue, XnFloat fYValue, void* pUserCxt);
00060
00072 XnVSelectableSlider2D(XnInt32 nXItems, XnInt32 nYItems,
00073 XnFloat fSliderSizeX = ms_fDefaultSliderSize, XnFloat fSliderSizeY = ms_fDefaultSliderSize,
00074 XnFloat fBorderWidth = 0, const XnChar* strName = "XnVSelectableSlider2D");
00075 virtual ~XnVSelectableSlider2D();
00076
00083 void OnPrimaryPointCreate(const XnVHandPointContext* pContext, const XnPoint3D& ptFocus);
00090 void OnPrimaryPointUpdate(const XnVHandPointContext* pContext);
00096 void OnPrimaryPointDestroy(XnUInt32 nID);
00097
00106 XnCallbackHandle RegisterItemHover(void* cxt, ItemHoverCB CB);
00115 XnCallbackHandle RegisterScroll(void* cxt, ScrollCB CB);
00124 XnCallbackHandle RegisterValueChange(void* cxt, ValueChangeCB CB);
00133 XnCallbackHandle RegisterItemSelect(void* cxt, ItemSelectCB CB);
00142 XnCallbackHandle RegisterOffAxisMovement(void* cxt, OffAxisMovementCB CB);
00143
00149 void UnregisterItemHover(XnCallbackHandle hCB);
00155 void UnregisterScroll(XnCallbackHandle hCB);
00161 void UnregisterValueChange(XnCallbackHandle hCB);
00167 void UnregisterItemSelect(XnCallbackHandle hCB);
00173 void UnregisterOffAxisMovement(XnCallbackHandle hCB);
00174
00175 static const XnFloat ms_fDefaultSliderSize;
00176
00182 void Reposition(const XnPoint3D& ptCenter);
00183 void GetCenter(XnPoint3D& ptCenter) const;
00184
00191 void GetSliderSize(XnFloat& fSliderXSize, XnFloat& fSliderYSize) const;
00198 void SetSliderSize(XnFloat fSliderXSize, XnFloat fSliderYSize);
00199
00205 XnUInt32 GetItemXCount() const;
00211 XnUInt32 GetItemYCount() const;
00218 void SetItemCount(XnUInt32 nItemXCount, XnUInt32 nItemYCount);
00224 void SetItemXCount(XnUInt32 nItemXCount);
00230 void SetItemYCount(XnUInt32 nItemYCount);
00231
00237 void SetValueChangeOnOffAxis(XnBool bReport);
00241 XnBool GetValueChangeOnOffAxis() const;
00242
00248 XnFloat GetBorderWidth() const;
00254 XnStatus SetBorderWidth(XnFloat fWidth);
00261 void SetHysteresisRatio(XnFloat fRatio);
00267 XnFloat GetHysteresisRatio() const;
00268 protected:
00269 void UpdateSlider(XnFloat fXValue, XnFloat fYValue);
00270
00271 void PointDeleted(XnBool bReason);
00272 void PointMoved(const XnPoint3D& pt, XnFloat fTime);
00273
00274
00275 void ItemHover(XnInt32 nXIndex, XnInt32 nYIndex);
00276 void Scroll(XnFloat fXValue, XnFloat fYValue);
00277 void ValueChange(XnFloat fXValue, XnFloat fYValue);
00278 void ItemSelect(XnVDirection eDir);
00279 void OffAxisMovement(XnVDirection eDir);
00280
00281
00282 static void XN_CALLBACK_TYPE Slider_ValueChange(XnFloat fXValue, XnFloat fYValue, void* pContext);
00283 static void XN_CALLBACK_TYPE Slider_OffAxis(XnVDirection eDir, void* cxt);
00284 static void XN_CALLBACK_TYPE Hysteresis_ItemSelected(XnInt32 nXItem, XnInt32 nYItem, void* pContext);
00285 static void XN_CALLBACK_TYPE Scroller2D_Scrolled(XnFloat fXValue, XnFloat fYValue, void *pContext);
00286
00287 static void XN_CALLBACK_TYPE SecondarySlider_OffAxisMovement(XnVDirection eDir, void* cxt);
00288 static void XN_CALLBACK_TYPE SecondarySlider_ValueChange(XnFloat fValue, void* cxt);
00289 static void XN_CALLBACK_TYPE OffAxisHysteresis_ItemSelected(XnInt32 nItem, void* cxt);
00290
00291 static const XnFloat ms_fSecondarySliderSize;
00292 XnBool m_bValueChangeWithoutBorders;
00293
00294 XnBool m_bPositioned;
00295 XnInt32 m_nXItems, m_nYItems;
00296
00297 XnBool m_bValueChangeOnOffAxis;
00298
00299 XnFloat m_fSliderSizeX;
00300 XnFloat m_fSliderSizeY;
00301 XnFloat m_fBorderWidth;
00302 XnVSlider2D* m_pSlider;
00303 XnVMultiItemHysteresis2D* m_pHysteresis;
00304 XnVBorderScrollController2D* m_pScroller;
00305
00306 XnBool m_bInOffAxis;
00307 XnVSlider1D* m_pSecondarySlider;
00308 XnVMultiItemHysteresis1D* m_pOffAxisHysteresis;
00309
00310 XnPoint3D m_ptCenter;
00311
00312 XnInt32 m_nXLastHover, m_nYLastHover;
00313
00314 XnCallbackHandle m_hHysteresisItemSelect;
00315 XnCallbackHandle m_hScrollerScroll;
00316 XnCallbackHandle m_hSliderValueChange;
00317 XnCallbackHandle m_hSliderOffAxis;
00318
00319 XnCallbackHandle m_hOffAxisHysteresisItemSelect;
00320 XnCallbackHandle m_hSecondarySliderValueChange;
00321 XnCallbackHandle m_hSecondarySliderOffAxis;
00322
00323 XnVIntIntSpecificEvent* m_pItemHoverCBs;
00324 XnVFloatFloatSpecificEvent* m_pScrollCBs;
00325 XnVFloatFloatSpecificEvent* m_pValueChangeCBs;
00326 XnVItemSelectSpecificEvent* m_pItemSelectCBs;
00327 XnVDirectionSpecificEvent* m_pOffAxisMovementCBs;
00328 };
00329
00330 #endif // _XNV_SELECTABLE_SLIDER_2D_H_