Imports System.Windows.Forms.Integration
Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtUILib
Namespace EgtCAM5
Public Class MachiningsDbViewModel
Inherits TabViewModel
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
' Definizione comandi
Private m_cmdNew As ICommand
Private m_cmdSave As ICommand
Private m_cmdRemove 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 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 OverLapStrTxBl As String
Get
Return EgtMsg(MSG_MACHININGSDBPAGE + 101)
End Get
End Property
Public ReadOnly Property OffsetStrTxBl As String
Get
Return EgtMsg(MSG_MACHININGSDBPAGE + 102)
End Get
End Property
Public ReadOnly Property SubTypeTxBl As String
Get
Return EgtMsg(MSG_MACHININGSDBPAGE + 103)
End Get
End Property
#End Region
'''
''' Constructor
'''
Sub New()
LoadSelectedMachineMachinings()
Application.Msn.Register(Application.REMOVEMACHINING, Sub(MachiningToRemove As MachiningTreeViewItem)
Remove(MachiningToRemove)
End Sub)
' Quando chiamato, disattiva tutti gli item dell'albero o li riattiva a seconda che ci sia o meno un errore
Application.Msn.Register(Application.ERRORONMACHINING, Sub(WrongMachining As MachiningTreeViewItem)
For Each FamilyMachiningItem In MachiningsList
If IsNothing(WrongMachining) Then
FamilyMachiningItem.IsEnabled = True
Else
FamilyMachiningItem.IsEnabled = False
End If
For Each MachiningItem In FamilyMachiningItem.Items
If IsNothing(WrongMachining) Then
MachiningItem.IsEnabled = True
ElseIf MachiningItem IsNot WrongMachining Then
MachiningItem.IsEnabled = False
Else
MachiningItem.IsEnabled = True
End If
Next
Next
End Sub)
Application.Msn.Register(Application.UPDATESTATUSUNITS, Sub(bMmUnits As Boolean)
Dim MachiningFounded As Boolean = False
For Each FamilyMachiningItem In MachiningsList
If FamilyMachiningItem.IsSelected Then Exit For
For Each MachiningItem In FamilyMachiningItem.Items
If MachiningItem.IsSelected = True Then
MachiningFounded = True
MachiningItem.IsSelected = False
MachiningItem.IsSelected = True
MachiningItem.NotifyPropertyChanged("IsSelected")
End If
Next
If MachiningFounded Then Exit For
Next
End Sub)
End Sub
'''
''' Method that search the machines in the correct folder and add to the MachinesList those valid.
'''
Private Sub LoadSelectedMachineMachinings()
Dim ActiveMachiningsTypes() As MachiningsType = ReadActiveMachiningsFamilies()
For Each MachiningsType In ActiveMachiningsTypes
Dim FamilyTreeView As New FamilyMachiningTreeViewItem(MachiningsType.TypeName, MachiningsType.TypeId)
MachiningsList.Add(FamilyTreeView)
Dim MachiningName As String = String.Empty
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
If EgtMdbGetFirstMachining(MachiningsType.TypeId, MachiningName) Then
FamilyTreeView.Items.Add(New MachiningTreeViewItem(MachiningName, MachiningsType.TypeId))
While EgtMdbGetNextMachining(MachiningsType.TypeId, MachiningName)
FamilyTreeView.Items.Add(New MachiningTreeViewItem(MachiningName, MachiningsType.TypeId))
End While
End If
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 the machines in the correct folder and add to the MachinesList those valid.
'''
Private Function ReadActiveMachiningsFamilies() As MachiningsType()
Dim ActiveMachiningsFamiliesList As New List(Of MachiningsType)
If EgtUILib.GetPrivateProfileInt(S_MACHININGS, K_DRILLING, 0, m_sDbsCurrMachIniFilePath) <> 0 Then
ActiveMachiningsFamiliesList.Add(New MachiningsType With {.TypeId = MCH_MY.DRILLING, .TypeName = EgtMsg(MSG_MACHININGSDBPAGE + 1)})
End If
If EgtUILib.GetPrivateProfileInt(S_MACHININGS, K_SAWING, 0, m_sDbsCurrMachIniFilePath) <> 0 Then
ActiveMachiningsFamiliesList.Add(New MachiningsType With {.TypeId = MCH_MY.SAWING, .TypeName = EgtMsg(MSG_MACHININGSDBPAGE + 2)})
End If
If EgtUILib.GetPrivateProfileInt(S_MACHININGS, K_MILLING, 0, m_sDbsCurrMachIniFilePath) <> 0 Then
ActiveMachiningsFamiliesList.Add(New MachiningsType With {.TypeId = MCH_MY.MILLING, .TypeName = EgtMsg(MSG_MACHININGSDBPAGE + 3)})
End If
If EgtUILib.GetPrivateProfileInt(S_MACHININGS, K_POCKETING, 0, m_sDbsCurrMachIniFilePath) <> 0 Then
ActiveMachiningsFamiliesList.Add(New MachiningsType With {.TypeId = MCH_MY.POCKETING, .TypeName = EgtMsg(MSG_MACHININGSDBPAGE + 4)})
End If
If EgtUILib.GetPrivateProfileInt(S_MACHININGS, K_MORTISING, 0, m_sDbsCurrMachIniFilePath) <> 0 Then
ActiveMachiningsFamiliesList.Add(New MachiningsType With {.TypeId = MCH_MY.MORTISING, .TypeName = EgtMsg(MSG_MACHININGSDBPAGE + 5)})
End If
If EgtUILib.GetPrivateProfileInt(S_MACHININGS, K_SAWROUGHING, 0, m_sDbsCurrMachIniFilePath) <> 0 Then
ActiveMachiningsFamiliesList.Add(New MachiningsType With {.TypeId = MCH_MY.SAWROUGHING, .TypeName = EgtMsg(MSG_MACHININGSDBPAGE + 6)})
End If
If EgtUILib.GetPrivateProfileInt(S_MACHININGS, K_SAWFINISHING, 0, m_sDbsCurrMachIniFilePath) <> 0 Then
ActiveMachiningsFamiliesList.Add(New MachiningsType With {.TypeId = MCH_MY.SAWFINISHING, .TypeName = EgtMsg(MSG_MACHININGSDBPAGE + 7)})
End If
Return ActiveMachiningsFamiliesList.ToArray
End Function
'''
''' Structure that represent a tool's family, containing family type and family name
'''
Structure MachiningsType
Friend TypeId As MCH_MY
Friend TypeName As String
End Structure
#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, AddressOf CanNew)
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
NewMachiningItem.IsSelected = True
NewMachiningItem.NotifyPropertyChanged("IsSelected")
Exit For
End If
Next
End If
End If
End Sub
'''
''' Returns true if the selected treeviewitem is valid for new tool creation.
'''
Private Function CanNew(ByVal param As Object) As Boolean
' Verifico se sia selezionata una famiglia
If TypeOf param Is FamilyMachiningTreeViewItem Then
Return True
' Verifico se sia selezionata una lavorazione
ElseIf TypeOf param Is MachiningTreeViewItem Then
' Verifico che i parametri della lavorazione siano validi
Return DirectCast(param, MachiningTreeViewItem).IsValid
Else
Return False
End If
End Function
#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, AddressOf CanSave)
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)
EgtMdbSaveCurrMachining()
EgtMdbSave()
End Sub
'''
''' Returns true if the selected machining is valid and can be saved.
'''
Private Function CanSave(ByVal param As Object) As Boolean
' Verifico che sia selezionata una lavorazione
If TypeOf param Is MachiningTreeViewItem Then
' Verifico che i parametri della lavorazione siano validi
Return DirectCast(param, MachiningTreeViewItem).IsValid And EgtMdbIsCurrMachiningModified()
Else
Return False
End If
End Function
#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, AddressOf CanRemove)
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)
Dim MachiningToRemove As MachiningTreeViewItem = DirectCast(param, MachiningTreeViewItem)
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
' Salvo il tipo di lavorazione per poterla cancellare
Dim MachiningType As Integer = MachiningToRemove.Type
' Cancello la lavorazione
EgtMdbRemoveMachining(MachiningToRemove.Name)
' Rimuovo il nome dell'albero
For Each MachiningFamily In MachiningsList
If (MachiningFamily.MachiningType And MachiningType) <> 0 Then
MachiningFamily.Items.Remove(MachiningToRemove)
End If
Next
Application.Msn.NotifyColleagues(Application.ERRORONMACHINING, Nothing)
End Sub
'''
''' Returns true if the selected machining can be removed.
'''
Private Function CanRemove(ByVal param As Object) As Boolean
' Verifico se sia selezionata una famiglia
If TypeOf param Is FamilyMachiningTreeViewItem Then
Return False
' Verifico se sia selezionata una lavorazione
ElseIf TypeOf param Is MachiningTreeViewItem Then
Return True
Else
Return False
End If
End Function
#End Region ' RemoveCommand
End Class
End Namespace