axmol/cocos2dx/extensions/CCListView/CCListView.h

188 lines
5.4 KiB
C++
Raw Blame History

#ifndef __CC_LIST_VIEW_H__
#define __CC_LIST_VIEW_H__
#include <time.h>
#include "platform.h"
#include <vector>
#include <string>
//#include "../lua/cocos2dx_support/CCLuaEngine.h"
#include "CCListViewCell.h"
NS_CC_EXT_BEGIN
class CC_DLL CCRange
{
public:
CCRange()
{
this->location = 0;
this->length = 0;
}
CCRange(unsigned int loc, unsigned int len)
{
this->location = loc;
this->length = len;
}
static unsigned int CCMaxRange(CCRange range)
{
return (range.location + range.length-1);
}
static bool CCLocationInRange(unsigned int loc, CCRange range)
{
return (loc - range.location <= range.length);
}
static bool CCEqualRanges(CCRange range1, CCRange range2)
{
return (range1.location == range2.location && range1.length == range2.length);
}
unsigned int length;
unsigned int location;
};
#define CCRangeMake(__min__, __max__) CCRange((__min__), (__max__))
typedef enum
{
CCListViewSlideDirNone,
CCListViewSlideDirUp,
CCListViewSlideDirDown,
CCListViewSlideDirLeft,
CCListViewSlideDirRight,
} CCListViewSlideDir;
typedef enum
{
CCListViewStateWatting,
CCListViewStateTrackingTouch,
CCListViewStateEaseOut,
CCListViewStateFix,
CCListViewStateScroll,
} CCListViewState;
typedef enum
{
CCListViewModeHorizontal,
CCListViewModeVertical,
} CCListViewMode;
typedef struct _CCListViewProtrolData
{
unsigned int nNumberOfRows;
unsigned int nRow;
CCListViewCell *cell;
} CCListViewProtrolData;
class CC_DLL CCListViewDelegate
{
public :
CCListViewDelegate(){};
virtual ~CCListViewDelegate(){};
virtual void CCListView_numberOfCells(CCListView *listView, CCListViewProtrolData *data)=0;
virtual void CCListView_cellForRow(CCListView *listView, CCListViewProtrolData *data)=0;
virtual void CCListView_didClickCellAtRow(CCListView *listView, CCListViewProtrolData *data)=0;
virtual void CCListView_didScrollToRow(CCListView *listView, CCListViewProtrolData *data)=0;
};
class CC_DLL CCListView : public CCLayerColor
{
public:
virtual ~CCListView(void);
CCListView(void);
static CCListView* viewWithMode(CCListViewMode mode);
bool initWithMode(CCListViewMode mode);
void setDelegateName(const char* pszName);
void selectCellAtRow(unsigned int nRow);
void unselectCellAtRow(unsigned int nRow);
void scrollCellToFront(unsigned int nRow, bool bAnimated);
void scrollCellToBack(unsigned int nRow, bool bAnimated);
void reload(void);
void insertCellsAtRow(unsigned int nRow, unsigned int nCount);
void deleteCellsAtRow(unsigned int nRow, unsigned int nCount);
CCListViewCell *cellAtRow(unsigned int nRow);
CCListViewSlideDir getSlideDir(CCPoint ptTouchBegan, CCPoint ptTouchEnd);
inline CCListViewSlideDir getSlideDir(void) { return m_nSlideDir; }
inline CCListViewCellSeparatorStyle getSeparatorStyle(void) { return m_nSeparatorStyle; }
inline void setSeparatorStyle(CCListViewCellSeparatorStyle style) { m_nSeparatorStyle = style; }
inline CCListViewMode getMode(void) { return m_nMode; }
inline void setListViewParent(CCListView *pParent) { m_pListViewParent = pParent; }
inline CCListView *getListViewParent(void) { return m_pListViewParent; }
inline void setIsEnabled(bool bEnabled) { m_bIsEnabled = bEnabled; }
inline bool getIsEnabled(void) { return m_bIsEnabled; }
// un
void setDelegate(const CCListViewDelegate *pDelegate) { m_pDelegate = const_cast<CCListViewDelegate*>(pDelegate);}
void finishFix(void);
void finishScroll(void);
void finishEaseOut(void);
public:
virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event);
virtual void ccTouchEnded(CCTouch* touch, CCEvent* event);
virtual void ccTouchCancelled(CCTouch *touch, CCEvent* event);
virtual void ccTouchMoved(CCTouch* touch, CCEvent* event);
virtual void onEnter(void);
virtual void onExit(void);
virtual void registerWithTouchDispatcher(void);
virtual void visit(void);
protected:
void displayVisibleRows(void);
CCListViewCell* appendRowToBack(unsigned int nRow);
CCListViewCell* appendRowToFront(unsigned int nRow);
void fixFirstRow(void);
void fixLastRow(void);
void easeOutWithDistance(float dis);
void clearUnvisibleRows(void);
int rowForTouch(cocos2d::CCTouch *touch);
bool isTouchInside(CCTouch *touch);
bool isFullFill(void);
void stopActionImmediately(void);
unsigned int triggerNumberOfCells(void);
CCListViewCell *triggerCellForRow(unsigned int nRow);
void triggerDidClickCellAtRow(unsigned int nRow);
void triggerDidScrollToRow(unsigned int nRow);
bool isMenuTouch(CCTouch *touch, CCNode *parent);
private:
CCListViewState m_nState;
CCListViewMode m_nMode;
CCListViewSlideDir m_nSlideDir;
CCListViewCellSeparatorStyle m_nSeparatorStyle;
unsigned int m_nNumberOfRows;
float m_fActionDuration;
clock_t m_timeTouchBegan;
CCRange m_drawedRows; //<2F><><EFBFBD><EFBFBD><EFBFBD>ѻ<EFBFBD><D1BB>Ƶ<EFBFBD>cell
CCRange m_visibleRows; //<2F><><EFBFBD>пɼ<D0BF><C9BC><EFBFBD>cell
CCPoint m_ptTouchBegan;
CCPoint m_ptTouchEnd;
CCPoint m_ptPanelOffset;
CCPoint m_ptDestination;
std::string m_strDeletegate;
CCListViewDelegate* m_pDelegate;
CCLayer* m_layerPanel;
CCListView* m_pListViewParent;
int m_nSelectedRow;
int m_nCurrentRow;
bool m_bIsEnabled;
bool m_bIsOnTouch;
};
NS_CC_EXT_END
#endif // __CC_LIST_VIEW_H__