#region Imports using DPumpHydr.WinFrmUI.RLT.Extension.Crown; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; using static DPumpHydr.WinFrmUI.RLT.Helper.CrownHelper; #endregion namespace DPumpHydr.WinFrmUI.RLT.Util { #region CrownUtil public class Sizes { public int Padding { get; set; } = 10; public int ScrollBarSize { get; set; } = 15; public int ArrowButtonSize { get; set; } = 15; public int MinimumThumbSize { get; set; } = 11; public int CheckBoxSize { get; set; } = 12; public int RadioButtonSize { get; set; } = 12; public int ToolWindowHeaderSize { get; set; } = 25; public int DocumentTabAreaSize { get; set; } = 24; public int ToolWindowTabAreaSize { get; set; } = 21; } public class ObservableListModified : EventArgs { public IEnumerable Items { get; private set; } public ObservableListModified(IEnumerable items) { Items = items; } } public class ObservableList : List, IDisposable { #region Field Region private bool _disposed; #endregion #region Event Region public event EventHandler> ItemsAdded; public event EventHandler> ItemsRemoved; #endregion #region Destructor Region ~ObservableList() { Dispose(false); } #endregion #region Dispose Region public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!_disposed) { if (ItemsAdded != null) { ItemsAdded = null; } if (ItemsRemoved != null) { ItemsRemoved = null; } _disposed = true; } } #endregion #region Method Region public new void Add(T item) { base.Add(item); ItemsAdded?.Invoke(this, new ObservableListModified(new List { item })); } public new void AddRange(IEnumerable collection) { List list = collection.ToList(); base.AddRange(list); ItemsAdded?.Invoke(this, new ObservableListModified(list)); } public new void Remove(T item) { base.Remove(item); ItemsRemoved?.Invoke(this, new ObservableListModified(new List { item })); } public new void Clear() { ObservableList thisis = this; ObservableListModified removed = new(thisis.ToList()); base.Clear(); if (removed.Items.Any() && ItemsRemoved != null) { ItemsRemoved(this, removed); } } #endregion } public class MenuRenderer : System.Windows.Forms.ToolStripRenderer { #region Initialisation Region protected override void Initialize(ToolStrip toolStrip) { base.Initialize(toolStrip); toolStrip.BackColor = ThemeProvider.Theme.Colors.GreyBackground; toolStrip.ForeColor = ThemeProvider.Theme.Colors.LightText; } protected override void InitializeItem(ToolStripItem item) { base.InitializeItem(item); item.BackColor = ThemeProvider.Theme.Colors.GreyBackground; item.ForeColor = ThemeProvider.Theme.Colors.LightText; if (item.GetType() == typeof(ToolStripSeparator)) { item.Margin = new Padding(0, 0, 0, 1); } } #endregion #region Render Region protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) { Graphics g = e.Graphics; using SolidBrush b = new(ThemeProvider.Theme.Colors.GreyBackground); g.FillRectangle(b, e.AffectedBounds); } protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) { Graphics g = e.Graphics; Rectangle rect = new(0, 0, e.ToolStrip.Width - 1, e.ToolStrip.Height - 1); using Pen p = new(ThemeProvider.Theme.Colors.LightBorder); g.DrawRectangle(p, rect); } protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { Graphics g = e.Graphics; Rectangle rect = new(e.ImageRectangle.Left - 2, e.ImageRectangle.Top - 2, e.ImageRectangle.Width + 4, e.ImageRectangle.Height + 4); using (SolidBrush b = new(ThemeProvider.Theme.Colors.LightBorder)) { g.FillRectangle(b, rect); } using (Pen p = new(ThemeProvider.Theme.Colors.BlueHighlight)) { Rectangle modRect = new(rect.Left, rect.Top, rect.Width - 1, rect.Height - 1); g.DrawRectangle(p, modRect); } if (e.Item.ImageIndex == -1 && string.IsNullOrEmpty(e.Item.ImageKey) && e.Item.Image == null) { g.DrawImageUnscaled(Properties.Resources.tick, new Point(e.ImageRectangle.Left, e.ImageRectangle.Top)); } } protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) { Graphics g = e.Graphics; Rectangle rect = new(1, 3, e.Item.Width, 1); using SolidBrush b = new(ThemeProvider.Theme.Colors.LightBorder); g.FillRectangle(b, rect); } protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) { e.ArrowColor = ThemeProvider.Theme.Colors.LightText; e.ArrowRectangle = new(new Point(e.ArrowRectangle.Left, e.ArrowRectangle.Top - 1), e.ArrowRectangle.Size); base.OnRenderArrow(e); } protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) { Graphics g = e.Graphics; e.Item.ForeColor = e.Item.Enabled ? ThemeProvider.Theme.Colors.LightText : ThemeProvider.Theme.Colors.DisabledText; if (e.Item.Enabled) { Color bgColor = e.Item.Selected ? ThemeProvider.Theme.Colors.GreyHighlight : e.Item.BackColor; // Normal item Rectangle rect = new(2, 0, e.Item.Width - 3, e.Item.Height); using (SolidBrush b = new(bgColor)) { g.FillRectangle(b, rect); } // Header item on open menu if (e.Item.GetType() == typeof(ToolStripMenuItem)) { if (((ToolStripMenuItem)e.Item).DropDown.Visible && e.Item.IsOnDropDown == false) { using SolidBrush b = new(ThemeProvider.Theme.Colors.GreySelection); g.FillRectangle(b, rect); } } } } #endregion } public class ToolStripRenderer : MenuRenderer { #region Initialisation Region protected override void InitializeItem(ToolStripItem item) { base.InitializeItem(item); if (item.GetType() == typeof(ToolStripSeparator)) { ToolStripSeparator castItem = (ToolStripSeparator)item; if (!castItem.IsOnDropDown) { item.Margin = new Padding(0, 0, 2, 0); } } if (item.GetType() == typeof(ToolStripButton)) { item.AutoSize = false; item.Size = new(24, 24); } } #endregion #region Render Region protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) { base.OnRenderToolStripBackground(e); Graphics g = e.Graphics; if (e.ToolStrip.GetType() == typeof(ToolStripOverflow)) { using Pen p = new(ThemeProvider.Theme.Colors.GreyBackground); Rectangle rect = new(e.AffectedBounds.Left, e.AffectedBounds.Top, e.AffectedBounds.Width - 1, e.AffectedBounds.Height - 1); g.DrawRectangle(p, rect); } } protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) { if (e.ToolStrip.GetType() != typeof(ToolStrip)) { base.OnRenderToolStripBorder(e); } } protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) { Graphics g = e.Graphics; Rectangle rect = new(0, 1, e.Item.Width, e.Item.Height - 2); if (e.Item.Selected || e.Item.Pressed) { using SolidBrush b = new(ThemeProvider.Theme.Colors.GreySelection); g.FillRectangle(b, rect); } if (e.Item.GetType() == typeof(ToolStripButton)) { ToolStripButton castItem = (ToolStripButton)e.Item; if (castItem.Checked) { using SolidBrush b = new(ThemeProvider.Theme.Colors.GreySelection); g.FillRectangle(b, rect); } if (castItem.Checked && castItem.Selected) { Rectangle modRect = new(rect.Left, rect.Top, rect.Width - 1, rect.Height - 1); using Pen p = new(ThemeProvider.Theme.Colors.GreyHighlight); g.DrawRectangle(p, modRect); } } } protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) { Graphics g = e.Graphics; Rectangle rect = new(0, 1, e.Item.Width, e.Item.Height - 2); if (e.Item.Selected || e.Item.Pressed) { using SolidBrush b = new(ThemeProvider.Theme.Colors.GreySelection); g.FillRectangle(b, rect); } } protected override void OnRenderGrip(ToolStripGripRenderEventArgs e) { if (e.GripStyle == ToolStripGripStyle.Hidden) { return; } Graphics g = e.Graphics; using Bitmap img = Properties.Resources.grip.SetColor(ThemeProvider.Theme.Colors.LightBorder); g.DrawImageUnscaled(img, new Point(e.AffectedBounds.Left, e.AffectedBounds.Top)); } protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) { Graphics g = e.Graphics; ToolStripSeparator castItem = (ToolStripSeparator)e.Item; if (castItem.IsOnDropDown) { base.OnRenderSeparator(e); return; } Rectangle rect = new(3, 3, 2, e.Item.Height - 4); using (Pen p = new(ThemeProvider.Theme.Colors.DarkBorder)) { g.DrawLine(p, rect.Left, rect.Top, rect.Left, rect.Height); } using (Pen p = new(ThemeProvider.Theme.Colors.LightBorder)) { g.DrawLine(p, rect.Left + 1, rect.Top, rect.Left + 1, rect.Height); } } protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) { Graphics g = e.Graphics; if (e.Image == null) { return; } if (e.Item.Enabled) { g.DrawImageUnscaled(e.Image, new Point(e.ImageRectangle.Left, e.ImageRectangle.Top)); } else { ControlPaint.DrawImageDisabled(g, e.Image, e.ImageRectangle.Left, e.ImageRectangle.Top, Color.Transparent); } } protected override void OnRenderOverflowButtonBackground(ToolStripItemRenderEventArgs e) { /* var g = e.Graphics; var rect = new(1, 0, e.Item.Width - 5, e.Item.Height); var castItem = (ToolStripOverflowButton)e.Item; var bgColor = BasicThemeProvider.Theme.Colors.White; if (castItem.Selected) bgColor = BasicThemeProvider.Theme.Colors.Weak(style); if (castItem.Pressed) bgColor = BasicThemeProvider.Theme.Colors.Medium(style); using (var b = new(bgColor)) { g.FillRectangle(b, rect); } var fgColor = BasicThemeProvider.Theme.Colors.Grey; if (castItem.Selected) fgColor = BasicThemeProvider.Theme.Colors.Medium(style); if (castItem.Pressed) fgColor = BasicThemeProvider.Theme.Colors.Strong(style); using (var p = new(fgColor)) { var modRect = new(1, 0, e.Item.Width - 6, e.Item.Height - 1); g.DrawRectangle(p, modRect); } using (var img = Properties.Resources.overflow.SetColor(BasicThemeProvider.Theme.Colors.MediumGrey)) { g.DrawImageUnscaled(img, e.Item.Width - 13, e.Item.Height - 9); } */ } #endregion } public class ScrollValueEventArgs : EventArgs { public int Value { get; private set; } public ScrollValueEventArgs(int value) { Value = value; } } #endregion }