Files
EgtCAM5/ToolsDbWindow/ToolsDbViewModel.vb
T
Emmanuele Sassi 2aeaccf30a EgtCAM5 :
-Miglioramenti vari.
2016-09-06 13:50:26 +00:00

538 lines
20 KiB
VB.net

Imports System.Windows.Forms.Integration
Imports System.Collections.ObjectModel
Imports System.Reflection
Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Namespace EgtCAM5
Public Class ToolsDbViewModel
Inherits TabViewModel
Private m_Title As String
Public ReadOnly Property Title As String
Get
Return EgtMsg(MSG_MAINWINDOW + 3)
End Get
End Property
' Lista degli utensili
Private m_ToolsList As New ObservableCollection(Of FamilyToolTreeViewItem)
Public Property ToolsList As ObservableCollection(Of FamilyToolTreeViewItem)
Get
Return m_ToolsList
End Get
Set(value As ObservableCollection(Of FamilyToolTreeViewItem))
m_ToolsList = value
End Set
End Property
'PROJECT PAGE'S SCENE FIELDS AND PROPERTIES
' Reference to the ProjectScene
Private WithEvents m_ToolScene As New Scene
' Reference to the ProjectSceneHost
Private SceneHost As WindowsFormsHost
' Property used to bind the scene to the WindowsFormsHost in XAML
Private m_bfirst As Boolean = True
Public ReadOnly Property ToolSceneHost As WindowsFormsHost
Get
If m_bfirst Then
SceneHost = New WindowsFormsHost() With {.Child = m_ToolScene}
If Not m_ToolScene.Init() Then
EgtOutLog("Error in Tool scene creation")
'Application.Msn.NotifyColleagues(Application.CLOSEAPPLICATION)
End If
IniFile.m_ToolsDbSceneContext = m_ToolScene.GetCtx()
' inibisco selezione diretta da Scene
m_ToolScene.SetStatusNull()
'OnPropertyChanged("SelectedMachine")
m_bfirst = False
End If
Return SceneHost
End Get
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 CorrTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 51)
End Get
End Property
Public ReadOnly Property ExitParTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 52)
End Get
End Property
Public ReadOnly Property TypeTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 53)
End Get
End Property
Public ReadOnly Property CoolantTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 54)
End Get
End Property
Public ReadOnly Property CornRadTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 55)
End Get
End Property
Public ReadOnly Property DiamTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 56)
End Get
End Property
Public ReadOnly Property TotDiamTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 57)
End Get
End Property
Public ReadOnly Property FeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 58)
End Get
End Property
Public ReadOnly Property EndFeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 59)
End Get
End Property
Public ReadOnly Property StartFeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 60)
End Get
End Property
Public ReadOnly Property TipFeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 61)
End Get
End Property
Public ReadOnly Property LenTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 62)
End Get
End Property
Public ReadOnly Property TotLenTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 63)
End Get
End Property
Public ReadOnly Property MaxMatTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 64)
End Get
End Property
Public ReadOnly Property LonOffsetTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 65)
End Get
End Property
Public ReadOnly Property RadOffsetTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 66)
End Get
End Property
Public ReadOnly Property SpeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 67)
End Get
End Property
Public ReadOnly Property SideAngTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 68)
End Get
End Property
Public ReadOnly Property MaxSpeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 69)
End Get
End Property
Public ReadOnly Property ThickTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 70)
End Get
End Property
Public ReadOnly Property MaxAbsorptionTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 71)
End Get
End Property
Public ReadOnly Property MinFeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 72)
End Get
End Property
Public ReadOnly Property DrawTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 73)
End Get
End Property
Public ReadOnly Property HeadTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 74)
End Get
End Property
Public ReadOnly Property NameParTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 75)
End Get
End Property
Public ReadOnly Property UserNotesTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 76)
End Get
End Property
Public ReadOnly Property TcPosTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 77)
End Get
End Property
#End Region
''' <summary>
''' Constructor
''' </summary>
Sub New()
' leggo direttorio toolmakers
GetPrivateProfileString(S_MACH, K_TOOLMAKERSDIR, "", IniFile.m_sToolMakersDir)
LoadSelectedMachineTools()
Application.Msn.Register(Application.REMOVETOOL, Sub(ToolToRemove As ToolTreeViewItem)
Remove(ToolToRemove)
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.ERRORONTOOL, Sub(WrongTool As ToolTreeViewItem)
For Each FamilyToolItem In ToolsList
If IsNothing(WrongTool) Then
FamilyToolItem.IsEnabled = True
Else
FamilyToolItem.IsEnabled = False
End If
For Each ToolItem In FamilyToolItem.Items
If IsNothing(WrongTool) Then
ToolItem.IsEnabled = True
ElseIf ToolItem IsNot WrongTool Then
ToolItem.IsEnabled = False
Else
ToolItem.IsEnabled = True
End If
Next
Next
End Sub)
Application.Msn.Register(Application.UPDATESTATUSUNITS, Sub(bMmUnits As Boolean)
Dim ToolFounded As Boolean = False
For Each FamilyToolItem In ToolsList
If FamilyToolItem.IsSelected Then Exit For
For Each ToolItem In FamilyToolItem.Items
If ToolItem.IsSelected = True Then
ToolFounded = True
ToolItem.IsSelected = False
ToolItem.IsSelected = True
ToolItem.NotifyPropertyChanged("IsSelected")
End If
Next
If ToolFounded Then Exit For
Next
End Sub)
End Sub
''' <summary>
''' Method that search tools for the currently selected Machine and add it to the ToolsList.
''' </summary>
Private Sub LoadSelectedMachineTools()
Dim ActiveToolsFamilies() As ToolsFamily = ReadActiveToolsFamilies()
For Each ToolsFamily In ActiveToolsFamilies
Dim FamilyTreeView As New FamilyToolTreeViewItem(ToolsFamily.FamilyName, ToolsFamily.FamilyId)
ToolsList.Add(FamilyTreeView)
Dim nType As Integer = 0
Dim ToolName As String = String.Empty
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
If EgtTdbGetFirstTool(ToolsFamily.FamilyId, ToolName, nType) Then
FamilyTreeView.Items.Add(New ToolTreeViewItem(ToolName))
While EgtTdbGetNextTool(ToolsFamily.FamilyId, ToolName, nType)
FamilyTreeView.Items.Add(New ToolTreeViewItem(ToolName))
End While
End If
Next
' Se esiste almeno una famiglia di utensili, la seleziono
If ToolsList.Count > 0 Then
ToolsList(0).IsSelected = True
ToolsList(0).NotifyPropertyChanged("IsSelected")
End If
End Sub
''' <summary>
''' Method that search the machines in the correct folder and add to the MachinesList those valid.
''' </summary>
Private Function ReadActiveToolsFamilies() As ToolsFamily()
Dim ActiveToolsFamiliesList As New List(Of ToolsFamily)
If EgtUILib.GetPrivateProfileInt(S_TOOLS, K_DRILLBIT, 0, m_sDbsCurrMachIniFilePath) <> 0 Then
ActiveToolsFamiliesList.Add(New ToolsFamily With {.FamilyId = MCH_TF.DRILLBIT, .FamilyName = EgtMsg(MSG_TOOLSDBPAGE + 1)})
End If
If EgtUILib.GetPrivateProfileInt(S_TOOLS, K_SAWBLADE, 0, m_sDbsCurrMachIniFilePath) <> 0 Then
ActiveToolsFamiliesList.Add(New ToolsFamily With {.FamilyId = MCH_TF.SAWBLADE, .FamilyName = EgtMsg(MSG_TOOLSDBPAGE + 2)})
End If
If EgtUILib.GetPrivateProfileInt(S_TOOLS, K_MILL, 0, m_sDbsCurrMachIniFilePath) <> 0 Then
ActiveToolsFamiliesList.Add(New ToolsFamily With {.FamilyId = MCH_TF.MILL, .FamilyName = EgtMsg(MSG_TOOLSDBPAGE + 3)})
End If
If EgtUILib.GetPrivateProfileInt(S_TOOLS, K_MORTISE, 0, m_sDbsCurrMachIniFilePath) <> 0 Then
ActiveToolsFamiliesList.Add(New ToolsFamily With {.FamilyId = MCH_TF.MORTISE, .FamilyName = EgtMsg(MSG_TOOLSDBPAGE + 4)})
End If
If EgtUILib.GetPrivateProfileInt(S_TOOLS, K_COMPO, 0, m_sDbsCurrMachIniFilePath) <> 0 Then
ActiveToolsFamiliesList.Add(New ToolsFamily With {.FamilyId = MCH_TF.COMPO, .FamilyName = EgtMsg(MSG_TOOLSDBPAGE + 5)})
End If
Return ActiveToolsFamiliesList.ToArray
End Function
''' <summary>
''' Structure that represent a tool's family, containing family type and family name
''' </summary>
Structure ToolsFamily
Friend FamilyId As MCH_TF
Friend FamilyName As String
End Structure
#Region "NewCommand"
''' <summary>
''' Returns a command that create a new tool.
''' </summary>
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
''' <summary>
''' Creata the new tool. This method is invoked by the NewCommand.
''' </summary>
Public Sub NewPar(ByVal param As Object)
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
' Verifico se sia selezionata una famiglia
Dim NewToolItem As ToolTreeViewItem
If TypeOf param Is FamilyToolTreeViewItem Then
Dim ToolFamily As FamilyToolTreeViewItem = DirectCast(param, FamilyToolTreeViewItem)
Dim NewName As String = ToolFamily.Name
EgtTdbGetToolNewName(NewName)
If EgtTdbAddTool(NewName, ToolFamily.ToolType) Then
NewToolItem = New ToolTreeViewItem(NewName)
ToolFamily.Items.Add(NewToolItem)
EgtTdbSaveCurrTool()
NewToolItem.NewTool = True
If Not ToolFamily.IsExpanded Then ToolFamily.IsExpanded = True
ToolFamily.IsSelected = False
ToolFamily.NotifyPropertyChanged("IsSelected")
NewToolItem.IsSelected = True
NewToolItem.NotifyPropertyChanged("IsSelected")
End If
' Verifico se sia selezionato un utensile
ElseIf TypeOf param Is ToolTreeViewItem Then
Dim ToolCopied As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem)
Dim NewName As String = ToolCopied.Name
EgtTdbGetToolNewName(NewName)
If EgtTdbCopyTool(ToolCopied.Name, NewName) Then
' Elimino disegno che non deve essere copiato
EgtTdbSetCurrToolParam(MCH_TP.DRAW, String.Empty)
Dim CurrType As Integer
EgtTdbGetCurrToolParam(MCH_TP.TYPE, CurrType)
For Each ToolFamily In ToolsList
If (ToolFamily.ToolType And CurrType) <> 0 Then
NewToolItem = New ToolTreeViewItem(NewName)
ToolFamily.Items.Add(NewToolItem)
EgtTdbSaveCurrTool()
NewToolItem.NewTool = True
NewToolItem.IsSelected = True
NewToolItem.NotifyPropertyChanged("IsSelected")
Exit For
End If
Next
End If
End If
End Sub
''' <summary>
''' Returns true if the selected treeviewitem is valid for new tool creation.
''' </summary>
Private Function CanNew(ByVal param As Object) As Boolean
' Verifico se sia selezionata una famiglia
If TypeOf param Is FamilyToolTreeViewItem Then
Return True
' Verifico se sia selezionato un utensile
ElseIf TypeOf param Is ToolTreeViewItem Then
' Verifico che i parametri dell'utensile siano validi
Return DirectCast(param, ToolTreeViewItem).IsValid
Else
Return False
End If
End Function
#End Region ' NewCommand
#Region "SaveCommand"
''' <summary>
''' Returns a command that save the current selected tool.
''' </summary>
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
''' <summary>
''' Saves the current tool. This method is invoked by the SaveCommand.
''' </summary>
Public Sub Save(ByVal param As Object)
Dim CurrTool As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem)
CurrTool.m_Name = CurrTool.m_Name.Trim()
CurrTool.WriteToolParam()
If IsUUID(Path.GetFileNameWithoutExtension(CurrTool.m_Draw)) Then
CurrTool.SaveToolDraw()
End If
EgtTdbSaveCurrTool()
EgtTdbSave()
CurrTool.NewTool = False
End Sub
''' <summary>
''' Returns true if the selected tool is valid and can be saved.
''' </summary>
Private Function CanSave(ByVal param As Object) As Boolean
' Verifico che sia selezionato un utensile
If TypeOf param Is ToolTreeViewItem Then
Dim Tool As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem)
' Verifico che i parametri dell'utensile siano validi
Return (Tool.IsValid And Tool.IsModified) Or Tool.NewTool
Else
Return False
End If
End Function
#End Region ' SaveCommand
#Region "RemoveCommand"
''' <summary>
''' Returns a command that remove the current selected tool.
''' </summary>
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
''' <summary>
''' Remove the current selected tools from Db and TreeView. This method is invoked by the RemoveCommand.
''' </summary>
Public Sub Remove(ByVal param As Object)
Dim ToolToRemove As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem)
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
' Cancello disegno dell'utensile
EraseToolDraw()
' Salvo il tipo di utensile per poterlo cancellare
Dim ToolType As Integer = ToolToRemove.Type
' Cancello l'utensile
EgtTdbRemoveTool(ToolToRemove.Name)
EgtTdbSave()
' Rimuovo il nome dell'albero
For Each ToolFamily In ToolsList
If (ToolFamily.ToolType And ToolType) <> 0 Then
ToolFamily.Items.Remove(ToolToRemove)
End If
Next
Application.Msn.NotifyColleagues(Application.ERRORONTOOL, Nothing)
End Sub
''' <summary>
''' Returns true if the selected tool can be removed.
''' </summary>
Private Function CanRemove(ByVal param As Object) As Boolean
' Verifico se sia selezionata una famiglia
If TypeOf param Is FamilyToolTreeViewItem Then
Return False
' Verifico se sia selezionato un utensile
ElseIf TypeOf param Is ToolTreeViewItem Then
' Verifico che i parametri dell'utensile siano validi
Return True
Else
Return False
End If
End Function
Private Function EraseToolDraw() As Boolean
' nome e direttorio del file da cancellare
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
Dim sDrawName As String = String.Empty
EgtTdbGetCurrToolParam(MCH_TP.DRAW, sDrawName)
Dim sPath As String = String.Empty
EgtTdbGetToolDir(sPath)
sPath = sPath & "\" & sDrawName
' se esiste lo cancello
Try
If My.Computer.FileSystem.FileExists(sPath) Then
My.Computer.FileSystem.DeleteFile(sPath)
End If
Return True
Catch ex As Exception
Return False
End Try
End Function
#End Region ' RemoveCommand
End Class
End Namespace