text: /* -----------------------------------------------------------------------------------
   *
   *      File            CCEventListenerCustom.h
   *      Ported By       Young-Hwan Mun
   *      Contact         xmsoft77@gmail.com 
   * 
   * -----------------------------------------------------------------------------------
   *   
   *      Copyright (c) 2010-2014 XMSoft
   *      Copyright (c) 2010-2013 cocos2d-x.org
   *
   *         http://www.cocos2d-x.org      
   *
   * -----------------------------------------------------------------------------------
   * 
   *     Permission is hereby granted, free of charge, to any person obtaining a copy
   *     of this software and associated documentation files (the "Software"), to deal
   *     in the Software without restriction, including without limitation the rights
   *     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   *     copies of the Software, and to permit persons to whom the Software is
   *     furnished to do so, subject to the following conditions:
   *
   *     The above copyright notice and this permission notice shall be included in
   *     all copies or substantial portions of the Software.
   *     
   *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   *     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   *     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   *     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   *     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   *     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   *     THE SOFTWARE.
   *
   * --------------------------------------------------------------------------------- */ 
  
  #ifndef __CCEventListenerCustom_h__
  #define __CCEventListenerCustom_h__
  
  #include "CCEventListener.h"
  
  NS_CC_BEGIN
  
  class EventCustom;
  
  /**
   *  Usage:
   *        auto dispatcher = Director::getInstance()->getEventDispatcher();
   *     Adds a listener:
   *
   *        auto callback = [](EventCustom* event){ do_some_thing(); };
   *        auto listener = EventListenerCustom::create(callback);
   *        dispatcher->addEventListenerWithSceneGraphPriority(listener, one_node);
   *
   *     Dispatchs a custom event:
   *
   *        EventCustom event("your_event_type");
   *        dispatcher->dispatchEvent(&event);
   *
   *     Removes a listener
   *
   *        dispatcher->removeEventListener(listener);
   */
  class EventListenerCustom : public EventListener
  {
  	public :
  
  		/**
  		 *	Creates an event listener with type and callback.
  		 *  @param eventType The type of the event.
  		 *  @param callback The callback function when the specified event was emitted.
  		 */
  		static EventListenerCustom*			create ( const std::string& sEventName, std::function<KDvoid(EventCustom*)> pCallback );
      
  		/// Overrides
  		virtual KDbool						checkAvailable ( KDvoid ) override;
  		virtual EventListenerCustom*		clone ( KDvoid ) override;
      
  	protected :
  
  		/** Constructor */
  		EventListenerCustom ( KDvoid );
      
  		/** Initializes event with type and callback function */
  		KDbool		init ( ListenerID eListenerId, std::function<KDvoid(EventCustom*)> pCallback );
      
  		std::function<KDvoid(EventCustom*)>	onCustomEvent;
  };
  
  NS_CC_END
  
  #endif	// __CCEventListenerCustom_h__
  