From a6acc6609933922e33c7a5280dd99e9d593f020a Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Tue, 22 Nov 2022 16:10:08 +0100 Subject: [PATCH] - migliorato import export --- .../ImportExportMachiningPanelV.xaml | 8 +- .../ImportExportMachiningPanelVM.vb | 252 +++++++++--------- Icarus/MachiningDb/Machining.vb | 5 + Icarus/MachiningDb/MachiningDbV.xaml | 4 +- Icarus/MachiningDb/MachiningDbVM.vb | 18 +- Icarus/ModifyPartPanel/ModifyPartUtility.vb | 4 +- 6 files changed, 161 insertions(+), 130 deletions(-) diff --git a/Icarus/ImportExportMachiningPanel/ImportExportMachiningPanelV.xaml b/Icarus/ImportExportMachiningPanel/ImportExportMachiningPanelV.xaml index b1b96f2..5e80b98 100644 --- a/Icarus/ImportExportMachiningPanel/ImportExportMachiningPanelV.xaml +++ b/Icarus/ImportExportMachiningPanel/ImportExportMachiningPanelV.xaml @@ -21,6 +21,7 @@ + + diff --git a/Icarus/ImportExportMachiningPanel/ImportExportMachiningPanelVM.vb b/Icarus/ImportExportMachiningPanel/ImportExportMachiningPanelVM.vb index 3a96db1..d75da41 100644 --- a/Icarus/ImportExportMachiningPanel/ImportExportMachiningPanelVM.vb +++ b/Icarus/ImportExportMachiningPanel/ImportExportMachiningPanelVM.vb @@ -65,6 +65,9 @@ Public Class ImportExportMachiningPanelVM Friend Event m_CloseWindow(bDialogResult As Boolean) + ' Definizione comandi + Private m_cmdOk As ICommand + #Region "MESSAGES" Public ReadOnly Property OkMsg As String @@ -79,124 +82,6 @@ Public Class ImportExportMachiningPanelVM #End Region ' Messages -#Region "COMMANDS" - - ' Definizione comandi - Private m_cmdOk As ICommand - -#Region "OkCommand" - - ''' - ''' Returns a command that remove the current selected machining. - ''' - Public ReadOnly Property OkCommand() As ICommand - Get - If m_cmdOk Is Nothing Then - m_cmdOk = New Command(AddressOf ConfirmImpExpMachinings) - End If - Return m_cmdOk - End Get - End Property - - ''' - ''' Manage the MachiningDb closing. This method is invoked by the CloseMachiningDbCommand. - ''' - Public Sub ConfirmImpExpMachinings(param As Object) - Select Case WindowMode - Case WindowModeEnum.IMPORT - Dim OrigFilePath As String = CurrentMachine.sMachiningFilePath - CurrentMachine.SetMachiningFilePath(ImportFilePath) - For Each Machining In m_MachiningList - Dim nIndex As Integer = Map.refMachiningDbVM.MachiningList.Max(Function(x) x.nIndex) + 1 - If Machining.Active Then - ' leggo lavorazione da file di import - Dim NewMachining As Machining = New Machining(Machining.nIndex) - ' cambio guid, indice e verifico nome - NewMachining.sGUID = Guid.NewGuid.ToString() - NewMachining.SetIndex(nIndex) - If Machining.AlreadyExist Then - If Machining.ChangeName Then - NewMachining.sName &= "_imp" - End If - End If - Map.refMachiningDbVM.MachiningList.Add(NewMachining) - - End If - Next - ' ripristino path corretta del Db - CurrentMachine.SetMachiningFilePath(OrigFilePath) - - - - - 'Dim FinalNameList As New List(Of String) - 'Dim ImportMachiningNameList As New List(Of String)(ImportFileMachiningNameList) - 'For Each Machining In MachiningList - ' If Machining.Active Then - ' FinalNameList.Add(Machining.sName) - ' Else - ' ImportMachiningNameList.Remove(Machining.sName) - ' End If - 'Next - 'Dim vsFinalName = FinalNameList.ToArray() - 'Dim vsImportMachiningName = ImportMachiningNameList.ToArray() - '' Eseguo importazione - 'EgtMdbImport(ImportFilePath, vsImportMachiningName, vsFinalName, m_vsImported) - '' Report - 'Dim ImportedMachiningList As New List(Of String)(vsImported) - 'MessageBox.Show(EgtMsg(31455) & " " & vbCrLf & - ' String.Join(vbCrLf, ImportedMachiningList.ToArray()), "", MessageBoxButton.OK) - - Case WindowModeEnum.EXPORT - ' recupero le lavorazioni checkate - Dim FinalNameList As New List(Of String) - For Each Machining In MachiningList - If Machining.Active Then - FinalNameList.Add(Machining.sName) - End If - Next - If FinalNameList.Count() = 0 Then Return - Dim FinalNameArray = FinalNameList.ToArray() - ' chiedo il nome con cui salvare il file .data - Dim SaveFileDlg As New System.Windows.Forms.SaveFileDialog() With { - .Title = EgtMsg(31451) & " " & EgtMsg(31452), - .Filter = "File data (*.data)|*.data|Tutti i file (*.*)|*.*", - .FileName = String.Empty - } - If SaveFileDlg.ShowDialog() <> System.Windows.Forms.DialogResult.OK Then Return - Dim sFilePath As String = String.Empty - sFilePath = SaveFileDlg.FileName - ' se esiste già lo elimino - If File.Exists(sFilePath) Then - Try - File.Delete(sFilePath) - Catch ex As Exception - End Try - End If - ' creo nuovo file - If Not File.Exists(sFilePath) Then - Try - File.WriteAllLines(sFilePath, {"; Commento per evitare BOM con UTF-8"}) - Catch ex As Exception - End Try - End If - Dim ActiveMachiningList As List(Of Machining) = (From Machining In Map.refMachiningDbVM.MachiningList - Select Machining - Where m_MachiningList.Any(Function(x) x.sGUID.ToString() = Machining.sGUID AndAlso x.Active)).ToList() - ' salvo tutte le lavorazioni sul Db - For Index = 0 To ActiveMachiningList.Count - 1 - ActiveMachiningList(Index).WriteParamsOnDb(Index + 1, sFilePath) - Next - End Select - - ' Chiusura finestra - RaiseEvent m_CloseWindow(True) - End Sub - -#End Region ' OkCommand - -#End Region ' Commands - #Region "CONSTRUCTOR" ' export @@ -254,11 +139,115 @@ Public Class ImportExportMachiningPanelVM #End Region ' METHODS +#Region "COMMANDS" + +#Region "OkCommand" + + ''' + ''' Returns a command that remove the current selected machining. + ''' + Public ReadOnly Property OkCommand() As ICommand + Get + If m_cmdOk Is Nothing Then + m_cmdOk = New Command(AddressOf ConfirmImpExpMachinings) + End If + Return m_cmdOk + End Get + End Property + + ''' + ''' Manage the MachiningDb closing. This method is invoked by the CloseMachiningDbCommand. + ''' + Public Sub ConfirmImpExpMachinings(param As Object) + Select Case WindowMode + Case WindowModeEnum.IMPORT + Dim OrigFilePath As String = CurrentMachine.sMachiningFilePath + Dim NewMachining As Machining = Nothing + For Each Machining In m_MachiningList + Dim nIndex As Integer = Map.refMachiningDbVM.MachiningList.Max(Function(x) x.nIndex) + 1 + If Machining.Active Then + CurrentMachine.SetMachiningFilePath(ImportFilePath) + ' leggo lavorazione da file di import + NewMachining = New Machining(Machining.nIndex) + ' cambio guid, indice e verifico nome + NewMachining.sGUID = Guid.NewGuid.ToString() + NewMachining.SetIndex(nIndex) + If Machining.AlreadyExist Then + If Machining.ChangeName Then + NewMachining.sName = Machining.sName + End If + End If + Map.refMachiningDbVM.MachiningList.Add(NewMachining) + ' ripristino path corretta del Db + CurrentMachine.SetMachiningFilePath(OrigFilePath) + ' salvo la lavorazione + NewMachining.Save() + End If + Next + ' ripristino path corretta del Db + CurrentMachine.SetMachiningFilePath(OrigFilePath) + ' seleziono ultima importata + If Not IsNothing(NewMachining) Then + Map.refMachiningDbVM.SelMachining = NewMachining + Map.refMachiningDbVM.NotifyPropertyChanged(NameOf(Map.refMachiningDbVM.SelMachining)) + End If + Case WindowModeEnum.EXPORT + ' recupero le lavorazioni checkate + Dim FinalNameList As New List(Of String) + For Each Machining In MachiningList + If Machining.Active Then + FinalNameList.Add(Machining.sName) + End If + Next + If FinalNameList.Count() = 0 Then Return + Dim FinalNameArray = FinalNameList.ToArray() + ' chiedo il nome con cui salvare il file .data + Dim SaveFileDlg As New System.Windows.Forms.SaveFileDialog() With { + .Title = EgtMsg(31451) & " " & EgtMsg(31452), + .Filter = "File data (*.data)|*.data|Tutti i file (*.*)|*.*", + .FileName = String.Empty + } + If SaveFileDlg.ShowDialog() <> System.Windows.Forms.DialogResult.OK Then Return + Dim sFilePath As String = String.Empty + sFilePath = SaveFileDlg.FileName + ' se esiste già lo elimino + If File.Exists(sFilePath) Then + Try + File.Delete(sFilePath) + Catch ex As Exception + End Try + End If + ' creo nuovo file + If Not File.Exists(sFilePath) Then + Try + File.WriteAllLines(sFilePath, {"; Commento per evitare BOM con UTF-8"}) + Catch ex As Exception + End Try + End If + Dim ActiveMachiningList As List(Of Machining) = (From Machining In Map.refMachiningDbVM.MachiningList + Select Machining + Where m_MachiningList.Any(Function(x) x.sGUID.ToString() = Machining.sGUID AndAlso x.Active)).ToList() + ' salvo tutte le lavorazioni sul Db + For Index = 0 To ActiveMachiningList.Count - 1 + ActiveMachiningList(Index).WriteParamsOnDb(Index + 1, sFilePath) + Next + End Select + + ' Chiusura finestra + RaiseEvent m_CloseWindow(True) + End Sub + +#End Region ' OkCommand + +#End Region ' Commands + End Class Public Class ImpExpMachiningItem Inherits VMBase + Public Const IMPEXTNAME As String = "_imp" + ' Actions Friend Shared m_delEnableOkBtn As Action @@ -278,6 +267,7 @@ Public Class ImpExpMachiningItem End Get End Property + Private m_sOrigName As String Private m_sName As String Public ReadOnly Property sName As String Get @@ -299,20 +289,33 @@ Public Class ImpExpMachiningItem m_ChangeName = False m_Active = True Case MessageBoxResult.No - System.Windows.MessageBox.Show(EgtMsg(31454), "", MessageBoxButton.OK) + Dim bImpNameAlreadyInList = False + Dim nImpNameIndex As Integer = 0 + If Map.refMachiningDbVM.MachiningList.Any(Function(x) x.sName = m_sOrigName & IMPEXTNAME) Then + nImpNameIndex += 1 + While Map.refMachiningDbVM.MachiningList.Any(Function(x) x.sName = m_sOrigName & IMPEXTNAME & "_" & nImpNameIndex) + nImpNameIndex += 1 + End While + End If + m_sName = m_sOrigName & IMPEXTNAME & If(nImpNameIndex > 0, "_" & nImpNameIndex, "") + System.Windows.MessageBox.Show("Machining will be imported with the name: " & m_sName, "", MessageBoxButton.OK) + NotifyPropertyChanged(NameOf(sName)) m_ChangeName = True m_Active = True Case Else m_Active = False End Select - NotifyPropertyChanged("Active") + NotifyPropertyChanged(NameOf(Active)) Else m_Active = True End If Else m_ChangeName = False m_Active = False + m_sName = m_sOrigName + NotifyPropertyChanged(NameOf(sName)) End If + NotifyPropertyChanged(NameOf(Overwrite_Visibility)) If Not IsNothing(m_delEnableOkBtn) Then m_delEnableOkBtn() End Set End Property @@ -325,6 +328,13 @@ Public Class ImpExpMachiningItem End Get End Property + Private m_Overwrite_Visibility As Visibility = Visibility.Collapsed + Public ReadOnly Property Overwrite_Visibility As Visibility + Get + Return If(m_Active AndAlso m_AlreadyExist AndAlso Not m_ChangeName, Visibility.Visible, Visibility.Collapsed) + End Get + End Property + ' Parametro che indica se cambiare il nome di un item che esiste gia' o sovrascriverlo Private m_ChangeName As Boolean Friend Property ChangeName As Boolean @@ -333,13 +343,13 @@ Public Class ImpExpMachiningItem End Get Set(value As Boolean) m_ChangeName = value - NotifyPropertyChanged("Name") End Set End Property Sub New(nIndex As Integer, GUID As Guid, sName As String, AlreadyExist As Boolean) m_nIndex = nIndex m_sGUID = GUID + m_sOrigName = sName m_sName = sName m_AlreadyExist = AlreadyExist m_Active = False diff --git a/Icarus/MachiningDb/Machining.vb b/Icarus/MachiningDb/Machining.vb index 380c255..cf089cf 100644 --- a/Icarus/MachiningDb/Machining.vb +++ b/Icarus/MachiningDb/Machining.vb @@ -622,6 +622,7 @@ Public Class NumericMachiningParam StringToDouble( value, m_dValue) End If NotifyPropertyChanged(NameOf(sValue)) + Map.refMachiningDbVM.NotifyPropertyChanged(NameOf(Map.refMachiningDbVM.ImpExp_IsEnabled)) End Set End Property @@ -882,6 +883,7 @@ Public Class StringMachiningParam Set(value As String) m_sValue = value NotifyPropertyChanged(NameOf(sValue)) + Map.refMachiningDbVM.NotifyPropertyChanged(NameOf(Map.refMachiningDbVM.ImpExp_IsEnabled)) End Set End Property @@ -940,6 +942,7 @@ Public Class ComboMachiningParam Set(value As IdNameStruct) m_SelValue = value NotifyPropertyChanged(NameOf(SelValue)) + Map.refMachiningDbVM.NotifyPropertyChanged(NameOf(Map.refMachiningDbVM.ImpExp_IsEnabled)) End Set End Property @@ -1075,6 +1078,7 @@ Public Class CheckMachiningParam Set(value As Boolean) m_bValue = value NotifyPropertyChanged(NameOf(bValue)) + Map.refMachiningDbVM.NotifyPropertyChanged(NameOf(Map.refMachiningDbVM.ImpExp_IsEnabled)) End Set End Property @@ -1167,6 +1171,7 @@ Public Class MaterialMachiningParam Set(value As Boolean) m_bValue = value NotifyPropertyChanged(NameOf(bValue)) + Map.refMachiningDbVM.NotifyPropertyChanged(NameOf(Map.refMachiningDbVM.ImpExp_IsEnabled)) End Set End Property diff --git a/Icarus/MachiningDb/MachiningDbV.xaml b/Icarus/MachiningDb/MachiningDbV.xaml index d3ac429..03546a3 100644 --- a/Icarus/MachiningDb/MachiningDbV.xaml +++ b/Icarus/MachiningDb/MachiningDbV.xaml @@ -39,14 +39,14 @@ diff --git a/Icarus/MachiningDb/MachiningDbVM.vb b/Icarus/MachiningDb/MachiningDbVM.vb index 9005e98..897dfeb 100644 --- a/Icarus/MachiningDb/MachiningDbVM.vb +++ b/Icarus/MachiningDb/MachiningDbVM.vb @@ -26,7 +26,7 @@ Public Class MachiningDbVM ' verifico se modificato If m_SelMachining.bIsModified Then ' chiedo se salvare - Select Case MessageBox.Show("Salvare le modifiche apportate alla lavorazione selezionata?", "Info", MessageBoxButton.YesNoCancel, MessageBoxImage.Question) + Select Case MessageBox.Show("Do you want to save the modification done on the selected machining?", "Info", MessageBoxButton.YesNoCancel, MessageBoxImage.Question) Case MessageBoxResult.Yes m_SelMachining.Save() Case MessageBoxResult.No @@ -50,6 +50,7 @@ Public Class MachiningDbVM End If Next End If + NotifyPropertyChanged(NameOf(ImpExp_IsEnabled)) End Set End Property @@ -105,6 +106,12 @@ Public Class MachiningDbVM NotifyPropertyChanged(NameOf(UserShouldEditValueNow)) End Sub + Public ReadOnly Property ImpExp_IsEnabled As Boolean + Get + Return m_IsEnabled AndAlso (IsNothing(m_SelMachining) OrElse Not m_SelMachining.bIsModified) + End Get + End Property + ' Definizione comandi Private m_cmdOk As ICommand Private m_cmdNew As ICommand @@ -140,6 +147,7 @@ Public Class MachiningDbVM GetMainPrivateProfileString(S_PRINTING3D, K_CURRMACHINING, "", sCurrMachining) m_SelMachining = MachiningList.FirstOrDefault(Function(x) x.sGUID = sCurrMachining) NotifyPropertyChanged(NameOf(SelMachining)) + NotifyPropertyChanged(NameOf(ImpExp_IsEnabled)) End Sub Friend Sub SetNameVisibility(bValue As Boolean) @@ -215,7 +223,7 @@ Public Class MachiningDbVM ' aggiorno combo top Dim CurrSelTopMachining As MachiningIndex = Map.refTopPanelVM.SelMachining Map.refTopPanelVM.InitMachiningsList() - Map.refTopPanelVM.SetSelMachining( CurrSelTopMachining) + Map.refTopPanelVM.SetSelMachining(CurrSelTopMachining) End If ' ripristino modalita' standard Map.refTopPanelVM.SelPage = Pages.MODIFY @@ -241,6 +249,7 @@ Public Class MachiningDbVM m_SelMachining = NewMachining NotifyPropertyChanged(NameOf(SelMachining)) SetNameVisibility(True) + SetIsModified(True) End Sub #End Region ' New @@ -257,8 +266,9 @@ Public Class MachiningDbVM End Property Public Sub Save() - If IsNothing( m_SelMachining) Then Return + If IsNothing(m_SelMachining) Then Return m_SelMachining.Save() + NotifyPropertyChanged(NameOf(ImpExp_IsEnabled)) End Sub #End Region ' Save @@ -277,7 +287,7 @@ Public Class MachiningDbVM Public Sub Delete() If IsNothing(m_SelMachining) Then Return ' chiedo conferma - Select Case MessageBox.Show("Sei sicuro di voler cancellare la lavorazione selezionata?", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning) + Select Case MessageBox.Show("Are you sure you want to delete the selected machining?", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning) Case MessageBoxResult.Yes m_MachiningList.Remove(m_SelMachining) SetIsModified(True) diff --git a/Icarus/ModifyPartPanel/ModifyPartUtility.vb b/Icarus/ModifyPartPanel/ModifyPartUtility.vb index 3d522c6..8b7fbd9 100644 --- a/Icarus/ModifyPartPanel/ModifyPartUtility.vb +++ b/Icarus/ModifyPartPanel/ModifyPartUtility.vb @@ -346,7 +346,7 @@ Public Class MenuItemVm m_Part = Part End Sub -#Region "Cancel" +#Region "Command" Public ReadOnly Property MenuItem_Command As ICommand Get @@ -430,6 +430,6 @@ Public Class MenuItemVm End If End Sub -#End Region ' Cancel +#End Region ' Command End Class \ No newline at end of file