View difference between Paste ID: npqvLKH0 and tysHXKU4
SHOW: | | - or go back to the newest paste.
1
Imports System
2
Imports System.Windows.Forms
3
Imports System.Drawing
4
Imports System.Drawing.Drawing2D
5
Imports System.Drawing.Text
6
Imports System.ComponentModel
7
Imports System.Collections.Generic
8
Imports System.Text
9
10
'IMPORTANT:
11
'Please leave these comments in place as they help protect intellectual rights and allow
12
'developers to determine the version of the theme they are using.
13
14
'Name: Net Seal Theme
15
'Created: 4/15/2013
16
'Version: 1.0.0.0 Beta
17
'Site: http://nimoru.com/
18
19
'This work is licensed under a Creative Commons Attribution 3.0 Unported License.
20
'To view a copy of this license, please visit http://creativecommons.org/licenses/by/3.0/
21
22
'Copyright © 2013 Nimoru Software
23
24
Module ThemeModule
25
26
    Friend G As Graphics
27
28
    Sub New()
29
        TextBitmap = New Bitmap(1, 1)
30
        TextGraphics = Graphics.FromImage(TextBitmap)
31
    End Sub
32
33
    Private TextBitmap As Bitmap
34
    Private TextGraphics As Graphics
35
36
    Friend Function MeasureString(text As String, font As Font) As SizeF
37
        Return TextGraphics.MeasureString(text, font)
38
    End Function
39
40
    Friend Function MeasureString(text As String, font As Font, width As Integer) As SizeF
41
        Return TextGraphics.MeasureString(text, font, width, StringFormat.GenericTypographic)
42
    End Function
43
44
    Private CreateRoundPath As GraphicsPath
45
    Private CreateRoundRectangle As Rectangle
46
47
    Friend Function CreateRound(ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal slope As Integer) As GraphicsPath
48
        CreateRoundRectangle = New Rectangle(x, y, width, height)
49
        Return CreateRound(CreateRoundRectangle, slope)
50
    End Function
51
52
    Friend Function CreateRound(ByVal r As Rectangle, ByVal slope As Integer) As GraphicsPath
53
        CreateRoundPath = New GraphicsPath(FillMode.Winding)
54
        CreateRoundPath.AddArc(r.X, r.Y, slope, slope, 180.0F, 90.0F)
55
        CreateRoundPath.AddArc(r.Right - slope, r.Y, slope, slope, 270.0F, 90.0F)
56
        CreateRoundPath.AddArc(r.Right - slope, r.Bottom - slope, slope, slope, 0.0F, 90.0F)
57
        CreateRoundPath.AddArc(r.X, r.Bottom - slope, slope, slope, 90.0F, 90.0F)
58
        CreateRoundPath.CloseFigure()
59
        Return CreateRoundPath
60
    End Function
61
62
End Module
63
64
Class NSTheme
65
    Inherits ThemeContainer154
66
67
    Private _AccentOffset As Integer = 42
68
    Public Property AccentOffset() As Integer
69
        Get
70
            Return _AccentOffset
71
        End Get
72
        Set(ByVal value As Integer)
73
            _AccentOffset = value
74
            Invalidate()
75
        End Set
76
    End Property
77
78
    Sub New()
79
        Header = 30
80
        BackColor = Color.FromArgb(50, 50, 50)
81
82
        P1 = New Pen(Color.FromArgb(35, 35, 35))
83
        P2 = New Pen(Color.FromArgb(60, 60, 60))
84
85
        B1 = New SolidBrush(Color.FromArgb(50, 50, 50))
86
    End Sub
87
88
    Protected Overrides Sub ColorHook()
89
90
    End Sub
91
92
    Private R1 As Rectangle
93
94
    Private P1, P2 As Pen
95
    Private B1 As SolidBrush
96
97
    Private Pad As Integer
98
99
    Protected Overrides Sub PaintHook()
100
        G.Clear(BackColor)
101
        DrawBorders(P2, 1)
102
103
        G.DrawLine(P1, 0, 26, Width, 26)
104
        G.DrawLine(P2, 0, 25, Width, 25)
105
106
        Pad = Math.Max(Measure().Width + 20, 80)
107
        R1 = New Rectangle(Pad, 17, Width - (Pad * 2) + _AccentOffset, 8)
108
109
        G.DrawRectangle(P2, R1)
110
        G.DrawRectangle(P1, R1.X + 1, R1.Y + 1, R1.Width - 2, R1.Height)
111
112
        G.DrawLine(P1, 0, 29, Width, 29)
113
        G.DrawLine(P2, 0, 30, Width, 30)
114
115
        DrawText(Brushes.Black, HorizontalAlignment.Left, 8, 1)
116
        DrawText(Brushes.White, HorizontalAlignment.Left, 7, 0)
117
118
        G.FillRectangle(B1, 0, 27, Width, 2)
119
        DrawBorders(Pens.Black)
120
    End Sub
121
122
End Class
123
124
Class NSButton
125
    Inherits Control
126
127
    Sub New()
128
        SetStyle(DirectCast(139286, ControlStyles), True)
129
        SetStyle(ControlStyles.Selectable, False)
130
131
        P1 = New Pen(Color.FromArgb(35, 35, 35))
132
        P2 = New Pen(Color.FromArgb(65, 65, 65))
133
    End Sub
134
135
    Private IsMouseDown As Boolean
136
137
    Private GP1, GP2 As GraphicsPath
138
139
    Private SZ1 As SizeF
140
    Private PT1 As PointF
141
142
    Private P1, P2 As Pen
143
144
    Private PB1 As PathGradientBrush
145
    Private GB1 As LinearGradientBrush
146
147
    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
148
        G = e.Graphics
149
        G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
150
151
        G.Clear(BackColor)
152
        G.SmoothingMode = SmoothingMode.AntiAlias
153
154
        GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
155
        GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
156
157
        If IsMouseDown Then
158
            PB1 = New PathGradientBrush(GP1)
159
            PB1.CenterColor = Color.FromArgb(60, 60, 60)
160
            PB1.SurroundColors = {Color.FromArgb(55, 55, 55)}
161
            PB1.FocusScales = New PointF(0.8F, 0.5F)
162
163
            G.FillPath(PB1, GP1)
164
        Else
165
            GB1 = New LinearGradientBrush(ClientRectangle, Color.FromArgb(60, 60, 60), Color.FromArgb(55, 55, 55), 90.0F)
166
            G.FillPath(GB1, GP1)
167
        End If
168
169
        G.DrawPath(P1, GP1)
170
        G.DrawPath(P2, GP2)
171
172
        SZ1 = G.MeasureString(Text, Font)
173
        PT1 = New PointF(5, Height \ 2 - SZ1.Height / 2)
174
175
        If IsMouseDown Then
176
            PT1.X += 1.0F
177
            PT1.Y += 1.0F
178
        End If
