#ifndef __XSROLL_H__ #define __XSROLL_H__ #include "CocoHead.h" #include "XWindow.h" class ENGINE_API CXSroll : public CXWindow { public: enum XSrollType { _SrollDirectionVertical = 0, //垂直 _SrollDirectionHorizontal = 1, //水平 _SrollVerticalTable = 2, //垂直选项(Table类型) _SrollHorizontalTable = 3, //水平选项(Table类型) _SrollDirectionBoth = 4, }; public: CXSroll(); virtual ~CXSroll(); static CXSroll* create(int nId, CCPoint tPos, CCRect rect, const char* psPic = NULL, CXWindow* pParentWnd = NULL); virtual bool init( int nId, CCPoint tPos, CCRect rect, const char* psPic = NULL, CXWindow* pParentWnd = NULL ); virtual UI_TYPE getUIType(); void setSrollType(CXSroll::XSrollType eSrollType); CXSroll::XSrollType getSrollType(); void addItem(CXWindow* pWnd); void addItem(CXWindow* pWnd, int nZOrder); void setBounds(float fBounds); float getBounds(); CXWindow* getItemChildById(int nItemId, int nChildId); deque<CXWindow*>* getItemDequeById(int nItemId); map<CXWindow*, deque<CXWindow*> >& getMapItem(); void setTouchDistribute(bool bDistribute); void setItemEnabled(unsigned int wIndex,unsigned int wCount); void setDisableDrag(bool bDisable); protected: virtual void visit(); virtual bool onMouseDown(CCTouch *pTouch, CCEvent *pEvent); virtual void onMouseUp(CCTouch *pTouch, CCEvent *pEvent); virtual void onMouseMove(CCTouch *pTouch, CCEvent *pEvent); void setItemPos(CXWindow* pWnd); void deaccelerateScrolling(float dt); void clippingToBounds(float dt); private: CCNode* m_pContainer; map<CXWindow*, deque<CXWindow*> > m_mapItem; //集装箱字典 deque<CXWindow*> m_dequeItem; vector<CXWindow*> m_vecItem;//防止m_mapItem无序 XSrollType m_eSrollType; float m_fItemPosLenght; //总长度 bool m_bSelected; CCPoint m_tUnitMoveDist; CCPoint m_tOriginalPos; CCPoint m_tEndPos; CCPoint m_tContainerDownPos; CCPoint m_tContainerUpPos; CCPoint m_tContainerDragDist; unsigned int m_nTableFocusIndex; float m_fBounds; int m_nTableDragDistFold; // CXWindow* m_pFocusWnd; bool m_bFocusWndClick; bool m_bDistributeTouch; bool m_bDisableDrag; }; #endif//__XSROLL_H__