| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Windows;using System.Windows.Controls;using ICSharpCode.AvalonEdit;using InABox.Configuration;using InABox.Core;namespace InABox.Wpf;public interface IPanelActionItem{}public class PanelAction : DependencyObject, IPanelActionItem{    public Action<PanelAction>? OnExecute { get; set; }        public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.Register(        nameof(IsEnabled),        typeof(bool),        typeof(PanelAction),        new PropertyMetadata(true)    );        public bool IsEnabled     {         get => (bool)GetValue(IsEnabledProperty);        set => SetValue(IsEnabledProperty, value);    }    public static readonly DependencyProperty VisibilityProperty = DependencyProperty.Register(        nameof(Visibility),        typeof(Visibility),        typeof(PanelAction),        new PropertyMetadata(Visibility.Visible)    );        public Visibility Visibility     {         get => (Visibility)GetValue(VisibilityProperty);        set => SetValue(VisibilityProperty, value);    }    public static readonly DependencyProperty CaptionProperty = DependencyProperty.Register(        nameof(Caption),        typeof(string),        typeof(PanelAction),        new PropertyMetadata("")    );        public string Caption     {         get => (string)GetValue(CaptionProperty);        set => SetValue(CaptionProperty, value);    }    public static readonly DependencyProperty ImageProperty = DependencyProperty.Register(        nameof(Image),        typeof(Bitmap),        typeof(PanelAction)    );        public Bitmap? Image    {         get => GetValue(ImageProperty) as Bitmap;        set => SetValue(ImageProperty, value);    }        public static readonly DependencyProperty MenuProperty = DependencyProperty.Register(        nameof(Menu),        typeof(ContextMenu),        typeof(PanelAction)    );           public ContextMenu? Menu    {         get => GetValue(MenuProperty) as ContextMenu;        set => SetValue(MenuProperty, value);    }    public PanelAction()    {    }    public PanelAction(string caption, Bitmap image, Action<PanelAction> onExecute, ContextMenu? menu = null)    {        Caption = caption;        Image = image;        Menu = menu;        OnExecute = onExecute;    }    public void Execute()    {        OnExecute?.Invoke(this);    }}public class PanelActionSeparator : IPanelActionItem{}public interface ICorePanel{    void Setup();    /// <summary>    /// Shutdown the panel.    /// </summary>    /// <param name="cancel">If the operation can be cancelled, this is not <see langword="null"/></param>    void Shutdown(CancelEventArgs? cancel);    void Refresh();}public interface IBasePanel : ICorePanel, IDataModelSource{    bool IsReady { get; set; }    void CreateToolbarButtons(IPanelHost host);    Dictionary<string, object[]> Selected();    void Heartbeat(TimeSpan time);}public interface IPanel<T> : IBasePanel{}public interface IPropertiesPanel<TProperties>    where TProperties : BaseObject, IGlobalConfigurationSettings, new(){    public TProperties Properties { get; set; }}public interface IPropertiesPanel<TProperties, TSecurity> : IPropertiesPanel<TProperties>    where TProperties : BaseObject, IGlobalConfigurationSettings, new()    where TSecurity : ISecurityDescriptor, new(){}public interface IPanelHost{    void CreatePanelAction(PanelAction action);    void CreateReport(PanelAction action);    void CreateSetupAction(PanelAction action);    void CreateSetupSeparator();}public static class IPanelHostExtensions{    public static void CreateSetupAction(this IPanelHost host, string caption, Bitmap image, Action<PanelAction> onExecute, ContextMenu? menu = null)    {        host.CreateSetupAction(new PanelAction(caption, image, onExecute, menu));    }    public static void CreateSetupActionIf(this IPanelHost host, string caption, Bitmap image, Action<PanelAction> onExecute, bool canView, ContextMenu? menu = null)    {        if (canView)        {            host.CreateSetupAction(new PanelAction(caption, image, onExecute, menu));        }    }    public static void CreateSetupActionIf<TSecurity>(this IPanelHost host, string caption, Bitmap image, Action<PanelAction> onExecute, ContextMenu? menu = null)        where TSecurity : ISecurityDescriptor, new()    {        host.CreateSetupActionIf(caption, image, onExecute, Security.IsAllowed<TSecurity>(), menu);    }    public static void CreateSetupActionIfCanView<T>(this IPanelHost host, string caption, Bitmap image, Action<PanelAction> onExecute, ContextMenu? menu = null)        where T : Entity, new()    {        host.CreateSetupActionIf(caption, image, onExecute, Security.CanView<T>(), menu);    }}
 |