Files
EgtCAM5/MTableDb/MTableListBox.vb
T
Dario Sassi 5b2b773d03 EgtCAM5 1.6v8 :
- piccole migliorie a tabelle Doors
- modifiche per gestione più fasi di lavorazione.
2016-10-15 10:04:58 +00:00

605 lines
22 KiB
VB.net

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