Files
EgtCAM5/MTableDb/MTableListBox.vb
T
Dario Sassi bd2b3a5765 EgtCAM5 1.8g5 :
- correzione per check Join di MTable.
2017-08-01 08:06:04 +00:00

1264 lines
50 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
' Actions
Friend Shared m_delSaveMTable As Action(Of MTableListBoxItem)
Friend Shared m_delCloseMTableWnd As Action
Friend Shared m_delSearchInMTable As Action(Of MTableListBoxItem)
' Parametro che indica se sono state apportate modifiche alla tabella lavorazioni ordinata tramite i comandi sposta, posiziona o ordina
Friend m_IsMachiningOrdModified As Boolean = False
Private m_Visibility As Visibility
Public Property Visibility As Visibility
Get
Return m_Visibility
End Get
Set(value As Visibility)
m_Visibility = value
NotifyPropertyChanged("Visibility")
End Set
End Property
Private m_IsSelected As Boolean
Public Property IsSelected As Boolean
Get
Return m_IsSelected
End Get
Set(value As Boolean)
If value <> m_IsSelected Then
m_IsSelected = value
If value Then
' verifico di essere collegato alla cartella doors
If Not VerifyDoorsDir() Then
m_delCloseMTableWnd()
Return
End If
' resetto liste lavorazioni
MTableAssociationGridBoxItem.ResetMachiningList()
' resetto stato bottoni di modifica della tabella delle lavorazioni ordinate (posiziona, raggruppa, sposta su e giù)
m_IsMachiningOrdModified = False
' leggo la tabella
If Not ReadMTableFile() Then Return
SelectedAssociation = If(m_AssociationList.Count > 0, m_AssociationList(0), Nothing)
SelMachine = m_ActiveMachinesList(0)
m_delSearchInMTable(Me)
ElseIf IsModified() OrElse String.IsNullOrEmpty(m_TableNamePath) Then
' chiedo se salvare la tabella corrente prima di passare alla successiva
If MessageBox.Show(EgtMsg(MSG_DOORS + 7), "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then
m_delSaveMTable(Me)
ElseIf String.IsNullOrEmpty(m_TableNamePath) Then
Visibility = Windows.Visibility.Collapsed
End If
End If
NotifyPropertyChanged("IsSelected")
End If
End Set
End Property
Friend SharedMachIndex As Integer = 0
Friend Shared NewMTableIndex As Integer = 0
Friend 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_ActiveTable As Boolean
Public Property ActiveTable As Boolean
Get
Return m_ActiveTable
End Get
Set(value As Boolean)
If value <> m_ActiveTable Then
m_ActiveTable = value
NotifyPropertyChanged("StateColor")
End If
m_ActiveTable = value
End Set
End Property
Public ReadOnly Property StateColor As Brush
Get
If ActiveTable Then
Return IniFile.EgaltechBlue1
Else
Return Brushes.Transparent
End If
End Get
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_SelMachine As MTableMachineListBoxItem
Public Property SelMachine As MTableMachineListBoxItem
Get
Return m_SelMachine
End Get
Set(value As MTableMachineListBoxItem)
If Not IsNothing(value) Then
m_SelMachine = value
End If
NotifyPropertyChanged("SelMachine")
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
Friend 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
End Sub
Private Function ReadMTableFile() As Boolean
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, Nothing, String.Empty, Nothing, String.Empty, Nothing, String.Empty, ActiveMachinesList, m_AssociationList))
Return True
End If
' resetto indici macchine impostati in tabella
SharedMachIndex = 0
m_MachIdList.Clear()
' resetto lista macchine ed associazioni prima di rileggerle
m_ActiveMachinesList.Clear()
m_AssociationList.Clear()
' verifico che siano disponibili le macchine
If Not EgtVerifyMachinesDir() Then
m_delCloseMTableWnd()
Return False
End If
Return ReadDoorsTable(Me)
End Function
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 Function IsModified() As Boolean
Dim CurrIsModified As Boolean = False
' verifico se ci sono stati cambiamenti nell'ordine delle lavorazioni
If m_IsMachiningOrdModified Then Return True
' verifico se ci sono state modifiche nella lista macchine
For Index As Integer = 0 To m_ActiveMachinesList.Count - 1
If m_ActiveMachinesList(Index).m_IsModified = True Then
Return True
End If
Next
' verifico se ci sono state modifiche nella lista associazioni
For Index = 0 To m_AssociationList.Count - 1
If m_AssociationList(Index).m_IsModified = True Then
Return True
End If
Next
' verifico se ci sono state modifiche nella lista lavorazioni ordinate
For MachineIndex As Integer = 0 To m_ActiveMachinesList.Count - 1
For MachiningIndex = 0 To m_ActiveMachinesList(MachineIndex).MachiningList.Count - 1
If m_ActiveMachinesList(MachineIndex).MachiningList(MachiningIndex).m_IsModified = True Then
Return True
End If
Next
Next
Return False
End Function
Public Sub IsModifiedReset()
For Index As Integer = 0 To m_ActiveMachinesList.Count - 1
m_ActiveMachinesList(Index).m_IsModified = False
Next
For Index = 0 To m_AssociationList.Count - 1
m_AssociationList(Index).m_IsModified = False
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 MTableMachineListBoxItem
Implements INotifyPropertyChanged
' Actions
Friend Shared m_delCloseMTableWnd As Action
' Variabile che indica se questo oggetto è stato modificato
Friend m_IsModified As Boolean = False
' 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_IsModified = True
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_IsModified = True
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_IsModified = True
m_Makeraw = value
End Set
End Property
Private WithEvents m_MachiningList As New ObservableCollection(Of MTableMachiningGridBoxItem)
Public Property MachiningList As ObservableCollection(Of MTableMachiningGridBoxItem)
Get
Return m_MachiningList
End Get
Set(value As ObservableCollection(Of MTableMachiningGridBoxItem))
m_MachiningList = 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
If Not SearchMachine() Then Throw New Exception("Exception: Can't find machines dir!")
End If
SelectedMachine = sMachName
NcGenerate = bNcGenerate
Makeraw = bMakeraw
MachId = nMachId
m_IsModified = False
End Sub
' Funzione che cerca tutte le macchine disponibili per aggiungerle alla lista della ComboBox
Private Function SearchMachine() As Boolean
' aggiungo elemento stringa vuota per dare la possibilità di non selezionarne nessuna macchina
MachinesList.Add(String.Empty)
' verifico l'esistenza della cartella Machines
If Not EgtVerifyMachinesDir() Then
m_delCloseMTableWnd()
Return False
End If
' 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
Return True
End Function
' Quando la lista viene modificata, verifico che ci sia almeno un elemento con indice deiverso da zero
Private Sub MachiningList_CollectionChanged(sender As Object, e As Collections.Specialized.NotifyCollectionChangedEventArgs) Handles m_MachiningList.CollectionChanged
If e.Action = Specialized.NotifyCollectionChangedAction.Remove Or e.Action = Specialized.NotifyCollectionChangedAction.Reset Then
If MachiningList.Count > 0 AndAlso m_MachiningList(m_MachiningList.Count - 1).GroupId = 0 Then
m_MachiningList(m_MachiningList.Count - 1).GroupId = 1
End If
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
Public Class MTableMachiningGridBoxItem
Implements INotifyPropertyChanged
Private m_refMTableMachine As MTableMachineListBoxItem
' Variabile che indica se questo oggetto è stato modificato
Friend m_IsModified As Boolean = False
Private m_RWGroupId As Integer
Public Property RWGroupId As Integer
Get
Return m_RWGroupId
End Get
Set(value As Integer)
m_RWGroupId = value
End Set
End Property
Private m_GroupId As Integer
Public Property GroupId As Integer
Get
Return m_GroupId
End Get
Set(value As Integer)
m_GroupId = value
NotifyPropertyChanged("GroupId")
NotifyPropertyChanged("IsGroupEven")
End Set
End Property
Private m_IsSelected As Boolean
Public Property IsSelected As Boolean
Get
Return m_IsSelected
End Get
Set(value As Boolean)
If value <> m_IsSelected Then
m_IsSelected = value
End If
NotifyPropertyChanged("IsSelected")
End Set
End Property
Private m_IsGroupEven As Boolean
Public ReadOnly Property IsGroupEven As Boolean
Get
Return m_GroupId Mod 2 = 0
End Get
End Property
Private Shared m_PropertyList As ObservableCollection(Of String)
Public ReadOnly Property PropertyList As ObservableCollection(Of String)
Get
Return m_PropertyList
End Get
End Property
Private m_Property As String
Public Property grh_PropertyPar As String
Get
Return m_Property
End Get
Set(value As String)
m_IsModified = True
m_Property = value
' lo modifico anche a tutti gli altri elementi del gruppo
Dim PositionIndex As Integer = m_refMTableMachine.MachiningList.IndexOf(Me)
For MachiningIndex = PositionIndex To m_refMTableMachine.MachiningList.Count - 1
If m_refMTableMachine.MachiningList(MachiningIndex).GroupId = GroupId Then
m_refMTableMachine.MachiningList(MachiningIndex).SetProperty(m_Property)
Else
Exit For
End If
Next
End Set
End Property
Public Property PropertyPar As String
Get
Return m_Property
End Get
Set(value As String)
m_Property = value
' lo modifico anche a tutti gli altri elementi del gruppo
Dim PositionIndex As Integer = m_refMTableMachine.MachiningList.IndexOf(Me)
For MachiningIndex = PositionIndex To m_refMTableMachine.MachiningList.Count - 1
If m_refMTableMachine.MachiningList(MachiningIndex).GroupId = GroupId Then
m_refMTableMachine.MachiningList(MachiningIndex).SetProperty(m_Property)
Else
Exit For
End If
Next
End Set
End Property
Friend Sub SetProperty(value As String)
m_Property = value
NotifyPropertyChanged("PropertyPar")
End Sub
Private m_Geometry As String
Public Property Geometry As String
Get
Return m_Geometry
End Get
Set(value As String)
m_Geometry = value
NotifyPropertyChanged("Geometry")
End Set
End Property
Private m_Machining As String
Public Property Machining As String
Get
Return m_Machining
End Get
Set(value As String)
m_Machining = value
NotifyPropertyChanged("Machining")
End Set
End Property
Private m_Join As Boolean
Public Property grh_Join As Boolean
Get
Return m_Join
End Get
Set(value As Boolean)
If value <> m_Join Then
m_IsModified = True
m_Join = value
NotifyPropertyChanged("grh_Join")
End If
End Set
End Property
Public Property Join As Boolean
Get
Return m_Join
End Get
Set(value As Boolean)
If value <> m_Join Then
m_Join = value
NotifyPropertyChanged("grh_Join")
End If
End Set
End Property
' Variabile che indica se il nome dell'associazione corrisponde ai criteri di ricerca
Private m_IsValidForSearch As Boolean
Public Property IsValidForSearch As Boolean
Get
Return m_IsValidForSearch
End Get
Set(value As Boolean)
m_IsValidForSearch = value
NotifyPropertyChanged("IsValidForSearch")
End Set
End Property
Sub New(dGroup As Integer, sGeometry As String, sMachining As String, bJoin As Boolean, ByRef refMTableMachine As MTableMachineListBoxItem)
m_RWGroupId = dGroup
m_GroupId = dGroup \ 100
m_Geometry = sGeometry
m_Machining = sMachining
m_Join = bJoin
m_refMTableMachine = refMTableMachine
End Sub
Friend Shared Sub LoadPropertyList()
Dim TempOperList As New List(Of String)
' aggiungo elemento stringa vuota per dare la possibilità di non selezionarne nessuna proprietà
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_PROPERTIES, Index.ToString, "", sRaedOperation, OperationFilePath) > 0
TempOperList.Add(sRaedOperation)
Index += 1
End While
'TempOperList.Sort()
m_PropertyList = New ObservableCollection(Of String)(TempOperList)
End Sub
Public Shared Sub Remove(Item As MTableMachiningGridBoxItem, MachiningList As ObservableCollection(Of MTableMachiningGridBoxItem))
' recupero indice dell'Item all'interno della lista
Dim ItemIndex As Integer = MachiningList.IndexOf(Item)
If ItemIndex < 0 Then Return
Dim bIncrementFollowingGroup As Boolean = False
If MachiningList.Count = 1 OrElse MachiningList(ItemIndex).GroupId = 0 Then
bIncrementFollowingGroup = False
ElseIf ItemIndex = 0 AndAlso MachiningList(ItemIndex + 1).m_GroupId <> Item.m_GroupId Then
bIncrementFollowingGroup = True
ElseIf ItemIndex = MachiningList.Count - 1 AndAlso MachiningList(ItemIndex - 1).m_GroupId <> Item.m_GroupId Then
bIncrementFollowingGroup = True
ElseIf (MachiningList(ItemIndex - 1).m_GroupId <> Item.m_GroupId AndAlso MachiningList(ItemIndex + 1).m_GroupId <> Item.m_GroupId) Then
bIncrementFollowingGroup = True
End If
MachiningList.Remove(Item)
If bIncrementFollowingGroup Then
For ListIndex = ItemIndex To MachiningList.Count - 1
MachiningList(ListIndex).GroupId -= 1
Next
End If
End Sub
Public Shared Function Copy(Machining As MTableMachiningGridBoxItem) As MTableMachiningGridBoxItem
Return New MTableMachiningGridBoxItem(Machining.m_GroupId, Machining.m_Geometry, Machining.m_Machining, Machining.m_Join, Machining.m_refMTableMachine)
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 MTableAssociationGridBoxItem
Implements INotifyPropertyChanged
' Actions
Friend Shared m_delCloseMTableWnd As Action
' Variabile che indica se questo oggetto è stato modificato
Friend m_IsModified As Boolean = False
' Variabile che indica se il nome dell'associazione corrisponde ai criteri di ricerca
Private m_IsValidForSearch As Boolean
Public Property IsValidForSearch As Boolean
Get
Return m_IsValidForSearch
End Get
Set(value As Boolean)
m_IsValidForSearch = value
NotifyPropertyChanged("IsValidForSearch")
End Set
End Property
Private m_IsSelected As Boolean
Public Property IsSelected As Boolean
Get
Return m_IsSelected
End Get
Set(value As Boolean)
If value <> m_IsSelected Then
m_IsSelected = value
MTableDbVM.refMTableDbVM.ManageMachiningButtons(True, False, False, True)
NotifyPropertyChanged("IsSelected")
End If
End Set
End Property
' Riferimento alla lista di macchine attive per la tabella a cui appartiene questa associazione
Private m_ActiveMachinesList As ObservableCollection(Of MTableMachineListBoxItem)
' Riferimento alla lista di associazioni attive per la tabella a cui appartiene questa associazione
Private m_AssociationList As ObservableCollection(Of MTableAssociationGridBoxItem)
Private m_OnPar As Boolean
Public Property OnPar As Boolean
Get
Return m_OnPar
End Get
Set(value As Boolean)
m_IsModified = True
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_IsModified = True
m_Name = value
Else
m_Name = String.Empty
End If
' Aggiorno Item in lista ordinata lavorazioni
If Not IsNothing(m_RefMachItem) Then
m_RefMachItem.Geometry = m_Name
End If
If Not IsNothing(m_RefMachUpItem) Then
m_RefMachUpItem.Geometry = m_Name
End If
If Not IsNothing(m_RefMachDwItem) Then
m_RefMachDwItem.Geometry = m_Name
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_IsModified = True
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)
If value <> m_MachId Then
m_IsModified = True
Dim nOldMachId As Integer = m_MachId
m_MachId = value
' Riverifico che il numero di macchine non sia cambiato
If m_MachId > 1 Then
If m_DrillingList.Count <> m_ActiveMachinesList.Count Then
For Index As Integer = m_DrillingList.Count To m_ActiveMachinesList.Count - 1
m_DrillingList.Add(New List(Of String))
m_SawingList.Add(New List(Of String))
m_MillingList.Add(New List(Of String))
m_PocketingList.Add(New List(Of String))
m_MortisingList.Add(New List(Of String))
m_SawRoughingList.Add(New List(Of String))
m_SawFinishingList.Add(New List(Of String))
m_ChiselingList.Add(New List(Of String))
Next
End If
End If
' Aggiorno lista tipi di lavorazione
UpdateMachiningTypeLists()
If Not IsNothing(m_SelectedMachType) Then
' Verifico che quella selezionata sia valida anche per la macchina corrente
Dim bFound As Boolean = False
For TypeIndex = 0 To m_MachTypeList.Count - 1
If m_MachTypeList(TypeIndex).TypeId = m_SelectedMachType.TypeId Then
m_SelectedMachType = m_MachTypeList(TypeIndex)
bFound = True
NotifyPropertyChanged("SelectedMachType")
Exit For
End If
Next
If Not bFound Then
m_SelectedMachType = Nothing
NotifyPropertyChanged("SelectedMachType")
End If
End If
' Assegno alla lista delle lavorazioni della riga selezionata la lista di quelle del suo tipo
If IsNothing(m_SelectedMachType) Then
MachList = Nothing
Else
If Not UpdateMachiningLists() Then Return
End If
' Verifico se i nomi già presenti per Mach, MachUp e MachDw sono validi per la nuova macchina
If Not String.IsNullOrWhiteSpace(m_ActiveMachinesList(value - 1).SelectedMachine) AndAlso Not EgtTrySettingCurrMachine(m_ActiveMachinesList(value - 1).SelectedMachine) Then
m_delCloseMTableWnd()
Return
End If
EgtSetCurrMachine(m_ActiveMachinesList(value - 1).SelectedMachine)
If Not IsNothing(m_SelectedMachType) Then
m_RefMachItem = ManageOrderedMachining(Mach, nOldMachId, RefMachItem)
m_RefMachUpItem = ManageOrderedMachining(MachUp, nOldMachId, RefMachUpItem)
m_RefMachDwItem = ManageOrderedMachining(MachDw, nOldMachId, RefMachDwItem)
' aggiorno grafica
If String.IsNullOrWhiteSpace(m_Mach) Then NotifyPropertyChanged("Mach")
If String.IsNullOrWhiteSpace(m_MachUp) Then NotifyPropertyChanged("MachUp")
If String.IsNullOrWhiteSpace(m_MachDw) Then NotifyPropertyChanged("MachDw")
End If
End If
End Set
End Property
Private Function ManageOrderedMachining(ByRef Mach As String, nOldMachId As Integer, ByRef CurrRefMachItem As MTableMachiningGridBoxItem) As MTableMachiningGridBoxItem
If Not String.IsNullOrEmpty(Mach) Then
' se non usata da altre lavorazioni sulla stessa macchina
Dim bFound As Boolean = False
For AssIndex = 0 To m_AssociationList.Count - 1
If m_AssociationList(AssIndex) IsNot Me And m_AssociationList(AssIndex).RefMachItem Is CurrRefMachItem And m_AssociationList(AssIndex).MachId = nOldMachId Then
bFound = True
Exit For
End If
Next
If Not bFound Then
' Cancello relativa lavorazione ordinata
For MachIndex = 0 To m_ActiveMachinesList.Count - 1
If m_ActiveMachinesList(MachIndex).MachId = nOldMachId Then
MTableMachiningGridBoxItem.Remove(CurrRefMachItem, m_ActiveMachinesList(MachIndex).MachiningList)
End If
Next
End If
If Not EgtMdbSetCurrMachining(Mach) Then
CurrRefMachItem = Nothing
Mach = String.Empty
Else
' se lavorazione mantenuta nella tabella della macchina precedente,
If bFound Then
' allora devo farne una copia
CurrRefMachItem = MTableMachiningGridBoxItem.Copy(CurrRefMachItem)
End If
' Reinserisco lavorazione ordinata nella lista della macchina giusta
CurrRefMachItem.GroupId = 0
CurrRefMachItem.SetProperty(String.Empty)
For MachIndex = 0 To m_ActiveMachinesList.Count - 1
If m_ActiveMachinesList(MachIndex).MachId = m_MachId Then
' se lista vuota metto gruppo uguale a 1
If m_ActiveMachinesList(MachIndex).MachiningList.Count = 0 Then
CurrRefMachItem.GroupId = 1
m_ActiveMachinesList(MachIndex).MachiningList.Insert(0, CurrRefMachItem)
Else
' verifico se esiste già
Dim bExist As Boolean = False
For MachiningIndex = 0 To m_ActiveMachinesList(MachIndex).MachiningList.Count - 1
Dim CurrMachining As MTableMachiningGridBoxItem = m_ActiveMachinesList(MachIndex).MachiningList(MachiningIndex)
If CurrMachining.Geometry = CurrRefMachItem.Geometry And CurrMachining.Machining = CurrRefMachItem.Machining Then
CurrRefMachItem = CurrMachining
bExist = True
End If
Next
If Not bExist Then
m_ActiveMachinesList(MachIndex).MachiningList.Insert(0, CurrRefMachItem)
End If
End If
End If
Next
End If
End If
Return CurrRefMachItem
End Function
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_IsModified = True
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 Not IsNothing(value) 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
Else
If Not UpdateMachiningLists() Then Return
End If
' 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 Sub UpdateMachiningTypeLists()
' se la lista è vuota devo caricarla
If m_MachinesMachTypeList.Count < m_MachId OrElse m_MachinesMachTypeList(m_MachId - 1).Count = 0 Then
Dim sMachineName As String = m_ActiveMachinesList(m_MachId - 1).SelectedMachine
Dim sMachineIniPath As String = IniFile.m_sMachinesRoot & "\" & m_ActiveMachinesList(m_MachId - 1).SelectedMachine & "\" & m_ActiveMachinesList(m_MachId - 1).SelectedMachine & ".ini"
If File.Exists(sMachineIniPath) Then
For Index = m_MachinesMachTypeList.Count To m_MachId - 1
m_MachinesMachTypeList.Add(New List(Of MachineModel.MachiningsType))
Next
m_MachinesMachTypeList(m_MachId - 1) = New List(Of MachiningsType)(MachineModel.ReadMachiningsFamilies(sMachineIniPath))
End If
' aggiungo elemento stringa vuota(come primo elemento) per dare la possibilità di non selezionarne nessuna operazione
If Not IsNothing(m_MachinesMachTypeList(m_MachId - 1)) Then
m_MachinesMachTypeList(m_MachId - 1).Insert(0, New MachiningsType() With {.TypeId = MCH_MY.NONE, .TypeName = String.Empty})
Else
m_MachinesMachTypeList(m_MachId - 1) = New List(Of MachiningsType)({New MachiningsType() With {.TypeId = MCH_MY.NONE, .TypeName = String.Empty}})
End If
End If
MachTypeList = New ObservableCollection(Of MachiningsType)(m_MachinesMachTypeList(m_MachId - 1))
End Sub
' Funzione che in base al tipo di lavorazione e alla macchina selezionati, imposta la lista delle lavorazioni per le combo
Private Function UpdateMachiningLists() As Boolean
Select Case m_SelectedMachType.TypeId
Case MCH_MY.DRILLING
' se la lista è vuota devo caricarla
If m_DrillingList(m_MachId - 1).Count = 0 Then
m_DrillingList(m_MachId - 1) = New List(Of String)
If EgtTrySettingCurrMachine(m_ActiveMachinesList(m_MachId - 1).SelectedMachine) Then
LoadMachiningListByType(m_DrillingList(m_MachId - 1), MCH_MY.DRILLING)
Else
m_delCloseMTableWnd()
Return False
End If
' aggiungo elemento vuoto per poter non impostare alcuna lavorazione
m_DrillingList(m_MachId - 1).Insert(0, String.Empty)
End If
MachList = New ObservableCollection(Of String)(m_DrillingList(m_MachId - 1))
Case MCH_MY.SAWING
' se la lista è vuota devo caricarla
If m_SawingList(m_MachId - 1).Count = 0 Then
m_SawingList(m_MachId - 1) = New List(Of String)
If EgtTrySettingCurrMachine(m_ActiveMachinesList(m_MachId - 1).SelectedMachine) Then
LoadMachiningListByType(m_SawingList(m_MachId - 1), MCH_MY.SAWING)
Else
m_delCloseMTableWnd()
Return False
End If
' aggiungo elemento vuoto per poter non impostare alcuna lavorazione
m_SawingList(m_MachId - 1).Insert(0, String.Empty)
End If
MachList = New ObservableCollection(Of String)(m_SawingList(m_MachId - 1))
Case MCH_MY.MILLING
' se la lista è vuota devo caricarla
If m_MillingList(m_MachId - 1).Count = 0 Then
m_MillingList(m_MachId - 1) = New List(Of String)
If EgtTrySettingCurrMachine(m_ActiveMachinesList(m_MachId - 1).SelectedMachine) Then
LoadMachiningListByType(m_MillingList(m_MachId - 1), MCH_MY.MILLING)
Else
m_delCloseMTableWnd()
Return False
End If
' aggiungo elemento vuoto per poter non impostare alcuna lavorazione
m_MillingList(m_MachId - 1).Insert(0, String.Empty)
End If
MachList = New ObservableCollection(Of String)(m_MillingList(m_MachId - 1))
Case MCH_MY.POCKETING
' se la lista è vuota devo caricarla
If m_PocketingList(m_MachId - 1).Count = 0 Then
m_PocketingList(m_MachId - 1) = New List(Of String)
If EgtTrySettingCurrMachine(m_ActiveMachinesList(m_MachId - 1).SelectedMachine) Then
LoadMachiningListByType(m_PocketingList(m_MachId - 1), MCH_MY.POCKETING)
Else
m_delCloseMTableWnd()
Return False
End If
' aggiungo elemento vuoto per poter non impostare alcuna lavorazione
m_PocketingList(m_MachId - 1).Insert(0, String.Empty)
End If
MachList = New ObservableCollection(Of String)(m_PocketingList(m_MachId - 1))
Case MCH_MY.MORTISING
' se la lista è vuota devo caricarla
If m_MortisingList(m_MachId - 1).Count = 0 Then
m_MortisingList(m_MachId - 1) = New List(Of String)
If EgtTrySettingCurrMachine(m_ActiveMachinesList(m_MachId - 1).SelectedMachine) Then
LoadMachiningListByType(m_MortisingList(m_MachId - 1), MCH_MY.MORTISING)
Else
m_delCloseMTableWnd()
Return False
End If
' aggiungo elemento vuoto per poter non impostare alcuna lavorazione
m_MortisingList(m_MachId - 1).Insert(0, String.Empty)
End If
MachList = New ObservableCollection(Of String)(m_MortisingList(m_MachId - 1))
Case MCH_MY.SAWROUGHING
' se la lista è vuota devo caricarla
If m_SawRoughingList(m_MachId - 1).Count = 0 Then
m_SawRoughingList(m_MachId - 1) = New List(Of String)
If EgtTrySettingCurrMachine(m_ActiveMachinesList(m_MachId - 1).SelectedMachine) Then
LoadMachiningListByType(m_SawRoughingList(m_MachId - 1), MCH_MY.SAWROUGHING)
Else
m_delCloseMTableWnd()
Return False
End If
' aggiungo elemento vuoto per poter non impostare alcuna lavorazione
m_SawRoughingList(m_MachId - 1).Insert(0, String.Empty)
End If
MachList = New ObservableCollection(Of String)(m_SawRoughingList(m_MachId - 1))
Case MCH_MY.SAWFINISHING
' se la lista è vuota devo caricarla
If m_SawFinishingList(m_MachId - 1).Count = 0 Then
m_SawFinishingList(m_MachId - 1) = New List(Of String)
If EgtTrySettingCurrMachine(m_ActiveMachinesList(m_MachId - 1).SelectedMachine) Then
LoadMachiningListByType(m_SawFinishingList(m_MachId - 1), MCH_MY.SAWFINISHING)
Else
m_delCloseMTableWnd()
Return False
End If
' aggiungo elemento vuoto per poter non impostare alcuna lavorazione
m_SawFinishingList(m_MachId - 1).Insert(0, String.Empty)
End If
MachList = New ObservableCollection(Of String)(m_SawFinishingList(m_MachId - 1))
Case MCH_MY.CHISELING
' se la lista è vuota devo caricarla
If m_ChiselingList(m_MachId - 1).Count = 0 Then
m_ChiselingList(m_MachId - 1) = New List(Of String)
If EgtTrySettingCurrMachine(m_ActiveMachinesList(m_MachId - 1).SelectedMachine) Then
LoadMachiningListByType(m_ChiselingList(m_MachId - 1), MCH_MY.CHISELING)
Else
m_delCloseMTableWnd()
Return False
End If
' aggiungo elemento vuoto per poter non impostare alcuna lavorazione
m_ChiselingList(m_MachId - 1).Insert(0, String.Empty)
End If
MachList = New ObservableCollection(Of String)(m_ChiselingList(m_MachId - 1))
End Select
Return True
End Function
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_RefMachItem As MTableMachiningGridBoxItem
Public ReadOnly Property RefMachItem As MTableMachiningGridBoxItem
Get
Return m_RefMachItem
End Get
End Property
Private m_Mach As String
Public Property Mach As String
Get
Return m_Mach
End Get
Set(value As String)
m_IsModified = True
m_Mach = value
RefreshMachItem(m_RefMachItem, m_Mach)
End Set
End Property
Private m_RefMachUpItem As MTableMachiningGridBoxItem
Public ReadOnly Property RefMachUpItem As MTableMachiningGridBoxItem
Get
Return m_RefMachUpItem
End Get
End Property
Private m_MachUp As String
Public Property MachUp As String
Get
Return m_MachUp
End Get
Set(value As String)
m_IsModified = True
m_MachUp = value
RefreshMachItem(m_RefMachUpItem, m_MachUp)
End Set
End Property
Private m_RefMachDwItem As MTableMachiningGridBoxItem
Public ReadOnly Property RefMachDwItem As MTableMachiningGridBoxItem
Get
Return m_RefMachDwItem
End Get
End Property
Private m_MachDw As String
Public Property MachDw As String
Get
Return m_MachDw
End Get
Set(value As String)
m_IsModified = True
m_MachDw = value
RefreshMachItem(m_RefMachDwItem, m_MachDw)
End Set
End Property
' Liste per le lavorazioni
Private Shared m_DrillingList As New List(Of List(Of String))
Private Shared m_SawingList As New List(Of List(Of String))
Private Shared m_MillingList As New List(Of List(Of String))
Private Shared m_PocketingList As New List(Of List(Of String))
Private Shared m_MortisingList As New List(Of List(Of String))
Private Shared m_SawRoughingList As New List(Of List(Of String))
Private Shared m_SawFinishingList As New List(Of List(Of String))
Private Shared m_ChiselingList As New List(Of List(Of String))
Private Shared m_MachinesMachTypeList As New List(Of List(Of MachineModel.MachiningsType))
Friend Shared Sub ResetMachiningList()
m_DrillingList = New List(Of List(Of String))
m_SawingList = New List(Of List(Of String))
m_MillingList = New List(Of List(Of String))
m_PocketingList = New List(Of List(Of String))
m_MortisingList = New List(Of List(Of String))
m_SawRoughingList = New List(Of List(Of String))
m_SawFinishingList = New List(Of List(Of String))
m_ChiselingList = New List(Of List(Of String))
End Sub
Sub New(bOn As Boolean, sName As String, nMachId As Integer, nShift As Integer, sOper As String,
RefMachItem As MTableMachiningGridBoxItem, sMach As String, RefMachUpItem As MTableMachiningGridBoxItem, sMachUp As String, RefMachDwItem As MTableMachiningGridBoxItem, sMachDw As String,
ByRef ActiveMachinesList As ObservableCollection(Of MTableMachineListBoxItem), ByRef AssociationList As ObservableCollection(Of MTableAssociationGridBoxItem))
' Inizializzo la lista delle lavorazioni solo la prima volta
If m_DrillingList.Count = 0 Then
For Index As Integer = 0 To ActiveMachinesList.Count - 1
m_DrillingList.Add(New List(Of String))
m_SawingList.Add(New List(Of String))
m_MillingList.Add(New List(Of String))
m_PocketingList.Add(New List(Of String))
m_MortisingList.Add(New List(Of String))
m_SawRoughingList.Add(New List(Of String))
m_SawFinishingList.Add(New List(Of String))
m_ChiselingList.Add(New List(Of String))
Next
End If
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
TempNameList.Sort()
NamesList = New ObservableCollection(Of String)(TempNameList)
End If
Name = sName
'Imposto il riferimento alla lista di macchine di questa tabella
m_ActiveMachinesList = ActiveMachinesList
' imposto il riferimento alla lista di associazioni di questa tabella
m_AssociationList = AssociationList
' Verifico che il valore di MachId sia valido altrimento imposto la prima macchina
If nMachId = 0 Then
MachId = 1
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
' TempOperList.Sort()
' OperationsList = New ObservableCollection(Of String)(TempOperList)
'End If
Oper = sOper
' dall'MId recupero la macchina a cui si riferisce questa associazione e la imposto come corrente
EgtSetCurrMachine(m_ActiveMachinesList(m_MachId - 1).SelectedMachine)
' 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 Index As Integer = 0 To m_MachTypeList.Count - 1
If nMachType = m_MachTypeList(Index).TypeId Then
SelectedMachType = m_MachTypeList(Index)
Exit For
End If
Next
Else
SelectedMachType = Nothing
End If
NotifyPropertyChanged("SelectedMachType")
If Not IsNothing(m_SelectedMachType) Then
' Imposto i Mach selezionati
m_Mach = sMach
m_MachUp = sMachUp
m_MachDw = sMachDw
End If
If Not String.IsNullOrWhiteSpace(Mach) Then
m_RefMachItem = RefMachItem
End If
If Not String.IsNullOrWhiteSpace(MachUp) Then
m_RefMachUpItem = RefMachUpItem
End If
If Not String.IsNullOrWhiteSpace(MachDw) Then
m_RefMachDwItem = RefMachDwItem
End If
m_IsModified = False
End Sub
' Funzione che aggiorna gli item nella lista lavorazioni ordinata
Private Sub RefreshMachItem(ByRef RefMachItem As MTableMachiningGridBoxItem, Mach As String)
' Se il nuovo valore è nullo
If String.IsNullOrWhiteSpace(Mach) Then
' Se esiste già il rispettivo item nella lista lavorazioni ordinata lo cancello
If Not IsNothing(RefMachItem) Then
For MachIndex = 0 To m_ActiveMachinesList.Count - 1
If m_ActiveMachinesList(MachIndex).MachId = m_MachId Then
MTableMachiningGridBoxItem.Remove(RefMachItem, m_ActiveMachinesList(MachIndex).MachiningList)
RefMachItem = Nothing
End If
Next
End If
' Se il nuovo valore è valido
Else
' Se non esiste già il rispettivo item nella lista lavorazioni ordinata lo creo
If IsNothing(RefMachItem) Then
For MachIndex = 0 To m_ActiveMachinesList.Count - 1
If m_ActiveMachinesList(MachIndex).MachId = m_MachId Then
Dim CurrMachItem As MTableMachiningGridBoxItem = New MTableMachiningGridBoxItem(0, m_Name, Mach, False, m_ActiveMachinesList(MachIndex))
' se la lista è vuota
If m_ActiveMachinesList(MachIndex).MachiningList.Count = 0 Then
' do indice 1 al nuovo elemento da aggiungere
CurrMachItem.GroupId = 1
End If
RefMachItem = CurrMachItem
m_ActiveMachinesList(MachIndex).MachiningList.Insert(0, RefMachItem)
End If
Next
' altrimenti lo aggiorno con la nuova lavorazione
Else
RefMachItem.Machining = Mach
End If
End If
End Sub
Friend Shared Sub LoadOperationList()
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
TempOperList.Sort()
m_OperationsList = New ObservableCollection(Of String)(TempOperList)
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