CCKeypadDispatcher(键盘消息分发器 该类主要负责键盘消息的分发,分发到已经注册过的层、精灵等对象(注册了CCKeypadDelegate委托)。)

来源:互联网 发布:apns pusher for mac 编辑:程序博客网 时间:2024/05/08 16:04


#ifndef __CCKEYPAD_DISPATCHER_H__

#define __CCKEYPAD_DISPATCHER_H__


#include "CCKeypadDelegate.h"

#include "cocoa/CCArray.h"


NS_CC_BEGIN


typedef enum {

    // the back key clicked msg

    kTypeBackClicked = 1,

    kTypeMenuClicked,

} ccKeypadMSGType;


struct _ccCArray;

/**

@class CCKeypadDispatcher

@brief Dispatch the keypad message from the phone//分发手机的键盘消息

*/

class CC_DLLCCKeypadDispatcher : public CCObject

{

public:

    CCKeypadDispatcher();

    ~CCKeypadDispatcher();


    voidaddDelegate(CCKeypadDelegate* pDelegate);//增加回调键盘消息方法


    voidremoveDelegate(CCKeypadDelegate* pDelegate); //移除回调键盘消息方法


    voidforceAddDelegate(CCKeypadDelegate* pDelegate);//force 强迫


    voidforceRemoveDelegate(CCKeypadDelegate* pDelegate);


    booldispatchKeypadMSG(ccKeypadMSGType nMsgType);//分发键盘消息 参数是键盘消息类型 包括kTypeBackClicked  kTypeMenuClicked

{

    CCKeypadHandler*  pHandler = NULL;

    CCKeypadDelegate* pDelegate = NULL;


    m_bLocked = true;


    if (m_pDelegates->count() > 0)

    {

        CCObject* pObj = NULL;

        CCARRAY_FOREACH(m_pDelegates, pObj)

        {

            CC_BREAK_IF(!pObj);


            pHandler = (CCKeypadHandler*)pObj;

            pDelegate = pHandler->getDelegate();


            switch (nMsgType)

            {

            case kTypeBackClicked:

                pDelegate->keyBackClicked();

                break;

            case kTypeMenuClicked:

                pDelegate->keyMenuClicked();

                break;

            default:

                break;

            }

        }

    }


    m_bLocked = false;

    if (m_bToRemove)

    {

        m_bToRemove = false;

        for (unsigned int i = 0; i < m_pHandlersToRemove->num; ++i)

        {

            forceRemoveDelegate((CCKeypadDelegate*)m_pHandlersToRemove->arr[i]);

        }

        ccCArrayRemoveAllValues(m_pHandlersToRemove);

    }


    if (m_bToAdd)

    {

        m_bToAdd = false;

        for (unsigned int i = 0; i < m_pHandlersToAdd->num; ++i)

        {

            forceAddDelegate((CCKeypadDelegate*)m_pHandlersToAdd->arr[i]);

        }

        ccCArrayRemoveAllValues(m_pHandlersToAdd);

    }


    return true;

}

protected:


    CCArray* m_pDelegates; //消息回调委托 数组

    bool m_bLocked;

    bool m_bToAdd;

    bool m_bToRemove;


    struct _ccCArray *m_pHandlersToAdd;

    struct _ccCArray *m_pHandlersToRemove;

};


NS_CC_END


#endif //__CCKEYPAD_DISPATCHER_H__


0 0
原创粉丝点击