#region Imports
|
|
using System;
|
using System.ComponentModel;
|
using System.Drawing;
|
using System.Drawing.Drawing2D;
|
using System.Drawing.Text;
|
using System.Windows.Forms;
|
|
#endregion
|
|
namespace DPumpHydr.WinFrmUI.RLT.Controls
|
{
|
#region ParrotNavigationBar
|
|
public class ParrotNavigationBar : Control
|
{
|
public ParrotNavigationBar()
|
{
|
Size = new Size(300, 40);
|
NavBarStyle = Style.Android;
|
Font = new Font("Arial", 12f);
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The navigation bar style")]
|
public Style NavBarStyle
|
{
|
get => navBarStyle;
|
set
|
{
|
if (navBarStyle != value)
|
{
|
navBarStyle = value;
|
|
if (value == Style.iOS)
|
{
|
ItemColor = Color.FromArgb(0, 120, 255);
|
TitleColor = Color.Black;
|
BackgroundColor = Color.White;
|
}
|
else if (value == Style.Android)
|
{
|
ItemColor = Color.White;
|
TitleColor = Color.White;
|
BackgroundColor = Color.FromArgb(0, 150, 135);
|
}
|
else
|
{
|
ItemColor = Color.White;
|
TitleColor = Color.White;
|
BackgroundColor = Color.FromArgb(1, 119, 215);
|
}
|
|
Invalidate();
|
}
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The color of the items")]
|
public Color ItemColor
|
{
|
get => itemColor;
|
set
|
{
|
itemColor = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The color of the title")]
|
public Color TitleColor
|
{
|
get => titleColor;
|
set
|
{
|
titleColor = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The color of the title")]
|
public Color BackgroundColor
|
{
|
get => backgroundColor;
|
set
|
{
|
backgroundColor = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The left navigation item")]
|
public NavigationItem LeftItem
|
{
|
get => leftItem;
|
set
|
{
|
leftItem = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The right navigation item")]
|
public NavigationItem RightItem
|
{
|
get => rightItem;
|
set
|
{
|
rightItem = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The navigation bar title")]
|
public string Title
|
{
|
get => title;
|
set
|
{
|
title = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The text of the left item if set to CustomText")]
|
public string LeftCustomText
|
{
|
get => leftCustomText;
|
set
|
{
|
leftCustomText = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The text of the right item if set to CustomText")]
|
public string RightCustomText
|
{
|
get => rightCustomText;
|
set
|
{
|
rightCustomText = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The image of the left item if set to CustomImage")]
|
public Image LeftCustomImage
|
{
|
get => leftCustomImage;
|
set
|
{
|
leftCustomImage = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The image of the right item if set to CustomImage")]
|
public Image RightCustomImage
|
{
|
get => rightCustomImage;
|
set
|
{
|
rightCustomImage = value;
|
Invalidate();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The navigation bar interaction")]
|
public bool Interaction
|
{
|
get => interaction;
|
set
|
{
|
interaction = value;
|
Invalidate();
|
}
|
}
|
|
private InterpolationMode _InterpolationType = InterpolationMode.HighQualityBilinear;
|
[Category("Parrot")]
|
[Browsable(true)]
|
public InterpolationMode InterpolationType
|
{
|
get => _InterpolationType;
|
set
|
{
|
_InterpolationType = value;
|
Invalidate();
|
}
|
}
|
|
private CompositingQuality _CompositingQualityType = CompositingQuality.HighQuality;
|
[Category("Parrot")]
|
[Browsable(true)]
|
public CompositingQuality CompositingQualityType
|
{
|
get => _CompositingQualityType;
|
set
|
{
|
_CompositingQualityType = value;
|
Invalidate();
|
}
|
}
|
|
private TextRenderingHint _TextRenderingType = TextRenderingHint.ClearTypeGridFit;
|
[Category("Parrot")]
|
[Browsable(true)]
|
public TextRenderingHint TextRenderingType
|
{
|
get => _TextRenderingType;
|
set
|
{
|
_TextRenderingType = value;
|
Invalidate();
|
}
|
}
|
|
protected override void OnPaint(PaintEventArgs e)
|
{
|
base.OnPaint(e);
|
|
if (interaction && cursor == null)
|
{
|
cursor = Cursor;
|
}
|
|
e.Graphics.InterpolationMode = InterpolationType;
|
e.Graphics.CompositingQuality = CompositingQualityType;
|
e.Graphics.TextRenderingHint = TextRenderingType;
|
|
FontStyle style = FontStyle.Bold;
|
|
if (navBarStyle == Style.iOS)
|
{
|
style = FontStyle.Regular;
|
}
|
|
e.Graphics.FillRectangle(new SolidBrush(backgroundColor), 0, 0, base.Width, base.Height);
|
StringFormat stringFormat = new()
|
{
|
LineAlignment = StringAlignment.Center,
|
Alignment = StringAlignment.Near
|
};
|
|
if (leftItem == NavigationItem.Back)
|
{
|
e.Graphics.DrawString("Back", Font, new SolidBrush(itemColor), base.ClientRectangle, stringFormat);
|
}
|
else if (leftItem == NavigationItem.Next)
|
{
|
e.Graphics.DrawString("Next", Font, new SolidBrush(itemColor), base.ClientRectangle, stringFormat);
|
}
|
else if (leftItem == NavigationItem.CustomText)
|
{
|
e.Graphics.DrawString(leftCustomText, Font, new SolidBrush(itemColor), base.ClientRectangle, stringFormat);
|
}
|
else if (leftItem == NavigationItem.Menu)
|
{
|
e.Graphics.DrawLine(new Pen(itemColor, 2f), base.Height / 5, base.Height / 4, base.Height / 5 * 4, base.Height / 4);
|
e.Graphics.DrawLine(new Pen(itemColor, 2f), base.Height / 5, base.Height / 4 * 2, base.Height / 5 * 4, base.Height / 4 * 2);
|
e.Graphics.DrawLine(new Pen(itemColor, 2f), base.Height / 5, base.Height / 4 * 3, base.Height / 5 * 4, base.Height / 4 * 3);
|
}
|
else if (leftItem == NavigationItem.CustomImage && leftCustomImage != null)
|
{
|
e.Graphics.DrawImage(new Bitmap(leftCustomImage, base.Height, base.Height), 0, 0);
|
}
|
|
stringFormat.Alignment = StringAlignment.Center;
|
e.Graphics.DrawString(title, new Font(Font.FontFamily, Font.Size, style), new SolidBrush(titleColor), base.ClientRectangle, stringFormat);
|
stringFormat.Alignment = StringAlignment.Far;
|
|
if (rightItem == NavigationItem.Back)
|
{
|
e.Graphics.DrawString("Back", Font, new SolidBrush(itemColor), base.ClientRectangle, stringFormat);
|
return;
|
}
|
|
if (rightItem == NavigationItem.Next)
|
{
|
e.Graphics.DrawString("Next", Font, new SolidBrush(itemColor), base.ClientRectangle, stringFormat);
|
return;
|
}
|
|
if (rightItem == NavigationItem.CustomText)
|
{
|
e.Graphics.DrawString(rightCustomText, Font, new SolidBrush(itemColor), base.ClientRectangle, stringFormat);
|
return;
|
}
|
|
if (rightItem == NavigationItem.Menu)
|
{
|
e.Graphics.DrawLine(new Pen(itemColor, 2f), base.Width - base.Height + (base.Height / 5), base.Height / 4, base.Width - base.Height + (base.Height / 5 * 4), base.Height / 4);
|
e.Graphics.DrawLine(new Pen(itemColor, 2f), base.Width - base.Height + (base.Height / 5), base.Height / 4 * 2, base.Width - base.Height + (base.Height / 5 * 4), base.Height / 4 * 2);
|
e.Graphics.DrawLine(new Pen(itemColor, 2f), base.Width - base.Height + (base.Height / 5), base.Height / 4 * 3, base.Width - base.Height + (base.Height / 5 * 4), base.Height / 4 * 3);
|
return;
|
}
|
|
if (rightItem == NavigationItem.CustomImage && rightCustomImage != null)
|
{
|
e.Graphics.DrawImage(new Bitmap(rightCustomImage, base.Height, base.Height), base.Width - base.Height, 0);
|
}
|
}
|
|
public event EventHandler LeftItemClick;
|
|
protected virtual void OnLeftItemClick()
|
{
|
LeftItemClick?.Invoke(this, new EventArgs());
|
}
|
|
public event EventHandler RightItemClick;
|
|
protected virtual void OnRightItemClick()
|
{
|
RightItemClick?.Invoke(this, new EventArgs());
|
}
|
|
protected override void OnMouseDown(MouseEventArgs e)
|
{
|
base.OnMouseDown(e);
|
if (interaction)
|
{
|
if (e.X < base.Width / 3)
|
{
|
OnLeftItemClick();
|
}
|
if (e.X > base.Width / 3 * 2)
|
{
|
OnRightItemClick();
|
}
|
}
|
}
|
|
protected override void OnMouseMove(MouseEventArgs e)
|
{
|
base.OnMouseMove(e);
|
if (interaction)
|
{
|
if (e.X < base.Width / 3 || e.X > base.Width / 3 * 2)
|
{
|
Cursor = Cursors.Hand;
|
}
|
else
|
{
|
Cursor = cursor;
|
}
|
}
|
}
|
|
private Style navBarStyle;
|
|
private Color itemColor = Color.White;
|
|
private Color titleColor = Color.White;
|
|
private Color backgroundColor = Color.White;
|
|
private NavigationItem leftItem = NavigationItem.Back;
|
|
private NavigationItem rightItem = NavigationItem.Next;
|
|
private string title = "Navigation Bar";
|
|
private string leftCustomText = "⫷⩶";
|
|
private string rightCustomText = "⩶⫸";
|
|
private Image leftCustomImage;
|
|
private Image rightCustomImage;
|
|
private Cursor cursor;
|
|
private bool interaction = true;
|
|
public enum NavigationItem
|
{
|
Menu,
|
None,
|
Back,
|
Next,
|
CustomText,
|
CustomImage
|
}
|
|
public enum Style
|
{
|
iOS,
|
Android,
|
Material
|
}
|
}
|
|
#endregion
|
}
|