Imports System.Collections.ObjectModel Imports EgtUILib Imports EgtWPFLib5 Public Class ConfigurationPageVM ' flag modifica parametri Macchina Friend bModifyMachParam As Boolean ' Definizione comandi Private m_cmdSave As ICommand Private m_ConfigMachTableList As New ObservableCollection(Of MachTable) Public Property ConfigMachTableList As ObservableCollection(Of MachTable) Get Return m_ConfigMachTableList End Get Set(value As ObservableCollection(Of MachTable)) m_ConfigMachTableList = value End Set End Property #Region "Constuctor" Sub New() ' imposto riferimento in Map Map.SetRefConfigurationPageVM(Me) ' assegno le liste dei parametri della macchina corrente alla ConfigMachTableList alla pagina di Configurazione ConfigMachTableList = CurrentMachine.MachTableList End Sub #End Region ' Constuctor #Region "SaveCommand" ''' ''' Returns a command that do Save. ''' Public ReadOnly Property SaveCommand As ICommand Get If m_cmdSave Is Nothing Then m_cmdSave = New Command(AddressOf Save) End If Return m_cmdSave End Get End Property ''' ''' Execute the Save. This method is invoked by the SaveCommand. ''' Public Sub Save() WriteMachParams() End Sub #End Region ' SaveCommand #Region "Methods" ' funzione che scrive i parametri modificati sul file INI Public Sub WriteMachParams() For Each MachTableItem In ConfigMachTableList For Each MachParamItem In MachTableItem.MachParamList If MachParamItem.IsModified Then Dim sMachParamType As String = String.Empty Select Case MachParamItem.nType Case MachParamType.DOUBLE_ sMachParamType = "d" Case MachParamType.STRING_ sMachParamType = "s" Case MachParamType.LENGTH sMachParamType = "l" End Select Dim MachParamString As String = sMachParamType & "," & MachParamItem.sName & "," & MachParamItem.sValue & "," & MachParamItem.sDescription Dim bOk = WriteMachPrivateProfileString(MachParamItem.nParentTable, MachParamItem.nParamIndex, MachParamString) If Not bOk Then MessageBox.Show("Errore nella scrittura di un parametro Macchina", "Error") Return End If MachParamItem.IsModifiedReset() End If Next Next End Sub ' funzione che verifica la modifica dei parametri e ne chiede il salvataggio Friend Function VerifyConfigPageModification() As Boolean For Each MachTableItem In ConfigMachTableList For Each MachParamItem In MachTableItem.MachParamList If MachParamItem.IsModified Then If MessageBox.Show("Salvare le modifiche apportate ai parametri Macchina?", "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then ' salvo parametri Macchina Save() Else ' se da non salvare CreateMachParams() Return False End If End If Next Next Return True End Function ' funzione che verifica l'inserimento della password quando si edita un parametro Macchina Friend Function VerifyConfigPagePassword() As Boolean ' Display message, title, and default value. Dim sPwdInput = InputBox("Inserire Password: ", "Richiesta Pwd") ' Lettura PWD dall'INI e confronto Dim sPwdIni As String = String.Empty If GetMainPrivateProfileString(S_MACH, K_PASSWORD, "", sPwdIni) <> 0 Then If sPwdIni = sPwdInput Then Return True End If Return False End Function #End Region ' Methods End Class Public Class MachParam Inherits VMBase ' table a cui appartiene il parametro Private m_nParentTable As Integer Friend ReadOnly Property nParentTable As Integer Get Return m_nParentTable End Get End Property ' indice del parametro Private m_nParamIndex As Integer Friend ReadOnly Property nParamIndex As Integer Get Return m_nParamIndex End Get End Property ' tipo della variabile Private m_nType As MachParamType Friend ReadOnly Property nType As MachParamType Get Return m_nType End Get End Property ' parametri da struttura Private m_sName As String Public Property sName As String Get Return m_sName End Get Set(value As String) m_sName = value End Set End Property ' parametri da geometria Private m_IsModifiedValue As Boolean = False Private m_dValue As Double Private m_sValue As String Public Property sValue As String Get Select Case nType Case MachParamType.DOUBLE_ Return DoubleToString(m_dValue, 3) Case MachParamType.LENGTH Return LenToString(m_dValue, 3) Case Else ' stringhe Return m_sValue End Select Return If(nType = MachParamType.LENGTH, LenToString(m_dValue, 3), DoubleToString(m_dValue, 3)) End Get Set(value As String) Dim dNewValue As Double ' verifico se valore immesso è diverso dall'originale If nParentTable > 0 Then Dim sOrigValue As String = String.Empty Dim dOrigValue As Double MachParamIniFile.GetMachPrivateProfileParamValue(nParentTable, nParamIndex, sOrigValue) ' trasformo valori Select Case nType Case MachParamType.DOUBLE_ StringToDouble(value, dNewValue) StringToDouble(sOrigValue, dOrigValue) Case MachParamType.LENGTH StringToLen(value, dNewValue) StringToLen(sOrigValue, dOrigValue) Case Else ' per string non faccio nulla End Select m_IsModifiedValue = dNewValue <> dOrigValue End If ' se valore immesso è diverso e password non inserita If m_IsModifiedValue AndAlso Not Map.refConfigurationPageVM.bModifyMachParam Then Map.refConfigurationPageVM.bModifyMachParam = Map.refConfigurationPageVM.VerifyConfigPagePassword() If Not Map.refConfigurationPageVM.bModifyMachParam Then NotifyPropertyChanged("sValue") m_IsModifiedValue = False Return End If End If Select Case nType Case MachParamType.DOUBLE_, MachParamType.LENGTH UpdateParamValue(dNewValue, "") Case Else UpdateParamValue(0, value) End Select End Set End Property Public Property dValue As Double Get Return m_dValue End Get Set(value As Double) m_dValue = value NotifyPropertyChanged("sValue") End Set End Property ' descrizione del parametro Private m_sDescription As String Public Property sDescription As String Get Return m_sDescription End Get Set(value As String) m_sDescription = value End Set End Property Private Sub StdInit(nParentTable As Integer, nParamIndex As Integer, Type As MachParamType, sName As String, sDescription As String) m_nParentTable = nParentTable m_nParamIndex = nParamIndex m_nType = Type m_sName = sName Dim nDescription As Integer If IsNumeric(sDescription) AndAlso Integer.TryParse(sDescription, nDescription) Then m_sDescription = EgtMsg(sDescription) Else m_sDescription = sDescription End If End Sub ' new per double e length Sub New(nParentTable As Integer, nParamIndex As Integer, nType As MachParamType, sParamName As String, dValue As Double, sDescription As String) StdInit(nParentTable, nParamIndex, nType, sParamName, sDescription) m_dValue = dValue 'sValue = DoubleToString(dValue, 3) End Sub ' new per stringhe Sub New(nParentTable As Integer, nParamIndex As Integer, nType As MachParamType, sParamName As String, sDescription As String) StdInit(nParentTable, nParamIndex, nType, sParamName, sDescription) End Sub ' new per parametro vuoto Sub New(nType As MachParamType, nParamIndex As Integer, sParamName As String) StdInit(Nothing, nParamIndex, nType, sParamName, "") End Sub Friend Sub UpdateParamValue(dNewValue As Double, sNewValue As String, Optional bDraw As Boolean = True) Select Case nType Case MachParamType.DOUBLE_, MachParamType.LENGTH m_dValue = dNewValue Case MachParamType.STRING_ m_sValue = sNewValue End Select End Sub Public ReadOnly Property IsModified() As Boolean Get Return m_IsModifiedValue End Get End Property Public Sub IsModifiedReset() m_IsModifiedValue = False End Sub End Class Public Class MachTable Inherits VMBase ' nome della table Private m_sName As String Public Property sName As String Get Return m_sName End Get Set(value As String) m_sName = value End Set End Property Private m_MachParamList As New ObservableCollection(Of MachParam) Public Property MachParamList As ObservableCollection(Of MachParam) Get Return m_MachParamList End Get Set(value As ObservableCollection(Of MachParam)) m_MachParamList = value End Set End Property Sub New(Name As String, ParamList As ObservableCollection(Of MachParam)) sName = Name MachParamList = ParamList End Sub End Class ' Tipo parametro nel file di configurazione Macchina Public Enum MachParamType As Integer DOUBLE_ = 1 STRING_ = 2 COMBO = 3 LENGTH = 4 CHECKBOX = 5 End Enum