Imports System.Collections.ObjectModel Imports System.Windows.Forms Imports EgtUILib Imports EgtWPFLib5 Public Class OptionWindowVM Inherits VMBase #Region "FIELDS & PROPERTIES" Private m_LanguageList As New List(Of Language) Public ReadOnly Property LanguageList As List(Of Language) Get Return m_LanguageList End Get End Property Private m_SelLanguage As Language Public Property SelLanguage As Language Get Return m_SelLanguage End Get Set(value As Language) If value IsNot m_SelLanguage Then m_SelLanguage = value WriteMainPrivateProfileString(S_GENERAL, K_MESSAGES, m_SelLanguage.Name) End If End Set End Property Private m_MeasureUnitList As New List(Of String)({"inch", "mm"}) Public ReadOnly Property MeasureUnitList As List(Of String) Get Return m_MeasureUnitList End Get End Property Private m_SideModeList As List(Of String) Public ReadOnly Property SideModeList As List(Of String) Get Return m_SideModeList End Get End Property Private m_SelSideModeIndex As Integer Public Property SelSideModeIndex As Integer Get Return m_SelSideModeIndex End Get Set(value As Integer) If value <> m_SelSideModeIndex Then m_SelSideModeIndex = value WriteMainPrivateProfileString(S_COMPO, K_SIDEMODE, m_SelSideModeIndex.ToString()) End If End Set End Property Public Property SelMeasureUnit As Integer Get Return If(EgtUiUnitsAreMM(), MeasureUnitOpt.MM, MeasureUnitOpt.INCH) End Get Set(value As Integer) ' salvo unità di misura precedente Dim PrevMeasureUnit As MeasureUnitOpt = If(EgtUiUnitsAreMM(), MeasureUnitOpt.MM, MeasureUnitOpt.INCH) If value <> PrevMeasureUnit Then ' cambio unità di misura EgtSetUiUnits(DirectCast(value, MeasureUnitOpt) = MeasureUnitOpt.MM) OmagOFFICEMap.refStatusBarVM.SetMeasureUnit(value) WriteMainPrivateProfileString(S_GENERAL, K_MMUNITS, value.ToString()) ' aggiorno le unità di misura nelle Tab OmagOFFICEMap.refRawPartTabVM.Refresh(PrevMeasureUnit) OmagOFFICEMap.refNestingTabVM.Refresh(PrevMeasureUnit) OmagOFFICEMap.refMoveRawModeVM.Refresh(PrevMeasureUnit) OmagOFFICEMap.refSimulTabVM.Refresh(PrevMeasureUnit) End If End Set End Property Public Property DIGeneral As Boolean Get Return (GetMainPrivateProfileInt(S_NEST, K_DIRECT, 0) <> 0) End Get Set(value As Boolean) WriteMainPrivateProfileString(S_NEST, K_DIRECT, If(value, "1", "0")) End Set End Property Public Property DICsv As Boolean Get Return GetMainPrivateProfileInt(S_CSV, K_CSVDIRECT, 1) <> 0 End Get Set(value As Boolean) WriteMainPrivateProfileString(S_CSV, K_CSVDIRECT, If(value, "1", "0")) End Set End Property Private m_ColorItemList As New ObservableCollection(Of ColorLsBxItem) Public ReadOnly Property ColorItemList As ObservableCollection(Of ColorLsBxItem) Get Return m_ColorItemList End Get End Property Private Property m_TextColorBackground As Color3d Public ReadOnly Property TextColorBackground As Brush Get Dim x = New SolidColorBrush(Color.FromArgb(m_TextColorBackground.A / 100 * 255, m_TextColorBackground.R, m_TextColorBackground.G, m_TextColorBackground.B)) Return x End Get 'Set(value As Brush) ' If Not value.Equals(m_TextColorBackground) Then ' m_TextColorBackground = value ' NotifyPropertyChanged("TextColorBackground") ' End If 'End Set End Property #Region "Messages" Public ReadOnly Property Title As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 1) End Get End Property Public ReadOnly Property CurrentLanguageMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 1) End Get End Property Public ReadOnly Property LanguageAdvertMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 2) End Get End Property Public ReadOnly Property MeasureUnitMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 3) End Get End Property Public ReadOnly Property TextColorMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 13) End Get End Property Public ReadOnly Property ColorToSideAngMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 19) End Get End Property Public ReadOnly Property CTSAboxEnableMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 20) End Get End Property Public ReadOnly Property ToleranceMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 21) End Get End Property Public ReadOnly Property TalloneMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 22) End Get End Property Public ReadOnly Property InclinazioneMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 23) End Get End Property Public ReadOnly Property SideAngleHdr As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 5) End Get End Property Public ReadOnly Property DirectInsertHdr As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 8) End Get End Property Public ReadOnly Property DIGeneralMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 9) End Get End Property Public ReadOnly Property DICsvMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 10) End Get End Property 'Definizione comandi Private m_cmdChangeColor As ICommand #End Region #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTOR" Sub New() ' Leggo nome lingua corrente Dim sLanguage As String = String.Empty GetMainPrivateProfileString(S_GENERAL, K_MESSAGES, "", sLanguage) ' Leggo elenco lingue disponibili da file ini e imposto lingua corrente Dim nIndex As Integer = 1 While True Dim ReadLanguage As Language = GetMainPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex) If IsNothing(ReadLanguage) Then Exit While m_LanguageList.Add(ReadLanguage) If String.Compare(ReadLanguage.Name, sLanguage, True) = 0 Then m_SelLanguage = ReadLanguage End If nIndex += 1 End While ' Carico messaggi per lista tipologie di definizione angolo d'inclinazione m_SideModeList = New List(Of String)({EgtMsg(MSG_OPTIONSPAGEUC + 6), EgtMsg(MSG_OPTIONSPAGEUC + 7)}) ' Carico valore da file ini m_SelSideModeIndex = GetMainPrivateProfileInt(S_COMPO, K_SIDEMODE, 0) Dim m_OptionWindowV As OptionWindowV = DirectCast(Application.Current.Windows.OfType(Of OptionWindowV)().SingleOrDefault(), OptionWindowV) ' I parametri di TextColor presenti nell'INI vengono caricati Dim sTextColor As String = " " If GetPrivateProfileString(S_NEST, K_TEXTCOLOR, " ", sTextColor, m_sIniFile) <> 0 Then Dim sTextColorArray() As String = sTextColor.Split(",") ' TextColorBackground = New SolidColorBrush(Color.FromRgb(sTextColorArray(0), sTextColorArray(1), sTextColorArray(2))) m_TextColorBackground = New Color3d(sTextColorArray(0), sTextColorArray(1), sTextColorArray(2)) End If ' Leggo se la modalità ColorToSideAng è abilitata If GetPrivateProfileInt(S_COLORTOSIDEANG, K_CTSA_ENABLE, 0, m_sIniFile) <> 0 Then CTSAChecked = True Else CTSAChecked = False End If ' I parametri di ColorSideToAng presenti nell'INI vengono caricati a prescindere dall'abilitazione Dim nVal As Integer nVal = GetPrivateProfileInt(S_COLORTOSIDEANG, K_CTSA_TOLERANCE, nVal, m_sIniFile) m_sToleranceTxBx = nVal ' Nel caso dei colori singoli viene verificata la presenza della Key corrispondente a ciascuno dei ' 10 singoli colori (CTSAindex) e il Valore associato viene splittato in un array di stringhe For index As Integer = 1 To 10 Dim sColor As String = " " Dim sArray() As String If GetPrivateProfileString(S_COLORTOSIDEANG, K_CTSA & index, " ", sColor, m_sIniFile) <> 0 Then sArray = sColor.Split(",") ' Leggo elenco colori disponibili da file ini Dim ReadColor As ColorLsBxItem = New ColorLsBxItem(index, If(sArray.Length > 5, sArray(5).Equals("1"), True), New Color3d(sArray(0), sArray(1), sArray(2), 100), sArray(3), sArray(4)) m_ColorItemList.Add(ReadColor) Else ' Se CTSA di indice index non esiste nell'INI lo scrivo con dei valori di default e aggiungo ReadColor ' creato con i valori di default e indice index alla lista di colori WritePrivateProfileString(S_COLORTOSIDEANG, K_CTSA & index, "255,255,255,0,0,0", m_sIniFile) Dim ReadColor As ColorLsBxItem = New ColorLsBxItem(index, 0, New Color3d(255, 255, 255, 100), 0, 0) m_ColorItemList.Add(ReadColor) End If Next End Sub #End Region ' CONSTRUCTOR #Region "COMMANDS" #Region "ChangeColorCommand" ''' ''' Returns a command that do ChangeColor. ''' Public ReadOnly Property ChangeColorCommand As ICommand Get If m_cmdChangeColor Is Nothing Then m_cmdChangeColor = New Command(AddressOf ChangeColor) End If Return m_cmdChangeColor End Get End Property ''' ''' Execute the ChangeColor. This method is invoked by the ChangeColorCommand. ''' Public Sub ChangeColor(ByVal param As Object) '' Recupero colore da Ini 'Dim TextColor As New Color3d(192, 192, 192) 'Dim NewCol As New Color3d(192, 192, 192) 'GetPrivateProfileColor(S_NEST, K_TEXTCOLOR, TextColor, m_sIniFile) '' Creo dialogo colori 'Dim ColorDlg As New System.Windows.Forms.ColorDialog 'ColorDlg.FullOpen = True 'ColorDlg.Color = TextColor.ToColor() '' Visualizzo dialogo 'ColorDlg.ShowDialog() 'NewCol.FromColor(ColorDlg.Color) '' Salvo eventuali modifiche al colore scelto 'Dim sColor As String = NewCol.R & "," & NewCol.G & "," & NewCol.B 'WritePrivateProfileString(S_NEST, K_TEXTCOLOR, sColor, m_sIniFile) '' Imposto il colore scelto sul pulsante 'TextColorBackground = New SolidColorBrush(Color.FromRgb(NewCol.R, NewCol.G, NewCol.B)) ' Recupero colore da Ini Dim NewCol As New Color3d(192, 192, 192, 100) ' Creo dialogo colori Dim ColorDlg As New System.Windows.Forms.ColorDialog ColorDlg.FullOpen = True ColorDlg.Color = m_TextColorBackground.ToColor() ' Visualizzo dialogo If ColorDlg.ShowDialog() <> DialogResult.OK Then Return NewCol.FromColor(ColorDlg.Color) ' Salvo eventuali modifiche al colore scelto Dim sColor As String = NewCol.R & "," & NewCol.G & "," & NewCol.B WritePrivateProfileString(S_NEST, K_TEXTCOLOR, sColor, m_sIniFile) ' Imposto il colore scelto sul pulsante m_TextColorBackground = NewCol NotifyPropertyChanged("TextColorBackground") End Sub #End Region ' ChangeColorCommand #Region "CTSAChecked" Private Property m_CTSAChecked As Boolean Public Property CTSAChecked As Boolean Get Return m_CTSAChecked End Get Set(value As Boolean) If value <> m_CTSAChecked Then m_CTSAChecked = value If CTSAChecked = True Then WritePrivateProfileString(S_COLORTOSIDEANG, K_CTSA_ENABLE, 1, m_sIniFile) ElseIf CTSAChecked = False Then WritePrivateProfileString(S_COLORTOSIDEANG, K_CTSA_ENABLE, 0, m_sIniFile) End If End If End Set End Property #End Region ' CTSAChecked #Region "CTSAbox Tolerance" Private Property m_sToleranceTxBx As String Public Property sToleranceTxBx As String Get Return m_sToleranceTxBx End Get Set(value As String) If value <> m_sToleranceTxBx Then m_sToleranceTxBx = value Dim i As Integer = 0 Try i = Integer.Parse(m_sToleranceTxBx, Globalization.NumberStyles.Any) Catch ex As Exception m_sToleranceTxBx = "" End Try WritePrivateProfileString(S_COLORTOSIDEANG, K_CTSA_TOLERANCE, If(String.IsNullOrWhiteSpace(m_sToleranceTxBx) OrElse m_sToleranceTxBx.Equals("-"), "0", m_sToleranceTxBx), m_sIniFile) End If End Set End Property #End Region ' CTSAbox Tolerance #End Region ' COMMANDS" '----------------------------------------------------------------------------------------------- Public Class ColorLsBxItem Inherits VMBase #Region "FIELDS & PROPERTIES" Private Property m_nCTSAIndex As Integer Public Property nCTSAIndex As Integer Get Return m_nCTSAIndex End Get Set(value As Integer) If value <> m_nCTSAIndex Then m_nCTSAIndex = value End If End Set End Property Private Property m_CTSAiChecked As Boolean Public Property CTSAiChecked As Boolean Get Return m_CTSAiChecked End Get Set(value As Boolean) If value <> m_CTSAiChecked Then m_CTSAiChecked = value CTSAiWriteString(value) End If End Set End Property Private Property m_CTSAiBackground As Color3d Public ReadOnly Property CTSAiBackground As Brush Get Dim x = New SolidColorBrush(Color.FromArgb(m_CTSAiBackground.A / 100 * 255, m_CTSAiBackground.R, m_CTSAiBackground.G, m_CTSAiBackground.B)) Return x End Get End Property Private Property m_sCTSAiInclinazioneText As String Public Property sCTSAiInclinazioneText As String Get Return m_sCTSAiInclinazioneText End Get Set(value As String) If value <> m_sCTSAiInclinazioneText Then m_sCTSAiInclinazioneText = value Dim i As Integer = 0 Try If (m_sCTSAiInclinazioneText <> "-") Then i = Integer.Parse(m_sCTSAiInclinazioneText, Globalization.NumberStyles.Any) End If Catch ex As Exception m_sCTSAiInclinazioneText = "" End Try CTSAiWriteString(value) End If End Set End Property Private Property m_sCTSAiTalloneText As String Public Property sCTSAiTalloneText As String Get Return m_sCTSAiTalloneText End Get Set(value As String) If value <> m_sCTSAiTalloneText Then m_sCTSAiTalloneText = value Dim i As Integer = 0 Try If (m_sCTSAiTalloneText <> "-") Then i = Integer.Parse(m_sCTSAiTalloneText, Globalization.NumberStyles.Any) End If Catch ex As Exception m_sCTSAiTalloneText = "" End Try CTSAiWriteString(value) End If End Set End Property ' Definizione comandi Private m_cmdChangeCTSAiColor As ICommand #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTOR" Sub New(Index As Integer, IsActive As Boolean, Color As Color3d, Inclinazione As Integer, Tallone As Integer) Me.m_nCTSAIndex = Index Me.m_CTSAiChecked = IsActive Me.m_CTSAiBackground = Color Me.m_sCTSAiInclinazioneText = Inclinazione Me.m_sCTSAiTalloneText = Tallone End Sub #End Region ' CONSTRUCTOR #Region "COMMANDS" #Region "ChangeCTSAiColorCommand" Public ReadOnly Property ChangeCTSAiColorCommand As ICommand Get If m_cmdChangeCTSAiColor Is Nothing Then m_cmdChangeCTSAiColor = New Command(AddressOf ChangeCTSAiColor) End If Return m_cmdChangeCTSAiColor End Get End Property Public Sub ChangeCTSAiColor(ByVal param As Object) ' Recupero colore da Ini Dim NewCol As New Color3d(192, 192, 192, 100) ' Creo dialogo colori Dim ColorDlg As New System.Windows.Forms.ColorDialog ColorDlg.FullOpen = True ColorDlg.Color = m_CTSAiBackground.ToColor() ' Visualizzo dialogo If ColorDlg.ShowDialog() <> DialogResult.OK Then Return NewCol.FromColor(ColorDlg.Color) Dim Rvalue As String = NewCol.R Dim Gvalue As String = NewCol.G Dim Bvalue As String = NewCol.B ' Costruisco la string RgbCTSA che corrisponderà al valore da scrivere nell'INI; ' in caso di valore null o " " verrà scritto nella stringa il valore 0 (o 1 nel caso dell'Enable) Dim RgbCTSA As String = If(String.IsNullOrWhiteSpace(Rvalue), "0", Rvalue) & "," & If(String.IsNullOrWhiteSpace(Gvalue), "0", Gvalue) & "," & If(String.IsNullOrWhiteSpace(Bvalue), "0", Bvalue) & "," & If(String.IsNullOrWhiteSpace(sCTSAiInclinazioneText), "0", sCTSAiInclinazioneText) & "," & If(String.IsNullOrWhiteSpace(sCTSAiTalloneText), "0", sCTSAiTalloneText) & "," & If(CTSAiChecked, "1", "0") WritePrivateProfileString(S_COLORTOSIDEANG, K_CTSA & nCTSAIndex, RgbCTSA, m_sIniFile) ' Imposto il colore scelto sul pulsante m_CTSAiBackground = NewCol NotifyPropertyChanged("CTSAiBackground") End Sub #End Region ' ChangeCTSAiColorCommand #End Region ' COMMANDS #Region "METHODS" Private Sub CTSAiWriteString(ByVal param As Object) Dim Rvalue As String = m_CTSAiBackground.R Dim Gvalue As String = m_CTSAiBackground.G Dim Bvalue As String = m_CTSAiBackground.B ' Costruisco la string RgbCTSA che corrisponderà al valore da scrivere nell'INI; ' in caso di valore null o " " verrà scritto nella stringa il valore 0 (o 1 nel caso dell'Enable) Dim RgbCTSA As String = If(String.IsNullOrWhiteSpace(Rvalue), "0", Rvalue) & "," & If(String.IsNullOrWhiteSpace(Gvalue), "0", Gvalue) & "," & If(String.IsNullOrWhiteSpace(Bvalue), "0", Bvalue) & "," & If(String.IsNullOrWhiteSpace(sCTSAiInclinazioneText), "0", sCTSAiInclinazioneText) & "," & If(String.IsNullOrWhiteSpace(sCTSAiTalloneText) OrElse sCTSAiTalloneText.Equals("-"), "0", sCTSAiTalloneText) & "," & If(CTSAiChecked, "1", "0") WritePrivateProfileString(S_COLORTOSIDEANG, K_CTSA & nCTSAIndex, RgbCTSA, m_sIniFile) End Sub #End Region End Class End Class