Imports System.ComponentModel Imports System.Collections.ObjectModel Imports System.Text.RegularExpressions Imports System.IO Imports EgtUILib Imports EgtCAM5.MachineModel Public Class MTableListBoxItem Implements INotifyPropertyChanged Friend SharedMachIndex As Integer = 0 Friend Shared NewMTableIndex As Integer = 1 Private m_TableNamePath As String Public ReadOnly Property TableNamePath As String Get Return m_TableNamePath End Get End Property Private m_TableName As String Public Property TableName As String Get Return m_TableName End Get Set(value As String) m_TableName = value End Set End Property Private m_ActiveMachinesList As New ObservableCollection(Of MTableMachineListBoxItem) Public Property ActiveMachinesList As ObservableCollection(Of MTableMachineListBoxItem) Get Return m_ActiveMachinesList End Get Set(value As ObservableCollection(Of MTableMachineListBoxItem)) m_ActiveMachinesList = value End Set End Property Private m_AssociationList As New ObservableCollection(Of MTableAssociationGridBoxItem) Public Property AssociationList As ObservableCollection(Of MTableAssociationGridBoxItem) Get Return m_AssociationList End Get Set(value As ObservableCollection(Of MTableAssociationGridBoxItem)) m_AssociationList = value End Set End Property Private m_SelectedAssociation As MTableAssociationGridBoxItem Public Property SelectedAssociation As MTableAssociationGridBoxItem Get Return m_SelectedAssociation End Get Set(value As MTableAssociationGridBoxItem) m_SelectedAssociation = value End Set End Property ' Lista dei MachId per ComboBox nella DataGrid Private m_MachIdList As New ObservableCollection(Of Integer) Public Property MachIdList As ObservableCollection(Of Integer) Get Return m_MachIdList End Get Set(value As ObservableCollection(Of Integer)) m_MachIdList = value End Set End Property Sub New(sTableName As String, sTableNamePath As String) TableName = sTableName m_TableNamePath = sTableNamePath ReadMTableFile() End Sub Private Const MMACHINEDATA As String = ".MMachineData" Private Const MACHNAME As String = "MachName" Private Const NCGENERATE As String = "NcGenerate" Private Const MAKERAW As String = "MakeRaw" Private Const MTABLE As String = ".MTable" Private Const NAME As String = "Name" Private Const ONCONST As String = "On" Private Const MACH As String = "Mach" Private Const MACHUP As String = "MachUp" Private Const MACHDW As String = "MachDw" Private Const MACHID As String = "MachId" Private Const SHIFT As String = "Shift" Private Const OPER As String = "Oper" Private Sub ReadMTableFile() If String.IsNullOrEmpty(m_TableNamePath) Then SharedMachIndex += 1 ActiveMachinesList.Add(New MTableMachineListBoxItem(String.Empty, False, False, SharedMachIndex)) m_MachIdList.Add(SharedMachIndex) AssociationList.Add(New MTableAssociationGridBoxItem(False, String.Empty, Nothing, 0, String.Empty, String.Empty, String.Empty, String.Empty)) Return End If ' resetto indici macchine impostati in tabella m_MachIdList.Clear() Dim FileContent As IEnumerable(Of String) = File.ReadLines(m_TableNamePath) Dim bMMachineData As Boolean = False Dim bMTable As Boolean = False For LineIndex As Integer = 0 To FileContent.Count - 1 If FileContent(LineIndex).Contains(MMACHINEDATA) Then bMMachineData = True ElseIf FileContent(LineIndex).Contains(MTABLE) Then bMTable = True End If Dim Open As Integer = CountCharacter(FileContent(LineIndex), "{"c) Dim Close As Integer = CountCharacter(FileContent(LineIndex), "}"c) If Close > Open Then If bMMachineData Then bMMachineData = False ElseIf bMTable Then bMTable = False End If End If If bMMachineData Then Dim sMachName As String = SearchKey(FileContent(LineIndex), MACHNAME) Dim bNcGenerate As Boolean = False Dim bMakeraw As Boolean = False If Not String.IsNullOrEmpty(sMachName) Then Dim sNcGenerate As String = SearchKey(FileContent(LineIndex), NCGENERATE) If Not String.IsNullOrEmpty(sNcGenerate) Then bNcGenerate = Convert.ToBoolean(sNcGenerate) End If Dim sMakeraw As String = SearchKey(FileContent(LineIndex), MAKERAW) If Not String.IsNullOrEmpty(sMakeraw) Then bMakeraw = Convert.ToBoolean(sMakeraw) End If SharedMachIndex += 1 ActiveMachinesList.Add(New MTableMachineListBoxItem(sMachName, bNcGenerate, bMakeraw, SharedMachIndex)) m_MachIdList.Add(SharedMachIndex) End If End If If bMTable Then Dim sName As String = SearchKey(FileContent(LineIndex), NAME) Dim bOn As Boolean = False Dim sMach As String = String.Empty Dim sMachUp As String = String.Empty Dim sMachDw As String = String.Empty Dim nMachId As Integer = 1 Dim nShift As Integer = 0 Dim sOper As String = String.Empty If Not String.IsNullOrEmpty(sName) Then Dim sOn As String = SearchKey(FileContent(LineIndex), ONCONST) If Not String.IsNullOrEmpty(sOn) Then Dim nValue As Integer Integer.TryParse(sOn, nValue) bOn = nValue <> 0 End If sMach = SearchKey(FileContent(LineIndex), MACH) sMachUp = SearchKey(FileContent(LineIndex), MACHUP) sMachDw = SearchKey(FileContent(LineIndex), MACHDW) Dim sMachId = SearchKey(FileContent(LineIndex), MACHID) If String.IsNullOrEmpty(sMachId) Then ' il suo valore di default è 1 quindi lo imposto a questo valore nMachId = 1 Else Integer.TryParse(sMachId, nMachId) End If Dim sShift = SearchKey(FileContent(LineIndex), SHIFT) If String.IsNullOrEmpty(sShift) Then ' il suo valore di default è 1 quindi lo imposto a questo valore nShift = 0 Else Integer.TryParse(sShift, nShift) End If sOper = SearchKey(FileContent(LineIndex), OPER) ' verifico che il MachId letto sia valido If nMachId > m_MachIdList.Count Then nMachId = 0 End If AssociationList.Add(New MTableAssociationGridBoxItem(bOn, sName, nMachId, nShift, sOper, sMach, sMachUp, sMachDw)) End If End If Next End Sub Private Function SearchKey(sLine As String, sKey As String) As String Dim x = Regex.Match(sLine, "[,|{|\s]" & sKey & "\s*=\s*['|\""]?(.*?)\s*?[,|}|'|\""]").Groups(1).Value Return Regex.Match(sLine, "[,|{|\s]" & sKey & "\s*=\s*['|\""]?(.*?)\s*?[,|}|'|\""]").Groups(1).Value End Function Public Function CountCharacter(ByVal sLine As String, ByVal cValue As Char) As Integer Dim nCount As Integer = 0 Dim cArray() As Char = sLine.ToCharArray For Index As Integer = 0 To cArray.Count - 1 If cArray(Index) = cValue Then nCount += 1 Next Return nCount End Function Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Public Sub NotifyPropertyChanged(propName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) End Sub End Class Public Class MTableMachineListBoxItem Implements INotifyPropertyChanged ' Indice della macchina Private m_MachId As Integer Public Property MachId As Integer Get Return m_MachId End Get Set(value As Integer) m_MachId = value End Set End Property ' Lista di macchine per la ComboBox Private Shared m_MachinesList As New ObservableCollection(Of String) Public Property MachinesList As ObservableCollection(Of String) Get Return m_MachinesList End Get Set(value As ObservableCollection(Of String)) m_MachinesList = value End Set End Property ' Macchina selezionata Private m_SelectedMachine As String Public Property SelectedMachine As String Get Return m_SelectedMachine End Get Set(value As String) m_SelectedMachine = value End Set End Property Private m_NcGenerate As Boolean Public Property NcGenerate As Boolean Get Return m_NcGenerate End Get Set(value As Boolean) m_NcGenerate = value End Set End Property Private m_Makeraw As Boolean Public Property Makeraw As Boolean Get Return m_Makeraw End Get Set(value As Boolean) m_Makeraw = value End Set End Property Sub New(sMachName As String, bNcGenerate As Boolean, bMakeraw As Boolean, nMachId As Integer) If m_MachinesList.Count = 0 Then SearchMachine() End If SelectedMachine = sMachName NcGenerate = bNcGenerate Makeraw = bMakeraw MachId = nMachId End Sub ' Funzione che cerca tutte le macchine disponibili per aggiungerle alla lista della ComboBox Private Sub SearchMachine() ' aggiungo elemento stringa vuota per dare la possibilità di non selezionarne nessuna macchina MachinesList.Add(String.Empty) ' aggiungo tutte le macchine Dim TempArray As String() = Directory.GetDirectories(IniFile.m_sMachinesRoot) For i As Integer = 0 To TempArray.Count - 1 Dim MachinePathIni As String = TempArray(i) & "\" & Path.GetFileName(TempArray(i)) & ".ini" If File.Exists(MachinePathIni) Then MachinesList.Add(Path.GetFileName(TempArray(i))) End If Next End Sub Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Public Sub NotifyPropertyChanged(propName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) End Sub End Class Public Class MTableAssociationGridBoxItem Implements INotifyPropertyChanged Private m_OnPar As Boolean Public Property OnPar As Boolean Get Return m_OnPar End Get Set(value As Boolean) m_OnPar = value End Set End Property Private Shared m_NamesList As ObservableCollection(Of String) Public Property NamesList As ObservableCollection(Of String) Get Return m_NamesList End Get Set(value As ObservableCollection(Of String)) If value IsNot m_NamesList Then m_NamesList = value End If End Set End Property Private m_Name As String Public Property Name As String Get Return m_Name End Get Set(value As String) If m_NamesList.Contains(value) Then m_Name = value Else m_Name = String.Empty End If End Set End Property Private Shared m_OperationsList As ObservableCollection(Of String) Public Property OperationsList As ObservableCollection(Of String) Get Return m_OperationsList End Get Set(value As ObservableCollection(Of String)) m_OperationsList = value End Set End Property Private m_Oper As String Public Property Oper As String Get Return m_Oper End Get Set(value As String) m_Oper = value End Set End Property Private m_MachId As Integer? Public Property MachId As Integer? Get Return m_MachId End Get Set(value As Integer?) m_MachId = value End Set End Property Private Shared m_ShiftList As New ObservableCollection(Of Integer)({0, 1}) Public ReadOnly Property ShiftList As ObservableCollection(Of Integer) Get Return m_ShiftList End Get End Property Private m_Shift As Integer Public Property Shift As Integer Get Return m_Shift End Get Set(value As Integer) m_Shift = value End Set End Property Private Shared m_MachTypeList As ObservableCollection(Of MachineModel.MachiningsType) Public Property MachTypeList As ObservableCollection(Of MachineModel.MachiningsType) Get Return m_MachTypeList End Get Set(value As ObservableCollection(Of MachineModel.MachiningsType)) m_MachTypeList = value End Set End Property Private m_SelectedMachType As MachineModel.MachiningsType Public Property SelectedMachType As MachineModel.MachiningsType Get Return m_SelectedMachType End Get Set(value As MachineModel.MachiningsType) If value IsNot m_SelectedMachType Then m_SelectedMachType = value ' Assegno alla lista delle lavorazioni della riga selezionata la lista di quelle del suo tipo If IsNothing(m_SelectedMachType) Then MachList = Nothing End If Select Case m_SelectedMachType.TypeId Case MCH_MY.DRILLING ' se la lista è vuota devo caricarla If IsNothing(m_DrillingList) Then m_DrillingList = New List(Of String) LoadMachiningListByType(m_DrillingList, MCH_MY.DRILLING) ' aggiungo elemento vuoto per poter non impostare alcuna lavorazione m_DrillingList.Insert(0, String.Empty) End If MachList = New ObservableCollection(Of String)(m_DrillingList) Case MCH_MY.SAWING ' se la lista è vuota devo caricarla If IsNothing(m_SawingList) Then m_SawingList = New List(Of String) LoadMachiningListByType(m_SawingList, MCH_MY.SAWING) ' aggiungo elemento vuoto per poter non impostare alcuna lavorazione m_SawingList.Insert(0, String.Empty) End If MachList = New ObservableCollection(Of String)(m_SawingList) Case MCH_MY.MILLING ' se la lista è vuota devo caricarla If IsNothing(m_MillingList) Then m_MillingList = New List(Of String) LoadMachiningListByType(m_MillingList, MCH_MY.MILLING) ' aggiungo elemento vuoto per poter non impostare alcuna lavorazione m_MillingList.Insert(0, String.Empty) End If MachList = New ObservableCollection(Of String)(m_MillingList) Case MCH_MY.POCKETING ' se la lista è vuota devo caricarla If IsNothing(m_PocketingList) Then m_PocketingList = New List(Of String) LoadMachiningListByType(m_PocketingList, MCH_MY.POCKETING) ' aggiungo elemento vuoto per poter non impostare alcuna lavorazione m_PocketingList.Insert(0, String.Empty) End If MachList = New ObservableCollection(Of String)(m_PocketingList) Case MCH_MY.MORTISING ' se la lista è vuota devo caricarla If IsNothing(m_MortisingList) Then m_MortisingList = New List(Of String) LoadMachiningListByType(m_MortisingList, MCH_MY.MORTISING) ' aggiungo elemento vuoto per poter non impostare alcuna lavorazione m_MortisingList.Insert(0, String.Empty) End If MachList = New ObservableCollection(Of String)(m_MortisingList) Case MCH_MY.SAWROUGHING ' se la lista è vuota devo caricarla If IsNothing(m_SawRoughingList) Then m_SawRoughingList = New List(Of String) LoadMachiningListByType(m_SawRoughingList, MCH_MY.SAWROUGHING) ' aggiungo elemento vuoto per poter non impostare alcuna lavorazione m_SawRoughingList.Insert(0, String.Empty) End If MachList = New ObservableCollection(Of String)(m_SawRoughingList) Case MCH_MY.SAWFINISHING ' se la lista è vuota devo caricarla If IsNothing(m_SawFinishingList) Then m_SawFinishingList = New List(Of String) LoadMachiningListByType(m_SawFinishingList, MCH_MY.SAWFINISHING) ' aggiungo elemento vuoto per poter non impostare alcuna lavorazione m_SawFinishingList.Insert(0, String.Empty) End If MachList = New ObservableCollection(Of String)(m_SawFinishingList) End Select ' Annullo i valori di Mach, MachUp e MachDw Mach = String.Empty NotifyPropertyChanged("Mach") MachUp = String.Empty NotifyPropertyChanged("MachUp") MachDw = String.Empty NotifyPropertyChanged("MachDw") End If End Set End Property Private m_MachList As ObservableCollection(Of String) Public Property MachList As ObservableCollection(Of String) Get Return m_MachList End Get Set(value As ObservableCollection(Of String)) If value IsNot m_MachList Then m_MachList = value End If End Set End Property Private m_Mach As String Public Property Mach As String Get Return m_Mach End Get Set(value As String) m_Mach = value End Set End Property Private m_MachUp As String Public Property MachUp As String Get Return m_MachUp End Get Set(value As String) m_MachUp = value End Set End Property Private m_MachDw As String Public Property MachDw As String Get Return m_MachDw End Get Set(value As String) m_MachDw = value End Set End Property ' Liste per le lavorazioni Private m_DrillingList As List(Of String) Private m_SawingList As List(Of String) Private m_MillingList As List(Of String) Private m_PocketingList As List(Of String) Private m_MortisingList As List(Of String) Private m_SawRoughingList As List(Of String) Private m_SawFinishingList As List(Of String) Sub New(bOn As Boolean, sName As String, nMachId As Integer, nShift As Integer, sOper As String, sMach As String, sMachUp As String, sMachDw As String) OnPar = bOn ' Inizializzo la lista dei nomi solo la prima volta If IsNothing(m_NamesList) Then Dim NameFilePath As String = IniFile.m_sTablesRoot & "/" & GEONAMELIST_FILE Dim TempNameList As New List(Of String) Dim Index As Integer = 1 Dim sRaedName As String = String.Empty While EgtUILib.GetPrivateProfileString(S_GEOMETRYNAMES, Index.ToString, "", sRaedName, NameFilePath) > 0 TempNameList.Add(sRaedName) Index += 1 End While NamesList = New ObservableCollection(Of String)(TempNameList) End If Name = sName ' Verifico che il valore di MachId sia valido altrimento lo metto a nothing If nMachId = 0 Then MachId = Nothing Else MachId = nMachId End If If nShift = 1 Then Shift = 1 Else Shift = 0 End If ' Inizializzo la lista delle operazioni solo la prima volta If IsNothing(m_OperationsList) Then Dim TempOperList As New List(Of String) ' aggiungo elemento stringa vuota per dare la possibilità di non selezionarne nessuna operazione TempOperList.Add(String.Empty) ' aggiungo tutte le altre Dim OperationFilePath As String = IniFile.m_sTablesRoot & "/" & OPERATIONLIST_FILE Dim Index As Integer = 1 Dim sRaedOperation As String = String.Empty While EgtUILib.GetPrivateProfileString(S_OPERATIONS, Index.ToString, "", sRaedOperation, OperationFilePath) > 0 TempOperList.Add(sRaedOperation) Index += 1 End While OperationsList = New ObservableCollection(Of String)(TempOperList) End If Oper = sOper ' Inizializzo la lista di tipi di lavorazione solo la prima volta If IsNothing(m_MachTypeList) Then MachTypeList = New ObservableCollection(Of MachiningsType)(MachineModel.ReadActiveMachiningsFamilies()) ' aggiungo elemento stringa vuota(come primo elemento) per dare la possibilità di non selezionarne nessuna operazione MachTypeList.Insert(0, New MachiningsType() With {.TypeId = MCH_MY.NONE, .TypeName = String.Empty}) End If ' Imposto MachType selezionato cercando il tipo delle lavorazioni If EgtMdbSetCurrMachining(sMach) OrElse EgtMdbSetCurrMachining(sMachUp) OrElse EgtMdbSetCurrMachining(sMachDw) Then Dim nMachType As Integer = GDB_ID.NULL EgtMdbGetCurrMachiningParam(MCH_MP.TYPE, nMachType) For Each MachTypeIndex In MachTypeList If nMachType = MachTypeIndex.TypeId Then SelectedMachType = MachTypeIndex Exit For End If Next Else SelectedMachType = Nothing End If If Not IsNothing(m_SelectedMachType) Then ' Imposto i Mach selezionati Mach = sMach MachUp = sMachUp MachDw = sMachDw End If End Sub Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Public Sub NotifyPropertyChanged(propName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) End Sub End Class