Add userdata fields to all control hierarchy.
This commit is contained in:
parent
50552914c1
commit
9b6a15c6ec
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using Dashboard.ImmediateDraw;
|
using Dashboard.ImmediateDraw;
|
||||||
using OpenTK.Mathematics;
|
using OpenTK.Mathematics;
|
||||||
|
|
||||||
@ -8,7 +9,7 @@ namespace Dashboard.Controls
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Bases for all UI elements.
|
/// Bases for all UI elements.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class UIBase
|
public abstract class UIBase : IDbUserdata
|
||||||
{
|
{
|
||||||
private Vector2 size;
|
private Vector2 size;
|
||||||
|
|
||||||
@ -59,6 +60,8 @@ namespace Dashboard.Controls
|
|||||||
public bool IsMaximumSizeSet => MaximumSize != new Vector2(-1, -1);
|
public bool IsMaximumSizeSet => MaximumSize != new Vector2(-1, -1);
|
||||||
public bool IsMinimumSizeSet => MinimumSize != new Vector2(-1, -1);
|
public bool IsMinimumSizeSet => MinimumSize != new Vector2(-1, -1);
|
||||||
|
|
||||||
|
public Dictionary<string, object> Userdata { get; } = new Dictionary<string, object>();
|
||||||
|
|
||||||
public virtual void NotifyEvent(object? sender, EventArgs args)
|
public virtual void NotifyEvent(object? sender, EventArgs args)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -87,6 +90,29 @@ namespace Dashboard.Controls
|
|||||||
{
|
{
|
||||||
Resized?.Invoke(sender, ea);
|
Resized?.Invoke(sender, ea);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsDisposed { get; private set; } = false;
|
||||||
|
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
foreach (object userdata in Userdata.Values)
|
||||||
|
{
|
||||||
|
if (userdata is IDisposable disposable)
|
||||||
|
disposable.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void DisposeInvoker(bool disposing)
|
||||||
|
{
|
||||||
|
if (IsDisposed)
|
||||||
|
return;
|
||||||
|
|
||||||
|
IsDisposed = true;
|
||||||
|
|
||||||
|
Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose() => DisposeInvoker(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ResizedEventArgs : EventArgs
|
public class ResizedEventArgs : EventArgs
|
||||||
|
21
Dashboard/IDbUserdata.cs
Normal file
21
Dashboard/IDbUserdata.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Dashboard
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Common interface for Dashboard objects that accept userdata.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Dashboard will call dispose on any and all objects which implement IDisposable.
|
||||||
|
/// If this is an issue, please guard your object against this using a wrapper.
|
||||||
|
/// </remarks
|
||||||
|
public interface IDbUserdata : IDisposable
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Userdata dictionary.
|
||||||
|
/// </summary>
|
||||||
|
public Dictionary<string, object> Userdata { get; }
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user