96 lines
3.0 KiB
C++
96 lines
3.0 KiB
C++
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// NoesisGUI - http://www.noesisengine.com
|
|
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#ifndef __GUI_MOUSEBINDING_H__
|
|
#define __GUI_MOUSEBINDING_H__
|
|
|
|
|
|
#include <NsCore/Noesis.h>
|
|
#include <NsGui/CoreApi.h>
|
|
#include <NsGui/InputBinding.h>
|
|
|
|
|
|
namespace Noesis
|
|
{
|
|
|
|
class MouseGesture;
|
|
enum MouseAction: int32_t;
|
|
enum ModifierKeys: int32_t;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/// Binds a MouseGesture to a Command.
|
|
///
|
|
/// When defining a MouseBinding in XAML, there are two ways to specify the MouseGesture. The first
|
|
/// way to establish a MouseBinding in XAML is to define the Gesture attribute of the MouseBinding
|
|
/// element, which enables a syntax to specify mouse actions and modifiers as a single string; for
|
|
/// example, "CTRL+LeftClick". The second way is to define the MouseAction attribute of the
|
|
/// MouseBinding element. Both ways of setting the MouseGesture are equivalent and modify the same
|
|
/// underlying object, but there will be a conflict if both are used.
|
|
///
|
|
/// .. code-block:: xml
|
|
///
|
|
/// <Grid
|
|
/// xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
|
/// <Grid.InputBindings>
|
|
/// <MouseBinding Gesture="Ctrl+MiddleClick" Command="{Binding MiddleClickCommand}"/>
|
|
/// </Grid.InputBindings>
|
|
/// </Grid>
|
|
///
|
|
/// http://msdn.microsoft.com/en-us/library/system.windows.input.mousebinding.aspx
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
class NS_GUI_CORE_API MouseBinding: public InputBinding
|
|
{
|
|
public:
|
|
MouseBinding();
|
|
MouseBinding(ICommand* command, MouseGesture* gesture);
|
|
MouseBinding(ICommand* command, MouseAction action, ModifierKeys modifiers);
|
|
~MouseBinding();
|
|
|
|
/// Gets or sets the MouseAction of the MouseGesture associated with this MouseBinding
|
|
//@{
|
|
MouseAction GetMouseAction() const;
|
|
void SetMouseAction(MouseAction action);
|
|
//@}
|
|
|
|
/// Gets the modifier keys (one or more Alt, Ctrl, Shift) of the associated MouseGesture
|
|
//@{
|
|
ModifierKeys GetModifiers() const;
|
|
void SetModifiers(ModifierKeys modifiers);
|
|
//@}
|
|
|
|
// Hides Freezable methods for convenience
|
|
//@{
|
|
Ptr<MouseBinding> Clone() const;
|
|
Ptr<MouseBinding> CloneCurrentValue() const;
|
|
//@}
|
|
|
|
public:
|
|
static const DependencyProperty* MouseActionProperty;
|
|
static const DependencyProperty* ModifiersProperty;
|
|
|
|
protected:
|
|
/// From Freezable
|
|
//@{
|
|
Ptr<Freezable> CreateInstanceCore() const override;
|
|
//@}
|
|
|
|
/// From InputBinding
|
|
//@{
|
|
void OnGestureChanged(InputGesture* oldGesture, InputGesture* newGesture) override;
|
|
//@}
|
|
|
|
private:
|
|
void UpdateActionAndModifers(MouseGesture* keyGesture);
|
|
void UpdateGesture(MouseAction action, ModifierKeys modifiers);
|
|
|
|
NS_DECLARE_REFLECTION(MouseBinding, InputBinding)
|
|
};
|
|
|
|
}
|
|
|
|
|
|
#endif
|