#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

CCControlExtension/CCControl的更多相关文章

  1. Cocos2d-x-html5之HelloWorld深入分析与调试

    Cocos2d-x-html5之HelloWorld深入分析与调试 另:本章所用Cocos2d-x版本为: Cocos2d-html5-v2.1.1 http://cn.cocos2d-x.org/d ...

  2. GUI之CCControlExtension

    Introduction CCControl is inspired by the UIControl API class from the UIKit library of CocoaTouch. ...

  3. CCControlExtension/CCControlButton

    #ifndef __CCCONTROL_BUTTON_H__ #define __CCCONTROL_BUTTON_H__ #include "CCControl.h" #incl ...

  4. CCControlExtension/CCControlPotentiometer

    #ifndef __CCCONTROLPOTENTIOMETER_H__ #define __CCCONTROLPOTENTIOMETER_H__ #include "CCControl.h ...

  5. cocos2d-x CCControl控件

    感谢点评与关注.欢迎转载与分享.勤奋努力,持之以恒! CCControlSlider 滑动条 void HelloWorld::myInit10() { CCSize size = CCDirecto ...

  6. 第一次看CCControl

    Control中有九种可能的事件,定义在.h文件中,另外还定义四种状态,用来表示控件高亮等. 在初始化控件的时候: bool Control::init() { if (Layer::init()) ...

  7. CocoStudio UI 编辑器的使用

    详细教程:http://www.cocoachina.com/bbs/read.php?tid=161567 Table of Contents 1 游戏中的 UI 1.1 基于 Cocos2d-x ...

  8. cocos2d-x3.2 使用开关控制按钮 ControlSwitch

    ContolSwitch 控件起到了一个开关的作用类似于现实生活中的开关,直接上代码: .h文件 // // SwitchBtnScene.h // LSWGameIOS // // Created ...

  9. cocos2dx中常见的类及类继承关系

    场景:CCScene,继承自CCNode,几乎完全等于CCNode类 CCNode继承自CCObject,CCObject是真正意义上的父类,CCObject又继承自CCCopying类,CCCopy ...

随机推荐

  1. html之内容解析

    首先我们知道了HTML和css用途,那么今天就来看看HTML的一部分功能和用途. 简单的说HTML就是灵活使用标签,标签就相当于一个网页的骨架,有了这个骨架才能使网页更能区域色彩化. 首先来说HTML ...

  2. 0/1背包问题(DP)

    Description 给定 n 个物品和一个背包.物品 i 的重量是 wi ,其价值为 vi ,背包的容量为 C .问:应该如何选择装入背包的物品,使得装入背包中物品的总价值最大? Input 输入 ...

  3. IIS利用X-Forwarded-For获得来访者的真实IP

    https://help.aliyun.com/knowledge_detail/37948.html

  4. win下环境变量的设置

    Windows 和 linux 区别 一.查看所有环境变量的名称和值: Linux下:export Windows下:set 二.根据名称查该环境变量的值: Linux下:echo $环境变量名 比如 ...

  5. python用random产生验证码,以及random的一些其他用法

    产生随机验证码函数 import random def get_code(): code = '' for i in range(5): num = str(random.randrange(10)) ...

  6. 虚树(Bzoj3611: [Heoi2014]大工程)

    题面 传送门 虚树 把跟询问有关的点拿出来建树,为了方便树\(DP\) 在\(LCA\)处要合并答案,那么把这些点的\(LCA\)也拿出来 做法:把点按\(dfs\)序排列,然后求出相邻两个点的\(L ...

  7. String对象的match方法

    RegExp对象的exec方法和String对象的match方法用法十分相似,分两篇博客讲讲其各自的用法和它们之间的异同.上一篇将exec方法的用法,这篇讲解match方法,并比较其异同. 定义与语法 ...

  8. FlatBox-WordPress Responsive Flat Design Theme

    FlatBox A beautifully FlatBox with different colors. You can upload your own logo & favicon, cus ...

  9. 【转载记录】Accessing Device Drivers from C#

    来源:http://www.drdobbs.com/cpp/accessing-device-drivers-from-c/184416423/   Device Drivers are writte ...

  10. GAN背后的数学原理

      模拟上帝之手的对抗博弈——GAN背后的数学原理 简介 深度学习的潜在优势就在于可以利用大规模具有层级结构的模型来表示相关数据所服从的概率密度.从深度学习的浪潮掀起至今,深度学习的最大成功在于判别式 ...