From fa21b5bae5b4362bfafd6770994be36b59228004 Mon Sep 17 00:00:00 2001 From: Sergey Ilin Date: Mon, 8 Jan 2024 22:13:45 +0500 Subject: [PATCH] interfaces for IBehavior & IDragNewLinkBehavior --- src/Blazor.Diagrams.Core/Behavior.cs | 2 +- .../Behaviors/DragNewLinkBehavior.cs | 2 +- .../Behaviors/IDragNewLinkBehavior.cs | 14 ++++++++++++++ .../Controls/Default/ArrowHeadControl.cs | 2 +- .../Controls/Default/DragNewLinkControl.cs | 2 +- src/Blazor.Diagrams.Core/Diagram.cs | 16 ++++++++-------- src/Blazor.Diagrams.Core/IBehavior.cs | 11 +++++++++++ src/Blazor.Diagrams/Components/LinkWidget.razor | 2 +- 8 files changed, 38 insertions(+), 13 deletions(-) create mode 100644 src/Blazor.Diagrams.Core/Behaviors/IDragNewLinkBehavior.cs create mode 100644 src/Blazor.Diagrams.Core/IBehavior.cs diff --git a/src/Blazor.Diagrams.Core/Behavior.cs b/src/Blazor.Diagrams.Core/Behavior.cs index 78e02060..d6e5d703 100644 --- a/src/Blazor.Diagrams.Core/Behavior.cs +++ b/src/Blazor.Diagrams.Core/Behavior.cs @@ -2,7 +2,7 @@ namespace Blazor.Diagrams.Core; -public abstract class Behavior : IDisposable +public abstract class Behavior : IBehavior, IDisposable { public Behavior(Diagram diagram) { diff --git a/src/Blazor.Diagrams.Core/Behaviors/DragNewLinkBehavior.cs b/src/Blazor.Diagrams.Core/Behaviors/DragNewLinkBehavior.cs index 31d0c5ed..9e3d14d0 100644 --- a/src/Blazor.Diagrams.Core/Behaviors/DragNewLinkBehavior.cs +++ b/src/Blazor.Diagrams.Core/Behaviors/DragNewLinkBehavior.cs @@ -7,7 +7,7 @@ namespace Blazor.Diagrams.Core.Behaviors; -public class DragNewLinkBehavior : Behavior +public class DragNewLinkBehavior : Behavior, IDragNewLinkBehavior { private PositionAnchor? _targetPositionAnchor; diff --git a/src/Blazor.Diagrams.Core/Behaviors/IDragNewLinkBehavior.cs b/src/Blazor.Diagrams.Core/Behaviors/IDragNewLinkBehavior.cs new file mode 100644 index 00000000..c28ce1cf --- /dev/null +++ b/src/Blazor.Diagrams.Core/Behaviors/IDragNewLinkBehavior.cs @@ -0,0 +1,14 @@ +using Blazor.Diagrams.Core.Models.Base; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Blazor.Diagrams.Core.Behaviors; + +public interface IDragNewLinkBehavior : IBehavior +{ + BaseLinkModel? OngoingLink { get; } + void StartFrom(ILinkable source, double clientX, double clientY); +} diff --git a/src/Blazor.Diagrams.Core/Controls/Default/ArrowHeadControl.cs b/src/Blazor.Diagrams.Core/Controls/Default/ArrowHeadControl.cs index 802bd617..027fe4d8 100644 --- a/src/Blazor.Diagrams.Core/Controls/Default/ArrowHeadControl.cs +++ b/src/Blazor.Diagrams.Core/Controls/Default/ArrowHeadControl.cs @@ -46,7 +46,7 @@ public override ValueTask OnPointerDown(Diagram diagram, Model model, PointerEve if (model is not BaseLinkModel link) throw new DiagramsException("ArrowHeadControl only works for models of type BaseLinkModel"); - var dnlb = diagram.GetBehavior()!; + var dnlb = diagram.GetBehavior()!; if (Source) { link.SetSource(link.Target); diff --git a/src/Blazor.Diagrams.Core/Controls/Default/DragNewLinkControl.cs b/src/Blazor.Diagrams.Core/Controls/Default/DragNewLinkControl.cs index 3caa413a..1170cfc8 100644 --- a/src/Blazor.Diagrams.Core/Controls/Default/DragNewLinkControl.cs +++ b/src/Blazor.Diagrams.Core/Controls/Default/DragNewLinkControl.cs @@ -29,7 +29,7 @@ public override ValueTask OnPointerDown(Diagram diagram, Model model, PointerEve if (model is not NodeModel node || node.Locked) return ValueTask.CompletedTask; - var behavior = diagram.GetBehavior(); + var behavior = diagram.GetBehavior(); if (behavior == null) throw new DiagramsException($"DragNewLinkBehavior was not found"); diff --git a/src/Blazor.Diagrams.Core/Diagram.cs b/src/Blazor.Diagrams.Core/Diagram.cs index a2fffeac..9d4b1376 100644 --- a/src/Blazor.Diagrams.Core/Diagram.cs +++ b/src/Blazor.Diagrams.Core/Diagram.cs @@ -19,7 +19,7 @@ namespace Blazor.Diagrams.Core; public abstract class Diagram { - private readonly Dictionary _behaviors; + private readonly Dictionary _behaviors; private readonly List _orderedSelectables; public event Action? PointerDown; @@ -40,7 +40,7 @@ public abstract class Diagram protected Diagram() { - _behaviors = new Dictionary(); + _behaviors = new Dictionary(); _orderedSelectables = new List(); Nodes = new NodeLayer(this); @@ -58,7 +58,7 @@ protected Diagram() RegisterBehavior(new SelectionBehavior(this)); RegisterBehavior(new DragMovablesBehavior(this)); - RegisterBehavior(new DragNewLinkBehavior(this)); + RegisterBehavior(new DragNewLinkBehavior(this) as IDragNewLinkBehavior); RegisterBehavior(new PanBehavior(this)); RegisterBehavior(new ZoomBehavior(this)); RegisterBehavior(new EventsBehavior(this)); @@ -170,22 +170,22 @@ public void UnselectAll() #region Behaviors - public void RegisterBehavior(Behavior behavior) + public void RegisterBehavior(T behavior) where T : IBehavior { - var type = behavior.GetType(); + var type = typeof(T); if (_behaviors.ContainsKey(type)) throw new Exception($"Behavior '{type.Name}' already registered"); _behaviors.Add(type, behavior); } - public T? GetBehavior() where T : Behavior + public T? GetBehavior() where T : IBehavior { var type = typeof(T); return (T?)(_behaviors.ContainsKey(type) ? _behaviors[type] : null); } - public void UnregisterBehavior() where T : Behavior + public void UnregisterBehavior() where T : IBehavior { var type = typeof(T); if (!_behaviors.ContainsKey(type)) @@ -346,7 +346,7 @@ public int GetMaxOrder() public void RefreshOrders(bool refresh = true) { _orderedSelectables.Sort((a, b) => a.Order.CompareTo(b.Order)); - + if (refresh) { Refresh(); diff --git a/src/Blazor.Diagrams.Core/IBehavior.cs b/src/Blazor.Diagrams.Core/IBehavior.cs new file mode 100644 index 00000000..16c06297 --- /dev/null +++ b/src/Blazor.Diagrams.Core/IBehavior.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Blazor.Diagrams.Core; + +public interface IBehavior : IDisposable +{ +} diff --git a/src/Blazor.Diagrams/Components/LinkWidget.razor b/src/Blazor.Diagrams/Components/LinkWidget.razor index 60ea5b2f..a0e8cc11 100644 --- a/src/Blazor.Diagrams/Components/LinkWidget.razor +++ b/src/Blazor.Diagrams/Components/LinkWidget.razor @@ -6,7 +6,7 @@ if (result == null) return; - var dnlb = BlazorDiagram.GetBehavior(); + var dnlb = BlazorDiagram.GetBehavior(); var d = result.FullPath.ToString(); }