179
180
        G.DrawString(Text, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
181
        G.DrawString(Text, Font, Brushes.White, PT1)
182
    End Sub
183
184
    Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
185
        IsMouseDown = True
186
        Invalidate()
187
    End Sub
188
189
    Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
190
        IsMouseDown = False
191
        Invalidate()
192
    End Sub
193
194
End Class
195
196
Class NSProgressBar
197
    Inherits Control
198
199
    Private _Minimum As Integer
200
    Property Minimum() As Integer
201
        Get
202
            Return _Minimum
203
        End Get
204
        Set(ByVal value As Integer)
205
            If value < 0 Then
206
                Throw New Exception("Property value is not valid.")
207
            End If
208
209
            _Minimum = value
210
            If value > _Value Then _Value = value
211
            If value > _Maximum Then _Maximum = value
212
            Invalidate()
213
        End Set
214
    End Property
215
216
    Private _Maximum As Integer = 100
217
    Property Maximum() As Integer
218
        Get
219
            Return _Maximum
220
        End Get
221
        Set(ByVal value As Integer)
222
            If value < 0 Then
223
                Throw New Exception("Property value is not valid.")
224
            End If
225
226
            _Maximum = value
227
            If value < _Value Then _Value = value
228
            If value < _Minimum Then _Minimum = value
229
            Invalidate()
230
        End Set
231
    End Property
232
233
    Private _Value As Integer
234
    Property Value() As Integer
235
        Get
236
            Return _Value
237
        End Get
238
        Set(ByVal value As Integer)
239
            If value > _Maximum OrElse value < _Minimum Then
240
                Throw New Exception("Property value is not valid.")
241
            End If
242
243
            _Value = value
244
            Invalidate()
245
        End Set
246
    End Property
247
248
    Private Sub Increment(ByVal amount As Integer)
249
        Value += amount
250
    End Sub
251
252
    Sub New()
253
        SetStyle(DirectCast(139286, ControlStyles), True)
254
        SetStyle(ControlStyles.Selectable, False)
255
256
        P1 = New Pen(Color.FromArgb(35, 35, 35))
257
        P2 = New Pen(Color.FromArgb(55, 55, 55))
258
        B1 = New SolidBrush(Color.FromArgb(200, 160, 0))
259
    End Sub
260
261
    Private GP1, GP2, GP3 As GraphicsPath
262
263
    Private R1, R2 As Rectangle
264
265
    Private P1, P2 As Pen
266
    Private B1 As SolidBrush
267
    Private GB1, GB2 As LinearGradientBrush
268
269
    Private I1 As Integer
270
271
    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
272
        G = e.Graphics
273
274
        G.Clear(BackColor)
275
        G.SmoothingMode = SmoothingMode.AntiAlias
276
277
        GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
278
        GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
279
280
        R1 = New Rectangle(0, 2, Width - 1, Height - 1)
281
        GB1 = New LinearGradientBrush(R1, Color.FromArgb(45, 45, 45), Color.FromArgb(50, 50, 50), 90.0F)
282
283
        G.SetClip(GP1)
284
        G.FillRectangle(GB1, R1)
285
286
        I1 = CInt((_Value - _Minimum) / (_Maximum - _Minimum) * (Width - 3))
287
288
        If I1 > 1 Then
289
            GP3 = CreateRound(1, 1, I1, Height - 3, 7)
290
291
            R2 = New Rectangle(1, 1, I1, Height - 3)
292
            GB2 = New LinearGradientBrush(R2, Color.FromArgb(205, 150, 0), Color.FromArgb(150, 110, 0), 90.0F)
293
294
            G.FillPath(GB2, GP3)
295
            G.DrawPath(P1, GP3)
296
297
            G.SetClip(GP3)
298
            G.SmoothingMode = SmoothingMode.None
299
300
            G.FillRectangle(B1, R2.X, R2.Y + 1, R2.Width, R2.Height \ 2)
301
302
            G.SmoothingMode = SmoothingMode.AntiAlias
303
            G.ResetClip()
304
        End If
305
306
        G.DrawPath(P2, GP1)
307
        G.DrawPath(P1, GP2)
308
    End Sub
309
310
End Class
311
312
Class NSLabel
313
    Inherits Control
314
315
    Sub New()
316
        SetStyle(DirectCast(139286, ControlStyles), True)
317
        SetStyle(ControlStyles.Selectable, False)
318
319
        Font = New Font("Segoe UI", 11.25F, FontStyle.Bold)
320
321
        B1 = New SolidBrush(Color.FromArgb(205, 150, 0))
322
    End Sub
323
324
    Private _Value1 As String = "NET"
325
    Public Property Value1() As String
326
        Get
327
            Return _Value1
328
        End Get
329
        Set(ByVal value As String)
330
            _Value1 = value
331
            Invalidate()
332
        End Set
333
    End Property
334
335
    Private _Value2 As String = "SEAL"
336
    Public Property Value2() As String
337
        Get
338
            Return _Value2
339
        End Get
340
        Set(ByVal value As String)
341
            _Value2 = value
342
            Invalidate()
343
        End Set
344
    End Property
345
346
    Private B1 As SolidBrush
347
348
    Private PT1, PT2 As PointF
349
    Private SZ1, SZ2 As SizeF
350
351
    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
352
        G = e.Graphics
353
        G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
354
355
        G.Clear(BackColor)
356
357
        SZ1 = G.MeasureString(Value1, Font, Width, StringFormat.GenericTypographic)
358
        SZ2 = G.MeasureString(Value2, Font, Width, StringFormat.GenericTypographic)
359
360
        PT1 = New PointF(0, Height \ 2 - SZ1.Height / 2)
361
        PT2 = New PointF(SZ1.Width + 1, Height \ 2 - SZ1.Height / 2)
362
363
        G.DrawString(Value1, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
364
        G.DrawString(Value1, Font, Brushes.White, PT1)
365
366
        G.DrawString(Value2, Font, Brushes.Black, PT2.X + 1, PT2.Y + 1)
367
        G.DrawString(Value2, Font, B1, PT2)
368
    End Sub
369
370
End Class
371
372
<DefaultEvent("TextChanged")> _
373
Class NSTextBox
374
    Inherits Control
375
376
    Private _TextAlign As HorizontalAlignment = HorizontalAlignment.Left
377
    Property TextAlign() As HorizontalAlignment
378
        Get
379
            Return _TextAlign
380
        End Get
381
        Set(ByVal value As HorizontalAlignment)
382
            _TextAlign = value
383
            If Base IsNot Nothing Then
384
                Base.TextAlign = value
385
            End If
386
        End Set
387
    End Property
388
389
    Private _MaxLength As Integer = 32767
390
    Property MaxLength() As Integer
391
        Get
392
            Return _MaxLength
393
        End Get
394
        Set(ByVal value As Integer)
395
            _MaxLength = value
396
            If Base IsNot Nothing Then
397
                Base.MaxLength = value
398
            End If
399
        End Set
400
    End Property
401
402
    Private _ReadOnly As Boolean
403
    Property [ReadOnly]() As Boolean
404
        Get
405
            Return _ReadOnly
406
        End Get
407
        Set(ByVal value As Boolean)
408
            _ReadOnly = value
409
            If Base IsNot Nothing Then
410
                Base.ReadOnly = value
411
            End If
412
        End Set
413
    End Property
414
415
    Private _UseSystemPasswordChar As Boolean
416
    Property UseSystemPasswordChar() As Boolean
417
        Get
418
            Return _UseSystemPasswordChar
419
        End Get
420
        Set(ByVal value As Boolean)
421
            _UseSystemPasswordChar = value
422
            If Base IsNot Nothing Then
423
                Base.UseSystemPasswordChar = value
424
            End If
425
        End Set
426
    End Property
427
428
    Private _Multiline As Boolean
429
    Property Multiline() As Boolean
430
        Get
431
            Return _Multiline
432
        End Get
433
        Set(ByVal value As Boolean)
434
            _Multiline = value
435
            If Base IsNot Nothing Then
436
                Base.Multiline = value
437
438
                If value Then
439
                    Base.Height = Height - 11
440
                Else
441
                    Height = Base.Height + 11
442
                End If
443
            End If
444
        End Set
445
    End Property
446
447
    Overrides Property Text As String
448
        Get
449
            Return MyBase.Text
450
        End Get
451
        Set(ByVal value As String)
452
            MyBase.Text = value
453
            If Base IsNot Nothing Then
454
                Base.Text = value
455
            End If
456
        End Set
457
    End Property
458
459
    Overrides Property Font As Font
460
        Get
461
            Return MyBase.Font
462
        End Get
463
        Set(ByVal value As Font)
464
            MyBase.Font = value
465
            If Base IsNot Nothing Then
466
                Base.Font = value
467
                Base.Location = New Point(5, 5)
468
                Base.Width = Width - 8
469
470
                If Not _Multiline Then
471
                    Height = Base.Height + 11
472
                End If
473
            End If
474
        End Set
475
    End Property
476
477
    Protected Overrides Sub OnHandleCreated(e As EventArgs)
478
        If Not Controls.Contains(Base) Then
479
            Controls.Add(Base)
480
        End If
481
482
        MyBase.OnHandleCreated(e)
483
    End Sub
484
485
    Private Base As TextBox
486
    Sub New()
487
        SetStyle(DirectCast(139286, ControlStyles), True)
488
        SetStyle(ControlStyles.Selectable, True)
489
490
        Cursor = Cursors.IBeam
491
492
        Base = New TextBox
493
        Base.Font = Font
494
        Base.Text = Text
495
        Base.MaxLength = _MaxLength
496
        Base.Multiline = _Multiline
497
        Base.ReadOnly = _ReadOnly
498
        Base.UseSystemPasswordChar = _UseSystemPasswordChar
499
500
        Base.ForeColor = Color.White
501
        Base.BackColor = Color.FromArgb(50, 50, 50)
502
503
        Base.BorderStyle = BorderStyle.None
504
505
        Base.Location = New Point(5, 5)
506
        Base.Width = Width - 14
507
508
        If _Multiline Then
509
            Base.Height = Height - 11
510
        Else
511
            Height = Base.Height + 11
512
        End If
513
514
        AddHandler Base.TextChanged, AddressOf OnBaseTextChanged
515
        AddHandler Base.KeyDown, AddressOf OnBaseKeyDown
516
517
        P1 = New Pen(Color.FromArgb(35, 35, 35))
518
        P2 = New Pen(Color.FromArgb(55, 55, 55))
519
    End Sub
520
521
    Private GP1, GP2 As GraphicsPath
522
523
    Private P1, P2 As Pen
524
    Private PB1 As PathGradientBrush
525
526
    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
527
        G = e.Graphics
528
529
        G.Clear(BackColor)
530
        G.SmoothingMode = SmoothingMode.AntiAlias
531
532
        GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
533
        GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
534
535
        PB1 = New PathGradientBrush(GP1)
536
        PB1.CenterColor = Color.FromArgb(50, 50, 50)
537
        PB1.SurroundColors = {Color.FromArgb(45, 45, 45)}
538
        PB1.FocusScales = New PointF(0.9F, 0.5F)
539
540
        G.FillPath(PB1, GP1)
541
542
        G.DrawPath(P2, GP1)
543
        G.DrawPath(P1, GP2)
544
    End Sub
545
546
    Private Sub OnBaseTextChanged(ByVal s As Object, ByVal e As EventArgs)
547
        Text = Base.Text
548
    End Sub
549
550
    Private Sub OnBaseKeyDown(ByVal s As Object, ByVal e As KeyEventArgs)
551
        If e.Control AndAlso e.KeyCode = Keys.A Then
552
            Base.SelectAll()
553
            e.SuppressKeyPress = True
554
        End If
555
    End Sub
556
557
    Protected Overrides Sub OnResize(ByVal e As EventArgs)
558
        Base.Location = New Point(5, 5)
559
560
        Base.Width = Width - 10
561
        Base.Height = Height - 11
562
563
        MyBase.OnResize(e)
564
    End Sub
565
566
    Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
567
        Base.Focus()
568
        MyBase.OnMouseDown(e)
569
    End Sub
570
571
    Protected Overrides Sub OnEnter(e As EventArgs)
572
        Base.Focus()
573
        Invalidate()
574
        MyBase.OnEnter(e)
575
    End Sub
576
577
    Protected Overrides Sub OnLeave(e As EventArgs)
578
        Invalidate()
579
        MyBase.OnLeave(e)
580
    End Sub
581
582
End Class
583
584
<DefaultEvent("CheckedChanged")> _
585
Class NSCheckBox
586
    Inherits Control
587
588
    Event CheckedChanged(sender As Object)
589
590
    Sub New()
591
        SetStyle(DirectCast(139286, ControlStyles), True)
592
        SetStyle(ControlStyles.Selectable, False)
593
594
        P11 = New Pen(Color.FromArgb(55, 55, 55))
595
        P22 = New Pen(Color.FromArgb(35, 35, 35))
596
        P3 = New Pen(Color.Black, 2.0F)
597
        P4 = New Pen(Color.White, 2.0F)
598
    End Sub
599
600
    Private _Checked As Boolean
601
    Public Property Checked() As Boolean
602
        Get
603
            Return _Checked
604
        End Get
605
        Set(ByVal value As Boolean)
606
            _Checked = value
607
            RaiseEvent CheckedChanged(Me)
608
609
            Invalidate()
610
        End Set
611
    End Property
612
613
    Private GP1, GP2 As GraphicsPath
614
615
    Private SZ1 As SizeF
616
    Private PT1 As PointF
617
618
    Private P11, P22, P3, P4 As Pen
619
620
    Private PB1 As PathGradientBrush
621
622
    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
623
        G = e.Graphics
624
        G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
625
626
        G.Clear(BackColor)
627
        G.SmoothingMode = SmoothingMode.AntiAlias
628
629
        GP1 = CreateRound(0, 2, Height - 5, Height - 5, 5)
630
        GP2 = CreateRound(1, 3, Height - 7, Height - 7, 5)
631
632
        PB1 = New PathGradientBrush(GP1)
633
        PB1.CenterColor = Color.FromArgb(50, 50, 50)
634
        PB1.SurroundColors = {Color.FromArgb(45, 45, 45)}
635
        PB1.FocusScales = New PointF(0.3F, 0.3F)
636
637
        G.FillPath(PB1, GP1)
638
        G.DrawPath(P11, GP1)
639
        G.DrawPath(P22, GP2)
640
641
        If _Checked Then
642
            G.DrawLine(P3, 5, Height - 9, 8, Height - 7)
643
            G.DrawLine(P3, 7, Height - 7, Height - 8, 7)
644
645
            G.DrawLine(P4, 4, Height - 10, 7, Height - 8)
646
            G.DrawLine(P4, 6, Height - 8, Height - 9, 6)
647
        End If
648
649
        SZ1 = G.MeasureString(Text, Font)
650
        PT1 = New PointF(Height - 3, Height \ 2 - SZ1.Height / 2)
651
652
        G.DrawString(Text, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
653
        G.DrawString(Text, Font, Brushes.White, PT1)
654
    End Sub
655
656
    Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
657
        Checked = Not Checked
658
    End Sub
659
660
End Class
661
662
<DefaultEvent("CheckedChanged")> _
663
Class NSRadioButton
664
    Inherits Control
665
666
    Event CheckedChanged(sender As Object)
667
668
    Sub New()
669
        SetStyle(DirectCast(139286, ControlStyles), True)
670
        SetStyle(ControlStyles.Selectable, False)
671
672
        P1 = New Pen(Color.FromArgb(55, 55, 55))
673
        P2 = New Pen(Color.FromArgb(35, 35, 35))
674
    End Sub
675
676
    Private _Checked As Boolean
677
    Public Property Checked() As Boolean
678
        Get
679
            Return _Checked
680
        End Get
681
        Set(ByVal value As Boolean)
682
            _Checked = value
683
684
            If _Checked Then
685
                InvalidateParent()
686
            End If
687
688
            RaiseEvent CheckedChanged(Me)
689
            Invalidate()
690
        End Set
691
    End Property
692
693
    Private Sub InvalidateParent()
694
        If Parent Is Nothing Then Return
695
696
        For Each C As Control In Parent.Controls
697
            If Not (C Is Me) AndAlso (TypeOf C Is NSRadioButton) Then
698
                DirectCast(C, NSRadioButton).Checked = False
699
            End If
700
        Next
701
    End Sub
702
703
    Private GP1 As GraphicsPath
704
705
    Private SZ1 As SizeF
706
    Private PT1 As PointF
707
708
    Private P1, P2 As Pen
709
710
    Private PB1 As PathGradientBrush
711
712
    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
713
        G = e.Graphics
714
        G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
715
716
        G.Clear(BackColor)
717
        G.SmoothingMode = SmoothingMode.AntiAlias
718
719
        GP1 = New GraphicsPath
720
        GP1.AddEllipse(0, 2, Height - 5, Height - 5)
721
722
        PB1 = New PathGradientBrush(GP1)
723
        PB1.CenterColor = Color.FromArgb(50, 50, 50)
724
        PB1.SurroundColors = {Color.FromArgb(45, 45, 45)}
725
        PB1.FocusScales = New PointF(0.3F, 0.3F)
726
727
        G.FillPath(PB1, GP1)
728
729
        G.DrawEllipse(P1, 0, 2, Height - 5, Height - 5)
730
        G.DrawEllipse(P2, 1, 3, Height - 7, Height - 7)
731
732
        If _Checked Then
733
            G.FillEllipse(Brushes.Black, 6, 8, Height - 15, Height - 15)
734
            G.FillEllipse(Brushes.White, 5, 7, Height - 15, Height - 15)
735
        End If
736
737
        SZ1 = G.MeasureString(Text, Font)
738
        PT1 = New PointF(Height - 3, Height \ 2 - SZ1.Height / 2)
739
740
        G.DrawString(Text, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
741
        G.DrawString(Text, Font, Brushes.White, PT1)
742
    End Sub
743
744
    Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
745
        Checked = True
746
        MyBase.OnMouseDown(e)
747
    End Sub
748
749
End Class
750
751
Class NSComboBox
752
    Inherits ComboBox
753
754
    Sub New()
755
        SetStyle(DirectCast(139286, ControlStyles), True)
756
        SetStyle(ControlStyles.Selectable, False)
757
758
        DrawMode = Windows.Forms.DrawMode.OwnerDrawFixed
759
        DropDownStyle = ComboBoxStyle.DropDownList
760
761
        BackColor = Color.FromArgb(50, 50, 50)
762
        ForeColor = Color.White
763
764
        P1 = New Pen(Color.FromArgb(35, 35, 35))
765
        P2 = New Pen(Color.White, 2.0F)
766
        P3 = New Pen(Brushes.Black, 2.0F)
767
        P4 = New Pen(Color.FromArgb(65, 65, 65))
768
769
        B1 = New SolidBrush(Color.FromArgb(65, 65, 65))
770
        B2 = New SolidBrush(Color.FromArgb(55, 55, 55))
771
    End Sub
772
773
    Private GP1, GP2 As GraphicsPath
774
775
    Private SZ1 As SizeF
776
    Private PT1 As PointF
777
778
    Private P1, P2, P3, P4 As Pen
779
    Private B1, B2 As SolidBrush
780
781
    Private GB1 As LinearGradientBrush
782
783
    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
784
        G = e.Graphics
785
        G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
786
787
        G.Clear(BackColor)
788
        G.SmoothingMode = SmoothingMode.AntiAlias
789
790
        GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
791
        GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
792
793
        GB1 = New LinearGradientBrush(ClientRectangle, Color.FromArgb(60, 60, 60), Color.FromArgb(55, 55, 55), 90.0F)
794
        G.SetClip(GP1)
795
        G.FillRectangle(GB1, ClientRectangle)
796
        G.ResetClip()
797
798
        G.DrawPath(P1, GP1)
799
        G.DrawPath(P4, GP2)
800
801
        SZ1 = G.MeasureString(Text, Font)
802
        PT1 = New PointF(5, Height \ 2 - SZ1.Height / 2)
803
804
        G.DrawString(Text, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
805
        G.DrawString(Text, Font, Brushes.White, PT1)
806
807
        G.DrawLine(P3, Width - 15, 10, Width - 11, 13)
808
        G.DrawLine(P3, Width - 7, 10, Width - 11, 13)
809
        G.DrawLine(Pens.Black, Width - 11, 13, Width - 11, 14)
810
811
        G.DrawLine(P2, Width - 16, 9, Width - 12, 12)
812
        G.DrawLine(P2, Width - 8, 9, Width - 12, 12)
813
        G.DrawLine(Pens.White, Width - 12, 12, Width - 12, 13)
814
815
        G.DrawLine(P1, Width - 22, 0, Width - 22, Height)
816
        G.DrawLine(P4, Width - 23, 1, Width - 23, Height - 2)
817
        G.DrawLine(P4, Width - 21, 1, Width - 21, Height - 2)
818
    End Sub
819
820
    Protected Overrides Sub OnDrawItem(e As DrawItemEventArgs)
821
        e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
822
823
        If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
824
            e.Graphics.FillRectangle(B1, e.Bounds)
825
        Else
826
            e.Graphics.FillRectangle(B2, e.Bounds)
827
        End If
828
829
        If Not e.Index = -1 Then
830
            e.Graphics.DrawString(GetItemText(Items(e.Index)), e.Font, Brushes.White, e.Bounds)
831
        End If
832
    End Sub
833
834
End Class
835
836
Class NSTabControl
837
    Inherits TabControl
838
839
    Sub New()
840
        SetStyle(DirectCast(139286, ControlStyles), True)
841
        SetStyle(ControlStyles.Selectable, False)
842
843
        SizeMode = TabSizeMode.Fixed
844
        Alignment = TabAlignment.Left
845
        ItemSize = New Size(28, 115)
846
847
        DrawMode = TabDrawMode.OwnerDrawFixed
848
849
        P1 = New Pen(Color.FromArgb(55, 55, 55))
850
        P2 = New Pen(Color.FromArgb(35, 35, 35))
851
        P3 = New Pen(Color.FromArgb(45, 45, 45), 2)
852
853
        B1 = New SolidBrush(Color.FromArgb(50, 50, 50))
854
        B2 = New SolidBrush(Color.FromArgb(35, 35, 35))
855
        B3 = New SolidBrush(Color.FromArgb(205, 150, 0))
856
        B4 = New SolidBrush(Color.FromArgb(65, 65, 65))
857
858
        SF1 = New StringFormat()
859
        SF1.LineAlignment = StringAlignment.Center
860
    End Sub
861
862
    Protected Overrides Sub OnControlAdded(e As ControlEventArgs)
863
        If TypeOf e.Control Is TabPage Then
864
            e.Control.BackColor = Color.FromArgb(50, 50, 50)
865
        End If
866
867
        MyBase.OnControlAdded(e)
868
    End Sub
869
870
    Private GP1, GP2, GP3, GP4 As GraphicsPath
871
872
    Private R1, R2 As Rectangle
873
874
    Private P1, P2, P3 As Pen
875
    Private B1, B2, B3, B4 As SolidBrush
876
877
    Private PB1 As PathGradientBrush
878
879
    Private TP1 As TabPage
880
    Private SF1 As StringFormat
881
882
    Private Offset As Integer
883
    Private ItemHeight As Integer
884
885
    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
886
        G = e.Graphics
887
        G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
888
889
        G.Clear(Color.FromArgb(50, 50, 50))
890
        G.SmoothingMode = SmoothingMode.AntiAlias
891
892
        ItemHeight = ItemSize.Height + 2
893
894
        GP1 = CreateRound(0, 0, ItemHeight + 3, Height - 1, 7)
895
        GP2 = CreateRound(1, 1, ItemHeight + 3, Height - 3, 7)
896
897
        PB1 = New PathGradientBrush(GP1)
898
        PB1.CenterColor = Color.FromArgb(50, 50, 50)
899
        PB1.SurroundColors = {Color.FromArgb(45, 45, 45)}
900
        PB1.FocusScales = New PointF(0.8F, 0.95F)
901
902
        G.FillPath(PB1, GP1)
903
904
        G.DrawPath(P1, GP1)
905
        G.DrawPath(P2, GP2)
906
907
        For I As Integer = 0 To TabCount - 1
908
            R1 = GetTabRect(I)
909
            R1.Y += 2
910
            R1.Height -= 3
911
            R1.Width += 1
912
            R1.X -= 1
913
914
            TP1 = TabPages(I)
915
            Offset = 0
916
917
            If SelectedIndex = I Then
918
                G.FillRectangle(B1, R1)
919
920
                For J As Integer = 0 To 1
921
                    G.FillRectangle(B2, R1.X + 5 + (J * 5), R1.Y + 6, 2, R1.Height - 9)
922
923
                    G.SmoothingMode = SmoothingMode.None
924
                    G.FillRectangle(B3, R1.X + 5 + (J * 5), R1.Y + 5, 2, R1.Height - 9)
925
                    G.SmoothingMode = SmoothingMode.AntiAlias
926
927
                    Offset += 5
928
                Next
929
930
                G.DrawRectangle(P3, R1.X + 1, R1.Y - 1, R1.Width, R1.Height + 2)
931
                G.DrawRectangle(P1, R1.X + 1, R1.Y + 1, R1.Width - 2, R1.Height - 2)
932
                G.DrawRectangle(P2, R1)
933
            Else
934
                For J As Integer = 0 To 1
935
                    G.FillRectangle(B2, R1.X + 5 + (J * 5), R1.Y + 6, 2, R1.Height - 9)
936
937
                    G.SmoothingMode = SmoothingMode.None
938
                    G.FillRectangle(B4, R1.X + 5 + (J * 5), R1.Y + 5, 2, R1.Height - 9)
939
                    G.SmoothingMode = SmoothingMode.AntiAlias
940
941
                    Offset += 5
942
                Next
943
            End If
944
945
            R1.X += 5 + Offset
946
947
            R2 = R1
948
            R2.Y += 1
949
            R2.X += 1
950
951
            G.DrawString(TP1.Text, Font, Brushes.Black, R2, SF1)
952
            G.DrawString(TP1.Text, Font, Brushes.White, R1, SF1)
953
        Next
954
955
        GP3 = CreateRound(ItemHeight, 0, Width - ItemHeight - 1, Height - 1, 7)
956
        GP4 = CreateRound(ItemHeight + 1, 1, Width - ItemHeight - 3, Height - 3, 7)
957
958
        G.DrawPath(P2, GP3)
959
        G.DrawPath(P1, GP4)
960
    End Sub
961
962
End Class
963
964
<DefaultEvent("CheckedChanged")> _
965
Class NSOnOffBox
966
    Inherits Control
967
968
    Event CheckedChanged(sender As Object)
969
970
    Sub New()
971
        SetStyle(DirectCast(139286, ControlStyles), True)
972
        SetStyle(ControlStyles.Selectable, False)
973
974
        P1 = New Pen(Color.FromArgb(55, 55, 55))
975
        P2 = New Pen(Color.FromArgb(35, 35, 35))
976
        P3 = New Pen(Color.FromArgb(65, 65, 65))
977
978
        B1 = New SolidBrush(Color.FromArgb(35, 35, 35))
979
        B2 = New SolidBrush(Color.FromArgb(85, 85, 85))
980
        B3 = New SolidBrush(Color.FromArgb(65, 65, 65))
981
        B4 = New SolidBrush(Color.FromArgb(205, 150, 0))
982
        B5 = New SolidBrush(Color.FromArgb(40, 40, 40))
983
984
        SF1 = New StringFormat()
985
        SF1.LineAlignment = StringAlignment.Center
986
        SF1.Alignment = StringAlignment.Near
987
988
        SF2 = New StringFormat()
989
        SF2.LineAlignment = StringAlignment.Center
990
        SF2.Alignment = StringAlignment.Far
991
    End Sub
992
993
    Private _Checked As Boolean
994
    Public Property Checked() As Boolean
995
        Get
996
            Return _Checked
997
        End Get
998
        Set(ByVal value As Boolean)
999
            _Checked = value
1000
            RaiseEvent CheckedChanged(Me)
1001
1002
            Invalidate()
1003
        End Set
1004
    End Property
1005
1006
    Private GP1, GP2, GP3, GP4 As GraphicsPath
1007
1008
    Private P1, P2, P3 As Pen
1009
    Private B1, B2, B3, B4, B5 As SolidBrush
1010
1011
    Private PB1 As PathGradientBrush
1012
    Private GB1 As LinearGradientBrush
1013
1014
    Private R1, R2, R3 As Rectangle
1015
    Private SF1, SF2 As StringFormat
1016
1017
    Private Offset As Integer
1018
1019
    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
1020
        G = e.Graphics
1021
        G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
1022
1023
        G.Clear(BackColor)
1024
        G.SmoothingMode = SmoothingMode.AntiAlias
1025
1026
        GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
1027
        GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
1028
1029
        PB1 = New PathGradientBrush(GP1)
1030
        PB1.CenterColor = Color.FromArgb(50, 50, 50)
1031
        PB1.SurroundColors = {Color.FromArgb(45, 45, 45)}
1032
        PB1.FocusScales = New PointF(0.3F, 0.3F)
1033
1034
        G.FillPath(PB1, GP1)
1035
        G.DrawPath(P1, GP1)
1036
        G.DrawPath(P2, GP2)
1037
1038
        R1 = New Rectangle(5, 0, Width - 10, Height + 2)
1039
        R2 = New Rectangle(6, 1, Width - 10, Height + 2)
1040
1041
        R3 = New Rectangle(1, 1, (Width \ 2) - 1, Height - 3)
1042
1043
        If _Checked Then
1044
            G.DrawString("On", Font, Brushes.Black, R2, SF1)
1045
            G.DrawString("On", Font, Brushes.White, R1, SF1)
1046
1047
            R3.X += (Width \ 2) - 1
1048
        Else
1049
            G.DrawString("Off", Font, B1, R2, SF2)
1050
            G.DrawString("Off", Font, B2, R1, SF2)
1051
        End If
1052
1053
        GP3 = CreateRound(R3, 7)
1054
        GP4 = CreateRound(R3.X + 1, R3.Y + 1, R3.Width - 2, R3.Height - 2, 7)
1055
1056
        GB1 = New LinearGradientBrush(ClientRectangle, Color.FromArgb(60, 60, 60), Color.FromArgb(55, 55, 55), 90.0F)
1057
1058
        G.FillPath(GB1, GP3)
1059
        G.DrawPath(P2, GP3)
1060
        G.DrawPath(P3, GP4)
1061
1062
        Offset = R3.X + (R3.Width \ 2) - 3
1063
1064
        For I As Integer = 0 To 1
1065
            If _Checked Then
1066
                G.FillRectangle(B1, Offset + (I * 5), 7, 2, Height - 14)
1067
            Else
1068
                G.FillRectangle(B3, Offset + (I * 5), 7, 2, Height - 14)
1069
            End If
1070
1071
            G.SmoothingMode = SmoothingMode.None
1072
1073
            If _Checked Then
1074
                G.FillRectangle(B4, Offset + (I * 5), 7, 2, Height - 14)
1075
            Else
1076
                G.FillRectangle(B5, Offset + (I * 5), 7, 2, Height - 14)
1077
            End If
1078
1079
            G.SmoothingMode = SmoothingMode.AntiAlias
1080
        Next
1081
    End Sub
1082
1083
    Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
1084
        Checked = Not Checked
1085
        MyBase.OnMouseDown(e)
1086
    End Sub
1087
1088
End Class
1089
1090
Class NSControlButton
1091
    Inherits Control
1092
1093
    Enum Button As Byte
1094
        None = 0
1095
        Minimize = 1
1096
        MaximizeRestore = 2
1097
        Close = 3
1098
    End Enum
1099
1100
    Private _ControlButton As Button = Button.Close
1101
    Public Property ControlButton() As Button
1102
        Get
1103
            Return _ControlButton
1104
        End Get
1105
        Set(ByVal value As Button)
1106
            _ControlButton = value
1107
            Invalidate()
1108
        End Set
1109
    End Property
1110
1111
    Sub New()
1112
        SetStyle(DirectCast(139286, ControlStyles), True)
1113
        SetStyle(ControlStyles.Selectable, False)
1114
1115
        Anchor = AnchorStyles.Top Or AnchorStyles.Right
1116
1117
        Width = 18
1118
        Height = 20
1119
1120
        MinimumSize = Size
1121
        MaximumSize = Size
1122
1123
        Margin = New Padding(0)
1124
    End Sub
1125
1126
    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
1127
        G = e.Graphics
1128
        G.Clear(BackColor)
1129
1130
        Select Case _ControlButton
1131
            Case Button.Minimize
1132
                DrawMinimize(3, 10)
1133
            Case Button.MaximizeRestore
1134
                If FindForm().WindowState = FormWindowState.Normal Then
1135
                    DrawMaximize(3, 5)
1136
                Else
1137
                    DrawRestore(3, 4)
1138
                End If
1139
            Case Button.Close
1140
                DrawClose(4, 5)
1141
        End Select
1142
    End Sub
1143
1144
    Private Sub DrawMinimize(ByVal x As Integer, ByVal y As Integer)
1145
        G.FillRectangle(Brushes.White, x, y, 12, 5)
1146
        G.DrawRectangle(Pens.Black, x, y, 11, 4)
1147
    End Sub
1148
1149
    Private Sub DrawMaximize(ByVal x As Integer, ByVal y As Integer)
1150
        G.DrawRectangle(New Pen(Color.White, 2), x + 2, y + 2, 8, 6)
1151
        G.DrawRectangle(Pens.Black, x, y, 11, 9)
1152
        G.DrawRectangle(Pens.Black, x + 3, y + 3, 5, 3)
1153
    End Sub
1154
1155
    Private Sub DrawRestore(ByVal x As Integer, ByVal y As Integer)
1156
        G.FillRectangle(Brushes.White, x + 3, y + 1, 8, 4)
1157
        G.FillRectangle(Brushes.White, x + 7, y + 5, 4, 4)
1158
        G.DrawRectangle(Pens.Black, x + 2, y + 0, 9, 9)
1159
1160
        G.FillRectangle(Brushes.White, x + 1, y + 3, 2, 6)
1161
        G.FillRectangle(Brushes.White, x + 1, y + 9, 8, 2)
1162
        G.DrawRectangle(Pens.Black, x, y + 2, 9, 9)
1163
        G.DrawRectangle(Pens.Black, x + 3, y + 5, 3, 3)
1164
    End Sub
1165
1166
    Private ClosePath As GraphicsPath
1167
    Private Sub DrawClose(ByVal x As Integer, ByVal y As Integer)
1168
        If ClosePath Is Nothing Then
1169
            ClosePath = New GraphicsPath
1170
            ClosePath.AddLine(x + 1, y, x + 3, y)
1171
            ClosePath.AddLine(x + 5, y + 2, x + 7, y)
1172
            ClosePath.AddLine(x + 9, y, x + 10, y + 1)
1173
            ClosePath.AddLine(x + 7, y + 4, x + 7, y + 5)
1174
            ClosePath.AddLine(x + 10, y + 8, x + 9, y + 9)
1175
            ClosePath.AddLine(x + 7, y + 9, x + 5, y + 7)
1176
            ClosePath.AddLine(x + 3, y + 9, x + 1, y + 9)
1177
            ClosePath.AddLine(x + 0, y + 8, x + 3, y + 5)
1178
            ClosePath.AddLine(x + 3, y + 4, x + 0, y + 1)
1179
        End If
1180
1181
        G.FillPath(Brushes.White, ClosePath)
1182
        G.DrawPath(Pens.Black, ClosePath)
1183
    End Sub
1184
1185
    Protected Overrides Sub OnMouseClick(ByVal e As MouseEventArgs)
1186
        If e.Button = Windows.Forms.MouseButtons.Left Then
1187
1188
            Dim F As Form = FindForm()
1189
1190
            Select Case _ControlButton
1191
                Case Button.Minimize
1192
                    F.WindowState = FormWindowState.Minimized
1193
                Case Button.MaximizeRestore
1194
                    If F.WindowState = FormWindowState.Normal Then
1195
                        F.WindowState = FormWindowState.Maximized
1196
                    Else
1197
                        F.WindowState = FormWindowState.Normal
1198
                    End If
1199
                Case Button.Close
1200
                    F.Close()
1201
            End Select
1202
1203
        End If
1204
1205
        Invalidate()
1206
        MyBase.OnMouseClick(e)
1207
    End Sub
1208
1209
End Class
1210
1211
Class NSGroupBox
1212
    Inherits ContainerControl
1213
1214
    Private _DrawSeperator As Boolean
1215
    Public Property DrawSeperator() As Boolean
1216
        Get
1217
            Return _DrawSeperator
1218
        End Get
1219
        Set(ByVal value As Boolean)
1220
            _DrawSeperator = value
1221
            Invalidate()
1222
        End Set
1223
    End Property
1224
1225
    Private _Title As String = "GroupBox"
1226
    Public Property Title() As String
1227
        Get
1228
            Return _Title
1229
        End Get
1230
        Set(ByVal value As String)
1231
            _Title = value
1232
            Invalidate()
1233
        End Set
1234
    End Property
1235
1236
    Private _SubTitle As String = "Details"
1237
    Public Property SubTitle() As String
1238
        Get
1239
            Return _SubTitle
1240
        End Get
1241
        Set(ByVal value As String)
1242
            _SubTitle = value
1243
            Invalidate()
1244
        End Set
1245
    End Property
1246
1247
    Private _TitleFont As Font
1248
    Private _SubTitleFont As Font
1249
1250
    Sub New()
1251
        SetStyle(DirectCast(139286, ControlStyles), True)
1252
        SetStyle(ControlStyles.Selectable, False)
1253
1254
        _TitleFont = New Font("Verdana", 10.0F)
1255
        _SubTitleFont = New Font("Verdana", 6.5F)
1256
1257
        P1 = New Pen(Color.FromArgb(35, 35, 35))
1258
        P2 = New Pen(Color.FromArgb(55, 55, 55))
1259
1260
        B1 = New SolidBrush(Color.FromArgb(205, 150, 0))
1261
    End Sub
1262
1263
    Private GP1, GP2 As GraphicsPath
1264
1265
    Private PT1 As PointF
1266
    Private SZ1, SZ2 As SizeF
1267
1268
    Private P1, P2 As Pen
1269
    Private B1 As SolidBrush
1270
1271
    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
1272
        G = e.Graphics
1273
        G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
1274
1275
        G.Clear(BackColor)
1276
        G.SmoothingMode = SmoothingMode.AntiAlias
1277
1278
        GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
1279
        GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
1280
1281
        G.DrawPath(P1, GP1)
1282
        G.DrawPath(P2, GP2)
1283
1284
        SZ1 = G.MeasureString(_Title, _TitleFont, Width, StringFormat.GenericTypographic)
1285
        SZ2 = G.MeasureString(_SubTitle, _SubTitleFont, Width, StringFormat.GenericTypographic)
1286
1287
        G.DrawString(_Title, _TitleFont, Brushes.Black, 6, 6)
1288
        G.DrawString(_Title, _TitleFont, B1, 5, 5)
1289
1290
        PT1 = New PointF(6.0F, SZ1.Height + 4.0F)
1291
1292
        G.DrawString(_SubTitle, _SubTitleFont, Brushes.Black, PT1.X + 1, PT1.Y + 1)
1293
        G.DrawString(_SubTitle, _SubTitleFont, Brushes.White, PT1.X, PT1.Y)
1294
1295
        If _DrawSeperator Then
1296
            Dim Y As Integer = CInt(PT1.Y + SZ2.Height) + 8
1297
1298
            G.DrawLine(P1, 4, Y, Width - 5, Y)
1299
            G.DrawLine(P2, 4, Y + 1, Width - 5, Y + 1)
1300
        End If
1301
    End Sub
1302
1303
End Class
1304
1305
Class NSSeperator
1306
    Inherits Control
1307
1308
    Sub New()
1309
        SetStyle(DirectCast(139286, ControlStyles), True)
1310
        SetStyle(ControlStyles.Selectable, False)
1311
1312
        Height = 10
1313
1314
        P1 = New Pen(Color.FromArgb(35, 35, 35))
1315
        P2 = New Pen(Color.FromArgb(55, 55, 55))
1316
    End Sub
1317
1318
    Private P1, P2 As Pen
1319
1320
    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
1321
        G = e.Graphics
1322
        G.Clear(BackColor)
1323
1324
        G.DrawLine(P1, 0, 5, Width, 5)
1325
        G.DrawLine(P2, 0, 6, Width, 6)
1326
    End Sub
1327
1328
End Class
1329
1330
<DefaultEvent("Scroll")> _
1331
Class NSTrackBar
1332
    Inherits Control
1333
1334
    Event Scroll(ByVal sender As Object)
1335
1336
    Private _Minimum As Integer
1337
    Property Minimum() As Integer
1338
        Get
1339
            Return _Minimum
1340
        End Get
1341
        Set(ByVal value As Integer)
1342
            If value < 0 Then
1343
                Throw New Exception("Property value is not valid.")
1344
            End If
1345
1346
            _Minimum = value
1347
            If value > _Value Then _Value = value
1348
            If value > _Maximum Then _Maximum = value
1349
            Invalidate()
1350
        End Set
1351
    End Property
1352
1353
    Private _Maximum As Integer = 10
1354
    Property Maximum() As Integer
1355
        Get
1356
            Return _Maximum
1357
        End Get
1358
        Set(ByVal value As Integer)
1359
            If value < 0 Then
1360
                Throw New Exception("Property value is not valid.")
1361
            End If
1362
1363
            _Maximum = value
1364
            If value < _Value Then _Value = value
1365
            If value < _Minimum Then _Minimum = value
1366
            Invalidate()
1367
        End Set
1368
    End Property
1369
1370
    Private _Value As Integer
1371
    Property Value() As Integer
1372
        Get
1373
            Return _Value
1374
        End Get
1375
        Set(ByVal value As Integer)
1376
            If value = _Value Then Return
1377
1378
            If value > _Maximum OrElse value < _Minimum Then
1379
                Throw New Exception("Property value is not valid.")
1380
            End If
1381
1382
            _Value = value
1383
            Invalidate()
1384
1385
            RaiseEvent Scroll(Me)
1386
        End Set
1387
    End Property
1388
1389
    Sub New()
1390
        SetStyle(DirectCast(139286, ControlStyles), True)
1391
        SetStyle(ControlStyles.Selectable, False)
1392
1393
        Height = 17
1394
1395
        P1 = New Pen(Color.FromArgb(150, 110, 0), 2)
1396
        P2 = New Pen(Color.FromArgb(55, 55, 55))
1397
        P3 = New Pen(Color.FromArgb(35, 35, 35))
1398
        P4 = New Pen(Color.FromArgb(65, 65, 65))
1399
    End Sub
1400
1401
    Private GP1, GP2, GP3, GP4 As GraphicsPath
1402
1403
    Private R1, R2, R3 As Rectangle
1404
    Private I1 As Integer
1405
1406
    Private P1, P2, P3, P4 As Pen
1407
1408
    Private GB1, GB2, GB3 As LinearGradientBrush
1409
1410
    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
1411
        G = e.Graphics
1412
1413
        G.Clear(BackColor)
1414
        G.SmoothingMode = SmoothingMode.AntiAlias
1415
1416
        GP1 = CreateRound(0, 5, Width - 1, 10, 5)
1417
        GP2 = CreateRound(1, 6, Width - 3, 8, 5)
1418
1419
        R1 = New Rectangle(0, 7, Width - 1, 5)
1420
        GB1 = New LinearGradientBrush(R1, Color.FromArgb(45, 45, 45), Color.FromArgb(50, 50, 50), 90.0F)
1421
1422
        I1 = CInt((_Value - _Minimum) / (_Maximum - _Minimum) * (Width - 11))
1423
        R2 = New Rectangle(I1, 0, 10, 20)
1424
1425
        G.SetClip(GP2)
1426
        G.FillRectangle(GB1, R1)
1427
1428
        R3 = New Rectangle(1, 7, R2.X + R2.Width - 2, 8)
1429
        GB2 = New LinearGradientBrush(R3, Color.FromArgb(205, 150, 0), Color.FromArgb(150, 110, 0), 90.0F)
1430
1431
        G.SmoothingMode = SmoothingMode.None
1432
        G.FillRectangle(GB2, R3)
1433
        G.SmoothingMode = SmoothingMode.AntiAlias
1434
1435
        For I As Integer = 0 To R3.Width - 15 Step 5
1436
            G.DrawLine(P1, I, 0, I + 15, Height)
1437
        Next
1438
1439
        G.ResetClip()
1440
1441
        G.DrawPath(P2, GP1)
1442
        G.DrawPath(P3, GP2)
1443
1444
        GP3 = CreateRound(R2, 5)
1445
        GP4 = CreateRound(R2.X + 1, R2.Y + 1, R2.Width - 2, R2.Height - 2, 5)
1446
        GB3 = New LinearGradientBrush(ClientRectangle, Color.FromArgb(60, 60, 60), Color.FromArgb(55, 55, 55), 90.0F)
1447
1448
        G.FillPath(GB3, GP3)
1449
        G.DrawPath(P3, GP3)
1450
        G.DrawPath(P4, GP4)
1451
    End Sub
1452
1453
    Private TrackDown As Boolean
1454
    Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
1455
        If e.Button = Windows.Forms.MouseButtons.Left Then
1456
            I1 = CInt((_Value - _Minimum) / (_Maximum - _Minimum) * (Width - 11))
1457
            R2 = New Rectangle(I1, 0, 10, 20)
1458
1459
            TrackDown = R2.Contains(e.Location)
1460
        End If
1461
1462
        MyBase.OnMouseDown(e)
1463
    End Sub
1464
1465
    Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
1466
        If TrackDown AndAlso e.X > -1 AndAlso e.X < (Width + 1) Then
1467
            Value = _Minimum + CInt((_Maximum - _Minimum) * (e.X / Width))
1468
        End If
1469
1470
        MyBase.OnMouseMove(e)
1471
    End Sub
1472
1473
    Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
1474
        TrackDown = False
1475
        MyBase.OnMouseUp(e)
1476
    End Sub
1477
1478
End Class
1479
1480
<DefaultEvent("ValueChanged")> _
1481
Class NSRandomPool
1482
    Inherits Control
1483
1484
    Event ValueChanged(ByVal sender As Object)
1485
1486
    Private _Value As New StringBuilder
1487
    ReadOnly Property Value() As String
1488
        Get
1489
            Return _Value.ToString()
1490
        End Get
1491
    End Property
1492
1493
    Private _FullValue As String
1494
    ReadOnly Property FullValue() As String
1495
        Get
1496
            Return BitConverter.ToString(Table).Replace("-", "")
1497
        End Get
1498
    End Property
1499
1500
    Private RNG As New Random()
1501
1502
    Private ItemSize As Integer = 9
1503
    Private DrawSize As Integer = 8
1504
1505
    Private WA As Rectangle
1506
1507
    Private RowSize As Integer
1508
    Private ColumnSize As Integer
1509
1510
    Sub New()
1511
        SetStyle(DirectCast(139286, ControlStyles), True)
1512
        SetStyle(ControlStyles.Selectable, False)
1513
1514
        P1 = New Pen(Color.FromArgb(55, 55, 55))
1515
        P2 = New Pen(Color.FromArgb(35, 35, 35))
1516
1517
        B1 = New SolidBrush(Color.FromArgb(30, 30, 30))
1518
    End Sub
1519
1520
    Protected Overrides Sub OnHandleCreated(e As EventArgs)
1521
        UpdateTable()
1522
        MyBase.OnHandleCreated(e)
1523
    End Sub
1524
1525
    Private Table As Byte()
1526
    Private Sub UpdateTable()
1527
        WA = New Rectangle(5, 5, Width - 10, Height - 10)
1528
1529
        RowSize = WA.Width \ ItemSize
1530
        ColumnSize = WA.Height \ ItemSize
1531
1532
        WA.Width = RowSize * ItemSize
1533
        WA.Height = ColumnSize * ItemSize
1534
1535
        WA.X = (Width \ 2) - (WA.Width \ 2)
1536
        WA.Y = (Height \ 2) - (WA.Height \ 2)
1537
1538
        Table = New Byte((RowSize * ColumnSize) - 1) {}
1539
1540
        For I As Integer = 0 To Table.Length - 1
1541
            Table(I) = CByte(RNG.Next(100))
1542
        Next
1543
1544
        Invalidate()
1545
    End Sub
1546
1547
    Protected Overrides Sub OnSizeChanged(e As EventArgs)
1548
        UpdateTable()
1549
    End Sub
1550
1551
    Private Index1 As Integer = -1
1552
    Private Index2 As Integer
1553
1554
    Private InvertColors As Boolean
1555
1556
    Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
1557
        HandleDraw(e)
1558
    End Sub
1559
1560
    Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
1561
        HandleDraw(e)
1562
        MyBase.OnMouseDown(e)
1563
    End Sub
1564
1565
    Private Sub HandleDraw(e As MouseEventArgs)
1566
        If e.Button = Windows.Forms.MouseButtons.Left OrElse e.Button = Windows.Forms.MouseButtons.Right Then
1567
            If Not WA.Contains(e.Location) Then Return
1568
1569
            InvertColors = (e.Button = Windows.Forms.MouseButtons.Right)
1570
1571
            Index1 = GetIndex(e.X, e.Y)
1572
            If Index1 = Index2 Then Return
1573
1574
            Dim L As Boolean = Not (Index1 Mod RowSize = 0)
1575
            Dim R As Boolean = Not (Index1 Mod RowSize = (RowSize - 1))
1576
1577
            Randomize(Index1 - RowSize)
1578
            If L Then Randomize(Index1 - 1)
1579
            Randomize(Index1)
1580
            If R Then Randomize(Index1 + 1)
1581
            Randomize(Index1 + RowSize)
1582
1583
            _Value.Append(Table(Index1).ToString("X"))
1584
            If _Value.Length > 32 Then _Value.Remove(0, 2)
1585
1586
            RaiseEvent ValueChanged(Me)
1587
1588
            Index2 = Index1
1589
            Invalidate()
1590
        End If
1591
    End Sub
1592
1593
    Private GP1, GP2 As GraphicsPath
1594
1595
    Private P1, P2 As Pen
1596
    Private B1, B2 As SolidBrush
1597
1598
    Private PB1 As PathGradientBrush
1599
1600
    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
1601
        G = e.Graphics
1602
1603
        G.Clear(BackColor)
1604
        G.SmoothingMode = SmoothingMode.AntiAlias
1605
1606
        GP1 = CreateRound(0, 0, Width - 1, Height - 1, 7)
1607
        GP2 = CreateRound(1, 1, Width - 3, Height - 3, 7)
1608
1609
        PB1 = New PathGradientBrush(GP1)
1610
        PB1.CenterColor = Color.FromArgb(50, 50, 50)
1611
        PB1.SurroundColors = {Color.FromArgb(45, 45, 45)}
1612
        PB1.FocusScales = New PointF(0.9F, 0.5F)
1613
1614
        G.FillPath(PB1, GP1)
1615
1616
        G.DrawPath(P1, GP1)
1617
        G.DrawPath(P2, GP2)
1618
1619
        G.SmoothingMode = SmoothingMode.None
1620
1621
        For I As Integer = 0 To Table.Length - 1
1622
            Dim C As Integer = Math.Max(Table(I), 75)
1623
1624
            Dim X As Integer = ((I Mod RowSize) * ItemSize) + WA.X
1625
            Dim Y As Integer = ((I \ RowSize) * ItemSize) + WA.Y
1626
1627
            B2 = New SolidBrush(Color.FromArgb(C, C, C))
1628
1629
            G.FillRectangle(B1, X + 1, Y + 1, DrawSize, DrawSize)
1630
            G.FillRectangle(B2, X, Y, DrawSize, DrawSize)
1631
1632
            B2.Dispose()
1633
        Next
1634
1635
    End Sub
1636
1637
    Private Function GetIndex(ByVal x As Integer, ByVal y As Integer) As Integer
1638
        Return (((y - WA.Y) \ ItemSize) * RowSize) + ((x - WA.X) \ ItemSize)
1639
    End Function
1640
1641
    Private Sub Randomize(ByVal index As Integer)
1642
        If index > -1 AndAlso index < Table.Length Then
1643
            If InvertColors Then
1644
                Table(index) = CByte(RNG.Next(100))
1645
            Else
1646
                Table(index) = CByte(RNG.Next(100, 256))
1647
            End If
1648
        End If
1649
    End Sub
1650
1651
End Class
1652
1653
Class NSKeyboard
1654
    Inherits Control
1655
1656
    Private TextBitmap As Bitmap
1657
    Private TextGraphics As Graphics
1658
1659
    Const LowerKeys As String = "1234567890-=qwertyuiop[]asdfghjkl\;'zxcvbnm,./`"
1660
    Const UpperKeys As String = "!@#$%^&*()_+QWERTYUIOP{}ASDFGHJKL|:""ZXCVBNM<>?~"
1661
1662
    Sub New()
1663
        SetStyle(DirectCast(139286, ControlStyles), True)
1664
        SetStyle(ControlStyles.Selectable, False)
1665
1666
        Font = New Font("Verdana", 8.25F)
1667
1668
        TextBitmap = New Bitmap(1, 1)
1669
        TextGraphics = Graphics.FromImage(TextBitmap)
1670
1671
        MinimumSize = New Size(386, 162)
1672
        MaximumSize = New Size(386, 162)
1673
1674
        Lower = LowerKeys.ToCharArray()
1675
        Upper = UpperKeys.ToCharArray()
1676
1677
        PrepareCache()
1678
1679
        P1 = New Pen(Color.FromArgb(45, 45, 45))
1680
        P2 = New Pen(Color.FromArgb(65, 65, 65))
1681
        P3 = New Pen(Color.FromArgb(35, 35, 35))
1682
1683
        B1 = New SolidBrush(Color.FromArgb(100, 100, 100))
1684
    End Sub
1685
1686
    Private _Target As Control
1687
    Public Property Target() As Control
1688
        Get
1689
            Return _Target
1690
        End Get
1691
        Set(ByVal value As Control)
1692
            _Target = value
1693
        End Set
1694
    End Property
1695
1696
    Private Shift As Boolean
1697
1698
    Private Pressed As Integer = -1
1699
    Private Buttons As Rectangle()
1700
1701
    Private Lower As Char()
1702
    Private Upper As Char()
1703
    Private Other As String() = {"Shift", "Space", "Back"}
1704
1705
    Private UpperCache As PointF()
1706
    Private LowerCache As PointF()
1707
1708
    Private Sub PrepareCache()
1709
        Buttons = New Rectangle(50) {}
1710
        UpperCache = New PointF(Upper.Length - 1) {}
1711
        LowerCache = New PointF(Lower.Length - 1) {}
1712
1713
        Dim I As Integer
1714
1715
        Dim S As SizeF
1716
        Dim R As Rectangle
1717
1718
        For Y As Integer = 0 To 3
1719
            For X As Integer = 0 To 11
1720
                I = (Y * 12) + X
1721
                R = New Rectangle(X * 32, Y * 32, 32, 32)
1722
1723
                Buttons(I) = R
1724
1725
                If Not I = 47 AndAlso Not Char.IsLetter(Upper(I)) Then
1726
                    S = TextGraphics.MeasureString(Upper(I), Font)
1727
                    UpperCache(I) = New PointF(R.X + (R.Width \ 2 - S.Width / 2), R.Y + R.Height - S.Height - 2)
1728
1729
                    S = TextGraphics.MeasureString(Lower(I), Font)
1730
                    LowerCache(I) = New PointF(R.X + (R.Width \ 2 - S.Width / 2), R.Y + R.Height - S.Height - 2)
1731
                End If
1732
            Next
1733
        Next
1734
1735
        Buttons(48) = New Rectangle(0, 4 * 32, 2 * 32, 32)
1736
        Buttons(49) = New Rectangle(Buttons(48).Right, 4 * 32, 8 * 32, 32)
1737
        Buttons(50) = New Rectangle(Buttons(49).Right, 4 * 32, 2 * 32, 32)
1738
    End Sub
1739
1740
    Private GP1 As GraphicsPath
1741
1742
    Private SZ1 As SizeF
1743
    Private PT1 As PointF
1744
1745
    Private P1, P2, P3 As Pen
1746
    Private B1 As SolidBrush
1747
1748
    Private PB1 As PathGradientBrush
1749
    Private GB1 As LinearGradientBrush
1750
1751
    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
1752
        G = e.Graphics
1753
        G.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
1754
1755
        G.Clear(BackColor)
1756
1757
        Dim R As Rectangle
1758
1759
        Dim Offset As Integer
1760
        G.DrawRectangle(P1, 0, 0, (12 * 32) + 1, (5 * 32) + 1)
1761
1762
        For I As Integer = 0 To Buttons.Length - 1
1763
            R = Buttons(I)
1764
1765
            Offset = 0
1766
            If I = Pressed Then
1767
                Offset = 1
1768
1769
                GP1 = New GraphicsPath()
1770
                GP1.AddRectangle(R)
1771
1772
                PB1 = New PathGradientBrush(GP1)
1773
                PB1.CenterColor = Color.FromArgb(60, 60, 60)
1774
                PB1.SurroundColors = {Color.FromArgb(55, 55, 55)}
1775
                PB1.FocusScales = New PointF(0.8F, 0.5F)
1776
1777
                G.FillPath(PB1, GP1)
1778
            Else
1779
                GB1 = New LinearGradientBrush(R, Color.FromArgb(60, 60, 60), Color.FromArgb(55, 55, 55), 90.0F)
1780
                G.FillRectangle(GB1, R)
1781
            End If
1782
1783
            Select Case I
1784
                Case 48, 49, 50
1785
                    SZ1 = G.MeasureString(Other(I - 48), Font)
1786
                    G.DrawString(Other(I - 48), Font, Brushes.Black, R.X + (R.Width \ 2 - SZ1.Width / 2) + Offset + 1, R.Y + (R.Height \ 2 - SZ1.Height / 2) + Offset + 1)
1787
                    G.DrawString(Other(I - 48), Font, Brushes.White, R.X + (R.Width \ 2 - SZ1.Width / 2) + Offset, R.Y + (R.Height \ 2 - SZ1.Height / 2) + Offset)
1788
                Case 47
1789
                    DrawArrow(Color.Black, R.X + Offset + 1, R.Y + Offset + 1)
1790
                    DrawArrow(Color.White, R.X + Offset, R.Y + Offset)
1791
                Case Else
1792
                    If Shift Then
1793
                        G.DrawString(Upper(I), Font, Brushes.Black, R.X + 3 + Offset + 1, R.Y + 2 + Offset + 1)
1794
                        G.DrawString(Upper(I), Font, Brushes.White, R.X + 3 + Offset, R.Y + 2 + Offset)
1795
1796
                        If Not Char.IsLetter(Lower(I)) Then
1797
                            PT1 = LowerCache(I)
1798
                            G.DrawString(Lower(I), Font, B1, PT1.X + Offset, PT1.Y + Offset)
1799
                        End If
1800
                    Else
1801
                        G.DrawString(Lower(I), Font, Brushes.Black, R.X + 3 + Offset + 1, R.Y + 2 + Offset + 1)
1802
                        G.DrawString(Lower(I), Font, Brushes.White, R.X + 3 + Offset, R.Y + 2 + Offset)
1803
1804
                        If Not Char.IsLetter(Upper(I)) Then
1805
                            PT1 = UpperCache(I)
1806
                            G.DrawString(Upper(I), Font, B1, PT1.X + Offset, PT1.Y + Offset)
1807
                        End If
1808
                    End If
1809
            End Select
1810
1811
            G.DrawRectangle(P2, R.X + 1 + Offset, R.Y + 1 + Offset, R.Width - 2, R.Height - 2)
1812
            G.DrawRectangle(P3, R.X + Offset, R.Y + Offset, R.Width, R.Height)
1813
1814
            If I = Pressed Then
1815
                G.DrawLine(P1, R.X, R.Y, R.Right, R.Y)
1816
                G.DrawLine(P1, R.X, R.Y, R.X, R.Bottom)
1817
            End If
1818
        Next
1819
    End Sub
1820
1821
    Private Sub DrawArrow(color As Color, rx As Integer, ry As Integer)
1822
        Dim R As New Rectangle(rx + 8, ry + 8, 16, 16)
1823
        G.SmoothingMode = SmoothingMode.AntiAlias
1824
1825
        Dim P As New Pen(color, 1)
1826
        Dim C As New AdjustableArrowCap(3, 2)
1827
        P.CustomEndCap = C
1828
1829
        G.DrawArc(P, R, 0.0F, 290.0F)
1830
1831
        P.Dispose()
1832
        C.Dispose()
1833
        G.SmoothingMode = SmoothingMode.None
1834
    End Sub
1835
1836
    Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
1837
        Dim Index As Integer = ((e.Y \ 32) * 12) + (e.X \ 32)
1838
1839
        If Index > 47 Then
1840
            For I As Integer = 48 To Buttons.Length - 1
1841
                If Buttons(I).Contains(e.X, e.Y) Then
1842
                    Pressed = I
1843
                    Exit For
1844
                End If
1845
            Next
1846
        Else
1847
            Pressed = Index
1848
        End If
1849
1850
        HandleKey()
1851
        Invalidate()
1852
    End Sub
1853
1854
    Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
1855
        Pressed = -1
1856
        Invalidate()
1857
    End Sub
1858
1859
    Private Sub HandleKey()
1860
        If _Target Is Nothing Then Return
1861
        If Pressed = -1 Then Return
1862
1863
        Select Case Pressed
1864
            Case 47
1865
                _Target.Text = String.Empty
1866
            Case 48
1867
                Shift = Not Shift
1868
            Case 49
1869
                _Target.Text &= " "
1870
            Case 50
1871
                If Not _Target.Text.Length = 0 Then
1872
                    _Target.Text = _Target.Text.Remove(_Target.Text.Length - 1)
1873
                End If
1874
            Case Else
1875
                If Shift Then
1876
                    _Target.Text &= Upper(Pressed)
1877
                Else
1878
                    _Target.Text &= Lower(Pressed)
1879
                End If
1880
        End Select
1881
    End Sub
1882
1883
End Class
1884
1885
<DefaultEvent("SelectedIndexChanged")> _
1886
Class NSPaginator
1887
    Inherits Control
1888
1889
    Public Event SelectedIndexChanged(sender As Object, e As EventArgs)
1890
1891
    Private TextBitmap As Bitmap
1892
    Private TextGraphics As Graphics
1893
1894
    Sub New()
1895
        SetStyle(DirectCast(139286, ControlStyles), True)
1896
        SetStyle(ControlStyles.Selectable, False)
1897
1898
        Size = New Size(202, 26)
1899
1900
        TextBitmap = New Bitmap(1, 1)
1901
        TextGraphics = Graphics.FromImage(TextBitmap)
1902
1903
        InvalidateItems()
1904
1905
        B1 = New SolidBrush(Color.FromArgb(50, 50, 50))
1906
        B2 = New SolidBrush(Color.FromArgb(55, 55, 55))
1907
1908
        P1 = New Pen(Color.FromArgb(35, 35, 35))
1909
        P2 = New Pen(Color.FromArgb(55, 55, 55))
1910
        P3 = New Pen(Color.FromArgb(65, 65, 65))
1911
    End Sub
1912
1913
    Private _SelectedIndex As Integer
1914
    Public Property SelectedIndex() As Integer
1915
        Get
1916
            Return _SelectedIndex
1917
        End Get
1918
        Set(ByVal value As Integer)
1919
            _SelectedIndex = Math.Max(Math.Min(value, MaximumIndex), 0)
1920
            Invalidate()
1921
        End Set
1922
    End Property
1923
1924
    Private _NumberOfPages As Integer
1925
    Public Property NumberOfPages() As Integer
1926
        Get
1927
            Return _NumberOfPages
1928
        End Get
1929
        Set(ByVal value As Integer)
1930
            _NumberOfPages = value
1931
            _SelectedIndex = Math.Max(Math.Min(_SelectedIndex, MaximumIndex), 0)
1932
            Invalidate()
1933
        End Set
1934
    End Property
1935
1936
    Public ReadOnly Property MaximumIndex As Integer
1937
        Get
1938
            Return NumberOfPages - 1
1939
        End Get
1940
    End Property
1941
1942
    Private ItemWidth As Integer
1943
1944
    Public Overrides Property Font As Font
1945
        Get
1946
            Return MyBase.Font
1947
        End Get
1948
        Set(value As Font)
1949
            MyBase.Font = value
1950
1951
            InvalidateItems()
1952
            Invalidate()
1953
        End Set
1954
    End Property
1955
1956
    Private Sub InvalidateItems()
1957
        Dim S As Size = TextGraphics.MeasureString("000 ..", Font).ToSize()
1958
        ItemWidth = S.Width + 10
1959
    End Sub
1960
1961
    Private GP1, GP2 As GraphicsPath
1962
1963
    Private R1 As Rectangle
1964
1965
    Private SZ1 As Size
1966
    Private PT1 As Point
1967
1968
    Private P1, P2, P3 As Pen
1969
    Private B1, B2 As SolidBrush
1970
1971
    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
1972
        G = e.Graphics
1973
        G.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit
1974
1975
        G.Clear(BackColor)
1976
        G.SmoothingMode = SmoothingMode.AntiAlias
1977
1978
        Dim LeftEllipse, RightEllipse As Boolean
1979
1980
        If _SelectedIndex < 4 Then
1981
            For I As Integer = 0 To Math.Min(MaximumIndex, 4)
1982
                RightEllipse = (I = 4) AndAlso (MaximumIndex > 4)
1983
                DrawBox(I * ItemWidth, I, False, RightEllipse)
1984
            Next
1985
        ElseIf _SelectedIndex > 3 AndAlso _SelectedIndex < (MaximumIndex - 3) Then
1986
            For I As Integer = 0 To 4
1987
                LeftEllipse = (I = 0)
1988
                RightEllipse = (I = 4)
1989
                DrawBox(I * ItemWidth, _SelectedIndex + I - 2, LeftEllipse, RightEllipse)
1990
            Next
1991
        Else
1992
            For I As Integer = 0 To 4
1993
                LeftEllipse = (I = 0) AndAlso (MaximumIndex > 4)
1994
                DrawBox(I * ItemWidth, MaximumIndex - (4 - I), LeftEllipse, False)
1995
            Next
1996
        End If
1997
    End Sub
1998
1999
    Private Sub DrawBox(x As Integer, index As Integer, leftEllipse As Boolean, rightEllipse As Boolean)
2000
        R1 = New Rectangle(x, 0, ItemWidth - 4, Height - 1)
2001
2002
        GP1 = CreateRound(R1, 7)
2003
        GP2 = CreateRound(R1.X + 1, R1.Y + 1, R1.Width - 2, R1.Height - 2, 7)
2004
2005
        Dim T As String = CStr(index + 1)
2006
2007
        If leftEllipse Then T = ".. " & T
2008
        If rightEllipse Then T = T & " .."
2009
2010
        SZ1 = G.MeasureString(T, Font).ToSize()
2011
        PT1 = New Point(R1.X + (R1.Width \ 2 - SZ1.Width \ 2), R1.Y + (R1.Height \ 2 - SZ1.Height \ 2))
2012
2013
        If index = _SelectedIndex Then
2014
            G.FillPath(B1, GP1)
2015
2016
            Dim F As New Font(Font, FontStyle.Underline)
2017
            G.DrawString(T, F, Brushes.Black, PT1.X + 1, PT1.Y + 1)
2018
            G.DrawString(T, F, Brushes.White, PT1)
2019
            F.Dispose()
2020
2021
            G.DrawPath(P1, GP2)
2022
            G.DrawPath(P2, GP1)
2023
        Else
2024
            G.FillPath(B2, GP1)
2025
2026
            G.DrawString(T, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
2027
            G.DrawString(T, Font, Brushes.White, PT1)
2028
2029
            G.DrawPath(P3, GP2)
2030
            G.DrawPath(P1, GP1)
2031
        End If
2032
    End Sub
2033
2034
    Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
2035
        If e.Button = Windows.Forms.MouseButtons.Left Then
2036
            Dim NewIndex As Integer
2037
            Dim OldIndex As Integer = _SelectedIndex
2038
2039
            If _SelectedIndex < 4 Then
2040
                NewIndex = (e.X \ ItemWidth)
2041
            ElseIf _SelectedIndex > 3 AndAlso _SelectedIndex < (MaximumIndex - 3) Then
2042
                NewIndex = (e.X \ ItemWidth)
2043
2044
                Select Case NewIndex
2045
                    Case 2
2046
                        NewIndex = OldIndex
2047
                    Case Is < 2
2048
                        NewIndex = OldIndex - (2 - NewIndex)
2049
                    Case Is > 2
2050
                        NewIndex = OldIndex + (NewIndex - 2)
2051
                End Select
2052
            Else
2053
                NewIndex = MaximumIndex - (4 - (e.X \ ItemWidth))
2054
            End If
2055
2056
            If (NewIndex < _NumberOfPages) AndAlso (Not NewIndex = OldIndex) Then
2057
                SelectedIndex = NewIndex
2058
                RaiseEvent SelectedIndexChanged(Me, Nothing)
2059
            End If
2060
        End If
2061
2062
        MyBase.OnMouseDown(e)
2063
    End Sub
2064
2065
End Class
2066
2067
<DefaultEvent("Scroll")> _
2068
Class NSVScrollBar
2069
    Inherits Control
2070
2071
    Event Scroll(ByVal sender As Object)
2072
2073
    Private _Minimum As Integer
2074
    Property Minimum() As Integer
2075
        Get
2076
            Return _Minimum
2077
        End Get
2078
        Set(ByVal value As Integer)
2079
            If value < 0 Then
2080
                Throw New Exception("Property value is not valid.")
2081
            End If
2082
2083
            _Minimum = value
2084
            If value > _Value Then _Value = value
2085
            If value > _Maximum Then _Maximum = value
2086
2087
            InvalidateLayout()
2088
        End Set
2089
    End Property
2090
2091
    Private _Maximum As Integer = 100
2092
    Property Maximum() As Integer
2093
        Get
2094
            Return _Maximum
2095
        End Get
2096
        Set(ByVal value As Integer)
2097
            If value < 0 Then
2098
                Throw New Exception("Property value is not valid.")
2099
            End If
2100
2101
            _Maximum = value
2102
            If value < _Value Then _Value = value
2103
            If value < _Minimum Then _Minimum = value
2104
2105
            InvalidateLayout()
2106
        End Set
2107
    End Property
2108
2109
    Private _Value As Integer
2110
    Property Value() As Integer
2111
        Get
2112
            If Not ShowThumb Then Return _Minimum
2113
            Return _Value
2114
        End Get
2115
        Set(ByVal value As Integer)
2116
            If value = _Value Then Return
2117
2118
            If value > _Maximum OrElse value < _Minimum Then
2119
                Throw New Exception("Property value is not valid.")
2120
            End If
2121
2122
            _Value = value
2123
            InvalidatePosition()
2124
2125
            RaiseEvent Scroll(Me)
2126
        End Set
2127
    End Property
2128
2129
    Private _SmallChange As Integer = 1
2130
    Public Property SmallChange() As Integer
2131
        Get
2132
            Return _SmallChange
2133
        End Get
2134
        Set(ByVal value As Integer)
2135
            If value < 1 Then
2136
                Throw New Exception("Property value is not valid.")
2137
            End If
2138
2139
            _SmallChange = value
2140
        End Set
2141
    End Property
2142
2143
    Private _LargeChange As Integer = 10
2144
    Public Property LargeChange() As Integer
2145
        Get
2146
            Return _LargeChange
2147
        End Get
2148
        Set(ByVal value As Integer)
2149
            If value < 1 Then
2150
                Throw New Exception("Property value is not valid.")
2151
            End If
2152
2153
            _LargeChange = value
2154
        End Set
2155
    End Property
2156
2157
    Private ButtonSize As Integer = 16
2158
    Private ThumbSize As Integer = 24 ' 14 minimum
2159
2160
    Private TSA As Rectangle
2161
    Private BSA As Rectangle
2162
    Private Shaft As Rectangle
2163
    Private Thumb As Rectangle
2164
2165
    Private ShowThumb As Boolean
2166
    Private ThumbDown As Boolean
2167
2168
    Sub New()
2169
        SetStyle(DirectCast(139286, ControlStyles), True)
2170
        SetStyle(ControlStyles.Selectable, False)
2171
2172
        Width = 18
2173
2174
        B1 = New SolidBrush(Color.FromArgb(55, 55, 55))
2175
        B2 = New SolidBrush(Color.FromArgb(35, 35, 35))
2176
2177
        P1 = New Pen(Color.FromArgb(35, 35, 35))
2178
        P2 = New Pen(Color.FromArgb(65, 65, 65))
2179
        P3 = New Pen(Color.FromArgb(55, 55, 55))
2180
        P4 = New Pen(Color.FromArgb(40, 40, 40))
2181
    End Sub
2182
2183
    Private GP1, GP2, GP3, GP4 As GraphicsPath
2184
2185
    Private P1, P2, P3, P4 As Pen
2186
    Private B1, B2 As SolidBrush
2187
2188
    Dim I1 As Integer
2189
2190
    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
2191
        G = e.Graphics
2192
        G.Clear(BackColor)
2193
2194
        GP1 = DrawArrow(4, 6, False)
2195
        GP2 = DrawArrow(5, 7, False)
2196
2197
        G.FillPath(B1, GP2)
2198
        G.FillPath(B2, GP1)
2199
2200
        GP3 = DrawArrow(4, Height - 11, True)
2201
        GP4 = DrawArrow(5, Height - 10, True)
2202
2203
        G.FillPath(B1, GP4)
2204
        G.FillPath(B2, GP3)
2205
2206
        If ShowThumb Then
2207
            G.FillRectangle(B1, Thumb)
2208
            G.DrawRectangle(P1, Thumb)
2209
            G.DrawRectangle(P2, Thumb.X + 1, Thumb.Y + 1, Thumb.Width - 2, Thumb.Height - 2)
2210
2211
            Dim Y As Integer
2212
            Dim LY As Integer = Thumb.Y + (Thumb.Height \ 2) - 3
2213
2214
            For I As Integer = 0 To 2
2215
                Y = LY + (I * 3)
2216
2217
                G.DrawLine(P1, Thumb.X + 5, Y, Thumb.Right - 5, Y)
2218
                G.DrawLine(P2, Thumb.X + 5, Y + 1, Thumb.Right - 5, Y + 1)
2219
            Next
2220
        End If
2221
2222
        G.DrawRectangle(P3, 0, 0, Width - 1, Height - 1)
2223
        G.DrawRectangle(P4, 1, 1, Width - 3, Height - 3)
2224
    End Sub
2225
2226
    Private Function DrawArrow(x As Integer, y As Integer, flip As Boolean) As GraphicsPath
2227
        Dim GP As New GraphicsPath()
2228
2229
        Dim W As Integer = 9
2230
        Dim H As Integer = 5
2231
2232
        If flip Then
2233
            GP.AddLine(x + 1, y, x + W + 1, y)
2234
            GP.AddLine(x + W, y, x + H, y + H - 1)
2235
        Else
2236
            GP.AddLine(x, y + H, x + W, y + H)
2237
            GP.AddLine(x + W, y + H, x + H, y)
2238
        End If
2239
2240
        GP.CloseFigure()
2241
        Return GP
2242
    End Function
2243
2244
    Protected Overrides Sub OnSizeChanged(e As EventArgs)
2245
        InvalidateLayout()
2246
    End Sub
2247
2248
    Private Sub InvalidateLayout()
2249
        TSA = New Rectangle(0, 0, Width, ButtonSize)
2250
        BSA = New Rectangle(0, Height - ButtonSize, Width, ButtonSize)
2251
        Shaft = New Rectangle(0, TSA.Bottom + 1, Width, Height - (ButtonSize * 2) - 1)
2252
2253
        ShowThumb = ((_Maximum - _Minimum) > Shaft.Height)
2254
2255
        If ShowThumb Then
2256
            'ThumbSize = Math.Max(0, 14) 'TODO: Implement this.
2257
            Thumb = New Rectangle(1, 0, Width - 3, ThumbSize)
2258
        End If
2259
2260
        RaiseEvent Scroll(Me)
2261
        InvalidatePosition()
2262
    End Sub
2263
2264
    Private Sub InvalidatePosition()
2265
        Thumb.Y = CInt(GetProgress() * (Shaft.Height - ThumbSize)) + TSA.Height
2266
        Invalidate()
2267
    End Sub
2268
2269
    Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
2270
        If e.Button = Windows.Forms.MouseButtons.Left AndAlso ShowThumb Then
2271
            If TSA.Contains(e.Location) Then
2272
                I1 = _Value - _SmallChange
2273
            ElseIf BSA.Contains(e.Location) Then
2274
                I1 = _Value + _SmallChange
2275
            Else
2276
                If Thumb.Contains(e.Location) Then
2277
                    ThumbDown = True
2278
                    Return
2279
                Else
2280
                    If e.Y < Thumb.Y Then
2281
                        I1 = _Value - _LargeChange
2282
                    Else
2283
                        I1 = _Value + _LargeChange
2284
                    End If
2285
                End If
2286
            End If
2287
2288
            Value = Math.Min(Math.Max(I1, _Minimum), _Maximum)
2289
            InvalidatePosition()
2290
        End If
2291
    End Sub
2292
2293
    Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
2294
        If ThumbDown AndAlso ShowThumb Then
2295
            Dim ThumbPosition As Integer = e.Y - TSA.Height - (ThumbSize \ 2)
2296
            Dim ThumbBounds As Integer = Shaft.Height - ThumbSize
2297
2298
            I1 = CInt((ThumbPosition / ThumbBounds) * (_Maximum - _Minimum)) + _Minimum
2299
2300
            Value = Math.Min(Math.Max(I1, _Minimum), _Maximum)
2301
            InvalidatePosition()
2302
        End If
2303
    End Sub
2304
2305
    Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
2306
        ThumbDown = False
2307
    End Sub
2308
2309
    Private Function GetProgress() As Double
2310
        Return (_Value - _Minimum) / (_Maximum - _Minimum)
2311
    End Function
2312
2313
End Class
2314
2315
<DefaultEvent("Scroll")> _
2316
Class NSHScrollBar
2317
    Inherits Control
2318
2319
    Event Scroll(ByVal sender As Object)
2320
2321
    Private _Minimum As Integer
2322
    Property Minimum() As Integer
2323
        Get
2324
            Return _Minimum
2325
        End Get
2326
        Set(ByVal value As Integer)
2327
            If value < 0 Then
2328
                Throw New Exception("Property value is not valid.")
2329
            End If
2330
2331
            _Minimum = value
2332
            If value > _Value Then _Value = value
2333
            If value > _Maximum Then _Maximum = value
2334
2335
            InvalidateLayout()
2336
        End Set
2337
    End Property
2338
2339
    Private _Maximum As Integer = 100
2340
    Property Maximum() As Integer
2341
        Get
2342
            Return _Maximum
2343
        End Get
2344
        Set(ByVal value As Integer)
2345
            If value < 0 Then
2346
                Throw New Exception("Property value is not valid.")
2347
            End If
2348
2349
            _Maximum = value
2350
            If value < _Value Then _Value = value
2351
            If value < _Minimum Then _Minimum = value
2352
2353
            InvalidateLayout()
2354
        End Set
2355
    End Property
2356
2357
    Private _Value As Integer
2358
    Property Value() As Integer
2359
        Get
2360
            If Not ShowThumb Then Return _Minimum
2361
            Return _Value
2362
        End Get
2363
        Set(ByVal value As Integer)
2364
            If value = _Value Then Return
2365
2366
            If value > _Maximum OrElse value < _Minimum Then
2367
                Throw New Exception("Property value is not valid.")
2368
            End If
2369
2370
            _Value = value
2371
            InvalidatePosition()
2372
2373
            RaiseEvent Scroll(Me)
2374
        End Set
2375
    End Property
2376
2377
    Private _SmallChange As Integer = 1
2378
    Public Property SmallChange() As Integer
2379
        Get
2380
            Return _SmallChange
2381
        End Get
2382
        Set(ByVal value As Integer)
2383
            If value < 1 Then
2384
                Throw New Exception("Property value is not valid.")
2385
            End If
2386
2387
            _SmallChange = value
2388
        End Set
2389
    End Property
2390
2391
    Private _LargeChange As Integer = 10
2392
    Public Property LargeChange() As Integer
2393
        Get
2394
            Return _LargeChange
2395
        End Get
2396
        Set(ByVal value As Integer)
2397
            If value < 1 Then
2398
                Throw New Exception("Property value is not valid.")
2399
            End If
2400
2401
            _LargeChange = value
2402
        End Set
2403
    End Property
2404
2405
    Private ButtonSize As Integer = 16
2406
    Private ThumbSize As Integer = 24 ' 14 minimum
2407
2408
    Private LSA As Rectangle
2409
    Private RSA As Rectangle
2410
    Private Shaft As Rectangle
2411
    Private Thumb As Rectangle
2412
2413
    Private ShowThumb As Boolean
2414
    Private ThumbDown As Boolean
2415
2416
    Sub New()
2417
        SetStyle(DirectCast(139286, ControlStyles), True)
2418
        SetStyle(ControlStyles.Selectable, False)
2419
2420
        Height = 18
2421
2422
        B1 = New SolidBrush(Color.FromArgb(55, 55, 55))
2423
        B2 = New SolidBrush(Color.FromArgb(35, 35, 35))
2424
2425
        P1 = New Pen(Color.FromArgb(35, 35, 35))
2426
        P2 = New Pen(Color.FromArgb(65, 65, 65))
2427
        P3 = New Pen(Color.FromArgb(55, 55, 55))
2428
        P4 = New Pen(Color.FromArgb(40, 40, 40))
2429
    End Sub
2430
2431
    Private GP1, GP2, GP3, GP4 As GraphicsPath
2432
2433
    Private P1, P2, P3, P4 As Pen
2434
    Private B1, B2 As SolidBrush
2435
2436
    Dim I1 As Integer
2437
2438
    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
2439
        G = e.Graphics
2440
        G.Clear(BackColor)
2441
2442
        GP1 = DrawArrow(6, 4, False)
2443
        GP2 = DrawArrow(7, 5, False)
2444
2445
        G.FillPath(B1, GP2)
2446
        G.FillPath(B2, GP1)
2447
2448
        GP3 = DrawArrow(Width - 11, 4, True)
2449
        GP4 = DrawArrow(Width - 10, 5, True)
2450
2451
        G.FillPath(B1, GP4)
2452
        G.FillPath(B2, GP3)
2453
2454
        If ShowThumb Then
2455
            G.FillRectangle(B1, Thumb)
2456
            G.DrawRectangle(P1, Thumb)
2457
            G.DrawRectangle(P2, Thumb.X + 1, Thumb.Y + 1, Thumb.Width - 2, Thumb.Height - 2)
2458
2459
            Dim X As Integer
2460
            Dim LX As Integer = Thumb.X + (Thumb.Width \ 2) - 3
2461
2462
            For I As Integer = 0 To 2
2463
                X = LX + (I * 3)
2464
2465
                G.DrawLine(P1, X, Thumb.Y + 5, X, Thumb.Bottom - 5)
2466
                G.DrawLine(P2, X + 1, Thumb.Y + 5, X + 1, Thumb.Bottom - 5)
2467
            Next
2468
        End If
2469
2470
        G.DrawRectangle(P3, 0, 0, Width - 1, Height - 1)
2471
        G.DrawRectangle(P4, 1, 1, Width - 3, Height - 3)
2472
    End Sub
2473
2474
    Private Function DrawArrow(x As Integer, y As Integer, flip As Boolean) As GraphicsPath
2475
        Dim GP As New GraphicsPath()
2476
2477
        Dim W As Integer = 5
2478
        Dim H As Integer = 9
2479
2480
        If flip Then
2481
            GP.AddLine(x, y + 1, x, y + H + 1)
2482
            GP.AddLine(x, y + H, x + W - 1, y + W)
2483
        Else
2484
            GP.AddLine(x + W, y, x + W, y + H)
2485
            GP.AddLine(x + W, y + H, x + 1, y + W)
2486
        End If
2487
2488
        GP.CloseFigure()
2489
        Return GP
2490
    End Function
2491
2492
    Protected Overrides Sub OnSizeChanged(e As EventArgs)
2493
        InvalidateLayout()
2494
    End Sub
2495
2496
    Private Sub InvalidateLayout()
2497
        LSA = New Rectangle(0, 0, ButtonSize, Height)
2498
        RSA = New Rectangle(Width - ButtonSize, 0, ButtonSize, Height)
2499
        Shaft = New Rectangle(LSA.Right + 1, 0, Width - (ButtonSize * 2) - 1, Height)
2500
2501
        ShowThumb = ((_Maximum - _Minimum) > Shaft.Width)
2502
2503
        If ShowThumb Then
2504
            'ThumbSize = Math.Max(0, 14) 'TODO: Implement this.
2505
            Thumb = New Rectangle(0, 1, ThumbSize, Height - 3)
2506
        End If
2507
2508
        RaiseEvent Scroll(Me)
2509
        InvalidatePosition()
2510
    End Sub
2511
2512
    Private Sub InvalidatePosition()
2513
        Thumb.X = CInt(GetProgress() * (Shaft.Width - ThumbSize)) + LSA.Width
2514
        Invalidate()
2515
    End Sub
2516
2517
    Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
2518
        If e.Button = Windows.Forms.MouseButtons.Left AndAlso ShowThumb Then
2519
            If LSA.Contains(e.Location) Then
2520
                I1 = _Value - _SmallChange
2521
            ElseIf RSA.Contains(e.Location) Then
2522
                I1 = _Value + _SmallChange
2523
            Else
2524
                If Thumb.Contains(e.Location) Then
2525
                    ThumbDown = True
2526
                    Return
2527
                Else
2528
                    If e.X < Thumb.X Then
2529
                        I1 = _Value - _LargeChange
2530
                    Else
2531
                        I1 = _Value + _LargeChange
2532
                    End If
2533
                End If
2534
            End If
2535
2536
            Value = Math.Min(Math.Max(I1, _Minimum), _Maximum)
2537
            InvalidatePosition()
2538
        End If
2539
    End Sub
2540
2541
    Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
2542
        If ThumbDown AndAlso ShowThumb Then
2543
            Dim ThumbPosition As Integer = e.X - LSA.Width - (ThumbSize \ 2)
2544
            Dim ThumbBounds As Integer = Shaft.Width - ThumbSize
2545
2546
            I1 = CInt((ThumbPosition / ThumbBounds) * (_Maximum - _Minimum)) + _Minimum
2547
2548
            Value = Math.Min(Math.Max(I1, _Minimum), _Maximum)
2549
            InvalidatePosition()
2550
        End If
2551
    End Sub
2552
2553
    Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
2554
        ThumbDown = False
2555
    End Sub
2556
2557
    Private Function GetProgress() As Double
2558
        Return (_Value - _Minimum) / (_Maximum - _Minimum)
2559
    End Function
2560
2561
End Class
2562
2563
Class NSContextMenu
2564
    Inherits ContextMenuStrip
2565
2566
    Sub New()
2567
        Renderer = New ToolStripProfessionalRenderer(New NSColorTable())
2568
        ForeColor = Color.White
2569
    End Sub
2570
2571
    Protected Overrides Sub OnPaint(e As PaintEventArgs)
2572
        e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
2573
        MyBase.OnPaint(e)
2574
    End Sub
2575
2576
End Class
2577
2578
Class NSColorTable
2579
    Inherits ProfessionalColorTable
2580
2581
    Private BackColor As Color = Color.FromArgb(55, 55, 55)
2582
2583
    Public Overrides ReadOnly Property ButtonSelectedBorder() As Color
2584
        Get
2585
            Return BackColor
2586
        End Get
2587
    End Property
2588
2589
    Public Overrides ReadOnly Property CheckBackground() As Color
2590
        Get
2591
            Return BackColor
2592
        End Get
2593
    End Property
2594
2595
    Public Overrides ReadOnly Property CheckPressedBackground() As Color
2596
        Get
2597
            Return BackColor
2598
        End Get
2599
    End Property
2600
2601
    Public Overrides ReadOnly Property CheckSelectedBackground() As Color
2602
        Get
2603
            Return BackColor
2604
        End Get
2605
    End Property
2606
2607
    Public Overrides ReadOnly Property ImageMarginGradientBegin() As Color
2608
        Get
2609
            Return BackColor
2610
        End Get
2611
    End Property
2612
2613
    Public Overrides ReadOnly Property ImageMarginGradientEnd() As Color
2614
        Get
2615
            Return BackColor
2616
        End Get
2617
    End Property
2618
2619
    Public Overrides ReadOnly Property ImageMarginGradientMiddle() As Color
2620
        Get
2621
            Return BackColor
2622
        End Get
2623
    End Property
2624
2625
    Public Overrides ReadOnly Property MenuBorder() As Color
2626
        Get
2627
            Return Color.FromArgb(25, 25, 25)
2628
        End Get
2629
    End Property
2630
2631
    Public Overrides ReadOnly Property MenuItemBorder() As Color
2632
        Get
2633
            Return BackColor
2634
        End Get
2635
    End Property
2636
2637
    Public Overrides ReadOnly Property MenuItemSelected() As Color
2638
        Get
2639
            Return Color.FromArgb(65, 65, 65)
2640
        End Get
2641
    End Property
2642
2643
    Public Overrides ReadOnly Property SeparatorDark() As Color
2644
        Get
2645
            Return Color.FromArgb(35, 35, 35)
2646
        End Get
2647
    End Property
2648
2649
    Public Overrides ReadOnly Property ToolStripDropDownBackground() As Color
2650
        Get
2651
            Return BackColor
2652
        End Get
2653
    End Property
2654
2655
End Class