zoukankan      html  css  js  c++  java
  • CCControlExtension/CCControl


    #ifndef __CCCONTROL_H__

    #define __CCCONTROL_H__


    #include "CCInvocation.h"

    #include "CCControlUtils.h"

    #include "cocos2d.h"


    NS_CC_EXT_BEGIN


    class CCInvocation;


    /**

     * @addtogroup GUI

     * @{

     * @addtogroup control_extension

     * @{

     */


    /** Number of kinds of control event. */

    #define kControlEventTotalNumber 9


    /** Kinds of possible events for the control objects. */

    enum 

    {

        CCControlEventTouchDown           = 1 << 0,    // A touch-down event in the control.

        CCControlEventTouchDragInside     = 1 << 1,    // An event where a finger is dragged inside the bounds of the control.

        CCControlEventTouchDragOutside    = 1 << 2,    // An event where a finger is dragged just outside the bounds of the control. 

        CCControlEventTouchDragEnter      = 1 << 3,    // An event where a finger is dragged into the bounds of the control.

        CCControlEventTouchDragExit       = 1 << 4,    // An event where a finger is dragged from within a control to outside its bounds.

        CCControlEventTouchUpInside       = 1 << 5,    // A touch-up event in the control where the finger is inside the bounds of the control. 

        CCControlEventTouchUpOutside      = 1 << 6,    // A touch-up event in the control where the finger is outside the bounds of the control.

        CCControlEventTouchCancel         = 1 << 7,    // A system event canceling the current touches for the control.

        CCControlEventValueChanged        = 1 << 8      // A touch dragging or otherwise manipulating a control, causing it to emit a series of different values.

    };

    typedef unsigned int CCControlEvent;


    /** The possible state for a control.  */

    enum 

    {

        CCControlStateNormal       = 1 << 0, // The normal, or default state of a control°™that is, enabled but neither selected nor highlighted.

        CCControlStateHighlighted  = 1 << 1, // Highlighted state of a control. A control enters this state when a touch down, drag inside or drag enter is performed. You can retrieve and set this value through the highlighted property.

        CCControlStateDisabled     = 1 << 2, // Disabled state of a control. This state indicates that the control is currently disabled. You can retrieve and set this value through the enabled property.

        CCControlStateSelected     = 1 << 3  // Selected state of a control. This state indicates that the control is currently selected. You can retrieve and set this value through the selected property.

    };

    typedef unsigned int CCControlState;


    /*

     * @class

     * CCControl is inspired by the UIControl API class from the UIKit library of 

     * CocoaTouch. It provides a base class for control CCSprites such as CCButton 

     * or CCSlider that convey user intent to the application.

     *

     * The goal of CCControl is to define an interface and base implementation for 

     * preparing action messages and initially dispatching them to their targets when

     * certain events occur.

     *

     * To use the CCControl you have to subclass it.

     */

    class CCControl : public CCLayerRGBA

    {


        //CCRGBAProtocol

        bool m_bIsOpacityModifyRGB;

        

        /** The current control state constant. */

        CC_SYNTHESIZE_READONLY(CCControlState, m_eState, State);


        /** True if all of the controls parents are visible */

    protected:

        bool m_hasVisibleParents;


    public:

        /** Tells whether the control is enabled. */

        virtual void setEnabled(bool bEnabled);

        virtual bool isEnabled();

        /** A Boolean value that determines the control selected state. */

        virtual void setSelected(bool bSelected);

        virtual bool isSelected();

        /** A Boolean value that determines whether the control is highlighted. */

        virtual void setHighlighted(bool bHighlighted);

        virtual bool isHighlighted();

        bool hasVisibleParents();

        /**

         * Updates the control layout using its current internal state.

         */

        virtual void needsLayout();

        

        virtual bool isOpacityModifyRGB();

        virtual void setOpacityModifyRGB(bool bOpacityModifyRGB);


    protected:

        bool m_bEnabled;

        bool m_bSelected;

        bool m_bHighlighted;


        /** 

         * Table of connection between the CCControlEvents and their associated

         * target-actions pairs. For each CCButtonEvents a list of NSInvocation

         * (which contains the target-action pair) is linked.

         */

        CCDictionary* m_pDispatchTable;


    public:

        CCControl();

        virtual bool init(void);

        virtual ~CCControl();



        virtual void onEnter();

        virtual void onExit();

        virtual void registerWithTouchDispatcher();


        /**

     * Sends action messages for the given control events.

     *

     * @param controlEvents A bitmask whose set flags specify the control events for

     * which action messages are sent. See "CCControlEvent" for bitmask constants.

     */

        virtual void sendActionsForControlEvents(CCControlEvent controlEvents);


        /**

        * Adds a target and action for a particular event (or events) to an internal

        * dispatch table.

        * The action message may optionnaly include the sender and the event as 

        * parameters, in that order.

        * When you call this method, target is not retained.

        *

        * @param target The target object that is, the object to which the action 

        * message is sent. It cannot be nil. The target is not retained.

        * @param action A selector identifying an action message. It cannot be NULL.

        * @param controlEvents A bitmask specifying the control events for which the 

        * action message is sent. See "CCControlEvent" for bitmask constants.

        */

        virtual void addTargetWithActionForControlEvents(CCObject* target, SEL_CCControlHandler action, CCControlEvent controlEvents);


        /**

        * Removes a target and action for a particular event (or events) from an 

        * internal dispatch table.

        *

        * @param target The target objectóthat is, the object to which the action 

        * message is sent. Pass nil to remove all targets paired with action and the

        * specified control events.

        * @param action A selector identifying an action message. Pass NULL to remove

        * all action messages paired with target.

        * @param controlEvents A bitmask specifying the control events associated with

        * target and action. See "CCControlEvent" for bitmask constants.

        */

        virtual void removeTargetWithActionForControlEvents(CCObject* target, SEL_CCControlHandler action, CCControlEvent controlEvents);


        /**

        * Returns a point corresponding to the touh location converted into the 

        * control space coordinates.

        * @param touch A CCTouch object that represents a touch.

        */

        virtual CCPoint getTouchLocation(CCTouch* touch);


        

        /**

        * Returns a boolean value that indicates whether a touch is inside the bounds

        * of the receiver. The given touch must be relative to the world.

        *

        * @param touch A CCTouch object that represents a touch.

        *

        * @return YES whether a touch is inside the receiver°Øs rect.

        */

        virtual bool isTouchInside(CCTouch * touch);



    protected:

        /**

         * Returns an CCInvocation object able to construct messages using a given 

         * target-action pair. (The invocation may optionnaly include the sender and

         * the event as parameters, in that order)

         *

         * @param target The target object.

         * @param action A selector identifying an action message.

         * @param controlEvent A control events for which the action message is sent.

         * See "CCControlEvent" for constants.

         *

         * @return an CCInvocation object able to construct messages using a given 

         * target-action pair.

         */

        CCInvocation* invocationWithTargetAndActionForControlEvent(CCObject* target, SEL_CCControlHandler action, CCControlEvent controlEvent);




        /**

        * Returns the CCInvocation list for the given control event. If the list does

        * not exist, it'll create an empty array before returning it.

        *

        * @param controlEvent A control events for which the action message is sent.

        * See "CCControlEvent" for constants.

        *

        * @return the CCInvocation list for the given control event.

        */

        //<CCInvocation*>

        CCArray* dispatchListforControlEvent(CCControlEvent controlEvent);

        /**

         * Adds a target and action for a particular event to an internal dispatch 

         * table.

         * The action message may optionnaly include the sender and the event as 

         * parameters, in that order.

         * When you call this method, target is not retained.

         *

         * @param target The target object°™that is, the object to which the action 

         * message is sent. It cannot be nil. The target is not retained.

         * @param action A selector identifying an action message. It cannot be NULL.

         * @param controlEvent A control event for which the action message is sent.

         * See "CCControlEvent" for constants.

         */

        void addTargetWithActionForControlEvent(CCObject* target, SEL_CCControlHandler action, CCControlEvent controlEvent);

        

        /**

         * Removes a target and action for a particular event from an internal dispatch

         * table.

         *

         * @param target The target object°™that is, the object to which the action 

         * message is sent. Pass nil to remove all targets paired with action and the

         * specified control events.

         * @param action A selector identifying an action message. Pass NULL to remove

         * all action messages paired with target.

         * @param controlEvent A control event for which the action message is sent.

         * See "CCControlEvent" for constants.

         */

        void removeTargetWithActionForControlEvent(CCObject* target, SEL_CCControlHandler action, CCControlEvent controlEvent);


        static CCControl* create();

    public:

        void addHandleOfControlEvent(int nFunID,CCControlEvent controlEvent);

        void removeHandleOfControlEvent(CCControlEvent controlEvent);

    private:

        int  getHandleOfControlEvent(CCControlEvent controlEvent);

    private:

        std::map<int,int> m_mapHandleOfControlEvent;

    };


    // end of GUI group

    /// @}

    /// @}


    NS_CC_EXT_END


    #endif

  • 相关阅读:
    MATLAB入门学习(一)
    4.21小练
    poj2312 Battle City 【暴力 或 优先队列+BFS 或 BFS】
    Mutual Training for Wannafly Union #2
    4.7-4.9补题+水题+高维前缀和
    CodeForces 91A Newspaper Headline
    codeforces 792C. Divide by Three
    3.26-3.31【cf补题+其他】
    poj3259 Wormholes【Bellman-Ford或 SPFA判断是否有负环 】
    二叉树基础练习
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10551407.html
Copyright © 2011-2022 走看看