Imports System.Windows.Forms.Integration Imports System.Collections.ObjectModel Imports System.IO Imports EgtUILib Public Class MachiningDbVM Inherits TabViewModel Friend Shared m_bActive As Boolean = False Private m_Title As String Public ReadOnly Property Title As String Get Return EgtMsg(MSG_MAINWINDOW + 4) 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 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 ' Definizione comandi Private m_cmdNew As ICommand Private m_cmdSave As ICommand Private m_cmdRemove As ICommand Private m_cmdReloadMachining As ICommand Private m_cmdCloseMachiningsDb As ICommand #Region "MESSAGES" 'Definizione dei messaggi della pagina Public ReadOnly Property InvertTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 51) End Get End Property Public ReadOnly Property LeaveTabTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 52) End Get End Property Public ReadOnly Property WorkSideTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 54) End Get End Property Public ReadOnly Property HeadSideTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 55) End Get End Property Public ReadOnly Property LeadInTypeTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 56) End Get End Property Public ReadOnly Property ExtLinkTypeTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 57) End Get End Property Public ReadOnly Property LeadOutTypeTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 58) End Get End Property Public ReadOnly Property CurveUseTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 59) End Get End Property Public ReadOnly Property StepTypeTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 60) End Get End Property Public ReadOnly Property LeadLinkTypeTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 62) End Get End Property Public ReadOnly Property InvertToolDirTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 151) End Get End Property Public ReadOnly Property FaceUseTypeTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 152) End Get End Property Public ReadOnly Property AxRotRefTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 164) End Get End Property Public ReadOnly Property BlockedAxesRefTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 165) End Get End Property Public ReadOnly Property SolChoiceTypeTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 104) End Get End Property Public ReadOnly Property SpeedTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 63) End Get End Property Public ReadOnly Property FeedTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 64) End Get End Property Public ReadOnly Property StartFeedTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 65) End Get End Property Public ReadOnly Property EndFeedTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 66) End Get End Property Public ReadOnly Property TipFeedTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 67) End Get End Property Public ReadOnly Property OffSrTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 68) End Get End Property Public ReadOnly Property OffSlTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 69) End Get End Property Public ReadOnly Property SideAngleTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 71) End Get End Property Public ReadOnly Property ApproxTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 72) End Get End Property Public ReadOnly Property StartPosTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 73) End Get End Property Public ReadOnly Property StartSlowLenTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 74) End Get End Property Public ReadOnly Property EndSlowLenTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 75) End Get End Property Public ReadOnly Property ThrouAddLenTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 76) End Get End Property Public ReadOnly Property StepParTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 77) End Get End Property Public ReadOnly Property ReturnPosTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 78) End Get End Property Public ReadOnly Property TabLenTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 79) End Get End Property Public ReadOnly Property TabDistTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 80) End Get End Property Public ReadOnly Property TabHeightTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 81) End Get End Property Public ReadOnly Property TabAngleTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 82) End Get End Property Public ReadOnly Property LiTangTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 83) End Get End Property Public ReadOnly Property LiPerpTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 84) End Get End Property Public ReadOnly Property LiElevTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 85) End Get End Property Public ReadOnly Property LiCompLenTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 86) End Get End Property Public ReadOnly Property LoTangTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 87) End Get End Property Public ReadOnly Property LoPerpTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 88) End Get End Property Public ReadOnly Property LoElevTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 89) End Get End Property Public ReadOnly Property LoCompLenTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 90) End Get End Property Public ReadOnly Property StartAddLenTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 91) End Get End Property Public ReadOnly Property EndAddLenTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 92) End Get End Property Public ReadOnly Property StepExtArcTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 93) End Get End Property Public ReadOnly Property StepIntArcTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 94) End Get End Property Public ReadOnly Property SideStepTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 95) End Get End Property Public ReadOnly Property VertFeedTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 96) End Get End Property Public ReadOnly Property NameParTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 97) End Get End Property Public ReadOnly Property ToolTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 98) End Get End Property Public ReadOnly Property DepthStrTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 99) End Get End Property Public ReadOnly Property UserNotesTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 100) End Get End Property Public ReadOnly Property OverLapTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 101) End Get End Property Public ReadOnly Property SubTypeTxBl As String Get Return EgtMsg(MSG_MACHININGSDBPAGE + 103) End Get End Property #End Region #Region "CONSTRUCTOR" Sub New() m_bActive = True ' 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 ' Carico la lista delle lavorazioni della macchina selezionata LoadSelectedMachineMachinings() End Sub #End Region ' Constructor #Region "METHODS" Private Sub IsEnabledBtns(bIsEnabledNewBtn As Boolean, bIsEnabledSaveBtn As Boolean, bIsEnabledDeleteBtn As Boolean) m_IsEnabledNewBtn = bIsEnabledNewBtn m_IsEnabledSaveBtn = bIsEnabledSaveBtn m_IsEnabledRemoveBtn = bIsEnabledDeleteBtn OnPropertyChanged("IsEnabledNewBtn") OnPropertyChanged("IsEnabledSaveBtn") OnPropertyChanged("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. ''' Private Sub LoadSelectedMachineMachinings() EgtSetCurrentContext(IniFile.m_ProjectSceneContext) Dim ActiveMachiningsTypes() As MachiningsType = MachineModel.ReadActiveMachiningsFamilies() For Each MachiningsType In ActiveMachiningsTypes Dim FamilyTreeView As New FamilyMachiningTreeViewItem(MachiningsType.TypeName, MachiningsType.TypeId) MachiningsList.Add(FamilyTreeView) Dim MachiningName As String = String.Empty EgtMdbGetFirstMachining(MachiningsType.TypeId, MachiningName) While Not String.IsNullOrWhiteSpace(MachiningName) FamilyTreeView.Items.Add(New MachiningTreeViewItem(MachiningName, MachiningsType.TypeId)) EgtMdbGetNextMachining(MachiningsType.TypeId, MachiningName) End While 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 #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 RelayCommand(AddressOf NewPar) End If Return m_cmdNew End Get End Property ''' ''' Creata the new machining. This method is invoked by the NewCommand. ''' Public 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) MachiningFamily.Items.Add(NewMachiningItem) EgtMdbSaveCurrMachining() NewMachiningItem.NewMachining = True If Not MachiningFamily.IsExpanded Then MachiningFamily.IsExpanded = True NewMachiningItem.IsSelected = True NewMachiningItem.NotifyPropertyChanged("IsSelected") 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) 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 RelayCommand(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, False, 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 RelayCommand(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(IniFile.m_ProjectSceneContext) Dim MachiningToRemove As MachiningTreeViewItem = DirectCast(param, MachiningTreeViewItem) ' Chiedo conferma cancellazione lavorazione If MessageBox.Show(EgtMsg(MSG_MACHININGSERRORS + 4) & " " & MachiningToRemove.Name & EgtMsg(MSG_MACHININGSERRORS + 5), EgtMsg(MSG_MACHININGSERRORS + 6), 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 "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 RelayCommand(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 selezionato un utensile ElseIf TypeOf param Is MachiningTreeViewItem Then Dim MachiningToReload As MachiningTreeViewItem = DirectCast(param, MachiningTreeViewItem) EgtSetCurrentContext(IniFile.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 RelayCommand(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) 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_MACHININGSERRORS), MsgBoxStyle.YesNo, EgtMsg(MSG_MACHININGSERRORS + 1)) 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 MessageBox.Show("Utensile non valido, correggerlo o cancellarlo prima di uscire.", "ERRORE") Return End If End If ' Salvataggio DB lavorazioni EgtMdbSave() Application.Msn.NotifyColleagues(Application.UPDATEOPERATIONMACHININGLIST) ' Chiusura finestra MachiningTreeViewItem.m_delRemoveMachining = Nothing MachiningTreeViewItem.m_delErrorOnMachining = Nothing MachiningTreeViewItem.m_delIsEnabledBtns = Nothing FamilyMachiningTreeViewItem.m_delIsEnabledBtns = Nothing For Each Window In Application.Current.Windows If TypeOf Window Is MachiningDbV Then Dim MachiningsDbWindow As MachiningDbV = DirectCast(Window, MachiningDbV) MachiningsDbWindow.DataContext = Nothing MachiningsDbWindow.Close() End If Next End Sub #End Region ' CloseMachiningDbCommand #End Region ' Commands End Class