Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _XNV_SELECTABLE_SLIDER_1D_H_
00010 #define _XNV_SELECTABLE_SLIDER_1D_H_
00011
00012 #include "XnVPointControl.h"
00013 #include "XnVMultiItemHysteresis1D.h"
00014 #include "XnVSlider1D.h"
00015
00016 class XnVBorderScrollController1D;
00017
00018 class XnVIntSpecificEvent;
00019 class XnVIntDirectionSpecificEvent;
00020 class XnVFloatSpecificEvent;
00021 class XnVDirectionSpecificEvent;
00022
00029 class XNV_NITE_API XnVSelectableSlider1D :
00030 public XnVPointControl
00031 {
00032 public:
00036 typedef void (XN_CALLBACK_TYPE *ItemHoverCB)(XnInt32 nItemIndex, void* pUserCxt);
00040 typedef void (XN_CALLBACK_TYPE *ItemSelectCB)(XnInt32 nItemIndex, XnVDirection nDirection, void* pUserCxt);
00045 typedef void (XN_CALLBACK_TYPE *ScrollCB)(XnFloat fScrollValue, void* pUserCxt);
00050 typedef void (XN_CALLBACK_TYPE *ValueChangeCB)(XnFloat fValue, void* pUserCxt);
00054 typedef void (XN_CALLBACK_TYPE *OffAxisMovementCB)(XnVDirection dir, void* pUserCxt);
00055
00069 XnVSelectableSlider1D(XnInt32 nCount, XnFloat fBorderWidth = 0, XnVAxis eAxis = AXIS_X,
00070 XnBool bRecenter = TRUE,
00071 XnFloat fHysteresisRatio = XnVMultiItemHysteresis1D::ms_fDefaultHysteresisRatio,
00072 XnFloat fPrimarySliderSize = ms_fDefaultPrimarySliderSize, XnFloat fFirstValue = 0.5,
00073 const XnChar* strName = "XnVSelectableSlider1D");
00074
00075 ~XnVSelectableSlider1D();
00076
00083 void OnPrimaryPointCreate(const XnVHandPointContext* pContext, const XnPoint3D& ptFocus);
00090 void OnPrimaryPointUpdate(const XnVHandPointContext* pContext);
00096 void OnPrimaryPointDestroy(XnUInt32 nID);
00097
00098 static const XnFloat ms_fDefaultPrimarySliderSize;
00099
00108 XnCallbackHandle RegisterItemHover(void* cxt, ItemHoverCB pCB);
00117 XnCallbackHandle RegisterItemSelect(void* cxt, ItemSelectCB pCB);
00126 XnCallbackHandle RegisterScroll(void* cxt, ScrollCB pCB);
00135 XnCallbackHandle RegisterValueChange(void* cxt, ValueChangeCB pCB);
00144 XnCallbackHandle RegisterOffAxisMovement(void* cxt, OffAxisMovementCB pCB);
00145
00151 void UnregisterItemHover(XnCallbackHandle handle);
00157 void UnregisterItemSelect(XnCallbackHandle handle);
00163 void UnregisterScroll(XnCallbackHandle handle);
00169 void UnregisterValueChange(XnCallbackHandle handle);
00175 void UnregisterOffAxisMovement(XnCallbackHandle handle);
00176
00182 void ItemHover(XnInt32 nItemIndex);
00188 void ItemSelect(XnVDirection nDirection);
00194 void Scroll(XnFloat fScrollValue);
00195
00201 void Reposition(const XnPoint3D& ptCenter);
00202 void GetCenter(XnPoint3D& ptCenter) const;
00203
00209 XnUInt32 GetItemCount() const;
00215 void SetItemCount(XnUInt32 nItems);
00216
00222 XnFloat GetBorderWidth() const;
00228 XnStatus SetBorderWidth(XnFloat fWidth);
00229
00235 XnFloat GetSliderSize() const;
00241 void SetSliderSize(XnFloat fSliderSize);
00242
00248 void SetValueChangeOnOffAxis(XnBool bReport);
00252 XnBool GetValueChangeOnOffAxis() const;
00253
00260 void SetHysteresisRatio(XnFloat fRatio);
00266 XnFloat GetHysteresisRatio() const;
00267 protected:
00268 XnFloat GetFirstValue() const;
00269
00270 XnFloat GetLeftScrollRegionEnd() const;
00271 XnFloat GetRightScrollRegionEnd() const;
00272
00273 void PointCreated(const XnPoint3D& ptPos);
00274 void PointDeleted(XnBool bReason);
00275 void PointMoved(const XnPoint3D& ptPos, XnFloat fTime);
00276
00277 void SetFirstValue(XnFloat fValue);
00278
00279 void InternalCreateSlider(XnBool bPrimaryAxis, XnVAxis eAxis, const XnPoint3D& ptInitialPoint, XnFloat fInitialValue);
00280
00281
00282 void ValueChange(XnFloat fValue);
00283 void OffAxisMovement(XnVDirection dir);
00284
00285 static void XN_CALLBACK_TYPE PrimarySlider_OffAxisMovement(XnVDirection eDir, void* pContext);
00286 static void XN_CALLBACK_TYPE PrimarySlider_ValueChange(XnFloat fValue, void* pContext);
00287 static void XN_CALLBACK_TYPE SecondarySlider_OffAxisMovement(XnVDirection eDir, void* pContext);
00288 static void XN_CALLBACK_TYPE SecondarySlider_ValueChange(XnFloat fValue, void* pContext);
00289 static void XN_CALLBACK_TYPE Hysteresis_ItemSelected(XnInt32 nItem, void* pContext);
00290 static void XN_CALLBACK_TYPE OffAxisHysteresis_ItemSelected(XnInt32 nItem, void* pContext);
00291 static void XN_CALLBACK_TYPE Scroller_Scrolled(XnFloat fScrollValue, void* pContext);
00292
00293 void PrimarySlider_OffAxisMovement(XnVDirection eDir);
00294 void SecondarySlider_OffAxisMovement(XnVDirection eDir);
00295 void UpdatePrimarySlider(XnFloat fVal);
00296 void UpdateSecondarySlider(XnFloat fVal);
00297 void OffAxisHysteresis_ItemSelected(XnInt32 nItem);
00298
00299 static const XnFloat ms_fSecondarySliderSize;
00300
00301 XnVMultiItemHysteresis1D* m_pHysteresis;
00302 XnVMultiItemHysteresis1D* m_pOffAxisHysteresis;
00303 XnVBorderScrollController1D* m_pScroller;
00304
00305 XnBool m_bPositioned;
00306 XnBool m_bRecenter;
00307
00308 XnBool m_bValueChangeOnOffAxis;
00309
00310 XnVSlider1D* m_pSlider;
00311 XnVSlider1D* m_pPrimarySlider;
00312 XnVSlider1D* m_pSecondarySlider;
00313
00314
00315 XnUInt32 m_nOffAxisHandle;
00316 XnUInt32 m_nValueChangeHandle;
00317
00318 XnFloat m_fPrimarySliderSize;
00319 XnFloat m_fPrimarySliderValueAtChange;
00320
00321 XnFloat m_fFirstValue;
00322 XnBool m_bFirstPointCreated;
00323
00324 XnVAxis m_ePrimaryAxisDirection;
00325 XnUInt32 m_nItemCount;
00326
00327 XnInt32 m_nLastHover;
00328
00329 XnPoint3D m_ptCenter;
00330
00331 XnCallbackHandle m_hPrimaryHysteresisItemSelect;
00332 XnCallbackHandle m_hSecondaryHysteresisItemSelect;
00333 XnCallbackHandle m_hScrollerScroll;
00334
00335 XnCallbackHandle m_hPrimarySliderOffAxis;
00336 XnCallbackHandle m_hPrimarySliderValueChange;
00337 XnCallbackHandle m_hSecondarySliderOffAxis;
00338 XnCallbackHandle m_hSecondarySliderValueChange;
00339
00340 XnVIntSpecificEvent* m_pItemHoverCBs;
00341 XnVIntDirectionSpecificEvent* m_pItemSelectCBs;
00342 XnVFloatSpecificEvent* m_pScrollCBs;
00343 XnVFloatSpecificEvent* m_pValueChangeCBs;
00344 XnVDirectionSpecificEvent* m_pOffAxisMovementCBs;
00345 };
00346
00347 #endif // _XNV_SELECTABLE_SLIDER_1D_H_