Imports System.Collections.ObjectModel Imports EgtUILib Public Module CurrentMachine ' Flag modalità Office Private m_bOffice As Boolean = False ' File ini della macchina Private m_sMachIniFile As String = String.Empty ' Massimo id della lista materiali nel file ini Private m_MaxIdMat As Integer = 0 ' Materiale correntemente attivo (dell'ultimo grezzo impostato) Private m_CurrMat As Material = Nothing Friend ReadOnly Property sMachIniFile As String Get Return m_sMachIniFile End Get End Property ' Lista dei materiali Private m_Materials As New ObservableCollection(Of Material) Public ReadOnly Property Materials As ObservableCollection(Of Material) Get Return m_Materials End Get End Property Public Sub AddMaterial(value As Material) For Each Material In Materials If Material.nId = value.nId Then Exit Sub End If Next WritePrivateProfileMaterial(S_MATERIALS, K_MATERIAL & m_MaxIdMat + 1, value, sMachIniFile) m_MaxIdMat += 1 m_Materials.Add(value) End Sub Public Sub RemoveMaterial(value As Material) ' Se è il materiale corrente lo tolgo If Not IsNothing(CurrMat) AndAlso CurrMat.nId = value.nId Then CurrMat = Nothing End If ' Rimuovo il materiale dall'elenco Dim Index As Integer For Index = 0 To Materials.Count - 1 If Materials(Index).nId = value.nId Then m_Materials.Remove(Materials(Index)) Exit For End If Next Dim TempMat As Material = Nothing For I = Index To m_MaxIdMat - 1 GetPrivateProfileMaterial(S_MATERIALS, K_MATERIAL & I + 2, TempMat, sMachIniFile) WritePrivateProfileMaterial(S_MATERIALS, K_MATERIAL & I + 1, TempMat, sMachIniFile) Next WritePrivateProfileMaterial(S_MATERIALS, K_MATERIAL & m_MaxIdMat, Nothing, sMachIniFile) m_MaxIdMat -= 1 ' Rimuovo il materiale dall'elenco di tutte le lavorazioni Dim MachiningName As String = String.Empty Dim bFound As Boolean = EgtMdbGetFirstMachining(MCH_MY.SAWING, MachiningName) While bFound EgtMdbSetCurrMachining(MachiningName) SearchAndRemoveMat(value.nId) bFound = EgtMdbGetNextMachining(MCH_MY.SAWING, MachiningName) End While bFound = EgtMdbGetFirstMachining(MCH_MY.DRILLING, MachiningName) While bFound EgtMdbSetCurrMachining(MachiningName) SearchAndRemoveMat(value.nId) bFound = EgtMdbGetNextMachining(MCH_MY.DRILLING, MachiningName) End While bFound = EgtMdbGetFirstMachining(MCH_MY.MILLING, MachiningName) While bFound EgtMdbSetCurrMachining(MachiningName) SearchAndRemoveMat(value.nId) bFound = EgtMdbGetNextMachining(MCH_MY.DRILLING, MachiningName) End While End Sub ' Funzione che dato l'Id di un materiale lo rimuove dalla lavorazione corrente Public Sub SearchAndRemoveMat(valueId As Integer) Dim SysNotes As String = String.Empty EgtMdbGetCurrMachiningParam(MCH_MP.SYSNOTES, SysNotes) If SysNotes <> String.Empty Then Dim MachiningMaterials() = SysNotes.Split(";".ToCharArray) SysNotes = String.Empty For Each Material In MachiningMaterials Dim Param() As String = Material.Split(",".ToCharArray) If Param(0) <> valueId.ToString Then SysNotes &= Material & ";" End If Next If SysNotes(SysNotes.Length - 1) = ";" Then SysNotes = SysNotes.Substring(0, SysNotes.Length - 1) End If EgtMdbSetCurrMachiningParam(MCH_MP.SYSNOTES, SysNotes) End If EgtMdbSaveCurrMachining() End Sub Public Property CurrMat As Material Get Return m_CurrMat End Get Set(value As Material) If Not IsNothing(value) Then Dim CurrMatId As String = value.nId.ToString Dim sKey As String = If(m_bOffice, K_CURROFFICEMATERIAL, K_CURRMATERIAL) WritePrivateProfileString(S_MATERIALS, sKey, CurrMatId, sMachIniFile) End If m_CurrMat = value End Set End Property Public Function SetCurrMatByName(sMatName As String) As Boolean ' Reset del materiale corrente CurrMat = Nothing ' Verifico il nome If String.IsNullOrWhiteSpace(sMatName) Then Return False ' Cerco il nome nella lista dei materiali For Index = 0 To Materials.Count - 1 If String.Compare(Materials(Index).sName, sMatName, True) = 0 Then CurrMat = Materials(Index) Return True End If Next Return False End Function 'Sub InitCurrentMachine(sMachinesRootDir As String, sMachineName As String, ' bKeyProdLine As Boolean, bKeyMill As Boolean, bKeyWJ As Boolean, Optional bOffice As Boolean = False) Sub InitCurrentMachine(sMachIniFile As String) m_sMachIniFile = sMachIniFile ' Pulisco la lista dei materiali m_Materials.Clear() m_MaxIdMat = 0 ' Leggo la lista dei materiali Dim Material As Material = Nothing Dim nIndex As Integer = 1 While (GetPrivateProfileMaterial(S_MATERIALS, K_MATERIAL & nIndex, Material, sMachIniFile)) m_Materials.Add(Material) nIndex += 1 End While ' Salvo massimo indice a cui sono arrivato per usarlo quando devo aggiungere nuovi elementi alla lista m_MaxIdMat = nIndex - 1 ' Leggo materiale correntemente attivo Dim sKey As String = If(m_bOffice, K_CURROFFICEMATERIAL, K_CURRMATERIAL) Dim CurrMatId As Integer = GetPrivateProfileInt(S_MATERIALS, sKey, 0, sMachIniFile) For Each Material In Materials If Material.nId = CurrMatId Then m_CurrMat = Material Exit For End If Next End Sub Public Function GetPrivateProfileMaterial( ByVal lpAppName As String, ByVal lpKeyName As String, ByRef Material As Material, ByVal lpFileName As String) As Boolean Dim sVal As String = String.Empty GetPrivateProfileString(lpAppName, lpKeyName, "", sVal, lpFileName) Dim sItems() As String = sVal.Split(",".ToCharArray) If sItems.Count() = 2 Then Dim nId As Integer = 0 StringToInt(sItems(0), nId) Material = New Material(nId, sItems(1)) Return True End If Return False End Function Public Function WritePrivateProfileMaterial( ByVal lpAppName As String, ByVal lpKeyName As String, ByVal Material As Material, ByVal lpFileName As String) As Boolean Dim MatStr As String = Nothing If Not IsNothing(Material) Then MatStr = Material.nId.ToString & "," & Material.sName End If If WritePrivateProfileString(lpAppName, lpKeyName, MatStr, sMachIniFile) Then Return True End If Return False End Function End Module Public Class Material Private m_nId As Integer Private m_sName As String Public ReadOnly Property nId As Integer Get Return m_nId End Get End Property Public Property sName As String Get Return m_sName End Get Set(value As String) m_sName = value End Set End Property Sub New(sName As String, MaterialList As ObservableCollection(Of Material)) Dim nMaxId As Integer = 0 For Each Material In MaterialList If Material.nId > nMaxId Then nMaxId = Material.nId End If Next m_nId = nMaxId + 1 m_sName = sName End Sub Sub New(nId As Integer, sName As String) m_nId = nId m_sName = sName End Sub End Class