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