Imports System.ComponentModel Imports System.IO Imports System.Windows Imports System.Windows.Controls Imports System.Windows.Input Imports EgtBEAMWALL.Core.ConstBeam Imports EgtUILib Imports EgtWPFLib5 Imports EgtBEAMWALL Imports System.Windows.Media Public Class NewOpenProjectFileDialogV Private WithEvents m_OpenProjFileDialogVM As NewOpenProjectFileDialogVM #Region "CONSTRUCTOR" Sub New(Owner As Window, OpenProjFileDialogVM As NewOpenProjectFileDialogVM) ' Funzione che interpreta l'xaml InitializeComponent() Me.Owner = Owner Me.DataContext = OpenProjFileDialogVM ' Assegno al riferimento locale al VM il VM preso dal DataContext m_OpenProjFileDialogVM = OpenProjFileDialogVM AddHandler Me.Loaded, AddressOf OpenProjectFileDialog_Loaded AddHandler Me.Closing, AddressOf OpenProjectFileDialog_Closing End Sub #End Region ' CONSTRUCTOR #Region "METHODS" Public Function EgtShowDialog(ProjectType As ProjectType) As Boolean? m_OpenProjFileDialogVM.Init(ProjectType) ' mostro la finestra di dialogo Return Me.ShowDialog() End Function Public Function EgtShowDialog(ProjectType As ProjectType, ProjectList As List(Of ProjectFileVM)) As Boolean? m_OpenProjFileDialogVM.Init(ProjectType, ProjectList) ' mostro la finestra di dialogo Return Me.ShowDialog() End Function Public Function EgtShowDialog(ProjectType As ProjectType, GoToProd As Boolean) As Boolean? m_OpenProjFileDialogVM.Init(ProjectType, Nothing, GoToProd) ' mostro la finestra di dialogo Return Me.ShowDialog() End Function Private Sub OpenProjectFileDialog_Loaded(sender As Object, e As RoutedEventArgs) ' Carico e imposto posizione finestra WinPosFromIniToWindow(S_OPENFILEDIALOG, K_VIEWOPTIMWINPLACE, Me) End Sub Private Sub OpenProjectFileDialog_Closing(sender As Object, e As System.ComponentModel.CancelEventArgs) If (Keyboard.Modifiers And ModifierKeys.Alt) = ModifierKeys.Alt OrElse Keyboard.IsKeyDown(Key.F4) Then e.Cancel = True Return End If ' Salvo posizione finestra (se non minimizzata) WinPosFromWindowToIni(Me, S_OPENFILEDIALOG, K_VIEWOPTIMWINPLACE) End Sub #End Region ' METHODS #Region "EVENTS" Private Sub ProjectList_MouseDoubleClick(sender As Object, e As MouseButtonEventArgs) m_OpenProjFileDialogVM.ProjDoubleClick() End Sub #End Region ' EVENTS Private Sub OpenBtn_Click(sender As Object, e As RoutedEventArgs) Handles OpenBtn.Click DialogResult = m_OpenProjFileDialogVM.VerifySelected() End Sub Private Sub CloseWindow(bDialogResult As Boolean) Handles m_OpenProjFileDialogVM.m_CloseWindow Me.DialogResult = bDialogResult End Sub Private Sub MainDataGrid_CellEditEnding(sender As Object, e As DataGridCellEditEndingEventArgs) 'm_OpenProjFileDialogVM.SetIsEditNameActive(False) 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 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