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
|