From 99fef5c57360f07259fc86f433bed8a9ab59c48e Mon Sep 17 00:00:00 2001 From: lempamo Date: Tue, 22 Aug 2017 20:44:03 -0400 Subject: gtn things --- TimeHACK.Engine/TimeHACK.Engine.csproj | 12 ++ TimeHACK.Engine/UI/ClassicButton.Designer.cs | 91 +++++++++++ TimeHACK.Engine/UI/ClassicButton.cs | 58 +++++++ TimeHACK.Engine/UI/ClassicButton.resx | 120 ++++++++++++++ TimeHACK.Engine/UI/IProgressBar.cs | 234 +++++++++++++++++++++++++++ 5 files changed, 515 insertions(+) create mode 100644 TimeHACK.Engine/UI/ClassicButton.Designer.cs create mode 100644 TimeHACK.Engine/UI/ClassicButton.cs create mode 100644 TimeHACK.Engine/UI/ClassicButton.resx create mode 100644 TimeHACK.Engine/UI/IProgressBar.cs (limited to 'TimeHACK.Engine') diff --git a/TimeHACK.Engine/TimeHACK.Engine.csproj b/TimeHACK.Engine/TimeHACK.Engine.csproj index f326107..056d4dc 100644 --- a/TimeHACK.Engine/TimeHACK.Engine.csproj +++ b/TimeHACK.Engine/TimeHACK.Engine.csproj @@ -78,6 +78,15 @@ WinClassic.cs + + UserControl + + + ClassicButton.cs + + + Component + @@ -104,6 +113,9 @@ WinClassic.cs + + ClassicButton.cs + diff --git a/TimeHACK.Engine/UI/ClassicButton.Designer.cs b/TimeHACK.Engine/UI/ClassicButton.Designer.cs new file mode 100644 index 0000000..b6033b2 --- /dev/null +++ b/TimeHACK.Engine/UI/ClassicButton.Designer.cs @@ -0,0 +1,91 @@ +namespace TimeHACK.Engine.UI +{ + partial class ClassicButton + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.borderpart = new System.Windows.Forms.Panel(); + this.graystuff = new System.Windows.Forms.Panel(); + this.lessgraystuff = new System.Windows.Forms.Label(); + this.borderpart.SuspendLayout(); + this.graystuff.SuspendLayout(); + this.SuspendLayout(); + // + // borderpart + // + this.borderpart.BackColor = System.Drawing.Color.White; + this.borderpart.Controls.Add(this.graystuff); + this.borderpart.Location = new System.Drawing.Point(0, 0); + this.borderpart.Name = "borderpart"; + this.borderpart.Size = new System.Drawing.Size(99, 24); + this.borderpart.TabIndex = 0; + // + // graystuff + // + this.graystuff.BackColor = System.Drawing.Color.Gray; + this.graystuff.Controls.Add(this.lessgraystuff); + this.graystuff.Location = new System.Drawing.Point(1, 1); + this.graystuff.Name = "graystuff"; + this.graystuff.Size = new System.Drawing.Size(98, 23); + this.graystuff.TabIndex = 0; + // + // lessgraystuff + // + this.lessgraystuff.BackColor = System.Drawing.Color.Silver; + this.lessgraystuff.Location = new System.Drawing.Point(0, 0); + this.lessgraystuff.Margin = new System.Windows.Forms.Padding(0); + this.lessgraystuff.Name = "lessgraystuff"; + this.lessgraystuff.Size = new System.Drawing.Size(97, 22); + this.lessgraystuff.TabIndex = 0; + this.lessgraystuff.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.lessgraystuff.Paint += new System.Windows.Forms.PaintEventHandler(this.lessgraystuff_Paint); + // + // ClassicButton + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.Black; + this.Controls.Add(this.borderpart); + this.Name = "ClassicButton"; + this.Size = new System.Drawing.Size(100, 25); + this.Paint += new System.Windows.Forms.PaintEventHandler(this.ClassicButton_Paint); + this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ClassicButton_MouseDown); + this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ClassicButton_MouseUp); + this.Resize += new System.EventHandler(this.ClassicButton_Resize); + this.borderpart.ResumeLayout(false); + this.graystuff.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel borderpart; + private System.Windows.Forms.Panel graystuff; + private System.Windows.Forms.Label lessgraystuff; + } +} diff --git a/TimeHACK.Engine/UI/ClassicButton.cs b/TimeHACK.Engine/UI/ClassicButton.cs new file mode 100644 index 0000000..e61b564 --- /dev/null +++ b/TimeHACK.Engine/UI/ClassicButton.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace TimeHACK.Engine.UI +{ + public partial class ClassicButton : UserControl + { + public ClassicButton() + { + InitializeComponent(); + } + + private void ClassicButton_SizeChanged(object sender, EventArgs e) + { + + } + + private void ClassicButton_MouseDown(object sender, MouseEventArgs e) + { + this.BackColor = Color.White; + borderpart.BackColor = Color.Black; + lessgraystuff.Location = new Point(1, 1); + } + + private void ClassicButton_Paint(object sender, PaintEventArgs e) + { + e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; + base.OnPaint(e); + } + + private void lessgraystuff_Paint(object sender, PaintEventArgs e) + { + e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; + base.OnPaint(e); + } + + private void ClassicButton_MouseUp(object sender, MouseEventArgs e) + { + this.BackColor = Color.Black; + borderpart.BackColor = Color.White; + lessgraystuff.Location = new Point(0, 0); + } + + private void ClassicButton_Resize(object sender, EventArgs e) + { + borderpart.Size = new Size(this.Width - 1, this.Height - 1); + graystuff.Size = new Size(this.Width - 2, this.Height - 2); + lessgraystuff.Size = new Size(this.Width - 3, this.Height - 3); + } + } +} \ No newline at end of file diff --git a/TimeHACK.Engine/UI/ClassicButton.resx b/TimeHACK.Engine/UI/ClassicButton.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/TimeHACK.Engine/UI/ClassicButton.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TimeHACK.Engine/UI/IProgressBar.cs b/TimeHACK.Engine/UI/IProgressBar.cs new file mode 100644 index 0000000..d16debf --- /dev/null +++ b/TimeHACK.Engine/UI/IProgressBar.cs @@ -0,0 +1,234 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace TimeHACK.UI +{ + public class ProgressBar : Control + { + private Color _pColor = Color.DarkBlue; + private ProgressBarStyle _style = ProgressBarStyle.Continuous; + + private Timer RedrawTimer = null; + + public Color ProgressColor + { + get + { + return _pColor; + } + set + { + _pColor = value; Refresh(); + } + } + + + public ProgressBarStyle Style + { + get + { + return _style; + } + set + { + _style = value; Refresh(); + } + } + + + private double _max = 100.0; + private double _min = 0.0; + + public double Maximum + { + get + { + return _max; + } + set + { + _max = value; Refresh(); + } + } + public double Minimum + { + get + { + return _min; + } + set + { + _min = value; Refresh(); + } + } + + + private int _blockWidth = 14; + + public int BlockWidth + { + get + { + return _blockWidth; + } + set + { + _blockWidth = value; + Refresh(); + } + } + + private int _blockSpacing = 2; + + public int BlockSpacing + { + get + { + return _blockSpacing; + } + set + { + _blockSpacing = value; + Refresh(); + } + } + + public ProgressBar() : base() + { + MarqueeWidth = 125; + BlockWidth = 20; + BlockSpacing = 5; + Minimum = 0.00; + Maximum = 100.0; + Style = ProgressBarStyle.Continuous; + ProgressColor = Color.DarkBlue; + RedrawTimer = new Timer(); + RedrawTimer.Tick += (o, a) => + { + if (this.Style == ProgressBarStyle.Marquee) + { + if (_marqueePos >= this.Width) + _marqueePos = 0; + else + _marqueePos++; + this.Refresh(); + } + }; + RedrawTimer.Interval = 50; + } + + private double _value = 0.00; + + public double Value + { + get + { + return _value; + } + set + { + if (value < Minimum || value > Maximum) + throw new ArgumentOutOfRangeException("The value is outside the minimum and maximum range."); + this.Refresh(); + _value = value; + } + } + + private int _marqueeWidth = 14; + + public int MarqueeWidth + { + get + { + return _marqueeWidth; + } + set + { + _marqueeWidth = value; + Refresh(); + } + } + + private bool _showText = false; + + public bool ShowText + { + get + { + return _showText; + } + set + { + _showText = value; + Refresh(); + } + } + + protected override void OnVisibleChanged(EventArgs e) + { + if (Visible) + RedrawTimer.Start(); + else + RedrawTimer.Stop(); + } + + private int _marqueePos = 0; + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + var g = e.Graphics; + g.Clear(BackColor); + //Stolen from the ShiftOS code :3 + switch (Style) + { + case ProgressBarStyle.Continuous: + double width = linear(this.Value, this.Minimum, this.Maximum, 0, this.Width); + g.FillRectangle(new SolidBrush(ProgressColor), new RectangleF(0, 0, (float)width, this.Height)); + break; + case ProgressBarStyle.Blocks: + int block_count = this.Width / (this.BlockWidth + this.BlockSpacing); + int blocks = (int)linear(this.Value, this.Minimum, this.Maximum, 0, block_count); + for (int i = 0; i < blocks - 1; i++) + { + int position = i * (BlockWidth + BlockSpacing); + g.FillRectangle(new SolidBrush(ProgressColor), new Rectangle(position, 0, BlockWidth, this.Height)); + } + break; + case ProgressBarStyle.Marquee: + g.FillRectangle(new SolidBrush(ProgressColor), new Rectangle(_marqueePos, 0, MarqueeWidth, this.Height)); + break; + } + if (ShowText) + { + var f = this.Font; + var t = this.Text; + var size = g.MeasureString(t, f); + var loc = new PointF( + (this.Width - size.Width) / 2, + (this.Height - size.Height) / 2 + ); + var color = this.ForeColor; + g.DrawString(t, f, new SolidBrush(color), loc); + } + + } + + /// + /// Simple linear interpolation algorithm. (http://stackoverflow.com/questions/12838007/c-sharp-linear-interpolation) + /// + private double linear(double x, double x0, double x1, double y0, double y1) + { + if ((x1 - x0) == 0) + { + return (y0 + y1) / 2; + } + return y0 + (x - x0) * (y1 - y0) / (x1 - x0); + } + } +} -- cgit v1.2.3