Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '///////////////
- 'By Nettro /////
- 'Nov 19, 2014//
- '///////////////
- Public Class ImageSlider
- Inherits Control
- Public Shared AutoSwitchTMR As New Timer
- Sub New()
- Me.DoubleBuffered = True
- End Sub
- Enum GType
- HighQ
- LowQ
- End Enum
- Enum Stle
- Regular
- Steam
- Header
- End Enum
- Public Property Drawing As GType = GType.HighQ
- Public Property Style As Stle
- Public Property SelectedItemIndex As Integer = 0
- Public Property MaxSelectedItemIndex As Integer = 0
- Public Property AutoSlide As Boolean = False
- Public Property AutoSlideTimeSwitch As Integer = 3000
- Property Border_Color As Color = Color.FromArgb(200, 25, 25, 25)
- Property Fill_Color As Color = Color.FromArgb(100, 45, 45, 45)
- Property Header_Selected_Color As Color = Color.FromArgb(45, 45, 45)
- Public Class ItemCollection
- Inherits List(Of Item)
- Private Parent As ImageSlider
- Public Sub New(Parent As ImageSlider)
- Me.Parent = Parent
- End Sub
- Public Shadows Sub Add(Item As Item)
- MyBase.Add(Item)
- End Sub
- Public Shadows Sub AddRange(Range As List(Of Item))
- MyBase.AddRange(Range)
- End Sub
- Public Shadows Sub Clear()
- MyBase.Clear()
- End Sub
- Public Shadows Sub Remove(Item As Item)
- MyBase.Remove(Item)
- End Sub
- Public Shadows Sub RemoveAt(Index As Integer)
- MyBase.RemoveAt(Index)
- End Sub
- Public Shadows Sub RemoveAll(Predicate As System.Predicate(Of Item))
- MyBase.RemoveAll(Predicate)
- End Sub
- Public Shadows Sub RemoveRange(Index As Integer, Count As Integer)
- MyBase.RemoveRange(Index, Count)
- End Sub
- End Class
- Public Class Item
- Property Text As String
- Property Text_Color As Color = Color.White
- Property Image As Image
- Property OrderNumber As Integer
- Property PictureLink As Boolean = False
- Property LoadOption As Kind = Kind.PictureBox
- Property DisplayText As Boolean = False
- Enum Type
- StretchImage
- Zoom
- Normal
- CenterImage
- End Enum
- Enum Kind
- PictureBox
- Draw
- End Enum
- Public Property PictureSizemode As Type = Type.CenterImage
- Property URL_LINK As String = "http://i.imgur.com/blkrqBo.gif"
- Protected UniqueId As Guid
- Sub New()
- UniqueId = Guid.NewGuid()
- End Sub
- Public Overrides Function ToString() As String
- Return Text
- End Function
- Public Overrides Function Equals(obj As Object) As Boolean
- If TypeOf obj Is Item Then
- Return (DirectCast(obj, Item).UniqueId = UniqueId)
- End If
- Return False
- End Function
- End Class
- Public _Items As New ItemCollection(Me)
- <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
- Public Property Items As ItemCollection
- Get
- Return _Items
- End Get
- Set(ByVal value As ItemCollection)
- _Items = value
- End Set
- End Property
- Private Sub ImageSlider_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
- 'Drawing Quality
- e.Graphics.Clear(BackColor)
- If Drawing = GType.HighQ Then
- e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
- Else
- e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighSpeed
- End If
- 'Figure
- Dim i As Integer = 0
- For Each Itm As Item In _Items
- i += 1
- Next
- If AutoSlide = False Then
- If AutoSwitchTMR.Enabled = True Then
- AutoSwitchTMR.Stop()
- End If
- Else
- AutoSwitchTMR.Interval = AutoSlideTimeSwitch
- If AutoSwitchTMR.Enabled = False Then
- AddHandler AutoSwitchTMR.Tick, AddressOf AutoSwitch_TMRTICK
- AutoSwitchTMR.Start()
- End If
- End If
- MaxSelectedItemIndex = i - 1
- If Me.Style = Stle.Regular Then
- 'Button Left
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(0, Height / 2 - 10, 20, 20))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(0, Height / 2 - 10, 20, 20))
- e.Graphics.DrawString("<", Font, Brushes.White, New Rectangle(0, Height / 2 - 10, 20, 20), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
- 'Button Right
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(Width - 21, Height / 2 - 10, 20, 20))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(Width - 21, Height / 2 - 10, 20, 20))
- e.Graphics.DrawString(">", Font, Brushes.White, New Rectangle(Width - 21, Height / 2 - 10, 20, 20), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
- 'Main/Middle
- 'Frame
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(30, 0, Width - 60, Height))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(30, 0, Width - 60, Height - 1))
- 'clear Last or any remaining picture boxs
- For Each Pic As PictureBox In Me.Controls.OfType(Of PictureBox)()
- Pic.Dispose()
- Next
- 'Display Items
- For Each Item As Item In _Items
- If SelectedItemIndex = Item.OrderNumber Then
- If Item.LoadOption = ImageSlider.Item.Kind.PictureBox Then
- If Item.PictureLink = False Then
- Dim pic2 As New PictureBox
- pic2.Location = New Point(35, 5)
- pic2.Size = New Size(Width - 70, Height - 10)
- pic2.Image = Item.Image
- AddHandler pic2.Paint, AddressOf pic_paint
- If Item.PictureSizemode = ImageSlider.Item.Type.StretchImage Then
- pic2.SizeMode = PictureBoxSizeMode.StretchImage
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.Normal Then
- pic2.SizeMode = PictureBoxSizeMode.Normal
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.CenterImage Then
- pic2.SizeMode = PictureBoxSizeMode.CenterImage
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.Zoom Then
- pic2.SizeMode = PictureBoxSizeMode.Zoom
- End If
- Me.Controls.Add(pic2)
- Else
- Dim pic2 As New PictureBox
- pic2.Location = New Point(35, 5)
- pic2.Size = New Size(Width - 70, Height - 10)
- pic2.LoadAsync(Item.URL_LINK)
- AddHandler pic2.Paint, AddressOf pic_paint
- If Item.PictureSizemode = ImageSlider.Item.Type.StretchImage Then
- pic2.SizeMode = PictureBoxSizeMode.StretchImage
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.Normal Then
- pic2.SizeMode = PictureBoxSizeMode.Normal
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.CenterImage Then
- pic2.SizeMode = PictureBoxSizeMode.CenterImage
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.Zoom Then
- pic2.SizeMode = PictureBoxSizeMode.Zoom
- End If
- Me.Controls.Add(pic2)
- End If
- Else
- If Item.PictureLink = False Then
- e.Graphics.DrawImage(Item.Image, New Rectangle(35, 5, Width - 70, Height - 10))
- Else
- e.Graphics.DrawImage(New System.Drawing.Bitmap(New IO.MemoryStream(New System.Net.WebClient().DownloadData(Item.URL_LINK))), New Rectangle(35, 5, Width - 70, Height - 10))
- End If
- End If
- End If
- 'Display Text
- If Item.DisplayText = True Then
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(40, 5, Width - 80, 20))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(40, 5, Width - 80, 20))
- e.Graphics.DrawString(Item.Text, Font, New SolidBrush(Item.Text_Color), New Rectangle(40, 5, Width - 80, 20), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
- End If
- Next
- ElseIf Me.Style = Stle.Steam Then
- 'Border/Main
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(2, 2, Me.Width - 5, Me.Height - 5))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(2, 2, Me.Width - 5, Me.Height - 5))
- 'Split Box
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(2, Me.Height - 33, Me.Width - 5, 30))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(2, Me.Height - 33, Me.Width - 5, 30))
- 'Button Next
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(Width - 41, Me.Height - 25, 35, 15))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(Width - 41, Me.Height - 25, 35, 15))
- e.Graphics.DrawString("Next", Font, Brushes.White, New Rectangle(Width - 41, Me.Height - 25, 35, 15), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
- 'Button Back
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(Width - 81, Me.Height - 25, 35, 15))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(Width - 81, Me.Height - 25, 35, 15))
- e.Graphics.DrawString("Back", Font, Brushes.White, New Rectangle(Width - 81, Me.Height - 25, 35, 15), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
- 'clear Pics
- For Each Pic As PictureBox In Me.Controls.OfType(Of PictureBox)()
- Pic.Dispose()
- Next
- 'Display Items
- For Each Item As Item In Items
- If SelectedItemIndex = Item.OrderNumber Then '<- Fine
- If Item.LoadOption = ImageSlider.Item.Kind.PictureBox Then
- If Item.PictureLink = False Then
- Dim pic2 As New PictureBox
- pic2.Location = New Point(5, 5)
- pic2.Size = New Size(Me.Width - 10, Me.Height - 40)
- pic2.Image = Item.Image
- If Item.PictureSizemode = ImageSlider.Item.Type.StretchImage Then
- pic2.SizeMode = PictureBoxSizeMode.StretchImage
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.Normal Then
- pic2.SizeMode = PictureBoxSizeMode.Normal
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.CenterImage Then
- pic2.SizeMode = PictureBoxSizeMode.CenterImage
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.Zoom Then
- pic2.SizeMode = PictureBoxSizeMode.Zoom
- End If
- Me.Controls.Add(pic2)
- Else
- Dim pic2 As New PictureBox
- pic2.Location = New Point(5, 5)
- pic2.Size = New Size(Me.Width - 10, Me.Height - 40)
- pic2.LoadAsync(Item.URL_LINK)
- If Item.PictureSizemode = ImageSlider.Item.Type.StretchImage Then
- pic2.SizeMode = PictureBoxSizeMode.StretchImage
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.Normal Then
- pic2.SizeMode = PictureBoxSizeMode.Normal
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.CenterImage Then
- pic2.SizeMode = PictureBoxSizeMode.CenterImage
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.Zoom Then
- pic2.SizeMode = PictureBoxSizeMode.Zoom
- End If
- Me.Controls.Add(pic2)
- End If
- Else
- If Item.PictureLink = False Then
- e.Graphics.DrawImage(Item.Image, New Rectangle(5, 5, Me.Width - 10, Me.Height - 40))
- Else
- e.Graphics.DrawImage(New System.Drawing.Bitmap(New IO.MemoryStream(New System.Net.WebClient().DownloadData(Item.URL_LINK))), New Rectangle(5, 5, Me.Width - 10, Me.Height - 40))
- End If
- End If
- 'Text Display
- If Item.DisplayText = True Then
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(4, Me.Height - 28, Width - 88, 20))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(4, Me.Height - 28, Width - 88, 20))
- e.Graphics.DrawString(Item.Text, Font, New SolidBrush(Item.Text_Color), New Rectangle(4, Me.Height - 28, Width - 88, 20), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
- End If
- End If
- Next
- ElseIf Me.Style = Stle.Header Then
- 'Border/Main
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(2, 2, Me.Width - 5, Me.Height - 5))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(2, 2, Me.Width - 5, Me.Height - 5))
- 'Split Box
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(2, Me.Height - 33, Me.Width - 5, 30))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(2, Me.Height - 33, Me.Width - 5, 30))
- 'Clear Pics
- For Each Pic As PictureBox In Me.Controls.OfType(Of PictureBox)()
- Pic.Dispose()
- Next
- For Each Item As Item In Items
- 'Circle Buttons
- Dim num As Integer = Item.OrderNumber
- num += 1
- If SelectedItemIndex = Item.OrderNumber Then
- e.Graphics.FillEllipse(New SolidBrush(Me.Header_Selected_Color), New Rectangle(num * 25, Me.Height - 28, 20, 20))
- Else
- e.Graphics.FillEllipse(New SolidBrush(Me.Fill_Color), New Rectangle(num * 25, Me.Height - 28, 20, 20))
- End If
- e.Graphics.DrawEllipse(New Pen(Me.Border_Color), New Rectangle(num * 25, Me.Height - 28, 20, 20))
- 'Display ITems
- If SelectedItemIndex = Item.OrderNumber Then '<- Fine
- If Item.LoadOption = ImageSlider.Item.Kind.PictureBox Then
- If Item.PictureLink = False Then
- Dim pic2 As New PictureBox
- pic2.Location = New Point(5, 5)
- pic2.Size = New Size(Me.Width - 10, Me.Height - 40)
- pic2.Image = Item.Image
- AddHandler pic2.Paint, AddressOf pic_paint
- If Item.PictureSizemode = ImageSlider.Item.Type.StretchImage Then
- pic2.SizeMode = PictureBoxSizeMode.StretchImage
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.Normal Then
- pic2.SizeMode = PictureBoxSizeMode.Normal
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.CenterImage Then
- pic2.SizeMode = PictureBoxSizeMode.CenterImage
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.Zoom Then
- pic2.SizeMode = PictureBoxSizeMode.Zoom
- End If
- Me.Controls.Add(pic2)
- Else
- Dim pic2 As New PictureBox
- pic2.Location = New Point(5, 5)
- pic2.Size = New Size(Me.Width - 10, Me.Height - 40)
- pic2.LoadAsync(Item.URL_LINK)
- AddHandler pic2.Paint, AddressOf pic_paint
- If Item.PictureSizemode = ImageSlider.Item.Type.StretchImage Then
- pic2.SizeMode = PictureBoxSizeMode.StretchImage
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.Normal Then
- pic2.SizeMode = PictureBoxSizeMode.Normal
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.CenterImage Then
- pic2.SizeMode = PictureBoxSizeMode.CenterImage
- ElseIf Item.PictureSizemode = ImageSlider.Item.Type.Zoom Then
- pic2.SizeMode = PictureBoxSizeMode.Zoom
- End If
- Me.Controls.Add(pic2)
- End If
- Else
- If Item.PictureLink = False Then
- e.Graphics.DrawImage(Item.Image, New Rectangle(5, 5, Me.Width - 10, Me.Height - 40))
- Else
- e.Graphics.DrawImage(New System.Drawing.Bitmap(New IO.MemoryStream(New System.Net.WebClient().DownloadData(Item.URL_LINK))), New Rectangle(5, 5, Me.Width - 10, Me.Height - 40))
- End If
- End If
- 'Text Display
- If Item.DisplayText = True Then
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(40, 5, Width - 80, 20))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(40, 5, Width - 80, 20))
- e.Graphics.DrawString(Item.Text, Font, New SolidBrush(Item.Text_Color), New Rectangle(40, 5, Width - 80, 20), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
- End If
- End If
- Next
- End If
- End Sub
- 'Button Presses
- #Region "Button Press"
- Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
- 'Right Button Click
- If Me.Style = Stle.Regular Then
- Dim clickRect As New Rectangle(Width - 21, Height / 2 - 10, 20, 20)
- If clickRect.Contains(New Point(e.X, e.Y)) Then
- If Not SelectedItemIndex = MaxSelectedItemIndex Then
- SelectedItemIndex += 1
- Else
- SelectedItemIndex = 0
- End If
- End If
- 'Left Button
- Dim clickRect2 As New Rectangle(0, Height / 2 - 10, 20, 20)
- If clickRect2.Contains(New Point(e.X, e.Y)) Then
- If Not SelectedItemIndex = 0 Then
- SelectedItemIndex -= 1
- Else
- SelectedItemIndex = MaxSelectedItemIndex
- End If
- End If
- Me.Refresh()
- ElseIf Me.Style = Stle.Steam Then
- Dim clickRect As New Rectangle(Width - 81, Me.Height - 25, 35, 15)
- If clickRect.Contains(New Point(e.X, e.Y)) Then
- If Not SelectedItemIndex = MaxSelectedItemIndex Then
- SelectedItemIndex += 1
- Else
- SelectedItemIndex = 0
- End If
- End If
- 'Left Button
- Dim clickRect2 As New Rectangle(Width - 41, Me.Height - 25, 35, 15)
- If clickRect2.Contains(New Point(e.X, e.Y)) Then
- If Not SelectedItemIndex = 0 Then
- SelectedItemIndex -= 1
- Else
- SelectedItemIndex = MaxSelectedItemIndex
- End If
- End If
- Me.Refresh()
- ElseIf Me.Style = Stle.Header Then
- For Each Item As Item In _Items
- Dim num As Integer = Item.OrderNumber
- num += 1
- If New Rectangle(num * 25, Me.Height - 28, 20, 20).Contains(New Point(e.X, e.Y)) Then
- num -= 1
- SelectedItemIndex = num
- End If
- Next
- Me.Refresh()
- End If
- MyBase.OnMouseDown(e)
- End Sub
- Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
- MyBase.OnMouseUp(e)
- End Sub
- Private mouseX As Integer
- Private mouseY As Integer
- Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
- mouseX = e.X
- mouseY = e.Y
- MyBase.OnMouseMove(e)
- Invalidate()
- End Sub
- #End Region
- Private Sub AutoSwitch_TMRTICK(sender As Object, e As EventArgs)
- If Not SelectedItemIndex = MaxSelectedItemIndex Then
- SelectedItemIndex += 1
- Me.Refresh()
- Else
- SelectedItemIndex = 0
- Me.Refresh()
- End If
- End Sub
- Private Sub pic2LC(sender As Object, e As AsyncCompletedEventArgs)
- Throw New NotImplementedException
- End Sub
- Private Sub pic_paint(sender As Object, e As PaintEventArgs)
- For Each Item As Item In _Items
- If Item.OrderNumber = SelectedItemIndex Then
- If Item.DisplayText = True Then
- If Me.Style = Stle.Regular Then
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(5, 5, Me.Width - 80, 20))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(5, 5, Me.Width - 80, 20))
- e.Graphics.DrawString(Item.Text, Font, New SolidBrush(Item.Text_Color), New Rectangle(5, 5, Me.Width - 80, 20), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
- ElseIf Style = Stle.Header Then
- e.Graphics.FillRectangle(New SolidBrush(Fill_Color), New Rectangle(40, 5, Width - 80, 20))
- e.Graphics.DrawRectangle(New Pen(Border_Color), New Rectangle(40, 5, Width - 80, 20))
- e.Graphics.DrawString(Item.Text, Font, New SolidBrush(Item.Text_Color), New Rectangle(40, 5, Width - 80, 20), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
- End If
- End If
- End If
- Next
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement