409 lines
16 KiB
C#
409 lines
16 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
namespace AppLauncher.Windows.Forms
|
|
{
|
|
public class TForm : Form
|
|
{
|
|
protected readonly Color borderColour = Color.FromArgb(232, 231, 236);
|
|
protected readonly int borderWidth = 1;
|
|
|
|
protected readonly Color backColour = Color.FromArgb(254, 254, 254);
|
|
|
|
protected readonly Color titleBarColour = Color.FromArgb(237, 240, 247);
|
|
protected readonly Color titleBorderColour = Color.FromArgb(232, 231, 236);
|
|
protected readonly Color titleColour = Color.FromArgb(156, 158, 171);
|
|
protected readonly int titleBarHeight = 56;
|
|
|
|
private bool isDragging = false;
|
|
private Point startPosition = new Point();
|
|
|
|
protected bool isBusy = false;
|
|
|
|
protected internal RyzStudio.Windows.Forms.TImageBox imageBox3;
|
|
protected internal RyzStudio.Windows.Forms.TImageBox imageBox2;
|
|
protected internal RyzStudio.Windows.Forms.TImageBox imageBox1;
|
|
private NotifyIcon notifyIcon1;
|
|
private Panel panel1;
|
|
private ContextMenuStrip contextMenuStrip1;
|
|
private ToolStripMenuItem exitToolStripMenuItem;
|
|
private IContainer components;
|
|
|
|
public TForm() : base()
|
|
{
|
|
InitializeComponent();
|
|
|
|
if (!this.DesignMode)
|
|
{
|
|
this.FormBorderStyle = FormBorderStyle.None;
|
|
this.StartPosition = FormStartPosition.Manual;
|
|
}
|
|
|
|
this.BackColor = backColour;
|
|
this.Padding = new Padding(0);
|
|
|
|
notifyIcon1.Text = Application.ProductName;
|
|
}
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
{
|
|
base.OnLoad(e);
|
|
|
|
this.SuspendLayout();
|
|
|
|
imageBox3.Left = this.DisplayRectangle.Width - imageBox3.Width - 17;
|
|
imageBox3.Top = 18;
|
|
imageBox3.Anchor = (AnchorStyles.Top | AnchorStyles.Right);
|
|
|
|
imageBox2.Left = imageBox3.Left - imageBox2.Width - 8;
|
|
imageBox2.Top = 18;
|
|
imageBox2.Anchor = (AnchorStyles.Top | AnchorStyles.Right);
|
|
|
|
imageBox1.Left = imageBox2.Left - imageBox1.Width - 8;
|
|
imageBox1.Top = 18;
|
|
imageBox1.Anchor = (AnchorStyles.Top | AnchorStyles.Right);
|
|
|
|
panel1.Left = this.DisplayRectangle.Left;
|
|
panel1.Top = this.DisplayRectangle.Height - panel1.Height;
|
|
panel1.Width = this.DisplayRectangle.Width;
|
|
panel1.Anchor = (AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom);
|
|
|
|
if (this.DesignMode)
|
|
{
|
|
imageBox1.Visible = imageBox2.Visible = imageBox3.Visible = false;
|
|
panel1.Visible = false;
|
|
}
|
|
|
|
this.ResumeLayout();
|
|
}
|
|
|
|
protected override void OnMouseClick(MouseEventArgs e)
|
|
{
|
|
base.OnMouseClick(e);
|
|
|
|
bool isLabel = ((e.Location.X >= 0) && (e.Location.X <= this.Width) && (e.Location.Y >= 0) && (e.Location.Y <= titleBarHeight));
|
|
|
|
if (e.Button == MouseButtons.Left)
|
|
{
|
|
if (isLabel)
|
|
{
|
|
// do nothing
|
|
}
|
|
else
|
|
{
|
|
// do nothing
|
|
}
|
|
}
|
|
else if (e.Button == MouseButtons.Right)
|
|
{
|
|
if (isLabel)
|
|
{
|
|
if (this.TitleContextMenuStrip != null)
|
|
{
|
|
this.TitleContextMenuStrip.Show(this, e.Location);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// do nothing
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override void OnMouseDown(MouseEventArgs e)
|
|
{
|
|
base.OnMouseDown(e);
|
|
|
|
if (e.Button != MouseButtons.Left)
|
|
{
|
|
return;
|
|
}
|
|
|
|
isDragging = true;
|
|
startPosition = e.Location;
|
|
}
|
|
|
|
protected override void OnMouseMove(MouseEventArgs e)
|
|
{
|
|
base.OnMouseMove(e);
|
|
|
|
if (isDragging)
|
|
{
|
|
int x = (this.Location.X + (e.Location.X - startPosition.X));
|
|
int y = (this.Location.Y + (e.Location.Y - startPosition.Y));
|
|
|
|
//this.Location = validateFormLocation(x, y);
|
|
this.Location = new Point(x, y);
|
|
}
|
|
}
|
|
|
|
protected override void OnMouseUp(MouseEventArgs e)
|
|
{
|
|
base.OnMouseUp(e);
|
|
|
|
isDragging = false;
|
|
}
|
|
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
base.OnPaint(e);
|
|
|
|
Graphics g = e.Graphics;
|
|
Rectangle area = new Rectangle(this.DisplayRectangle.X, this.DisplayRectangle.Y, (this.DisplayRectangle.Width - borderWidth), (this.DisplayRectangle.Height - borderWidth));
|
|
|
|
// border
|
|
g.DrawRectangle(new Pen(borderColour, borderWidth), area);
|
|
|
|
area.Inflate((-1 * borderWidth), (-1 * borderWidth));
|
|
|
|
g.FillRectangle(new SolidBrush(titleBarColour), area.X, area.Y, (area.Width + area.X), titleBarHeight);
|
|
g.DrawLine(new Pen(titleBorderColour, 1), area.X, (titleBarHeight + 1), (area.Width + area.X), (titleBarHeight + 1));
|
|
|
|
if (!DesignMode) g.DrawImageUnscaled(this.AppIcon, 17, 17);
|
|
|
|
if (!DesignMode) TextRenderer.DrawText(g, Application.ProductName, new Font(this.Font.FontFamily, 14F), new Point(58, 17), titleColour);
|
|
|
|
}
|
|
|
|
protected override void OnResize(EventArgs e)
|
|
{
|
|
base.OnResize(e);
|
|
|
|
this.Invalidate();
|
|
}
|
|
|
|
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
|
public override Color BackColor { get => base.BackColor; set => base.BackColor = value; }
|
|
|
|
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
|
public new FormBorderStyle FormBorderStyle { get => base.FormBorderStyle; set => base.FormBorderStyle = value; }
|
|
|
|
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
|
public new Padding Padding { get => base.Padding; set => base.Padding = value; }
|
|
|
|
[Category("Appearance")]
|
|
public ContextMenuStrip TitleContextMenuStrip { get; set; } = null;
|
|
|
|
[Browsable(false)]
|
|
public Image AppIcon { get; set; } = null;
|
|
|
|
protected Point DefaultLocation
|
|
{
|
|
get
|
|
{
|
|
Point newPosition = new Point(Cursor.Position.X, Cursor.Position.Y);
|
|
newPosition.X -= (this.Width / 2);
|
|
newPosition.Y -= (this.Height / 2);
|
|
|
|
newPosition.X = Math.Max(newPosition.X, Screen.PrimaryScreen.WorkingArea.Left);
|
|
newPosition.Y = Math.Max(newPosition.Y, Screen.PrimaryScreen.WorkingArea.Top);
|
|
|
|
return newPosition;
|
|
}
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
this.components = new System.ComponentModel.Container();
|
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TForm));
|
|
this.imageBox3 = new RyzStudio.Windows.Forms.TImageBox();
|
|
this.imageBox2 = new RyzStudio.Windows.Forms.TImageBox();
|
|
this.imageBox1 = new RyzStudio.Windows.Forms.TImageBox();
|
|
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
|
|
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
|
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
this.panel1 = new System.Windows.Forms.Panel();
|
|
((System.ComponentModel.ISupportInitialize)(this.imageBox3)).BeginInit();
|
|
((System.ComponentModel.ISupportInitialize)(this.imageBox2)).BeginInit();
|
|
((System.ComponentModel.ISupportInitialize)(this.imageBox1)).BeginInit();
|
|
this.contextMenuStrip1.SuspendLayout();
|
|
this.SuspendLayout();
|
|
//
|
|
// imageBox3
|
|
//
|
|
this.imageBox3.BackColor = System.Drawing.Color.Transparent;
|
|
this.imageBox3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
|
|
this.imageBox3.ErrorImage = null;
|
|
this.imageBox3.Image = global::AppLauncher.Properties.Resources20.close;
|
|
this.imageBox3.ImageHover = global::AppLauncher.Properties.Resources20.close2;
|
|
this.imageBox3.ImageNormal = global::AppLauncher.Properties.Resources20.close;
|
|
this.imageBox3.ImageSelected = null;
|
|
this.imageBox3.InitialImage = null;
|
|
this.imageBox3.IsSelected = false;
|
|
this.imageBox3.Location = new System.Drawing.Point(169, 12);
|
|
this.imageBox3.Name = "imageBox3";
|
|
this.imageBox3.Size = new System.Drawing.Size(20, 20);
|
|
this.imageBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
|
|
this.imageBox3.TabIndex = 146;
|
|
this.imageBox3.TabStop = false;
|
|
this.imageBox3.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox3_MouseClick);
|
|
//
|
|
// imageBox2
|
|
//
|
|
this.imageBox2.BackColor = System.Drawing.Color.Transparent;
|
|
this.imageBox2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
|
|
this.imageBox2.ErrorImage = null;
|
|
this.imageBox2.Image = global::AppLauncher.Properties.Resources20.maximise;
|
|
this.imageBox2.ImageHover = global::AppLauncher.Properties.Resources20.maximise;
|
|
this.imageBox2.ImageNormal = global::AppLauncher.Properties.Resources20.maximise;
|
|
this.imageBox2.ImageSelected = global::AppLauncher.Properties.Resources20.maximise2;
|
|
this.imageBox2.InitialImage = null;
|
|
this.imageBox2.IsSelected = false;
|
|
this.imageBox2.Location = new System.Drawing.Point(139, 12);
|
|
this.imageBox2.Name = "imageBox2";
|
|
this.imageBox2.Size = new System.Drawing.Size(20, 20);
|
|
this.imageBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
|
|
this.imageBox2.TabIndex = 147;
|
|
this.imageBox2.TabStop = false;
|
|
this.imageBox2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox2_MouseClick);
|
|
//
|
|
// imageBox1
|
|
//
|
|
this.imageBox1.BackColor = System.Drawing.Color.Transparent;
|
|
this.imageBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
|
|
this.imageBox1.ErrorImage = null;
|
|
this.imageBox1.Image = global::AppLauncher.Properties.Resources20.minimise;
|
|
this.imageBox1.ImageHover = global::AppLauncher.Properties.Resources20.minimise2;
|
|
this.imageBox1.ImageNormal = global::AppLauncher.Properties.Resources20.minimise;
|
|
this.imageBox1.ImageSelected = null;
|
|
this.imageBox1.InitialImage = null;
|
|
this.imageBox1.IsSelected = false;
|
|
this.imageBox1.Location = new System.Drawing.Point(109, 12);
|
|
this.imageBox1.Name = "imageBox1";
|
|
this.imageBox1.Size = new System.Drawing.Size(20, 20);
|
|
this.imageBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
|
|
this.imageBox1.TabIndex = 148;
|
|
this.imageBox1.TabStop = false;
|
|
this.imageBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.imageBox1_MouseClick);
|
|
//
|
|
// notifyIcon1
|
|
//
|
|
this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1;
|
|
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
|
|
this.notifyIcon1.Visible = true;
|
|
this.notifyIcon1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick);
|
|
this.notifyIcon1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseClick);
|
|
//
|
|
// contextMenuStrip1
|
|
//
|
|
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
this.exitToolStripMenuItem});
|
|
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
|
this.contextMenuStrip1.Size = new System.Drawing.Size(94, 26);
|
|
//
|
|
// exitToolStripMenuItem
|
|
//
|
|
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
|
|
this.exitToolStripMenuItem.Size = new System.Drawing.Size(93, 22);
|
|
this.exitToolStripMenuItem.Text = "E&xit";
|
|
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
|
|
//
|
|
// panel1
|
|
//
|
|
this.panel1.BackColor = System.Drawing.Color.Transparent;
|
|
this.panel1.Cursor = System.Windows.Forms.Cursors.SizeNS;
|
|
this.panel1.Location = new System.Drawing.Point(109, 114);
|
|
this.panel1.Margin = new System.Windows.Forms.Padding(0);
|
|
this.panel1.Name = "panel1";
|
|
this.panel1.Size = new System.Drawing.Size(200, 2);
|
|
this.panel1.TabIndex = 149;
|
|
this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown);
|
|
this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove);
|
|
this.panel1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseUp);
|
|
//
|
|
// AForm
|
|
//
|
|
this.ClientSize = new System.Drawing.Size(421, 321);
|
|
this.Controls.Add(this.panel1);
|
|
this.Controls.Add(this.imageBox1);
|
|
this.Controls.Add(this.imageBox2);
|
|
this.Controls.Add(this.imageBox3);
|
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
|
|
this.Name = "AForm";
|
|
((System.ComponentModel.ISupportInitialize)(this.imageBox3)).EndInit();
|
|
((System.ComponentModel.ISupportInitialize)(this.imageBox2)).EndInit();
|
|
((System.ComponentModel.ISupportInitialize)(this.imageBox1)).EndInit();
|
|
this.contextMenuStrip1.ResumeLayout(false);
|
|
this.ResumeLayout(false);
|
|
|
|
}
|
|
|
|
private void imageBox1_MouseClick(object sender, MouseEventArgs e)
|
|
{
|
|
if (e.Button == MouseButtons.Left)
|
|
{
|
|
//this.WindowState = FormWindowState.Minimized;
|
|
this.Visible = false;
|
|
//notifyIcon1.Visible = true;
|
|
}
|
|
}
|
|
|
|
private void imageBox2_MouseClick(object sender, MouseEventArgs e)
|
|
{
|
|
if (e.Button == MouseButtons.Left)
|
|
{
|
|
//this.WindowState = ((this.WindowState == FormWindowState.Maximized) ? FormWindowState.Normal : FormWindowState.Maximized);
|
|
|
|
//imageBox2.IsSelected = (this.WindowState == FormWindowState.Maximized);
|
|
}
|
|
else if (e.Button == MouseButtons.Right)
|
|
{
|
|
this.TopMost = !this.TopMost;
|
|
|
|
if (this.TopMost)
|
|
{
|
|
imageBox2.Image = imageBox2.ImageNormal = Properties.Resources20.maximise3;
|
|
}
|
|
else
|
|
{
|
|
imageBox2.Image = imageBox2.ImageNormal = Properties.Resources20.maximise;
|
|
}
|
|
}
|
|
}
|
|
|
|
protected virtual void imageBox3_MouseClick(object sender, MouseEventArgs e)
|
|
{
|
|
if (e.Button == MouseButtons.Left)
|
|
{
|
|
this.Close();
|
|
}
|
|
}
|
|
|
|
private void panel1_MouseDown(object sender, MouseEventArgs e)
|
|
{
|
|
if (e.Button == MouseButtons.Left)
|
|
{
|
|
isDragging = true;
|
|
startPosition = e.Location;
|
|
}
|
|
}
|
|
|
|
private void panel1_MouseUp(object sender, MouseEventArgs e)
|
|
{
|
|
isDragging = false;
|
|
}
|
|
|
|
private void panel1_MouseMove(object sender, MouseEventArgs e)
|
|
{
|
|
if (isDragging)
|
|
{
|
|
this.Size = new Size(this.Width, e.Y - startPosition.Y + this.Height);
|
|
}
|
|
}
|
|
|
|
private void exitToolStripMenuItem_Click(object sender, EventArgs e) => this.Close();
|
|
|
|
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
|
|
{
|
|
if (e.Button == MouseButtons.Left)
|
|
{
|
|
this.Visible = !this.Visible;
|
|
}
|
|
|
|
//notifyIcon1.Visible = !this.Visible;
|
|
}
|
|
|
|
}
|
|
} |