Imports System.Windows.Forms.Integration Imports System.Collections.ObjectModel Imports System.IO Imports EgtUILib Public Class MachiningDbWindowVM Inherits VMBase Friend Shared m_bActive As Boolean = False Friend Shared m_ProjectSceneContext As Integer = 0 Public Shared m_sMachineIniPath As String = String.Empty Friend Shared m_bVisibleSysNotes As Boolean = False Public Event m_CloseWindow(bDialogResult As Boolean) Private m_Title As String Public ReadOnly Property Title As String Get Return EgtMsg(MSG_MAINWINDOW + 4) End Get End Property Public ReadOnly Property NewMsg As String Get Return EgtMsg(31701) End Get End Property Public ReadOnly Property SaveMsg As String Get Return EgtMsg(31702) End Get End Property Public ReadOnly Property RemoveMsg As String Get Return EgtMsg(31703) End Get End Property Public ReadOnly Property ImportMsg As String Get Return EgtMsg(31450) End Get End Property Public ReadOnly Property ExportMsg As String Get Return EgtMsg(31451) End Get End Property Public ReadOnly Property ResetMsg As String Get Return EgtMsg(31456) End Get End Property ' Lista delle lavorazioni Private m_MachiningsList As New ObservableCollection(Of FamilyMachiningTreeViewItem) Public Property MachiningsList As ObservableCollection(Of FamilyMachiningTreeViewItem) Get Return m_MachiningsList End Get Set(value As ObservableCollection(Of FamilyMachiningTreeViewItem)) m_MachiningsList = value End Set End Property Public ReadOnly Property SelMachining As MachiningTreeViewItem Get For Each Family In m_MachiningsList Dim Machining As InheritableTreeViewItem = Family.Items.FirstOrDefault(Function(x) x.IsSelected) If Not IsNothing(Machining) Then Return DirectCast(Machining, MachiningTreeViewItem) End If Next Return Nothing End Get End Property Private m_IsEnabledNewBtn As Boolean Public ReadOnly Property IsEnabledNewBtn As Boolean Get Return m_IsEnabledNewBtn End Get End Property Private m_IsEnabledSaveBtn As Boolean Public ReadOnly Property IsEnabledSaveBtn As Boolean Get Return m_IsEnabledSaveBtn End Get End Property Private m_IsEnabledRemoveBtn As Boolean Public ReadOnly Property IsEnabledRemoveBtn As Boolean Get Return m_IsEnabledRemoveBtn End Get End Property Dim StoneDrillParamPageV As StoneDrillingParamPageV Dim WoodDrillParamPageV As WoodDrillingParamPageV Dim StoneSawParamPageV As StoneSawingParamPageV Dim WoodSawParamPageV As WoodSawingParamPageV Dim StoneMillParamPageV As StoneMillingParamPageV Dim WoodMillParamPageV As WoodMillingParamPageV Dim BeamMillParamPageV As BeamMillingParamPageV Dim PocketParamPageV As PocketingParamPageV Dim MortiseParamPageV As MortisingParamPageV Dim StoneSawRoughParamPageV As StoneSawRoughingParamPageV Dim StoneSawFinishParamPageV As StoneSawFinishingParamPageV Dim GenMachinParamPageV As GenMachiningParamPageV Dim ChiselParamPageV As ChiselingParamPageV Dim SurfFinishParamPageV As SurfFinishingParamPageV Dim WjParamPageV As WaterjettingParamPageV Dim Stone5DrillParamPageV As Stone5DrillingParamPageV Dim Stone5SawParamPageV As Stone5SawingParamPageV Dim Stone5MillParamPageV As Stone5MillingParamPageV Dim Stone5SawRoughParamPageV As Stone5SawRoughingParamPageV Dim Stone5SawFinishParamPageV As Stone5SawFinishingParamPageV Dim Stone5WjParamPageV As Stone5WaterjettingParamPageV Public ReadOnly Property ParamPageV As ContentControl Get Dim selMachiningFamily As FamilyMachiningTreeViewItem = Nothing Dim selMachining As MachiningTreeViewItem = Nothing For Each MachiningFamily In MachiningsList For Each Machining In MachiningFamily.Items If Machining.IsSelected Then selMachining = DirectCast(Machining, MachiningTreeViewItem) Exit For End If Next If Not IsNothing(selMachining) Then Exit For Next If IsNothing(selMachining) Then Return Nothing StoneDrillParamPageV.DataContext = Nothing WoodDrillParamPageV.DataContext = Nothing StoneSawParamPageV.DataContext = Nothing WoodSawParamPageV.DataContext = Nothing StoneMillParamPageV.DataContext = Nothing WoodMillParamPageV.DataContext = Nothing BeamMillParamPageV.DataContext = Nothing PocketParamPageV.DataContext = Nothing MortiseParamPageV.DataContext = Nothing StoneSawRoughParamPageV.DataContext = Nothing StoneSawFinishParamPageV.DataContext = Nothing GenMachinParamPageV.DataContext = Nothing ChiselParamPageV.DataContext = Nothing SurfFinishParamPageV.DataContext = Nothing WjParamPageV.DataContext = Nothing Stone5DrillParamPageV.DataContext = Nothing Stone5SawParamPageV.DataContext = Nothing Stone5MillParamPageV.DataContext = Nothing Stone5SawRoughParamPageV.DataContext = Nothing Stone5SawFinishParamPageV.DataContext = Nothing Stone5WjParamPageV.DataContext = Nothing Select Case selMachining.Type Case MCH_MY.DRILLING If MachiningTreeViewItem.m_MatType = MaterialType.STONE5 Then Stone5DrillParamPageV.DataContext = selMachining Return Stone5DrillParamPageV ElseIf MachiningTreeViewItem.m_MatType = MaterialType.STONE Then StoneDrillParamPageV.DataContext = selMachining Return StoneDrillParamPageV ElseIf MachiningTreeViewItem.m_MatType = MaterialType.WOOD Or MachiningTreeViewItem.m_MatType = MaterialType.BEAM Then WoodDrillParamPageV.DataContext = selMachining Return WoodDrillParamPageV End If Case MCH_MY.SAWING If MachiningTreeViewItem.m_MatType = MaterialType.STONE5 Then Stone5SawParamPageV.DataContext = selMachining Return Stone5SawParamPageV ElseIf MachiningTreeViewItem.m_MatType = MaterialType.STONE Then StoneSawParamPageV.DataContext = selMachining Return StoneSawParamPageV ElseIf MachiningTreeViewItem.m_MatType = MaterialType.WOOD Or MachiningTreeViewItem.m_MatType = MaterialType.BEAM Then WoodSawParamPageV.DataContext = selMachining Return WoodSawParamPageV End If Case MCH_MY.MILLING If MachiningTreeViewItem.m_MatType = MaterialType.STONE5 Then Stone5MillParamPageV.DataContext = selMachining Return Stone5MillParamPageV ElseIf MachiningTreeViewItem.m_MatType = MaterialType.STONE Then StoneMillParamPageV.DataContext = selMachining Return StoneMillParamPageV ElseIf MachiningTreeViewItem.m_MatType = MaterialType.WOOD Then WoodMillParamPageV.DataContext = selMachining Return WoodMillParamPageV ElseIf MachiningTreeViewItem.m_MatType = MaterialType.BEAM Then BeamMillParamPageV.DataContext = selMachining Return BeamMillParamPageV End If Case MCH_MY.POCKETING PocketParamPageV.DataContext = selMachining Return PocketParamPageV Case MCH_MY.MORTISING MortiseParamPageV.DataContext = selMachining Return MortiseParamPageV Case MCH_MY.SAWROUGHING If MachiningTreeViewItem.m_MatType = MaterialType.STONE5 Then Stone5SawRoughParamPageV.DataContext = selMachining Return Stone5SawRoughParamPageV ElseIf MachiningTreeViewItem.m_MatType = MaterialType.STONE Then StoneSawRoughParamPageV.DataContext = selMachining Return StoneSawRoughParamPageV End If Case MCH_MY.SAWFINISHING If MachiningTreeViewItem.m_MatType = MaterialType.STONE5 Then Stone5SawFinishParamPageV.DataContext = selMachining Return Stone5SawFinishParamPageV ElseIf MachiningTreeViewItem.m_MatType = MaterialType.STONE Then StoneSawFinishParamPageV.DataContext = selMachining Return StoneSawFinishParamPageV End If Case MCH_MY.GENMACHINING GenMachinParamPageV.DataContext = selMachining Return GenMachinParamPageV Case MCH_MY.CHISELING ChiselParamPageV.DataContext = selMachining Return ChiselParamPageV Case MCH_MY.SURFFINISHING SurfFinishParamPageV.DataContext = selMachining Return SurfFinishParamPageV Case MCH_MY.WATERJETTING If MachiningTreeViewItem.m_MatType = MaterialType.STONE5 Then Stone5WjParamPageV.DataContext = selMachining Return Stone5WjParamPageV ElseIf MachiningTreeViewItem.m_MatType = MaterialType.STONE Then WjParamPageV.DataContext = selMachining Return WjParamPageV End If End Select Return Nothing End Get End Property ' Definizione comandi Private m_cmdNew As ICommand Private m_cmdSave As ICommand Private m_cmdRemove As ICommand Private m_cmdImport As ICommand Private m_cmdExport As ICommand Private m_cmdReloadMachining As ICommand Private m_cmdCloseMachiningsDb As ICommand #Region "CONSTRUCTOR" Sub New(sMachineIniPath As String, ProjectSceneContext As Integer, Optional sMatType As String = "Wood", Optional bVisibleSysNotes As Boolean = False, Optional bIsEgtCAM5 As Boolean = False) m_bActive = True m_ProjectSceneContext = ProjectSceneContext m_sMachineIniPath = sMachineIniPath m_bVisibleSysNotes = bVisibleSysNotes EgtUILib.GetPrivateProfileString(S_GENERAL, K_MATERIAL, sMatType, sMatType, sMachineIniPath) Select Case sMatType Case "Stone" If bIsEgtCAM5 Then ' Se bIsEgtCAM5 è True vuol dire che il Db Lav è stato aperto da EgtCAM5 perciò dovranno essere usate ' delle pagine dedicate (con prefisso "Stone5"), attraverso l'assegnazione del valore STONE5 a MatType MachiningTreeViewItem.m_MatType = MaterialType.STONE5 Else MachiningTreeViewItem.m_MatType = MaterialType.STONE End If Case "Wood" MachiningTreeViewItem.m_MatType = MaterialType.WOOD Case "Beam" MachiningTreeViewItem.m_MatType = MaterialType.BEAM Case "Additive" MachiningTreeViewItem.m_MatType = MaterialType.WOOD Case Else ' Se il materiale spcificato nel file INI della macchina non corrisponde a STONE, WOOD o BEAM (STONE5 è ' comunque STONE nell'INI ma prevede pagine esclusive per EgtCAM5) viene emesso un messaggio di errore MachiningTreeViewItem.m_MatType = Nothing MsgBox(EgtMsg(31409), MsgBoxStyle.Exclamation, EgtMsg(31551)) Exit Sub End Select ' Passo all'item della lista il delegato alla funzuione che permette di cancellare una lavorazione MachiningTreeViewItem.m_delRemoveMachining = AddressOf RemoveMachining ' Passo all'item della lista il delegato alla funzuione che permette di disattivare la lista delle lavorazioni MachiningTreeViewItem.m_delErrorOnMachining = AddressOf ErrorOnMachining ' Passo all'item della lista il delegato alla funzuione che permette di disattivare la lista delle lavorazioni MachiningTreeViewItem.m_delIsEnabledBtns = AddressOf IsEnabledBtns FamilyMachiningTreeViewItem.m_delIsEnabledBtns = AddressOf IsEnabledBtns MachiningTreeViewItem.m_delNotifyPropertyChanged = AddressOf ccc FamilyMachiningTreeViewItem.m_delNotifyPropertyChanged = AddressOf ccc ' Carico la lista delle lavorazioni della macchina selezionata LoadSelectedMachineMachinings() StoneDrillParamPageV = New StoneDrillingParamPageV WoodDrillParamPageV = New WoodDrillingParamPageV StoneSawParamPageV = New StoneSawingParamPageV WoodSawParamPageV = New WoodSawingParamPageV StoneMillParamPageV = New StoneMillingParamPageV WoodMillParamPageV = New WoodMillingParamPageV BeamMillParamPageV = New BeamMillingParamPageV PocketParamPageV = New PocketingParamPageV MortiseParamPageV = New MortisingParamPageV StoneSawRoughParamPageV = New StoneSawRoughingParamPageV StoneSawFinishParamPageV = New StoneSawFinishingParamPageV GenMachinParamPageV = New GenMachiningParamPageV ChiselParamPageV = New ChiselingParamPageV SurfFinishParamPageV = New SurfFinishingParamPageV WjParamPageV = New WaterjettingParamPageV Stone5DrillParamPageV = New Stone5DrillingParamPageV Stone5SawParamPageV = New Stone5SawingParamPageV Stone5MillParamPageV = New Stone5MillingParamPageV Stone5SawRoughParamPageV = New Stone5SawRoughingParamPageV Stone5SawFinishParamPageV = New Stone5SawFinishingParamPageV Stone5WjParamPageV = New Stone5WaterjettingParamPageV NotifyPropertyChanged("ParamPageV") End Sub #End Region ' Constructor #Region "METHODS" Private Sub ccc() NotifyPropertyChanged("ParamPageV") End Sub Private Sub IsEnabledBtns(bIsEnabledNewBtn As Boolean, bIsEnabledSaveBtn As Boolean, bIsEnabledDeleteBtn As Boolean) m_IsEnabledNewBtn = bIsEnabledNewBtn m_IsEnabledSaveBtn = bIsEnabledSaveBtn m_IsEnabledRemoveBtn = bIsEnabledDeleteBtn NotifyPropertyChanged("IsEnabledNewBtn") NotifyPropertyChanged("IsEnabledSaveBtn") NotifyPropertyChanged("IsEnabledRemoveBtn") End Sub ' Quando chiamato, disattiva tutti gli item dell'albero o li riattiva a seconda che ci sia o meno un errore Private Sub ErrorOnMachining(bIsEnabled As Boolean) For Each FamilyMachiningItem In MachiningsList FamilyMachiningItem.IsEnabled = Not bIsEnabled Next End Sub ''' ''' Method that search the machines in the correct folder and add to the MachinesList those valid. ''' Public Overridable Sub LoadSelectedMachineMachinings() EgtSetCurrentContext(m_ProjectSceneContext) Dim ActiveMachiningsTypes() As MachiningsType = MachineUtility.ReadMachiningFamilies(m_sMachineIniPath) For Each MachiningsType In ActiveMachiningsTypes Dim FamilyTreeView As New FamilyMachiningTreeViewItem(MachiningsType.Name, MachiningsType.Id, Nothing) MachiningsList.Add(FamilyTreeView) Dim MachiningName As String = String.Empty EgtMdbGetFirstMachining(MachiningsType.Id, MachiningName) While Not String.IsNullOrWhiteSpace(MachiningName) ' recupero tuuid EgtMdbSetCurrMachining(MachiningName) Dim sCurrMachTUUID As String = String.Empty EgtMdbGetCurrMachiningParam(MCH_MP.TUUID, sCurrMachTUUID) FamilyTreeView.Items.Add(New MachiningTreeViewItem(MachiningName, MachiningsType.Id, ToolDbUtility.IsToolInDb(sCurrMachTUUID), FamilyTreeView)) EgtMdbGetNextMachining(MachiningsType.Id, MachiningName) End While FamilyTreeView.VerifyMachiningValidity() Next ' Se esiste almeno una famiglia di lavorazioni, la seleziono If MachiningsList.Count > 0 Then MachiningsList(0).IsSelected = True MachiningsList(0).NotifyPropertyChanged("IsSelected") End If End Sub ''' ''' Method that search imported Machinings for the currently selected Machine and add it to the MachiningsList. ''' Private Sub LoadImportedMachineMachinings(vsImportedMachinings As String()) ' Leggo tutte le lavorazioni presenti nella Macchina (quindi anche quelli appena importati). Dim ActiveMachiningsFamilies() As MachiningsType = MachineUtility.ReadMachiningFamilies(m_sMachineIniPath) Dim MachiningsFamilyIndex As Integer = 0 For Each MachiningsFamily In ActiveMachiningsFamilies Dim FamilyTreeView As New FamilyMachiningTreeViewItem(MachiningsFamily.Name, MachiningsFamily.Id, Nothing) Dim MachiningFamilyItem = MachiningsList.FirstOrDefault(Function(MachiningFamily) MachiningFamily.MachiningType = FamilyTreeView.MachiningType) If IsNothing(MachiningFamilyItem) Then MachiningsList.Insert(MachiningsFamilyIndex, FamilyTreeView) End If Dim nType As Integer = 0 Dim MachiningName As String = String.Empty Dim MachiningIndex As Integer = 0 EgtSetCurrentContext(MachiningDbWindowVM.m_ProjectSceneContext) Dim bFound As Boolean = EgtMdbGetFirstMachining(MachiningsFamily.Id, MachiningName) While bFound Dim MachiningItem = MachiningsList(MachiningsFamilyIndex).Items.FirstOrDefault(Function(Machining) Machining.Name = MachiningName) Dim bInList As Boolean = vsImportedMachinings.Contains(MachiningName) If bInList Then ' Se una lavorazione è presente nella MachiningsList visualizzata ma nel contempo è nell'array vsImported ' vuol dire che è stata sovrascritta perciò la rimuovo MachiningsList(MachiningsFamilyIndex).Items.Remove(MachiningsList(MachiningsFamilyIndex).Items.FirstOrDefault(Function(Machining) Machining.Name = MachiningName)) End If If bInList OrElse IsNothing(MachiningItem) Then ' recupero tuuid EgtMdbSetCurrMachining(MachiningName) Dim sCurrMachTUUID As String = String.Empty EgtMdbGetCurrMachiningParam(MCH_MP.TUUID, sCurrMachTUUID) ' aggiungo la lavorazione importata MachiningsList(MachiningsFamilyIndex).Items.Insert(MachiningIndex, New MachiningTreeViewItem(MachiningName, MachiningsFamily.Id, ToolDbUtility.IsToolInDb(sCurrMachTUUID), FamilyTreeView)) End If MachiningIndex += 1 bFound = EgtMdbGetNextMachining(MachiningsFamily.Id, MachiningName) End While MachiningsFamilyIndex += 1 Next End Sub ' Funzione che verifica modifica lavorazione selezionata ed eventualmente chiede se salvarla Public Function VerifySelectedMachiningModification() As Boolean ' Se non c'è lavorazione selezionata, esco con continuazione If IsNothing(SelMachining) Then Return True ' Se lavorazione selezionata non valida, esco con blocco If Not SelMachining.IsValid Then Return False ' Verifico salvataggio SelMachining.WriteMachiningParam() If EgtMdbIsCurrMachiningModified() Or SelMachining.m_IsModifiedName Or SelMachining.NewMachining Then Select Case MsgBox(EgtMsg(MSG_MACHININGDBERRORS + 1), MsgBoxStyle.YesNoCancel, EgtMsg(MSG_MACHININGDBERRORS + 2)) Case MsgBoxResult.Yes SelMachining.NewMachining = False SelMachining.m_Name = SelMachining.m_Name.Trim() SelMachining.WriteMachiningName() EgtMdbSaveCurrMachining() Case MsgBoxResult.No If SelMachining.NewMachining Then RemoveMachining(SelMachining) ElseIf SelMachining.m_IsModifiedName Then Dim DbName As String = String.Empty EgtMdbGetCurrMachiningParam(MCH_MP.NAME, DbName) SelMachining.NamePar = DbName End If Case MsgBoxResult.Cancel Return False End Select End If Return True End Function #End Region ' Methods #Region "COMMANDS" #Region "NewCommand" ''' ''' Returns a command that create a new machining. ''' Public ReadOnly Property NewCommand As ICommand Get If m_cmdNew Is Nothing Then m_cmdNew = New Command(AddressOf NewPar) End If Return m_cmdNew End Get End Property ''' ''' Creata the new machining. This method is invoked by the NewCommand. ''' Public Overridable Sub NewPar(ByVal param As Object) ' Verifico se sia selezionata una famiglia Dim NewMachiningItem As MachiningTreeViewItem If TypeOf param Is FamilyMachiningTreeViewItem Then Dim MachiningFamily As FamilyMachiningTreeViewItem = DirectCast(param, FamilyMachiningTreeViewItem) Dim NewName As String = MachiningFamily.Name EgtMdbGetMachiningNewName(NewName) If EgtMdbAddMachining(NewName, MachiningFamily.MachiningType) Then NewMachiningItem = New MachiningTreeViewItem(NewName, MachiningFamily.MachiningType, False, MachiningFamily) MachiningFamily.Items.Add(NewMachiningItem) EgtMdbSaveCurrMachining() NewMachiningItem.NewMachining = True If Not MachiningFamily.IsExpanded Then MachiningFamily.IsExpanded = True NewMachiningItem.IsSelected = True NewMachiningItem.NotifyPropertyChanged("IsSelected") ' Se il Materiale della nuova Lav. è Stone setto Lato Testa e Lato Lavoro a Destra di default If NewMachiningItem.MatType = MaterialType.STONE Then NewMachiningItem.SelectedHeadSide = IdNameStruct.IndFromId(MCH_SAW_HS.RIGHT, NewMachiningItem.HeadSideList) NewMachiningItem.SelectedWorkSide = IdNameStruct.IndFromId(MCH_SAW_WS.RIGHT, NewMachiningItem.WorkSideList) End If End If ' Verifico se sia selezionata una lavorazione ElseIf TypeOf param Is MachiningTreeViewItem Then Dim MachiningCopied As MachiningTreeViewItem = DirectCast(param, MachiningTreeViewItem) Dim NewName As String = MachiningCopied.Name EgtMdbGetMachiningNewName(NewName) If EgtMdbCopyMachining(MachiningCopied.Name, NewName) Then Dim CurrType As Integer EgtMdbGetCurrMachiningParam(MCH_MP.TYPE, CurrType) For Each MachiningFamily In MachiningsList If (MachiningFamily.MachiningType And CurrType) <> 0 Then NewMachiningItem = New MachiningTreeViewItem(NewName, MachiningFamily.MachiningType, False, MachiningFamily) MachiningFamily.Items.Add(NewMachiningItem) EgtMdbSaveCurrMachining() NewMachiningItem.NewMachining = True ' Reimposto la lavorazione vecchia nel Db per deselezionarla e fare le verifiche correttamente EgtMdbSetCurrMachining(MachiningCopied.Name) MachiningCopied.IsSelected = False MachiningCopied.NotifyPropertyChanged("IsSelected") NewMachiningItem.IsSelected = True Exit For End If Next End If End If End Sub #End Region ' NewCommand #Region "SaveCommand" ''' ''' Returns a command that save the current selected machining. ''' Public ReadOnly Property SaveCommand() As ICommand Get If m_cmdSave Is Nothing Then m_cmdSave = New Command(AddressOf Save) End If Return m_cmdSave End Get End Property ''' ''' Saves the current machining. This method is invoked by the SaveCommand. ''' Public Sub Save(ByVal param As Object) Dim CurrMachining As MachiningTreeViewItem = DirectCast(param, MachiningTreeViewItem) CurrMachining.WriteMachiningParam() CurrMachining.m_Name = CurrMachining.m_Name.Trim() CurrMachining.WriteMachiningName() EgtMdbSaveCurrMachining() CurrMachining.NewMachining = False CurrMachining.IsModifiedReset() IsEnabledBtns(CurrMachining.IsValid And Not CurrMachining.IsModified, CurrMachining.IsValid, True) End Sub #End Region ' SaveCommand #Region "RemoveCommand" ''' ''' Returns a command that remove the current selected machining. ''' Public ReadOnly Property RemoveCommand() As ICommand Get If m_cmdRemove Is Nothing Then m_cmdRemove = New Command(AddressOf Remove) End If Return m_cmdRemove End Get End Property ''' ''' Remove the current selected machining from Db and TreeView. This method is invoked by the RemoveCommand. ''' Public Sub Remove(ByVal param As Object) EgtSetCurrentContext(m_ProjectSceneContext) Dim MachiningToRemove As MachiningTreeViewItem = DirectCast(param, MachiningTreeViewItem) ' Chiedo conferma cancellazione lavorazione If MessageBox.Show(EgtMsg(MSG_MACHININGDBERRORS + 5) & " " & MachiningToRemove.Name & EgtMsg(MSG_MACHININGDBERRORS + 6), EgtMsg(MSG_MACHININGDBERRORS + 7), MessageBoxButton.YesNo, MessageBoxImage.Question) <> MessageBoxResult.Yes Then Return End If RemoveMachining(MachiningToRemove) End Sub Public Sub RemoveMachining(MachiningToRemove As MachiningTreeViewItem) ' Salvo il tipo di lavorazione per poterla cancellare Dim MachiningType As Integer = MachiningToRemove.Type ' Cancello la lavorazione Dim CurrMachiningOriginalName As String = String.Empty EgtMdbGetMachiningFromUUID(MachiningToRemove.Uuid, CurrMachiningOriginalName) EgtMdbRemoveMachining(CurrMachiningOriginalName) ' Rimuovo il nome dall'albero For Each MachiningFamily In MachiningsList If (MachiningFamily.MachiningType And MachiningType) <> 0 Then MachiningFamily.Items.Remove(MachiningToRemove) End If Next ErrorOnMachining(False) End Sub #End Region ' RemoveCommand #Region "ImportCommand" ''' ''' Returns a command that remove the current selected machining. ''' Public ReadOnly Property ImportCommand() As ICommand Get If m_cmdImport Is Nothing Then m_cmdImport = New Command(AddressOf ImportMachining) End If Return m_cmdImport End Get End Property ''' ''' Manage the MachiningDb closing. This method is invoked by the CloseMachiningDbCommand. ''' Public Sub ImportMachining(param As Object) EgtSetCurrentContext(MachiningDbWindowVM.m_ProjectSceneContext) ' Se c'è lavorazione selezionata, ne verifico salvataggio If Not VerifySelectedMachiningModification() Then Return ' apro dialogo di scelta file Dim ImportFileDlg As New Microsoft.Win32.OpenFileDialog() With { .Title = EgtMsg(31161) & " " & EgtMsg(31163), .DefaultExt = ".data", .Filter = "Machinings (.data)|*.data", .CheckFileExists = True, .ValidateNames = True } If ImportFileDlg.ShowDialog() <> True Then Return Dim ImportFilePath As String = ImportFileDlg.FileName ' recupero liste lavorazioni da importare Dim ImportFileMachiningNameList As String() Dim ImportFileMachiningFamilyList As Integer() EgtMdbToBeImported(ImportFilePath, ImportFileMachiningNameList, ImportFileMachiningFamilyList) ' li inserisco in lista per finestra di scelta Dim MachiningToImportList As New ObservableCollection(Of ImpExpMachiningFamily) ' creo famiglie di lavorazioni in base a quelle trovate in lista importata If Not IsNothing(ImportFileMachiningNameList) AndAlso Not IsNothing(ImportFileMachiningFamilyList) Then For MachiningIndex As Integer = 0 To ImportFileMachiningNameList.Count - 1 Dim MachiningName As String = ImportFileMachiningNameList(MachiningIndex) Dim MachiningFamily As Integer = ImportFileMachiningFamilyList(MachiningIndex) MachiningFamily = MachiningFamily And (MCH_MY.DRILLING Or MCH_MY.DRILLING Or MCH_MY.SAWING Or MCH_MY.MILLING Or MCH_MY.POCKETING Or MCH_MY.MORTISING Or MCH_MY.SAWROUGHING Or MCH_MY.SAWFINISHING Or MCH_MY.GENMACHINING Or MCH_MY.CHISELING Or MCH_MY.SURFROUGHING Or MCH_MY.SURFFINISHING Or MCH_MY.WATERJETTING) Dim bFounded As Boolean = False For Each MachiningToImportFamily In MachiningToImportList If (MachiningFamily = MachiningToImportFamily.FamilyType) Then MachiningToImportFamily.MachiningList.Add(New ImpExpMachiningItem(MachiningName, AlreadyExist(MachiningName))) bFounded = True Exit For End If Next If Not bFounded Then Dim NewFamily As New ImpExpMachiningFamily(GetMachiningFamilyName(MachiningFamily), MachiningFamily) NewFamily.MachiningList.Add(New ImpExpMachiningItem(MachiningName, AlreadyExist(MachiningName))) MachiningToImportList.Add(NewFamily) End If Next End If Dim ImportWndVM As New ImportExportMachiningWindowVM(MachiningToImportList, False, ImportFilePath, ImportFileMachiningNameList) Dim ImportWnd As New ImportExportMachiningWindowV(Application.Current.MainWindow, ImportWndVM) If ImportWnd.ShowDialog() Then ' Aggiungo all'albero visualizzato le lavorazioni appena importate LoadImportedMachineMachinings(ImportWndVM.vsImported) End If End Sub Private Function AlreadyExist(MachiningName As String) As Boolean For Each MachiningFamily In m_MachiningsList For Each MachiningItem As MachiningTreeViewItem In MachiningFamily.Items If MachiningName = MachiningItem.Name Then Return True End If Next Next Return False End Function Private Function GetMachiningFamilyName(NewMachiningFamily As Integer) As String For Each MachiningFamily In m_MachiningsList If NewMachiningFamily = MachiningFamily.MachiningType Then Return MachiningFamily.Name End If Next Return "" End Function #End Region ' ImportCommand #Region "ExportCommand" ''' ''' Returns a command that remove the current selected machining. ''' Public ReadOnly Property ExportCommand() As ICommand Get If m_cmdExport Is Nothing Then m_cmdExport = New Command(AddressOf ExportMachining) End If Return m_cmdExport End Get End Property ''' ''' Manage the MachiningDb closing. This method is invoked by the CloseMachiningDbCommand. ''' Public Sub ExportMachining(param As Object) EgtSetCurrentContext(MachiningDbWindowVM.m_ProjectSceneContext) ' Se c'è lavorazione selezionata, ne verifico salvataggio If Not VerifySelectedMachiningModification() Then Return ' creo lista lavorazioni per esportazione Dim MachiningToExportList As New ObservableCollection(Of ImpExpMachiningFamily) For Each Family In m_MachiningsList Dim ImpExpMachiningFamily As New ImpExpMachiningFamily(Family.Name, Family.MachiningType) For Each Machining In Family.Items ImpExpMachiningFamily.MachiningList.Add(New ImpExpMachiningItem(Machining.Name, False)) Next MachiningToExportList.Add(ImpExpMachiningFamily) Next Dim ExportWndVM As New ImportExportMachiningWindowVM(MachiningToExportList, True) Dim ExportWnd As New ImportExportMachiningWindowV(Application.Current.MainWindow, ExportWndVM) ExportWnd.ShowDialog() End Sub #End Region ' ExportCommand #Region "ReloadMachiningCommand" ''' ''' Returns a command that reload the current selected tool. ''' Public ReadOnly Property ReloadMachiningCommand() As ICommand Get If m_cmdReloadMachining Is Nothing Then m_cmdReloadMachining = New Command(AddressOf ReloadMachining) End If Return m_cmdReloadMachining End Get End Property ''' ''' Reload the current selected tools. This method is invoked by the RemoveCommand. ''' Public Sub ReloadMachining(ByVal param As Object) If TypeOf param Is FamilyMachiningTreeViewItem Then Return ' Verifico se sia selezionata una lavorazione ElseIf TypeOf param Is MachiningTreeViewItem Then Dim MachiningToReload As MachiningTreeViewItem = DirectCast(param, MachiningTreeViewItem) EgtSetCurrentContext(m_ProjectSceneContext) MachiningToReload.ReadMachiningParam() MachiningToReload.ReadMachiningName() MachiningToReload.IsModifiedReset() End If End Sub #End Region ' ReloadMachiningCommand #Region "CloseMachiningsDbCommand" ''' ''' Returns a command that remove the current selected machining. ''' Public ReadOnly Property CloseMachiningsDbCommand() As ICommand Get If m_cmdCloseMachiningsDb Is Nothing Then m_cmdCloseMachiningsDb = New Command(AddressOf CloseMachiningsDb) End If Return m_cmdCloseMachiningsDb End Get End Property ''' ''' Manage the MachiningDb closing. This method is invoked by the CloseMachiningDbCommand. ''' Public Sub CloseMachiningsDb(param As Object) If (Keyboard.Modifiers And ModifierKeys.Alt) = ModifierKeys.Alt OrElse Keyboard.IsKeyDown(Key.F4) Then Return End If m_bActive = False ' Se selezionata una lavorazione, verifico salvataggio If TypeOf param Is MachiningTreeViewItem Then Dim CurrMachining As MachiningTreeViewItem = DirectCast(param, MachiningTreeViewItem) If CurrMachining.IsValid Then CurrMachining.WriteMachiningParam() If EgtMdbIsCurrMachiningModified() Or CurrMachining.m_IsModifiedName Or CurrMachining.NewMachining Then Select Case MsgBox(EgtMsg(MSG_MACHININGDBERRORS + 1), MsgBoxStyle.YesNo, EgtMsg(MSG_MACHININGDBERRORS + 2)) Case MsgBoxResult.Yes CurrMachining.NewMachining = False CurrMachining.m_Name = CurrMachining.m_Name.Trim() CurrMachining.WriteMachiningName() EgtMdbSaveCurrMachining() Case MsgBoxResult.No If CurrMachining.NewMachining Then RemoveMachining(CurrMachining) ElseIf CurrMachining.m_IsModifiedName Then Dim DbName As String = String.Empty EgtMdbGetCurrMachiningParam(MCH_MP.NAME, DbName) CurrMachining.NamePar = DbName End If End Select End If Else 'Lavorazione non valida, correggerla o cancellarla prima di uscire. - Errore MessageBox.Show( EgtMsg( 31410), EgtMsg( 31126)) Return End If End If ' Salvataggio DB lavorazioni EgtMdbSave() '' ''Application.Msn.NotifyColleagues(Application.UPDATEOPERATIONMACHININGLIST) ??? DA SISTEMARE PER EGTCAM5 ' Verifico se ci sono lavorazioni senza utensile o con utensile cancellato ' Chiusura finestra MachiningTreeViewItem.m_delRemoveMachining = Nothing MachiningTreeViewItem.m_delErrorOnMachining = Nothing MachiningTreeViewItem.m_delIsEnabledBtns = Nothing FamilyMachiningTreeViewItem.m_delIsEnabledBtns = Nothing RaiseEvent m_CloseWindow(True) End Sub #End Region ' CloseMachiningDbCommand #End Region ' Commands End Class