add scaffolding for EventFilters (to be implemented in Engine-specific code)
This commit is contained in:
parent
d58213bf78
commit
75c2dcca65
@ -63,6 +63,8 @@ namespace MBS.Framework
|
||||
/// </value>
|
||||
public static Application Instance { get; set; } = null;
|
||||
|
||||
public EventFilter.EventFilterCollection EventFilters { get; } = new EventFilter.EventFilterCollection();
|
||||
|
||||
protected virtual Command FindCommandInternal(string commandID)
|
||||
{
|
||||
return null;
|
||||
@ -486,5 +488,30 @@ namespace MBS.Framework
|
||||
Stopping = false;
|
||||
}
|
||||
|
||||
private Dictionary<Guid, object> _settings = new Dictionary<Guid, object>();
|
||||
public T GetSetting<T>(Guid id, T defaultValue = default(T))
|
||||
{
|
||||
object value = GetSetting(id, (object)defaultValue);
|
||||
if (value is T)
|
||||
{
|
||||
return (T)value;
|
||||
}
|
||||
else if (value is string && ((string)value).TryParse(typeof(T), out object val))
|
||||
{
|
||||
return (T)val;
|
||||
}
|
||||
|
||||
return defaultValue;
|
||||
}
|
||||
public object GetSetting(Guid id, object defaultValue = null)
|
||||
{
|
||||
if (_settings.ContainsKey(id))
|
||||
return _settings[id];
|
||||
return defaultValue;
|
||||
}
|
||||
public void SetSetting<T>(Guid id, T value)
|
||||
{
|
||||
_settings[id] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
109
MBS.Framework/EventFilter.cs
Normal file
109
MBS.Framework/EventFilter.cs
Normal file
@ -0,0 +1,109 @@
|
||||
//
|
||||
// EventFilter.cs - provides a way to hook application-wide events
|
||||
//
|
||||
// Author:
|
||||
// Michael Becker <alcexhim@gmail.com>
|
||||
//
|
||||
// Copyright (c) 2021 Mike Becker's Software
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
using System;
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public class EventFilter
|
||||
{
|
||||
public class EventFilterCollection
|
||||
: System.Collections.ObjectModel.Collection<EventFilter>
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public EventFilterType EventType { get; private set; } = EventFilterType.None;
|
||||
|
||||
protected EventFilter(EventFilterType eventType)
|
||||
{
|
||||
EventType = eventType;
|
||||
}
|
||||
|
||||
private EventFilterDelegate<EventArgs> _processAction = null;
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="EventFilter" /> class
|
||||
/// with the given process function.
|
||||
/// </summary>
|
||||
/// <param name="processAction">
|
||||
/// The function to call when the <see cref="Process" /> function is
|
||||
/// called.
|
||||
/// </param>
|
||||
public EventFilter(EventFilterDelegate<EventArgs> processAction, EventFilterType eventType = EventFilterType.All)
|
||||
{
|
||||
_processAction = processAction;
|
||||
EventType = eventType;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Calls the <see cref="EventFilter" />'s internal process function and
|
||||
/// returns its value.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// A value indicating whether the event was successfully processed.
|
||||
/// </returns>
|
||||
/// <param name="e">
|
||||
/// The <see cref="EventArgs" /> to pass to the underlying process function.
|
||||
/// </param>
|
||||
public bool Process(ref EventArgs e, EventFilterType type)
|
||||
{
|
||||
if (_processAction != null)
|
||||
return _processAction(ref e, type);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Provides a way to hook application-wide events.
|
||||
/// </summary>
|
||||
public class EventFilter<T> : EventFilter where T : EventArgs
|
||||
{
|
||||
private EventFilterDelegate<T> _processAction = null;
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="EventFilter" /> class
|
||||
/// with the given process function.
|
||||
/// </summary>
|
||||
/// <param name="processAction">
|
||||
/// The function to call when the <see cref="Process" /> function is
|
||||
/// called.
|
||||
/// </param>
|
||||
public EventFilter(EventFilterDelegate<T> processAction, EventFilterType eventType = EventFilterType.All) : base(eventType)
|
||||
{
|
||||
_processAction = processAction;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Calls the <see cref="EventFilter" />'s internal process function and
|
||||
/// returns its value.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// A value indicating whether the event was successfully processed.
|
||||
/// </returns>
|
||||
/// <param name="e">
|
||||
/// The <see cref="EventArgs" /> to pass to the underlying process function.
|
||||
/// </param>
|
||||
public bool Process(ref T e, EventFilterType type)
|
||||
{
|
||||
if (_processAction != null)
|
||||
return _processAction(ref e, type);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
25
MBS.Framework/EventFilterDelegate.cs
Normal file
25
MBS.Framework/EventFilterDelegate.cs
Normal file
@ -0,0 +1,25 @@
|
||||
//
|
||||
// EventFilterDelegate.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Becker <alcexhim@gmail.com>
|
||||
//
|
||||
// Copyright (c) 2021 Mike Becker's Software
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
using System;
|
||||
namespace MBS.Framework
|
||||
{
|
||||
public delegate bool EventFilterDelegate<T>(ref T e, EventFilterType type) where T : EventArgs;
|
||||
}
|
||||
39
MBS.Framework/EventFilterType.cs
Normal file
39
MBS.Framework/EventFilterType.cs
Normal file
@ -0,0 +1,39 @@
|
||||
//
|
||||
// EventFilterType.cs
|
||||
//
|
||||
// Author:
|
||||
// Michael Becker <alcexhim@gmail.com>
|
||||
//
|
||||
// Copyright (c) 2021 Mike Becker's Software
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
using System;
|
||||
namespace MBS.Framework
|
||||
{
|
||||
[Flags()]
|
||||
public enum EventFilterType
|
||||
{
|
||||
None = 0,
|
||||
KeyDown,
|
||||
KeyUp,
|
||||
MouseDown,
|
||||
MouseMove,
|
||||
MouseUp,
|
||||
MouseWheel,
|
||||
GotFocus,
|
||||
LostFocus,
|
||||
All = KeyDown | KeyUp | MouseDown | MouseMove | MouseUp | MouseWheel
|
||||
| GotFocus | LostFocus
|
||||
}
|
||||
}
|
||||
@ -124,6 +124,9 @@
|
||||
<Compile Include="Collections\Generic\HandleDictionary.cs" />
|
||||
<Compile Include="Collections\ExtensionMethods.cs" />
|
||||
<Compile Include="Collections\Generic\AppendOnlyLinkedList.cs" />
|
||||
<Compile Include="EventFilter.cs" />
|
||||
<Compile Include="EventFilterType.cs" />
|
||||
<Compile Include="EventFilterDelegate.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Logic\" />
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user