117 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
// NoesisGUI - http://www.noesisengine.com
 | 
						|
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
 | 
						|
#ifndef __GUI_COMMANDDATA_H__
 | 
						|
#define __GUI_COMMANDDATA_H__
 | 
						|
 | 
						|
 | 
						|
#include <NsCore/Noesis.h>
 | 
						|
#include <NsCore/HashMap.h>
 | 
						|
#include <NsCore/TypeMetaData.h>
 | 
						|
#include <NsCore/ReflectionDeclare.h>
 | 
						|
#include <NsCore/Ptr.h>
 | 
						|
#include <NsGui/CoreApi.h>
 | 
						|
 | 
						|
 | 
						|
namespace Noesis
 | 
						|
{
 | 
						|
 | 
						|
NS_INTERFACE ICommand;
 | 
						|
class RoutedCommand;
 | 
						|
class CommandBinding;
 | 
						|
class InputBinding;
 | 
						|
class InputGesture;
 | 
						|
template<class T> class UICollection;
 | 
						|
template<class T> class Delegate;
 | 
						|
struct CanExecuteRoutedEventArgs;
 | 
						|
struct ExecutedRoutedEventArgs;
 | 
						|
typedef UICollection<CommandBinding> CommandBindingCollection;
 | 
						|
typedef UICollection<InputBinding> InputBindingCollection;
 | 
						|
typedef Delegate<void (BaseComponent*, const CanExecuteRoutedEventArgs&)> CanExecuteRoutedEventHandler;
 | 
						|
typedef Delegate<void (BaseComponent*, const ExecutedRoutedEventArgs&)> ExecutedRoutedEventHandler;
 | 
						|
 | 
						|
NS_WARNING_PUSH
 | 
						|
NS_MSVC_WARNING_DISABLE(4251 4275)
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
/// Used to register UI commands.
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
class NS_GUI_CORE_API CommandData: public TypeMetaData
 | 
						|
{
 | 
						|
public:
 | 
						|
    CommandData(const TypeClass* ownerType);
 | 
						|
    ~CommandData();
 | 
						|
 | 
						|
    /// Registers a routed event for a type
 | 
						|
    template<class T> const T* RegisterCommand(const Ptr<T>& command);
 | 
						|
 | 
						|
    /// Finds a command for the owner type given its name
 | 
						|
    const ICommand* FindCommand(Symbol name) const;
 | 
						|
 | 
						|
    /// Registers handlers for the specified command
 | 
						|
    //@{
 | 
						|
    void RegisterCommandHandler(const ICommand* command,
 | 
						|
        const ExecutedRoutedEventHandler& executedHandler);
 | 
						|
    void RegisterCommandHandler(const ICommand* command,
 | 
						|
        const ExecutedRoutedEventHandler& executedHandler, const Ptr<InputGesture>& inputGesture);
 | 
						|
    void RegisterCommandHandler(const ICommand* command,
 | 
						|
        const ExecutedRoutedEventHandler& executedHandler, const Ptr<InputGesture>& inputGesture1,
 | 
						|
        const Ptr<InputGesture>& inputGesture2);
 | 
						|
    void RegisterCommandHandler(const ICommand* command,
 | 
						|
        const CanExecuteRoutedEventHandler& canExecuteHandler,
 | 
						|
        const ExecutedRoutedEventHandler& executedHandler);
 | 
						|
    void RegisterCommandHandler(const ICommand* command,
 | 
						|
        const CanExecuteRoutedEventHandler& canExecuteHandler,
 | 
						|
        const ExecutedRoutedEventHandler& executedHandler, const Ptr<InputGesture>& inputGesture);
 | 
						|
    void RegisterCommandHandler(const ICommand* command,
 | 
						|
        const CanExecuteRoutedEventHandler& canExecuteHandler,
 | 
						|
        const ExecutedRoutedEventHandler& executedHandler, const Ptr<InputGesture>& inputGesture1,
 | 
						|
        const Ptr<InputGesture>& inputGesture2);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets command bindings associated with the owner type
 | 
						|
    /// Returned collection can be null
 | 
						|
    const CommandBindingCollection* GetCommandBindings() const;
 | 
						|
 | 
						|
    /// Gets input bindings associated with the owner type
 | 
						|
    /// Returned collection can be null
 | 
						|
    const InputBindingCollection* GetInputBindings() const;
 | 
						|
 | 
						|
private:
 | 
						|
    static void DefaultCanExecute(BaseComponent* sender,
 | 
						|
        const CanExecuteRoutedEventArgs& args);
 | 
						|
 | 
						|
    void InsertCommand(const RoutedCommand* command);
 | 
						|
 | 
						|
    void RegisterCommandBinding(const Ptr<CommandBinding>& binding);
 | 
						|
    void RegisterInputBinding(const Ptr<InputBinding>& binding);
 | 
						|
 | 
						|
    void EnsureCommandBindings();
 | 
						|
    void EnsureInputBindings();
 | 
						|
 | 
						|
private:
 | 
						|
    const TypeClass* mOwnerType;
 | 
						|
 | 
						|
    struct Adapter;
 | 
						|
 | 
						|
    typedef HashMap<Symbol, Ptr<const RoutedCommand>> CommandMap;
 | 
						|
    CommandMap mCommands;
 | 
						|
 | 
						|
    Ptr<CommandBindingCollection> mCommandBindings;
 | 
						|
    Ptr<InputBindingCollection> mInputBindings;
 | 
						|
 | 
						|
    NS_DECLARE_REFLECTION(CommandData, TypeMetaData)
 | 
						|
};
 | 
						|
 | 
						|
NS_WARNING_POP
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
#include <NsGui/CommandData.inl>
 | 
						|
 | 
						|
 | 
						|
#endif
 |