aboutsummaryrefslogtreecommitdiff
path: root/source/WindowsFormsApplication1/Controls/ProgressBarEX.cs
diff options
context:
space:
mode:
authorMichaelTheShifter <[email protected]>2016-06-25 08:10:03 -0400
committerMichaelTheShifter <[email protected]>2016-06-25 08:10:03 -0400
commit84f689b91a73e512b035df40bbcf556b008a3b81 (patch)
treeda1020b2b5866c7ce300ac7b9c97112fe80fa1b3 /source/WindowsFormsApplication1/Controls/ProgressBarEX.cs
parent6707e2076a63dafab686fd533c95fb8ceb6c23fa (diff)
downloadshiftos-c--84f689b91a73e512b035df40bbcf556b008a3b81.tar.gz
shiftos-c--84f689b91a73e512b035df40bbcf556b008a3b81.tar.bz2
shiftos-c--84f689b91a73e512b035df40bbcf556b008a3b81.zip
Sort source code into folders.
It feels better to know what's responsible for what... Plus I removed some un-needed C# stuff.
Diffstat (limited to 'source/WindowsFormsApplication1/Controls/ProgressBarEX.cs')
-rw-r--r--source/WindowsFormsApplication1/Controls/ProgressBarEX.cs340
1 files changed, 340 insertions, 0 deletions
diff --git a/source/WindowsFormsApplication1/Controls/ProgressBarEX.cs b/source/WindowsFormsApplication1/Controls/ProgressBarEX.cs
new file mode 100644
index 0000000..0e64aad
--- /dev/null
+++ b/source/WindowsFormsApplication1/Controls/ProgressBarEX.cs
@@ -0,0 +1,340 @@
+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 ShiftOS
+{
+ public partial class ProgressBarEX : UserControl
+ {
+ public ProgressBarEX()
+ {
+ InitializeComponent();
+ }
+
+ #region " Properties "
+
+ private string _label = "Progress:";
+ private bool show_label = false;
+
+ public string Label
+ {
+ get
+ {
+ return _label;
+ }
+ set
+ {
+ _label = value;
+ this.Invalidate();
+ }
+ }
+
+ public bool ShowLabel
+ {
+ get
+ {
+ return show_label;
+ }
+ set
+ {
+ show_label = value;
+ this.Invalidate();
+ }
+ }
+
+
+ private int _Value = 0;
+ public int Value
+ {
+ get { return _Value; }
+ set
+ {
+ if (value >= this.MinValue & value <= this.MaxValue)
+ {
+ _Value = value;
+ this.Invalidate();
+ }
+ else {
+ throw new ArgumentOutOfRangeException("The value must be between the minimum and maximum values.");
+ }
+ }
+ }
+
+ private int _Step = 10;
+ public int Step
+ {
+ get { return _Step; }
+ set { _Step = value; }
+ }
+
+ private ProgressBarOrientation _Orientation;
+ public ProgressBarOrientation Orientation
+ {
+ get { return _Orientation; }
+ set { _Orientation = value; }
+ }
+
+ private int _MinValue = 0;
+ public int MinValue
+ {
+ get { return _MinValue; }
+ set
+ {
+ if (value < this.MaxValue)
+ {
+ _MinValue = value;
+ }
+ else {
+ throw new ArgumentOutOfRangeException("The minimum value must be less than the maximum value.");
+ }
+ }
+ }
+
+ private int _MaxValue = 100;
+ public int MaxValue
+ {
+ get { return _MaxValue; }
+ set
+ {
+ if (value > this.MinValue)
+ {
+ _MaxValue = value;
+ }
+ else {
+ throw new ArgumentOutOfRangeException("The maximum value must be more than the minimum value.");
+ }
+ }
+ }
+
+ private Color _Color = Color.Lime;
+ public Color Color
+ {
+ get { return _Color; }
+ set { _Color = value; }
+ }
+
+ private bool _ShowValue = true;
+ public bool ShowValue
+ {
+ get { return _ShowValue; }
+ set { _ShowValue = value; }
+ }
+
+ private ProgressBarExStyle _Style;
+ public ProgressBarExStyle Style
+ {
+ get { return _Style; }
+ set { _Style = value; }
+ }
+
+ private int _BlockWidth = 5;
+ public int BlockWidth
+ {
+ get { return _BlockWidth; }
+ set { _BlockWidth = value; }
+ }
+
+ private int _BlockSeparation = 3;
+ public int BlockSeparation
+ {
+ get { return _BlockSeparation; }
+ set { _BlockSeparation = value; }
+ }
+
+#endregion
+
+#region " Enums, Variables "
+
+ public enum ProgressBarOrientation
+ {
+ Horizontal = 0,
+ Vertical = 1
+ }
+
+ public enum ProgressBarExStyle
+ {
+ Blocks = 0,
+ Continuous = 1,
+ Marquee = 2
+ }
+
+#endregion
+
+#region " Events "
+
+ public event PaintBackgroundEventHandler PaintBackground;
+ public delegate void PaintBackgroundEventHandler(object sender, PaintEventArgs e);
+ public event PaintProcessEventHandler PaintProcess;
+ public delegate void PaintProcessEventHandler(object sender, ProgressBarProcessPaintEventArgs e);
+
+ public class ProgressBarProcessPaintEventArgs : EventArgs
+ {
+
+ public ProgressBarProcessPaintEventArgs(Rectangle bounds, Graphics g, Rectangle[] blocks = null)
+ {
+ _Bounds = bounds;
+ _Graphics = g;
+ if (blocks == null)
+ {
+ _Blocks = new Rectangle[] {
+
+ };
+ }
+ else {
+ _Blocks = blocks;
+ }
+ }
+
+ private Rectangle _Bounds;
+ public Rectangle Bounds
+ {
+ get { return _Bounds; }
+ }
+
+ private Rectangle[] _Blocks;
+ public Rectangle[] Blocks
+ {
+ get { return _Blocks; }
+ }
+
+ private Graphics _Graphics;
+ public Graphics Graphics
+ {
+ get { return _Graphics; }
+ }
+
+ }
+
+#endregion
+
+#region " Methods "
+
+ public void PerformStep()
+ {
+ if (this.Step > 0)
+ {
+ this.Value = Math.Min(this.Value + this.Step, this.MaxValue);
+ }
+ else {
+ this.Value = Math.Max(this.Value + this.Step, this.MinValue);
+ }
+ }
+
+ public void Increment(int value)
+ {
+ if (value > 0)
+ {
+ this.Value = Math.Min(this.Value + value, this.MaxValue);
+ }
+ else {
+ this.Value = Math.Max(this.Value + value, this.MinValue);
+ }
+ }
+
+#endregion
+
+#region " Process Logic "
+
+ private Rectangle GetProcessRect()
+ {
+ int w = this.Width;
+ int h = this.Height;
+ int valRel = GetRelativeValue();
+ return new Rectangle(0, 0, w * valRel / 100, h);
+ }
+
+ private Rectangle[] GetBlocks()
+ {
+ List<Rectangle> b = new List<Rectangle>();
+
+ int w = this.BlockWidth;
+ int h = this.Height;
+ Rectangle r;
+
+ int x = 0;
+ int stopX = (int)(GetRelativeValue() / 100) * this.Width;
+ while ((x + w <= stopX))
+ {
+ r = new Rectangle(x, 0, w, h);
+ b.Add(r);
+
+ x += this.BlockWidth + this.BlockSeparation;
+ }
+
+ return b.ToArray();
+ }
+
+ private int GetRelativeValue()
+ {
+ return (int)100 * this.Value / (this.MaxValue - this.MinValue);
+ }
+
+#endregion
+
+#region " Drawing "
+
+ protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
+ {
+ base.OnPaint(e);
+ DoPaintBackground(e.Graphics);
+ DoPaintProcess(e.Graphics);
+ if (this.ShowValue)
+ DoPaintValue(e.Graphics);
+ }
+
+ private void DoPaintBackground(Graphics g)
+ {
+ if (PaintBackground != null)
+ {
+ PaintBackground(this, new PaintEventArgs(g, this.ClientRectangle));
+ }
+ }
+
+ private void DoPaintProcess(Graphics g)
+ {
+ Rectangle rect = GetProcessRect();
+ Rectangle[] blocks = GetBlocks();
+ using (SolidBrush brush = new SolidBrush(this.Color))
+ {
+ if (this.Style == ProgressBarExStyle.Continuous)
+ {
+ g.FillRectangle(brush, rect);
+ }
+ else if (this.Style == ProgressBarExStyle.Blocks)
+ {
+ foreach (Rectangle b in blocks)
+ {
+ g.FillRectangle(brush, b);
+ }
+ }
+ }
+
+ ProgressBarProcessPaintEventArgs e = new ProgressBarProcessPaintEventArgs(rect, g, blocks);
+ if (PaintProcess != null)
+ {
+ PaintProcess(this, e);
+ }
+ }
+
+ private void DoPaintValue(Graphics g)
+ {
+ string valStr = GetRelativeValue().ToString() + "%";
+ if (show_label)
+ valStr = _label + " " + valStr;
+
+ StringFormat sf = new StringFormat();
+ sf.Alignment = StringAlignment.Center;
+ SizeF s = g.MeasureString(valStr, this.Font);
+
+ g.DrawString(valStr, this.Font, new SolidBrush(this.ForeColor), (this.Width - s.Width) / 2, (this.Height - s.Height) / 2);
+ }
+
+#endregion
+ }
+}