1 #Region "Microsoft.VisualBasic::2a646fb97d850a9e813b641b202002cf, Microsoft.VisualBasic.Core\ApplicationServices\Terminal\ProgressBar\SwayBar.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Class SwayBar
35     
36     
37     '         Enum direction
38     
39     '             left, right
40     
41     
42     
43     '  
44     
45     '     Constructor: (+1 OverloadsSub New
46     
47     '     Function: BlankPointer
48     
49     '     Sub: [Step], ClearBar, PlacePointer
50     
51     
52     ' /********************************************************************************/
53
54 #End Region
55
56 Imports System.Text
57
58 Namespace Terminal.ProgressBar
59
60     Public Class SwayBar : Inherits AbstractBar
61
62         Private bar As String
63         Private pointer As String
64         Private _blankPointer As String
65         Private counter As Integer
66         Private currdir As direction
67         Private Enum direction
68             right
69             left
70         End Enum
71         Public Sub New()
72             MyBase.New()
73             Me.bar = "|                         |"
74             Me.pointer = "***"
75             Me._blankPointer = Me.BlankPointer()
76             Me.currdir = direction.right
77             Me.counter = 1
78         End Sub
79
80         ''' <summary>
81         ''' sets the atribute blankPointer with a empty string the same length that the pointer
82         ''' </summary>
83         ''' <returns>A string filled with space characters</returns>
84         Private Function BlankPointer() As String
85             Dim blank As New StringBuilder()
86             For cont As Integer = 0 To Me.pointer.Length - 1
87                 blank.Append(" ")
88             Next
89             Return blank.ToString()
90         End Function
91
92         ''' <summary>
93         ''' reset the bar to its original state
94         ''' </summary>
95         Private Sub ClearBar()
96             Me.bar = Me.bar.Replace(Me.pointer, Me._blankPointer)
97         End Sub
98
99         ''' <summary>
100         ''' remove the previous pointer and place it in a new possition
101         ''' </summary>
102         ''' <param name="start">start index</param>
103         ''' <param name="end">end index</param>
104         Private Sub PlacePointer(start As Integer, [end] As Integer)
105             Me.ClearBar()
106             Me.bar = Me.bar.Remove(start, [end])
107             Me.bar = Me.bar.Insert(start, Me.pointer)
108         End Sub
109
110         ''' <summary>
111         ''' prints the progress bar acorrding to pointers and current direction
112         ''' </summary>
113         Public Overrides Sub [Step]()
114             If Me.currdir = direction.right Then
115                 Me.PlacePointer(counter, Me.pointer.Length)
116                 Me.counter += 1
117                 If Me.counter + Me.pointer.Length = Me.bar.Length Then
118                     Me.currdir = direction.left
119                 End If
120             Else
121                 Me.PlacePointer(counter - Me.pointer.Length, Me.pointer.Length)
122                 Me.counter -= 1
123                 If Me.counter = Me.pointer.Length Then
124                     Me.currdir = direction.right
125                 End If
126             End If
127             Console.Write(Me.bar & vbCr)
128         End Sub
129     End Class
130 End Namespace