diff --git a/EgtBEAMWALL.Core/NewOpenProjectFileDialog/NewOpenProjectFileDialogV.xaml.vb b/EgtBEAMWALL.Core/NewOpenProjectFileDialog/NewOpenProjectFileDialogV.xaml.vb index 0af38afa..87721e4b 100644 --- a/EgtBEAMWALL.Core/NewOpenProjectFileDialog/NewOpenProjectFileDialogV.xaml.vb +++ b/EgtBEAMWALL.Core/NewOpenProjectFileDialog/NewOpenProjectFileDialogV.xaml.vb @@ -84,7 +84,181 @@ Public Class NewOpenProjectFileDialogV End Sub Private Sub MainDataGrid_Sorting(sender As Object, e As DataGridSortingEventArgs) + ' aggiorno direziona colonna + Dim column As DataGridColumn = e.Column + column.SortDirection = If((column.SortDirection <> ListSortDirection.Ascending), ListSortDirection.Ascending, ListSortDirection.Descending) + '' ricalcolo colonne sort + 'Dim datagrid As DataGrid = sender + 'ProdItemComparer.RefreshColumns() + '' lancio sort custom + 'm_OpenProjFileDialogVM.RefreshProdItemSort() + m_OpenProjFileDialogVM.SortPageList() m_OpenProjFileDialogVM.UpdatePageList() + e.Handled = True + + End Sub -End Class \ No newline at end of file +End Class + +Friend Class ProdItemComparer + Implements IComparer + + Private Shared DataGrid As DataGrid + Friend Shared Sub SetDataGrid(value As DataGrid) + DataGrid = value + End Sub + + Private Shared m_OpenProjFileDialogVM As NewOpenProjectFileDialogVM + Friend Shared Sub SetOpenProjFileDialogVM(value As NewOpenProjectFileDialogVM) + m_OpenProjFileDialogVM = value + End Sub + + Private Shared m_ColumnList As New List(Of DataGridColumn) + Private Shared m_EgtColumnList As New List(Of EgtDataGridColumn) + + Friend Shared Sub RefreshColumns() + m_ColumnList.Clear() + m_EgtColumnList.Clear() + For Each col In DataGrid.Columns + If Not IsNothing(col.SortDirection) Then + m_ColumnList.Add(col) + m_EgtColumnList.Add(m_OpenProjFileDialogVM.ProdColumns(col.DisplayIndex)) + End If + Next + ' Map.refRawPartListVM.SetRawPartListSorted(m_ColumnList.Count > 0) + End Sub + + + Public Function Compare(x As Object, y As Object) As Integer Implements IComparer.Compare + ' Dim First As MyMachGroupVM = DirectCast(x, MyMachGroupVM) + ' Dim Second As MyMachGroupVM = DirectCast(y, MyMachGroupVM) + ' Dim bFirstProduced As Boolean = First.nProduction_State = Core.ItemState.WIP OrElse First.nProduction_State = Core.ItemState.Produced + ' Dim bSecondProduced As Boolean = Second.nProduction_State = Core.ItemState.WIP OrElse Second.nProduction_State = Core.ItemState.Produced + ' Dim bFirstInQueue As Boolean = First.bToBeProduced + ' Dim bSecondInQueue As Boolean = Second.bToBeProduced + ' ' verifico se gia' prodotti + ' If bFirstProduced AndAlso bSecondProduced Then + ' If First.nProductionIndex > Second.nProductionIndex Then + ' Return 1 + ' ElseIf First.nProductionIndex < Second.nProductionIndex Then + ' Return -1 + ' Else + ' Return 0 + ' End If + ' ElseIf bFirstProduced Then + ' Return -1 + ' ElseIf bSecondProduced Then + ' Return 1 + ' ElseIf bFirstInQueue AndAlso bSecondInQueue Then + ' If First.nProductionIndex > Second.nProductionIndex Then + ' Return 1 + ' ElseIf First.nProductionIndex < Second.nProductionIndex Then + ' Return -1 + ' Else + ' Return 0 + ' End If + ' ElseIf bFirstInQueue Then + ' Return -1 + ' ElseIf bSecondInQueue Then + ' Return 1 + ' Else + ' ' verifico ordine per colonne + ' Dim ColumnIndex = 0 + ' While ColumnIndex <= m_EgtColumnList.Count - 1 + ' Dim nDir As ListSortDirection = If(m_ColumnList(ColumnIndex).SortDirection, 1, -1) + ' Dim nCheck As Integer = Check(First, Second, nDir, m_EgtColumnList(ColumnIndex)) + ' If nCheck <> 0 Then + ' Return nCheck + ' End If + ' ColumnIndex += 1 + ' End While + ' ' se non trovo colonne, metto in ordine indice di produzione + ' If First.nProductionIndex > Second.nProductionIndex Then + ' Return 1 + ' ElseIf First.nProductionIndex < Second.nProductionIndex Then + ' Return -1 + ' Else + ' Return 0 + ' End If + ' End If + End Function + + Private Function Check(First As MyMachGroupVM, Second As MyMachGroupVM, nDirection As Integer, Column As EgtDataGridColumn) As Integer + Select Case Column.Name + Case COL_NAME + If First.nName > Second.nName Then + Return 1 * nDirection + ElseIf First.nName < Second.nName Then + Return -1 * nDirection + Else + Return 0 + End If + Case COL_STARTCUT + If First.Id > Second.Id Then + Return 1 * nDirection + ElseIf First.Id < Second.Id Then + Return -1 * nDirection + Else + Return 0 + End If + Case COL_W + If First.dW > Second.dW Then + Return 1 * nDirection + ElseIf First.dW < Second.dW Then + Return -1 * nDirection + Else + Return 0 + End If + Case COL_H + If First.dH > Second.dH Then + Return 1 * nDirection + ElseIf First.dH < Second.dH Then + Return -1 * nDirection + Else + Return 0 + End If + Case COL_L + If First.dL > Second.dL Then + Return 1 * nDirection + ElseIf First.dL < Second.dL Then + Return -1 * nDirection + Else + Return 0 + End If + Case COL_POSZ + 'If First.posz > Second.dL Then + ' Return 1 * nDirection + 'ElseIf First.dL < Second.dL Then + ' Return -1 * nDirection + 'Else + ' Return 0 + 'End If + Case COL_MATERIAL + If First.sMATERIAL > Second.sMATERIAL Then + Return 1 * nDirection + ElseIf First.sMATERIAL < Second.sMATERIAL Then + Return -1 * nDirection + Else + Return 0 + End If + Case COL_USAGE + If First.dUsage > Second.dUsage Then + Return 1 * nDirection + ElseIf First.dUsage < Second.dUsage Then + Return -1 * nDirection + Else + Return 0 + End If + Case COL_WASTE + If First.dWaste > Second.dWaste Then + Return 1 * nDirection + ElseIf First.dWaste < Second.dWaste Then + Return -1 * nDirection + Else + Return 0 + End If + End Select + End Function + +End Class diff --git a/EgtBEAMWALL.Core/NewOpenProjectFileDialog/NewOpenProjectFileDialogVM.vb b/EgtBEAMWALL.Core/NewOpenProjectFileDialog/NewOpenProjectFileDialogVM.vb index 071802a6..47d008d0 100644 --- a/EgtBEAMWALL.Core/NewOpenProjectFileDialog/NewOpenProjectFileDialogVM.vb +++ b/EgtBEAMWALL.Core/NewOpenProjectFileDialog/NewOpenProjectFileDialogVM.vb @@ -127,7 +127,13 @@ Public MustInherit Class NewOpenProjectFileDialogVM End Get End Property - Public m_ProjectList_View As CollectionView = Nothing + Private m_ProjectList_View As CollectionView = Nothing + Public ReadOnly Property ProjectList_View As CollectionView + Get + Return m_ProjectList_View + End Get + End Property + Protected m_ProjectList As New ObservableCollection(Of ProdItem) Public ReadOnly Property ProjectList As ObservableCollection(Of ProdItem) Get @@ -447,7 +453,13 @@ Public MustInherit Class NewOpenProjectFileDialogVM NotifyPropertyChanged(NameOf(bDelete_IsEnabled)) End Sub - Protected m_PageList As ObservableCollection(Of ProdItem) + Private m_PageList_View As ListCollectionView = Nothing + Public ReadOnly Property PageList_View As ListCollectionView + Get + Return m_PageList_View + End Get + End Property + Protected m_PageList As New ObservableCollection(Of ProdItem) Public Property PageList As ObservableCollection(Of ProdItem) Get Return m_PageList @@ -640,6 +652,29 @@ Public MustInherit Class NewOpenProjectFileDialogVM Public Overridable Sub RefreshProjectList(Optional GoToProd As Boolean = False) End Sub + + Private m_ProdItemComparer As ProdItemComparer + Friend ReadOnly Property ProdItemComparer As ProdItemComparer + Get + Return m_ProdItemComparer + End Get + End Property + + Friend Sub SetPageListView() + m_PageList_View = CollectionViewSource.GetDefaultView(m_PageList) + m_ProdItemComparer = New ProdItemComparer + m_PageList_View.CustomSort = m_ProdItemComparer + NotifyPropertyChanged(NameOf(PageList_View)) + End Sub + + Friend Sub RefreshProdItemSort() + m_PageList_View.CustomSort = m_ProdItemComparer + End Sub + + Friend Sub SortPageList() + ' m_ProjectList = New ObservableCollection(Of ProdItem)(m_ProjectList.OrderBy(Of Integer)(Function(x) If(String.IsNullOrWhiteSpace(x.sProdId), 0, CInt(x.sProdId)))) + End Sub + Protected Sub LoadColumns() 'If ProjectType = ProjectType.PROJ Then ' carico le colonne della datagrid @@ -746,7 +781,11 @@ Public MustInherit Class NewOpenProjectFileDialogVM Return False End If ' FilteredList = FilteredList.OrderBy(Of ProdItem)() - m_PageList = New ObservableCollection(Of ProdItem)(FilteredList.Skip((nPageIndex - 1) * nPageRowQty + 1).Take(nPageIndex * nPageRowQty).Select(Function(x) x)) + ' m_PageList = New ObservableCollection(Of ProdItem)(FilteredList.Skip((nPageIndex - 1) * nPageRowQty + 1).Take(nPageIndex * nPageRowQty).Select(Function(x) x)) + m_PageList.Clear() + For Index = (nPageIndex - 1) * nPageRowQty + 1 To nPageIndex * nPageRowQty + m_PageList.Add(FilteredList(Index)) + Next NotifyPropertyChanged(NameOf(PageList)) Return True diff --git a/EgtBEAMWALL.Supervisor/MachGroupPanel/SupervisorMachGroupPanelVM.vb b/EgtBEAMWALL.Supervisor/MachGroupPanel/SupervisorMachGroupPanelVM.vb index 520918a2..560090b4 100644 --- a/EgtBEAMWALL.Supervisor/MachGroupPanel/SupervisorMachGroupPanelVM.vb +++ b/EgtBEAMWALL.Supervisor/MachGroupPanel/SupervisorMachGroupPanelVM.vb @@ -46,6 +46,7 @@ Public Class SupervisorMachGroupPanelVM #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTOR" + Private m_MachGroupVMListComparer As MyComparer Friend ReadOnly Property MachGroupVMListComparer As MyComparer Get diff --git a/EgtBEAMWALL.Supervisor/SupervisorManager/SupervisorManagerVM.vb b/EgtBEAMWALL.Supervisor/SupervisorManager/SupervisorManagerVM.vb index d7523d4a..c06ad6b3 100644 --- a/EgtBEAMWALL.Supervisor/SupervisorManager/SupervisorManagerVM.vb +++ b/EgtBEAMWALL.Supervisor/SupervisorManager/SupervisorManagerVM.vb @@ -95,7 +95,9 @@ Public Class SupervisorManagerVM #End Region ' ToolTip + #End Region ' Fields & Properties + #Region "CONSTRUCTOR" Sub New() diff --git a/EgtBEAMWALL.ViewerOptimizer/NewOpenProjectFileDialog/NewOpenProjectFileDialogVM.vb b/EgtBEAMWALL.ViewerOptimizer/NewOpenProjectFileDialog/NewOpenProjectFileDialogVM.vb index 0e91f668..e7aa89fe 100644 --- a/EgtBEAMWALL.ViewerOptimizer/NewOpenProjectFileDialog/NewOpenProjectFileDialogVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/NewOpenProjectFileDialog/NewOpenProjectFileDialogVM.vb @@ -157,9 +157,9 @@ Public Class NewOpenProjectFileDialogVM Public Overrides Function UpdatePageList() As Boolean Dim FilteredList As IEnumerable(Of Core.ProdItem) = m_ProjectList.Where(Function(x) If m_SelFilterType.Id <> FilterTypes.NULL AndAlso m_SearchText <> String.Empty AndAlso - ((m_SelFilterType.Id = FilterTypes.BTLFILENAME AndAlso x.ProjFileList.Any(Function(y) DirectCast(y, ProjFileVM).sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) OrElse - (m_SelFilterType.Id = FilterTypes.LISTNAME AndAlso x.ProjFileList.Any(Function(y) DirectCast(y, ProjFileVM).sListName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) OrElse - (m_SelFilterType.Id = FilterTypes.MACHINE AndAlso x.sMachine.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then Return False + ((m_SelFilterType.Id = FilterTypes.BTLFILENAME AndAlso x.ProjFileList.Any(Function(y) DirectCast(y, ProjFileVM).sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) OrElse + (m_SelFilterType.Id = FilterTypes.LISTNAME AndAlso x.ProjFileList.Any(Function(y) DirectCast(y, ProjFileVM).sListName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) OrElse + (m_SelFilterType.Id = FilterTypes.MACHINE AndAlso x.sMachine.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then Return False Return True End Function) Dim nPageRowQty As Integer = 0 @@ -171,12 +171,17 @@ Public Class NewOpenProjectFileDialogVM Case RowQuantities.THIRTY nPageRowQty = 30 End Select - Dim nStart = nPageIndex * nPageRowQty - If (nPageIndex - 1) * nPageRowQty + 1 > FilteredList.Count() Then + Dim nStart = (nPageIndex - 1) * nPageRowQty + Dim nEnd = Math.Min((nPageIndex * nPageRowQty), FilteredList.Count()) + If nStart > FilteredList.Count() Then Return False End If ' FilteredList = FilteredList.OrderBy(Of ProdItem)() - m_PageList = New ObservableCollection(Of Core.ProdItem)(FilteredList.Skip((nPageIndex - 1) * nPageRowQty + 1).Take(nPageIndex * nPageRowQty).Select(Function(x) x)) + m_PageList = New ObservableCollection(Of ProdItem)(FilteredList.Skip(nStart).Take(nPageRowQty).Select(Function(x) x)) + 'm_PageList.Clear() + 'For Index = nStart To nEnd + ' m_PageList.Add(FilteredList(Index)) + 'Next NotifyPropertyChanged(NameOf(PageList)) Return True