diff options
| author | FloppyDiskDrive <[email protected]> | 2017-09-21 17:16:49 -0500 |
|---|---|---|
| committer | FloppyDiskDrive <[email protected]> | 2017-09-21 17:16:49 -0500 |
| commit | cf1bf85e01c8d99f052c09b72d2fb2bbbc0b99b0 (patch) | |
| tree | fe0d16447fab2a74b6161b4c981c036a93ed8239 /ShiftOS/ProgressBarEX.vb | |
| parent | 30b6a49d5b0e720eee131e970761ece7c6ed7ef0 (diff) | |
| download | shiftos-rewind-cf1bf85e01c8d99f052c09b72d2fb2bbbc0b99b0.tar.gz shiftos-rewind-cf1bf85e01c8d99f052c09b72d2fb2bbbc0b99b0.tar.bz2 shiftos-rewind-cf1bf85e01c8d99f052c09b72d2fb2bbbc0b99b0.zip | |
Added the SOS code (VB and C#)
Very, very incomplete (C# isn't *remotely* complete.)
Diffstat (limited to 'ShiftOS/ProgressBarEX.vb')
| -rw-r--r-- | ShiftOS/ProgressBarEX.vb | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/ShiftOS/ProgressBarEX.vb b/ShiftOS/ProgressBarEX.vb new file mode 100644 index 0000000..6bf1c1b --- /dev/null +++ b/ShiftOS/ProgressBarEX.vb @@ -0,0 +1,275 @@ + +Public Class ProgressBarEX + +#Region " Properties " + + Private _Value As Integer = 0 + Public Property Value() As Integer + Get + Return _Value + End Get + Set(ByVal value As Integer) + If value >= Me.MinValue And value <= Me.MaxValue Then + _Value = value + Me.Invalidate() + Else + Throw New ArgumentOutOfRangeException("The value must be between the minimum and maximum values.") + End If + End Set + End Property + + Private _Step As Integer = 10 + Public Property [Step]() As Integer + Get + Return _Step + End Get + Set(ByVal value As Integer) + _Step = value + End Set + End Property + + Private _Orientation As ProgressBarOrientation + Public Property Orientation() As ProgressBarOrientation + Get + Return _Orientation + End Get + Set(ByVal value As ProgressBarOrientation) + _Orientation = value + End Set + End Property + + Private _MinValue As Integer = 0 + Public Property MinValue() As Integer + Get + Return _MinValue + End Get + Set(ByVal value As Integer) + If value < Me.MaxValue Then + _MinValue = value + Else + Throw New ArgumentOutOfRangeException("The minimum value must be less than the maximum value.") + End If + End Set + End Property + + Private _MaxValue As Integer = 100 + Public Property MaxValue() As Integer + Get + Return _MaxValue + End Get + Set(ByVal value As Integer) + If value > Me.MinValue Then + _MaxValue = value + Else + Throw New ArgumentOutOfRangeException("The maximum value must be more than the minimum value.") + End If + End Set + End Property + + Private _Color As Color = Color.Lime + Public Property Color() As Color + Get + Return _Color + End Get + Set(ByVal value As Color) + _Color = value + End Set + End Property + + Private _ShowValue As Boolean = True + Public Property ShowValue() As Boolean + Get + Return _ShowValue + End Get + Set(ByVal value As Boolean) + _ShowValue = value + End Set + End Property + + Private _Style As ProgressBarExStyle + Public Property Style() As ProgressBarExStyle + Get + Return _Style + End Get + Set(ByVal value As ProgressBarExStyle) + _Style = value + End Set + End Property + + Private _BlockWidth As Integer = 5 + Public Property BlockWidth() As Integer + Get + Return _BlockWidth + End Get + Set(ByVal value As Integer) + _BlockWidth = value + End Set + End Property + + Private _BlockSeparation As Integer = 3 + Public Property BlockSeparation() As Integer + Get + Return _BlockSeparation + End Get + Set(ByVal value As Integer) + _BlockSeparation = value + End Set + End Property + +#End Region + +#Region " Enums, Variables " + + Public Enum ProgressBarOrientation + Horizontal = 0 + Vertical = 1 + End Enum + + Public Enum ProgressBarExStyle + Blocks = 0 + Continuous = 1 + Marquee = 2 + End Enum + +#End Region + +#Region " Events " + + Public Event PaintBackground(ByVal sender As Object, ByVal e As PaintEventArgs) + Public Event PaintProcess(ByVal sender As Object, ByVal e As ProgressBarProcessPaintEventArgs) + + Public Class ProgressBarProcessPaintEventArgs + Inherits EventArgs + + Public Sub New(ByVal bounds As Rectangle, ByVal g As Graphics, Optional ByVal blocks() As Rectangle = Nothing) + _Bounds = bounds + _Graphics = g + If blocks Is Nothing Then + _Blocks = New Rectangle() {} + Else + _Blocks = blocks + End If + End Sub + + Private _Bounds As Rectangle + Public ReadOnly Property Bounds() As Rectangle + Get + Return _Bounds + End Get + End Property + + Private _Blocks As Rectangle() + Public ReadOnly Property Blocks() As Rectangle() + Get + Return _Blocks + End Get + End Property + + Private _Graphics As Graphics + Public ReadOnly Property Graphics() As Graphics + Get + Return _Graphics + End Get + End Property + + End Class + +#End Region + +#Region " Methods " + + Public Sub PerformStep() + If Me.Step > 0 Then + Me.Value = Math.Min(Me.Value + Me.Step, Me.MaxValue) + Else + Me.Value = Math.Max(Me.Value + Me.Step, Me.MinValue) + End If + End Sub + + Public Sub Increment(ByVal value As Integer) + If value > 0 Then + Me.Value = Math.Min(Me.Value + value, Me.MaxValue) + Else + Me.Value = Math.Max(Me.Value + value, Me.MinValue) + End If + End Sub + +#End Region + +#Region " Process Logic " + + Private Function GetProcessRect() As Rectangle + Dim w As Integer = Me.Width + Dim h As Integer = Me.Height + Dim valRel As Integer = GetRelativeValue() + Return New Rectangle(0, 0, w * valRel \ 100, h) + End Function + + Private Function GetBlocks() As Rectangle() + Dim b As New List(Of Rectangle) + + Dim w As Integer = Me.BlockWidth + Dim h As Integer = Me.Height + Dim r As Rectangle + + Dim x As Integer = 0 + Dim stopX As Integer = CInt((GetRelativeValue() / 100) * Me.Width) + While (x + w <= stopX) + r = New Rectangle(x, 0, w, h) + b.Add(r) + + x += Me.BlockWidth + Me.BlockSeparation + End While + + Return b.ToArray + End Function + + Private Function GetRelativeValue() As Integer + Return CInt(100 * Me.Value / (Me.MaxValue - Me.MinValue)) + End Function + +#End Region + +#Region " Drawing " + + Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) + MyBase.OnPaint(e) + DoPaintBackground(e.Graphics) + DoPaintProcess(e.Graphics) + If Me.ShowValue Then DoPaintValue(e.Graphics) + End Sub + + Private Sub DoPaintBackground(ByVal g As Graphics) + RaiseEvent PaintBackground(Me, New PaintEventArgs(g, Me.ClientRectangle)) + End Sub + + Private Sub DoPaintProcess(ByVal g As Graphics) + Dim rect As Rectangle = GetProcessRect() + Dim blocks() As Rectangle = GetBlocks() + Using brush As New SolidBrush(Me.Color) + If Me.Style = ProgressBarExStyle.Continuous Then + g.FillRectangle(brush, rect) + ElseIf Me.Style = ProgressBarExStyle.Blocks Then + For Each b As Rectangle In blocks + g.FillRectangle(brush, b) + Next + End If + End Using + + Dim e As New ProgressBarProcessPaintEventArgs(rect, g, blocks) + RaiseEvent PaintProcess(Me, e) + End Sub + + Private Sub DoPaintValue(ByVal g As Graphics) + Dim valStr As String = GetRelativeValue.ToString & "%" + Dim sf As New StringFormat() + sf.Alignment = StringAlignment.Center + Dim s As SizeF = g.MeasureString(valStr, Me.Font) + + g.DrawString(valStr, Me.Font, New SolidBrush(Me.ForeColor), (Me.Width - s.Width) / 2, (Me.Height - s.Height) / 2) + End Sub + +#End Region + +End Class + |
