Files
icarus/Icarus/EgtColorPicker/EgtColorPickerVM.vb
T
2023-07-21 17:28:57 +02:00

873 lines
30 KiB
VB.net

Imports System.Windows.Forms
Imports EgtUILib
Imports EgtWPFLib5
Public Class EgtColorPickerVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
Friend Event m_CloseWindow(bDialogResult As MessageBoxResult)
Friend Event m_SetLuminosityFill(color As Color)
Friend Event m_UpdateCursorsPos()
Private m_sTitle As String = ""
Public ReadOnly Property sTitle As String
Get
Return m_sTitle
End Get
End Property
Private m_BasicColors As New List(Of EgtColorPicker)
Public Property BasicColors As List(Of EgtColorPicker)
Get
Return m_BasicColors
End Get
Set(value As List(Of EgtColorPicker))
m_BasicColors = value
End Set
End Property
Private m_CustomColors As New List(Of EgtColorPicker)
Public Property CustomColors As List(Of EgtColorPicker)
Get
Return m_CustomColors
End Get
Set(value As List(Of EgtColorPicker))
m_CustomColors = value
End Set
End Property
Friend Sub SetCustomColors(value As Integer())
Dim coloraRGB As System.Drawing.Color
Dim colorRGB As Color
For i As Integer = 0 To value.Length - 1
coloraRGB = System.Drawing.Color.FromArgb(value(i).ToString)
colorRGB = Color.FromRgb(coloraRGB.R, coloraRGB.G, coloraRGB.B)
m_CustomColors.Insert(i, New EgtColorPicker(New SolidColorBrush(colorRGB)))
m_CustomColors.RemoveAt(m_CustomColors.Count - 1)
Next
m_CustomColors.Reverse()
SelCustomColor = m_CustomColors(0)
NotifyPropertyChanged(NameOf(SelCustomColor))
End Sub
Friend Function GetCustomColors() As Integer()
Dim arrayColor As Integer() = New Integer(m_CustomColors.Count - 1) {}
Dim coloraRGB As System.Drawing.Color
Dim colorCode As Integer
For i As Integer = 0 To m_CustomColors.Count - 1
Dim intValue As Integer = Integer.Parse(m_CustomColors(i).Fill.ToString().TrimStart("#FF"), System.Globalization.NumberStyles.HexNumber)
coloraRGB = System.Drawing.Color.FromArgb(intValue)
'colorCode = BitConverter.ToInt32(New Byte() {coloraRGB.R, coloraRGB.G, coloraRGB.B, &H0}, i)
colorCode = coloraRGB.ToArgb()
'arrayColor.Append(colorCode)
arrayColor(i) = colorCode
Next
Return arrayColor
End Function
Private m_HSLColor As New HSLColor
Public ReadOnly Property HSLColor As HSLColor
Get
Return m_HSLColor
End Get
End Property
Friend Sub SetHSLColor(value As Color)
Dim dHue, dSaturation, dLightness As Double
HSLColor.RgbToHsl(value, dHue, dSaturation, dLightness)
m_HSLColor.SetHue(dHue)
m_HSLColor.SetSaturation(dSaturation)
m_HSLColor.SetLightness(dLightness)
NotifyPropertyChanged(NameOf(CurrColor))
SetLightnessColor()
UpdateHue()
UpdateSaturation()
UpdateLightness()
NotifyPropertyChanged(NameOf(Red))
NotifyPropertyChanged(NameOf(Green))
NotifyPropertyChanged(NameOf(Blue))
NotifyPropertyChanged(NameOf(Hexadecimal))
RaiseEvent m_UpdateCursorsPos()
End Sub
Private m_CurrColor As Color
Public ReadOnly Property CurrColor As SolidColorBrush
Get
Return New SolidColorBrush(HSLColor.HslToRgb(m_HSLColor.Hue, m_HSLColor.Saturation, m_HSLColor.Lightness))
End Get
End Property
Private m_SelColor As EgtColorPicker
Public Property SelColor As EgtColorPicker
Get
Return m_SelColor
End Get
Set(value As EgtColorPicker)
m_SelColor = value
SetHSLColor(value.Fill.Color)
'm_Fill = m_Color.Fill
'm_CurrColor = m_Color.Fill.Color
'm_Luminosity_Fill = m_Color.Fill.Color
'm_Red = m_Color.Fill.Color.R.ToString
'm_Green = m_Color.Fill.Color.G.ToString
'm_Blue = m_Color.Fill.Color.B.ToString
'm_Hexadecimal = "#" + System.Drawing.Color.FromArgb(m_Red, m_Green, m_Blue).ToArgb().ToString("X6")
'NotifyPropertyChanged(NameOf(Hexadecimal))
'NotifyPropertyChanged(NameOf(Fill))
'NotifyPropertyChanged(NameOf(CurrColor))
'NotifyPropertyChanged(NameOf(Luminosity_Fill))
'NotifyPropertyChanged(NameOf(Red))
'NotifyPropertyChanged(NameOf(Green))
'NotifyPropertyChanged(NameOf(Blue))
'If Not IsNothing(m_CustomColor) Then
' m_CustomColor.SetFill(m_Color.Fill)
'End If
End Set
End Property
Private m_CustomColor As EgtColorPicker
Public Property SelCustomColor As EgtColorPicker
Get
Return m_CustomColor
End Get
Set(value As EgtColorPicker)
m_CustomColor = value
m_CurrColor = m_CustomColor.Fill.Color
m_Luminosity_Fill = m_CustomColor.Fill.Color
m_Red = m_CustomColor.Fill.Color.R.ToString
m_Green = m_CustomColor.Fill.Color.G.ToString
m_Blue = m_CustomColor.Fill.Color.B.ToString
m_Hexadecimal = "#" + System.Drawing.Color.FromArgb(m_Red, m_Green, m_Blue).ToArgb().ToString("X6")
NotifyPropertyChanged(NameOf(Hexadecimal))
NotifyPropertyChanged(NameOf(CurrColor))
NotifyPropertyChanged(NameOf(Luminosity_Fill))
NotifyPropertyChanged(NameOf(Red))
NotifyPropertyChanged(NameOf(Green))
NotifyPropertyChanged(NameOf(Blue))
UpdateHue()
UpdateSaturation()
UpdateLightness()
End Set
End Property
Private m_Fill As SolidColorBrush
Public ReadOnly Property Fill As SolidColorBrush
Get
Return m_Fill
End Get
End Property
Friend Sub SetCurrColorFill(value As Color)
m_CurrColor = value
SetRed(m_CurrColor.R)
SetGreen(m_CurrColor.G)
SetBlu(m_CurrColor.B)
SetHexadecimal(m_CurrColor.ToString)
NotifyPropertyChanged(NameOf(CurrColor))
NotifyPropertyChanged(NameOf(Luminosity_Fill))
UpdateHue()
UpdateSaturation()
UpdateLightness()
End Sub
Private m_Luminosity_Fill As Color
Public ReadOnly Property Luminosity_Fill As SolidColorBrush
Get
Return New SolidColorBrush(m_Luminosity_Fill)
End Get
End Property
Friend Sub SetLuminosityColorFill(value As Color)
m_CurrColor = value
SetRed(m_CurrColor.R)
SetGreen(m_CurrColor.G)
SetBlu(m_CurrColor.B)
SetHexadecimal(m_CurrColor.ToString)
NotifyPropertyChanged(NameOf(CurrColor))
RaiseEvent m_SetLuminosityFill(value)
UpdateHue()
UpdateSaturation()
UpdateLightness()
End Sub
Private m_Hexadecimal As String
Public Property Hexadecimal As String
Get
Dim RgbColor As Color = HSLColor.HslToRgb(m_HSLColor)
Return "#" & System.Drawing.Color.FromArgb(RgbColor.R, RgbColor.G, RgbColor.B).ToArgb().ToString("X6")
End Get
Set(value As String)
m_Hexadecimal = value
If m_Hexadecimal.Length >= 8 AndAlso m_Hexadecimal >= "#FF000000" And m_Hexadecimal <= "#FFFFFFFF" Then
Dim Color As Color = CType(ColorConverter.ConvertFromString(m_Hexadecimal), Color)
SetCurrColorFill(Color)
End If
NotifyPropertyChanged(NameOf(Fill))
NotifyPropertyChanged(NameOf(Hexadecimal))
End Set
End Property
Friend Sub SetHexadecimal(value As String)
m_Hexadecimal = value
NotifyPropertyChanged(NameOf(Hexadecimal))
End Sub
Private m_Red As Double
Public Property Red As String
Get
Dim RgbColor As Color = HSLColor.HslToRgb(m_HSLColor)
Return DoubleToString(RgbColor.R, 0)
End Get
Set(value As String)
If StringToDouble(value, m_Red) And (m_Red >= 0 AndAlso m_Red <= 255) Then
UpdateRed(m_Red)
'm_Red = value
m_Fill = New SolidColorBrush(Color.FromRgb(m_Red, m_Green, m_Blue))
SetCurrColorFill(m_Fill.Color)
NotifyPropertyChanged(NameOf(Fill))
NotifyPropertyChanged(NameOf(Red))
Else
NotifyPropertyChanged(NameOf(Red))
End If
End Set
End Property
Friend Sub SetRed(value As Double)
m_Red = value
NotifyPropertyChanged(NameOf(Red))
End Sub
Private m_Green As Double
Public Property Green As String
Get
Dim RgbColor As Color = HSLColor.HslToRgb(m_HSLColor)
Return DoubleToString(RgbColor.G, 0)
End Get
Set(value As String)
If StringToDouble(value, m_Green) And (m_Green >= 0 AndAlso m_Green <= 255) Then
UpdateGreen(value)
m_Green = value
m_Fill = New SolidColorBrush(Color.FromRgb(m_Red, m_Green, m_Blue))
SetCurrColorFill(m_Fill.Color)
NotifyPropertyChanged(NameOf(Fill))
Else
NotifyPropertyChanged(NameOf(Green))
End If
End Set
End Property
Friend Sub SetGreen(value As Double)
m_Green = value
NotifyPropertyChanged(NameOf(Green))
End Sub
Private m_Blue As Double
Public Property Blue As String
Get
Dim RgbColor As Color = HSLColor.HslToRgb(m_HSLColor)
Return DoubleToString(RgbColor.B, 0)
End Get
Set(value As String)
If StringToDouble(value, m_Blue) And (m_Blue >= 0 AndAlso m_Blue <= 255) Then
UpdateBlue(value)
m_Blue = value
m_Fill = New SolidColorBrush(Color.FromRgb(m_Red, m_Green, m_Blue))
SetCurrColorFill(m_Fill.Color)
NotifyPropertyChanged(NameOf(Fill))
Else
NotifyPropertyChanged(NameOf(Blue))
End If
End Set
End Property
Friend Sub SetBlu(value As Double)
m_Blue = value
NotifyPropertyChanged(NameOf(Blue))
End Sub
Private m_Hue As String
Public Property Hue As String
Get
Return m_Hue
End Get
Set(value As String)
Dim dHue As Double = 0
If StringToDouble(value, dHue) AndAlso dHue >= 0 AndAlso dHue < 360 Then
UpdateHue(dHue)
m_Hue = If(value.Last() = "."c, value, DoubleToString(m_HSLColor.Hue, 2))
RaiseEvent m_UpdateCursorsPos()
Else
NotifyPropertyChanged(NameOf(Hue))
End If
End Set
End Property
Friend Sub UpdateHue()
m_Hue = DoubleToString(m_HSLColor.Hue, 0)
NotifyPropertyChanged(NameOf(Hue))
End Sub
Private m_Saturation As String
Public Property Saturation As String
Get
Return m_Saturation
End Get
Set(value As String)
Dim dSaturation As Double = 0
If StringToDouble(value, dSaturation) AndAlso dSaturation >= 0 AndAlso dSaturation <= 100 Then
UpdateSaturation(dSaturation / 100)
m_Saturation = If(value.Last() = "."c, value, DoubleToString(m_HSLColor.Saturation * 100, 2))
RaiseEvent m_UpdateCursorsPos()
Else
NotifyPropertyChanged(NameOf(Saturation))
End If
End Set
End Property
Friend Sub UpdateSaturation()
m_Saturation = DoubleToString(m_HSLColor.Saturation * 100, 2)
NotifyPropertyChanged(NameOf(Saturation))
End Sub
Private m_Lightness As String
Public Property Lightness As String
Get
Return m_Lightness
End Get
Set(value As String)
Dim dLightness As Double = 0
If StringToDouble(value, dLightness) AndAlso dLightness >= 0 AndAlso dLightness <= 100 Then
UpdateLightness(dLightness / 100)
m_Lightness = If(value.Last() = "."c, value, DoubleToString(m_HSLColor.Lightness * 100, 2))
RaiseEvent m_UpdateCursorsPos()
Else
NotifyPropertyChanged(NameOf(Lightness))
End If
End Set
End Property
Friend Sub UpdateLightness()
m_Lightness = DoubleToString(m_HSLColor.Lightness * 100, 2)
NotifyPropertyChanged(NameOf(Lightness))
End Sub
' Definizione comandi
Private m_cmdCancel As ICommand
Private m_cmdOk As ICommand
Private m_cmdSaveColor As ICommand
#Region "Messages"
Public ReadOnly Property Red_Msg As String
Get
Return EgtMsg(15050)
End Get
End Property
Public ReadOnly Property Green_Msg As String
Get
Return EgtMsg(15051)
End Get
End Property
Public ReadOnly Property Blu_Msg As String
Get
Return EgtMsg(15052)
End Get
End Property
Public ReadOnly Property Hexadecimal_Msg As String
Get
Return EgtMsg(15053)
End Get
End Property
Public ReadOnly Property AddCColor_Msg As String
Get
Return EgtMsg(15054)
End Get
End Property
Public ReadOnly Property BasicColor_Msg As String
Get
Return EgtMsg(15055)
End Get
End Property
Public ReadOnly Property CustomColor_Msg As String
Get
Return EgtMsg(15056)
End Get
End Property
#End Region
#End Region ' FIELDS & PROPERTIES
#Region "CONTRUCTORS"
Sub New()
EgtColorPicker.SetOwner(Me)
'Colori di Base
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.LightCoral)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Khaki)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.LightGreen)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.PaleGreen)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Aqua)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.SteelBlue)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Pink)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.HotPink)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Red)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Yellow)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Lime)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.LimeGreen)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Cyan)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.CornflowerBlue)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MediumPurple)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Magenta)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Brown)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Orange)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Green)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MediumSeaGreen)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MediumBlue)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MediumSlateBlue)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MediumVioletRed)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DeepPink)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkRed)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkOrange)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.OliveDrab)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkOliveGreen)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Blue)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Navy)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkMagenta)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.BlueViolet)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Maroon)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Firebrick)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.ForestGreen)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkGreen)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkBlue)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MidnightBlue)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkSlateBlue)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Indigo)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Black)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkKhaki)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Olive)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkGray)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.MediumAquamarine)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.Gray)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.DarkViolet)))
m_BasicColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
'Colori Personalizzati
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
m_CustomColors.Add(New EgtColorPicker(New SolidColorBrush(Colors.White)))
NotifyPropertyChanged(NameOf(BasicColors))
NotifyPropertyChanged(NameOf(CustomColors))
SelCustomColor = m_CustomColors(0)
NotifyPropertyChanged(NameOf(SelCustomColor))
End Sub
#End Region 'CONTRUCTORS"
Friend Sub UpdateHue(value As Double)
m_HSLColor.SetHue(value)
NotifyPropertyChanged(NameOf(CurrColor))
SetLightnessColor()
UpdateSaturation()
UpdateLightness()
NotifyPropertyChanged(NameOf(Red))
NotifyPropertyChanged(NameOf(Green))
NotifyPropertyChanged(NameOf(Blue))
NotifyPropertyChanged(NameOf(Hexadecimal))
End Sub
Friend Sub UpdateSaturation(value As Double)
m_HSLColor.SetSaturation(value)
NotifyPropertyChanged(NameOf(CurrColor))
SetLightnessColor()
UpdateHue()
UpdateLightness()
NotifyPropertyChanged(NameOf(Red))
NotifyPropertyChanged(NameOf(Green))
NotifyPropertyChanged(NameOf(Blue))
NotifyPropertyChanged(NameOf(Hexadecimal))
End Sub
Friend Sub UpdateLightness(value As Double)
m_HSLColor.SetLightness(value)
NotifyPropertyChanged(NameOf(CurrColor))
SetLightnessColor()
UpdateHue()
UpdateSaturation()
NotifyPropertyChanged(NameOf(Red))
NotifyPropertyChanged(NameOf(Green))
NotifyPropertyChanged(NameOf(Blue))
NotifyPropertyChanged(NameOf(Hexadecimal))
End Sub
Friend Sub UpdateRed(value As Double)
Dim RGBColor As Color = HSLColor.HslToRgb(m_HSLColor)
Dim h, s, l As Double
HSLColor.RgbToHsl(Color.FromRgb(value, RGBColor.G, RGBColor.B), h, s, l)
SetRed(value)
m_HSLColor.SetHue(h)
m_HSLColor.SetSaturation(s)
m_HSLColor.SetLightness(l)
NotifyPropertyChanged(NameOf(CurrColor))
SetLightnessColor()
UpdateHue()
UpdateSaturation()
UpdateLightness()
NotifyPropertyChanged(NameOf(Red))
NotifyPropertyChanged(NameOf(Green))
NotifyPropertyChanged(NameOf(Blue))
NotifyPropertyChanged(NameOf(Hexadecimal))
End Sub
Friend Sub UpdateGreen(value As Double)
Dim RGBColor As Color = HSLColor.HslToRgb(m_HSLColor)
Dim h, s, l As Double
HSLColor.RgbToHsl(Color.FromRgb(RGBColor.R, value, RGBColor.B), h, s, l)
m_HSLColor.SetHue(h)
m_HSLColor.SetSaturation(s)
m_HSLColor.SetLightness(l)
NotifyPropertyChanged(NameOf(CurrColor))
SetLightnessColor()
UpdateHue()
UpdateSaturation()
UpdateLightness()
NotifyPropertyChanged(NameOf(Red))
NotifyPropertyChanged(NameOf(Green))
NotifyPropertyChanged(NameOf(Blue))
NotifyPropertyChanged(NameOf(Hexadecimal))
End Sub
Friend Sub UpdateBlue(value As Double)
Dim RGBColor As Color = HSLColor.HslToRgb(m_HSLColor)
Dim h, s, l As Double
HSLColor.RgbToHsl(Color.FromRgb(RGBColor.R, RGBColor.G, value), h, s, l)
m_HSLColor.SetHue(h)
m_HSLColor.SetSaturation(s)
m_HSLColor.SetLightness(l)
NotifyPropertyChanged(NameOf(CurrColor))
SetLightnessColor()
UpdateHue()
UpdateSaturation()
UpdateLightness()
NotifyPropertyChanged(NameOf(Red))
NotifyPropertyChanged(NameOf(Green))
NotifyPropertyChanged(NameOf(Blue))
NotifyPropertyChanged(NameOf(Hexadecimal))
End Sub
Friend Sub SetLightnessColor()
RaiseEvent m_SetLuminosityFill(HSLColor.HslToRgb(m_HSLColor.Hue, m_HSLColor.Saturation, 0.5))
End Sub
#Region "COMMANDS"
Public ReadOnly Property Ok_Command As ICommand
Get
If m_cmdOk Is Nothing Then
m_cmdOk = New Command(AddressOf ok)
End If
Return m_cmdOk
End Get
End Property
Public Sub ok()
RaiseEvent m_CloseWindow(DialogResult.OK)
End Sub
Public ReadOnly Property Cancel_Command As ICommand
Get
If m_cmdCancel Is Nothing Then
m_cmdCancel = New Command(AddressOf Cancel)
End If
Return m_cmdCancel
End Get
End Property
Public Sub Cancel()
RaiseEvent m_CloseWindow(DialogResult.Cancel)
End Sub
Public ReadOnly Property SaveColor_Command As ICommand
Get
If m_cmdSaveColor Is Nothing Then
m_cmdSaveColor = New Command(AddressOf SaveColor)
End If
Return m_cmdSaveColor
End Get
End Property
Public Sub SaveColor()
If Not IsNothing(m_CustomColor) Then
m_CustomColor.SetFill(CurrColor)
Dim nIndex As Integer = m_CustomColors.IndexOf(SelCustomColor)
m_CustomColor = If(nIndex >= 0 AndAlso nIndex < m_CustomColors.Count - 1, m_CustomColors(nIndex + 1), m_CustomColors(0))
NotifyPropertyChanged(NameOf(SelCustomColor))
End If
End Sub
#End Region 'COMMANDS
End Class
Public Class EgtColorPicker
Inherits VMBase
#Region "FIELDS & PROPERTIES"
Private Shared Owner As EgtColorPickerVM
Private m_Fill As SolidColorBrush
Public ReadOnly Property Fill As SolidColorBrush
Get
Return m_Fill
End Get
End Property
Friend Sub SetFill(value As SolidColorBrush)
m_Fill = value
NotifyPropertyChanged(NameOf(Fill))
End Sub
Private m_Luminosity_Fill As SolidColorBrush
Public ReadOnly Property Luminosity_Fill As SolidColorBrush
Get
Return m_Luminosity_Fill
End Get
End Property
Friend Sub SetLumFill(value As SolidColorBrush)
m_Luminosity_Fill = value
NotifyPropertyChanged(NameOf(Luminosity_Fill))
End Sub
Private m_CurrColorFill As SolidColorBrush
Public ReadOnly Property CurrColor_Fill As SolidColorBrush
Get
Return m_CurrColorFill
End Get
End Property
Friend Sub SetCurrFill(value As SolidColorBrush)
m_CurrColorFill = value
NotifyPropertyChanged(NameOf(CurrColor_Fill))
End Sub
#End Region ' FIELDS & PROPERTIES
#Region "CONTRUCTORS"
Sub New(Fill As SolidColorBrush)
m_Fill = Fill
End Sub
#End Region 'CONTRUCTORS"
#Region "METHODS"
Friend Shared Sub SetOwner(value As EgtColorPickerVM)
Owner = value
End Sub
#End Region ' METHODS
End Class
Public Class HSLColor
Private m_Hue As Double
Public ReadOnly Property Hue As Double
Get
Return m_Hue
End Get
End Property
Friend Sub SetHue(value As Double)
m_Hue = value
End Sub
Private m_Saturation As Double
Public ReadOnly Property Saturation As Double
Get
Return m_Saturation
End Get
End Property
Friend Sub SetSaturation(value As Double)
m_Saturation = value
End Sub
Private m_Lightness As Double
Public ReadOnly Property Lightness As Double
Get
Return m_Lightness
End Get
End Property
Friend Sub SetLightness(value As Double)
m_Lightness = value
End Sub
Sub New()
End Sub
Sub New(Hue As Double, Saturation As Double, Lightness As Double)
m_Hue = Hue
m_Saturation = Saturation
m_Lightness = Lightness
End Sub
'Private Shared Function HslToRgb(ByVal h As Double, ByVal s As Double, ByVal l As Double, ByRef r As Integer, ByRef g As Integer, ByRef b As Integer) As Boolean
' Dim dConversionH As Double = Math.Round(h, MidpointRounding.AwayFromZero)
' Dim dConversionS As Double = Math.Round(s, 2)
' Dim dConversionL As Double = Math.Round(l, 2)
' Dim C As Double = (1 - Math.Abs(2 * dConversionL - 1)) * dConversionS
' Dim X = C * (1 - Math.Abs((dConversionH / 60) Mod 2 - 1))
' Dim m = dConversionL - C / 2
' Dim dRPrimo As Double
' Dim dGPrimo As Double
' Dim dBPrimo As Double
' If dConversionH >= 0 Then
' If dConversionH < 60 Then
' dRPrimo = C
' dGPrimo = X
' dBPrimo = 0
' ElseIf dConversionH < 120 Then
' dRPrimo = X
' dGPrimo = C
' dBPrimo = 0
' ElseIf dConversionH < 180 Then
' dRPrimo = 0
' dGPrimo = C
' dBPrimo = X
' ElseIf dConversionH < 240 Then
' dRPrimo = 0
' dGPrimo = X
' dBPrimo = C
' ElseIf dConversionH < 300 Then
' dRPrimo = X
' dGPrimo = 0
' dBPrimo = C
' ElseIf dConversionH < 360 Then
' dRPrimo = C
' dGPrimo = 0
' dBPrimo = X
' End If
' End If
' r = (dRPrimo + m) * 255
' g = (dGPrimo + m) * 255
' b = (dBPrimo + m) * 255
'End Function
Friend Shared Function HslToRgb(ByVal h As Double, ByVal s As Double, ByVal l As Double) As Color
Dim dConversionH As Double = Math.Round(h, MidpointRounding.AwayFromZero)
Dim dConversionS As Double = Math.Round(s, 2)
Dim dConversionL As Double = Math.Round(l, 2)
Dim C As Double = (1 - Math.Abs(2 * dConversionL - 1)) * dConversionS
Dim X = C * (1 - Math.Abs((dConversionH / 60) Mod 2 - 1))
Dim m = dConversionL - C / 2
Dim dRPrimo As Double
Dim dGPrimo As Double
Dim dBPrimo As Double
If dConversionH >= 0 Then
If dConversionH < 60 Then
dRPrimo = C
dGPrimo = X
dBPrimo = 0
ElseIf dConversionH < 120 Then
dRPrimo = X
dGPrimo = C
dBPrimo = 0
ElseIf dConversionH < 180 Then
dRPrimo = 0
dGPrimo = C
dBPrimo = X
ElseIf dConversionH < 240 Then
dRPrimo = 0
dGPrimo = X
dBPrimo = C
ElseIf dConversionH < 300 Then
dRPrimo = X
dGPrimo = 0
dBPrimo = C
ElseIf dConversionH < 360 Then
dRPrimo = C
dGPrimo = 0
dBPrimo = X
End If
End If
Dim r As Double = Math.Floor((dRPrimo + m) * 255)
Dim g As Double = Math.Floor((dGPrimo + m) * 255)
Dim b As Double = Math.Floor((dBPrimo + m) * 255)
Return Color.FromArgb(255, r, g, b)
End Function
Friend Shared Function HslToRgb(HSLColor As HSLColor) As Color
Return HslToRgb(HSLColor.Hue, HSLColor.Saturation, HSLColor.Lightness)
End Function
Friend Shared Function RgbToHsl(ByVal r As Integer, ByVal g As Integer, ByVal b As Integer, ByRef h As Double, ByRef s As Double, ByRef l As Double) As Boolean
Dim dRPrimo As Double = r / 255
Dim dGPrimo As Double = g / 255
Dim dBPrimo As Double = b / 255
Dim CMax As Double = Math.Max(dRPrimo, Math.Max(dGPrimo, dBPrimo))
Dim CMin As Double = Math.Min(dRPrimo, Math.Min(dGPrimo, dBPrimo))
Dim Delta As Double = CMax - CMin
If Delta = 0 Then
h = 0
ElseIf CMax = dRPrimo Then
Dim hMod = (((dGPrimo - dBPrimo) / Delta) Mod 6)
If hMod < 0 Then
h = 60 * (hMod + 6)
Else
h = 60 * hMod
End If
ElseIf CMax = dGPrimo Then
h = 60 * ((dBPrimo - dRPrimo) / Delta + 2)
ElseIf CMax = dBPrimo Then
h = 60 * ((dRPrimo - dGPrimo) / Delta + 4)
End If
l = (CMax + CMin) / 2
If Delta = 0 Then
s = 0
Else
s = Delta / (1 - Math.Abs(2 * l - 1))
End If
h = Math.Round(h, 1)
s = Math.Round(s, 1)
l = Math.Round(l, 1)
Return True
End Function
Friend Shared Function RgbToHsl(RgbColor As Color, ByRef h As Double, ByRef s As Double, ByRef l As Double) As Boolean
Return RgbToHsl(RgbColor.R, RgbColor.G, RgbColor.B, h, s, l)
End Function
Friend Shared Function RgbToHsl(RgbColor As System.Drawing.Color, ByRef h As Double, ByRef s As Double, ByRef l As Double) As Boolean
Return RgbToHsl(RgbColor.R, RgbColor.G, RgbColor.B, h, s, l)
End Function
Friend Shared Function RgbToHsl(RgbColor As System.Drawing.Color) As HSLColor
Dim h, s, l As Double
RgbToHsl(RgbColor.R, RgbColor.G, RgbColor.B, h, s, l)
Dim NewHSLColor As New HSLColor(h, s, l)
Return NewHSLColor
End Function
End Class