Imports System.Collections.ObjectModel Imports System.Collections.Specialized Imports System.ComponentModel Imports System.IO Imports EgtBEAMWALL.Core Imports EgtUILib Imports EgtWPFLib5 Public Class WallMachGroupVM Inherits MyMachGroupVM Public ReadOnly Property m_WallMachGroupM As WallMachGroupM Get Return m_MachGroupM End Get End Property #Region "CONSTRUCTORS" Sub New(WallMachGroupM As WallMachGroupM) MyBase.New(WallMachGroupM) AddHandler m_WallMachGroupM.PartAdded, AddressOf OnWallAdded AddHandler m_WallMachGroupM.PartRemoved, AddressOf OnWallRemoved CreateWallVMList() End Sub #End Region ' CONSTRUCTORS #Region "METHODS" Private Sub CreateWallVMList() Dim all As List(Of WallVM) = (From WallM In m_WallMachGroupM.GetParts() Select New WallVM(WallM, Me)).ToList() For Each WallVM As WallVM In all AddHandler WallVM.PropertyChanged, AddressOf OnWallVMPropertyChanged Next m_PartVMList = New ObservableCollection(Of PartVM)(all) AddHandler m_PartVMList.CollectionChanged, AddressOf OnWallVMListChanged End Sub Friend Function ReDrawWallMachgroup() As Boolean ' scrivo dati di tutti i pezzi Dim nIndex As Integer For nIndex = 0 To PartVMList.Count - 1 Dim Part As WallVM = PartVMList(nIndex) EgtSetInfo(Id, MGR_RPT_PART & nIndex + 1, PartVMList(nIndex).nPartId & "," & Part.sPOSX & "," & Part.sPOSY & "," & Part.PartM.nROTATED & "," & Part.PartM.nINVERTED) Next ' elimino eventuali successive info pezzi di troppo nIndex = PartVMList.Count + 1 Dim sTemp As String = "" While EgtGetInfo(Id, MGR_RPT_PART & nIndex, sTemp) EgtSetInfo(Id, MGR_RPT_PART & nIndex, "") nIndex += 1 End While ' elimino vecchio grezzo ed eseguo script creazione nuovo Dim nRawId As Integer = EgtGetFirstRawPart() While nRawId <> GDB_ID.NULL EgtRemoveRawPart(nRawId) nRawId = EgtGetFirstRawPart() End While If Not ExecWall(Map.refMainWindowVM.MainWindowM.sTempDir, Map.refMachinePanelVM.SelectedMachine.Name, CalcIntegration.CmdType.RAWPART, False) Then Return False Return True End Function #End Region ' METHODS Public Overrides Sub RefreshPartList() End Sub Public Overrides Sub RefreshGroupData() End Sub Friend Sub UpdateUsage() m_WallMachGroupM.SetTotMat(dL * dW) m_WallMachGroupM.SetMatForPart(0) For Each Part In PartVMList m_WallMachGroupM.SetMatForPart(m_WallMachGroupM.dMatForPart + (Part.dL * Part.dW)) Next NotifyPropertyChanged(NameOf(dUsage)) NotifyPropertyChanged(NameOf(dWaste)) End Sub #Region "COMMANDS" #Region "DeleteMachGroup" ' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded. Public Overrides Sub DeleteMachGroup() ' elimino tutte le copie Dim nRawPartId As Integer = EgtGetFirstRawPart() Dim nWallId As Integer = EgtGetFirstPartInRawPart(nRawPartId) While nWallId <> GDB_ID.NULL If EgtRemovePartFromRawPart(nWallId) Then Dim Part As PartVM = PartVMList.FirstOrDefault(Function(x) x.nPartId = nWallId) Dim BTLPart As BTLPartVM = Part.RetrieveBTLPartFromPart() EgtErase(nWallId) If Not IsNothing(BTLPart) Then BTLPart.RefreshPartInProd() End If nWallId = EgtGetFirstPartInRawPart(nRawPartId) End While ' elimino MachGroup EgtRemoveMachGroup(Me.Id) ' rimuovo dalla lista grezzi Dim Index As Integer = Map.refMachGroupPanelVM.MachGroupVMList.IndexOf(Me) If Index = 0 Then If Map.refMachGroupPanelVM.MachGroupVMList.Count > 1 Then Map.refMachGroupPanelVM.SelectedMachGroup = Map.refMachGroupPanelVM.MachGroupVMList(0) Else Map.refMachGroupPanelVM.SelectedMachGroup = Nothing EgtDraw() End If ElseIf Index = Map.refMachGroupPanelVM.MachGroupVMList.Count - 1 Then If Map.refMachGroupPanelVM.MachGroupVMList.Count > 1 Then Map.refMachGroupPanelVM.SelectedMachGroup = Map.refMachGroupPanelVM.MachGroupVMList(Map.refMachGroupPanelVM.MachGroupVMList.Count - 2) Else Map.refMachGroupPanelVM.SelectedMachGroup = Nothing EgtDraw() End If Else Map.refMachGroupPanelVM.SelectedMachGroup = Map.refMachGroupPanelVM.MachGroupVMList(Index - 1) End If Map.refMachGroupPanelVM.MachGroupVMList.Remove(Me) End Sub #End Region ' DeleteMachGroup #End Region ' COMMANDS #Region "EVENTS" Private Sub OnWallAdded(sender As Object, e As PartAddedEventArgs) Dim WallVM As WallVM = New WallVM(e.NewPart, Me) PartVMList.Add(WallVM) End Sub Private Sub OnWallRemoved(sender As Object, e As PartAddedEventArgs) Dim WallVM As WallVM = PartVMList.FirstOrDefault(Function(x) x.PartM Is e.m_NewPart) If Not IsNothing(WallVM) Then PartVMList.Remove(WallVM) End Sub Private Sub OnWallVMListChanged(sender As Object, e As NotifyCollectionChangedEventArgs) If Not IsNothing(e.NewItems) AndAlso e.NewItems.Count > 0 Then For Each WallVM As WallVM In e.NewItems AddHandler WallVM.PropertyChanged, AddressOf OnWallVMPropertyChanged Next End If If Not IsNothing(e.OldItems) AndAlso e.OldItems.Count > 0 Then For Each WallVM As WallVM In e.OldItems RemoveHandler WallVM.PropertyChanged, AddressOf OnWallVMPropertyChanged Next End If End Sub Private Sub OnWallVMPropertyChanged(sender As Object, e As PropertyChangedEventArgs) 'Select Case e.PropertyName ' Case NameOf(sender.nSelGRP), NameOf(sender.nSelSIDE) 'End Select End Sub #End Region End Class