1 #Region "Microsoft.VisualBasic::29a9366500996532fe82cc1072f8675c, Microsoft.VisualBasic.Core\ApplicationServices\Tools\WinForm\Extensions.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     '     Module Extensions
35     
36     '         Constructor: (+1 OverloadsSub New
37     
38     '         Function: AddFilesHistory, IsPrintableCharacter, ToChar
39     
40     '         Sub: AddFileHistory, AddRowData, Clear, WriteLine
41     
42     
43     ' /********************************************************************************/
44
45 #End Region
46
47 Imports System.Runtime.CompilerServices
48 Imports Microsoft.VisualBasic.Linq
49 Imports Keyboard = System.Windows.Forms.Keys
50
51 Namespace Windows.Forms
52
53     Public Module Extensions
54
55         ReadOnly chars As New Dictionary(Of Keys, Char)
56
57         <Extension>
58         Public Function IsPrintableCharacter(key As Keys) As Boolean
59             Return chars.ContainsKey(key)
60         End Function
61
62         <Extension>
63         Public Function ToChar(key As Keys) As Char
64             If Not key.IsPrintableCharacter Then
65                 Return Nothing
66             Else
67                 Return chars(key)
68             End If
69         End Function
70
71         Sub New()
72             chars(Keyboard.A) = "a"
73             chars(Keyboard.B) = "b"
74             chars(Keyboard.C) = "c"
75             chars(Keyboard.D) = "d"
76             chars(Keyboard.E) = "e"
77             chars(Keyboard.F) = "f"
78             chars(Keyboard.G) = "g"
79             chars(Keyboard.H) = "h"
80             chars(Keyboard.I) = "i"
81             chars(Keyboard.J) = "j"
82             chars(Keyboard.K) = "k"
83             chars(Keyboard.L) = "l"
84             chars(Keyboard.M) = "m"
85             chars(Keyboard.N) = "n"
86             chars(Keyboard.O) = "o"
87             chars(Keyboard.P) = "p"
88             chars(Keyboard.Q) = "q"
89             chars(Keyboard.R) = "r"
90             chars(Keyboard.S) = "s"
91             chars(Keyboard.T) = "t"
92             chars(Keyboard.U) = "u"
93             chars(Keyboard.V) = "v"
94             chars(Keyboard.W) = "w"
95             chars(Keyboard.X) = "x"
96             chars(Keyboard.Y) = "y"
97             chars(Keyboard.Z) = "z"
98             chars(Keyboard.D0) = "0" : chars(Keyboard.NumPad0) = "0"
99             chars(Keyboard.D0) = "1" : chars(Keyboard.NumPad0) = "1"
100             chars(Keyboard.D0) = "2" : chars(Keyboard.NumPad0) = "2"
101             chars(Keyboard.D0) = "3" : chars(Keyboard.NumPad0) = "3"
102             chars(Keyboard.D0) = "4" : chars(Keyboard.NumPad0) = "4"
103             chars(Keyboard.D0) = "5" : chars(Keyboard.NumPad0) = "5"
104             chars(Keyboard.D0) = "6" : chars(Keyboard.NumPad0) = "6"
105             chars(Keyboard.D0) = "7" : chars(Keyboard.NumPad0) = "7"
106             chars(Keyboard.D0) = "8" : chars(Keyboard.NumPad0) = "8"
107             chars(Keyboard.D0) = "9" : chars(Keyboard.NumPad0) = "9"
108         End Sub
109
110         <Extension>
111         Public Sub AddRowData(view As DataGridView, name$, ParamArray values As Object())
112             Call view.Rows.Add(values)
113             Dim count = view.RowCount
114             view.Rows(count - 1).HeaderCell.Value = name
115         End Sub
116
117         <Extension>
118         Public Sub Clear(view As DataGridView)
119             Call view.Columns.Clear()
120             Call view.Rows.Clear()
121         End Sub
122
123         <Extension>
124         Public Function AddFilesHistory(ByRef menu As ToolStripMenuItem, files As IEnumerable(Of String), invoke As Action(Of String), Optional formats As Func(Of StringString) = NothingAs Boolean
125             If formats Is Nothing Then
126                 formats = Function(path$) path$.FileName & $" ({Mid(path, 1, 30)}...)"
127             End If
128
129             For Each path$ In files.SafeQuery
130                 Dim file As New ToolStripMenuItem With {
131                     .Text = formats(path),
132                     .AutoToolTip = True,
133                     .ToolTipText = path
134                 }
135
136                 AddHandler file.Click,
137                     Sub(sender, arg)
138                         Call invoke(path)
139                     End Sub
140
141                 Call menu.DropDownItems.Add(file)
142             Next
143
144             Return True
145         End Function
146
147         ''' <summary>
148         ''' 
149         ''' </summary>
150         ''' <param name="files"></param>
151         ''' <param name="path$"></param>
152         ''' <param name="latestFirst">最近使用的文件被放在列表的头部,否则直接放在列表的尾部</param>
153         ''' 
154         <Extension>
155         Public Sub AddFileHistory(ByRef files As List(Of String), path$, Optional latestFirst As Boolean = True)
156             If files Is Nothing Then
157                 files = New List(Of String)
158             End If
159
160             Dim n As Integer = files.IndexOf(path)
161
162             If n <> -1 Then
163                 Call files.RemoveAt(n)
164             End If
165
166             If latestFirst Then
167                 Call files.Insert(Scan0, path)
168             Else
169                 Call files.Add(path)
170             End If
171         End Sub
172
173         <Extension>
174         Public Sub WriteLine(tb As TextBox, s$)
175             Call tb.AppendText(s & vbCrLf)
176         End Sub
177     End Module
178 End Namespace