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 Friend Shared m_bActive As Boolean = False 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 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 '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 Private m_cmdReloadTool As ICommand Private m_cmdCloseToolsDb 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 #Region "CONSTRUCTOR" Sub New() m_bActive = True ' leggo direttorio toolmakers GetPrivateProfileString(S_MACH, K_TOOLMAKERSDIR, "", IniFile.m_sToolMakersDir) ' Passo all'item della lista il delegato alla funzuione che permette di cancellare una lavorazione ToolTreeViewItem.m_delRemoveTool = AddressOf RemoveTool ' Passo all'item della lista il delegato alla funzuione che permette di disattivare la lista delle lavorazioni ToolTreeViewItem.m_delErrorOnTool = AddressOf ErrorOnTool ' Passo all'item della lista il delegato alla funzuione che permette di disattivare la lista delle lavorazioni ToolTreeViewItem.m_delIsEnabledBtns = AddressOf IsEnabledBtns FamilyToolTreeViewItem.m_delIsEnabledBtns = AddressOf IsEnabledBtns LoadSelectedMachineTools() ' carico lista teste ToolTreeViewItem.m_HeadList.Clear() Dim sHeads As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) If EgtGetAllHeadsNames(sHeads) Then Dim sHeadList() As String = sHeads.Split(","c) For HeadIndex = 0 To sHeadList.Count - 1 Dim sHText As String = String.Empty EgtUILib.GetPrivateProfileString(S_HEADS, sHeadList(HeadIndex), "", sHText, IniFile.m_sCurrMachIniFilePath) Dim sHTextMsg As String = String.Empty If IsNumeric(sHText) Then sHTextMsg = EgtMsg(CInt(sHText)) If sHTextMsg = ("Msg" & CInt(sHText)) Then sHTextMsg = sHText End If Else sHTextMsg = sHText End If sHTextMsg &= " (" & sHeadList(HeadIndex) & ")" ToolTreeViewItem.m_HeadList.Add(New HeadItem(sHeadList(HeadIndex), sHTextMsg)) Next Else MessageBox.Show("Impossible loading Head list from machine!", "Error", MessageBoxButton.OK, MessageBoxImage.Error) EgtOutLog("Error: Impossible loading Head list from machine!") End If ' se carico Lua che contiene le funzioni di attrezzaggio ToolTreeViewItem.m_OrigTcPosList.Clear() If EgtLuaExecFile(IniFile.m_sCurrMachScriptsDirPath & "\" & SETUP_LUA) Then ' creo lista di tutti i TcPos Dim nPosIndex As Integer = 1 Dim sTcPos As String = String.Empty Dim nErr As Integer = 0 While nErr = 0 EgtLuaSetGlobIntVar("STU.INDEX", nPosIndex) If Not EgtLuaCallFunction("STU.GetTcPosFromPos") Then Exit While ' Leggo variabili EgtLuaGetGlobStringVar("STU.TCPOS", sTcPos) If Not EgtLuaGetGlobIntVar("STU.ERR", nErr) Then nErr = 999 If nErr = 0 Then ToolTreeViewItem.m_OrigTcPosList.Add(sTcPos) End If nPosIndex += 1 End While ' altrimenti Else MessageBox.Show(EgtMsg(MSG_TOOLSERRORS + 25), EgtMsg(MSG_TOOLSERRORS + 26), MessageBoxButton.OK, MessageBoxImage.Error) EgtOutLog("Error: SetUp configuration file not found!") End If 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 ErrorOnTool(bIsEnabled As Boolean) For Each FamilyToolItem In ToolsList FamilyToolItem.IsEnabled = Not bIsEnabled Next End Sub ''' ''' Method that search tools for the currently selected Machine and add it to the ToolsList. ''' Private Sub LoadSelectedMachineTools() Dim ActiveToolsFamilies() As ToolsFamily = MachineModel.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 #End Region ' Methods #Region "COMMANDS" #Region "NewCommand" ''' ''' Returns a command that create a new tool. ''' 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 tool. This method is invoked by the NewCommand. ''' 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 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 ' Reimposto l'utensile vecchio nel Db per deselezionarlo e fare le verifiche correttamente EgtTdbSetCurrTool(ToolCopied.Name) ToolCopied.IsSelected = False ToolCopied.NotifyPropertyChanged("IsSelected") NewToolItem.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 tool. ''' 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 tool. This method is invoked by the SaveCommand. ''' Public Sub Save(ByVal param As Object) Dim CurrTool As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem) CurrTool.WriteToolParam() CurrTool.m_Name = CurrTool.m_Name.Trim() CurrTool.WriteToolName() If IsUUID(Path.GetFileNameWithoutExtension(CurrTool.m_Draw)) Then CurrTool.SaveToolDraw() End If EgtTdbSaveCurrTool() CurrTool.NewTool = False CurrTool.IsModifiedReset() IsEnabledBtns(CurrTool.IsValid And Not CurrTool.IsModified, False, True) End Sub #End Region ' SaveCommand #Region "RemoveCommand" ''' ''' Returns a command that remove the current selected tool. ''' 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 tools from Db and TreeView. This method is invoked by the RemoveCommand. ''' Public Sub Remove(ByVal param As Object) Dim ToolToRemove As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem) ' Chiedo conferma cancellazione lavorazione If MessageBox.Show(EgtMsg(MSG_TOOLSERRORS + 22) & " " & ToolToRemove.Name & EgtMsg(MSG_TOOLSERRORS + 23), EgtMsg(MSG_TOOLSERRORS + 24), MessageBoxButton.YesNo, MessageBoxImage.Question) <> MessageBoxResult.Yes Then Return End If RemoveTool(ToolToRemove) End Sub Private Sub RemoveTool(ToolToRemove As 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 Dim CurrToolOriginalName As String = String.Empty EgtTdbGetToolFromUUID(ToolToRemove.Uuid, CurrToolOriginalName) EgtTdbRemoveTool(CurrToolOriginalName) ' Rimuovo il nome dell'albero For Each ToolFamily In ToolsList If (ToolFamily.ToolType And ToolType) <> 0 Then ToolFamily.Items.Remove(ToolToRemove) End If Next ErrorOnTool(False) End Sub 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 automatico ed esiste lo cancello Try If IsUUID(Path.GetFileNameWithoutExtension(sPath)) And 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 #Region "ReloadToolCommand" ''' ''' Returns a command that reload the current selected tool. ''' Public ReadOnly Property ReloadToolCommand() As ICommand Get If m_cmdReloadTool Is Nothing Then m_cmdReloadTool = New RelayCommand(AddressOf ReloadTool) End If Return m_cmdReloadTool End Get End Property ''' ''' Reload the current selected tools. This method is invoked by the RemoveCommand. ''' Public Sub ReloadTool(ByVal param As Object) If TypeOf param Is FamilyToolTreeViewItem Then Return ' Verifico se sia selezionato un utensile ElseIf TypeOf param Is ToolTreeViewItem Then Dim ToolToReload As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem) EgtSetCurrentContext(IniFile.m_ProjectSceneContext) ToolToReload.ReadToolParam() ToolToReload.ReadToolName() ToolToReload.IsModifiedReset() End If End Sub #End Region ' ReloadToolCommand #Region "CloseToolDbCommand" ''' ''' Returns a command that remove the current selected machining. ''' Public ReadOnly Property CloseToolsDbCommand() As ICommand Get If m_cmdCloseToolsDb Is Nothing Then m_cmdCloseToolsDb = New RelayCommand(AddressOf CloseToolsDb) End If Return m_cmdCloseToolsDb End Get End Property ''' ''' Manage the MachiningDb closing. This method is invoked by the CloseMachiningDbCommand. ''' Public Sub CloseToolsDb(param As Object) m_bActive = False ' Imposto contesto di progetto EgtSetCurrentContext(IniFile.m_ProjectSceneContext) ' Se selezionata una lavorazione, verifico salvataggio If TypeOf param Is ToolTreeViewItem Then Dim CurrTool As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem) If CurrTool.IsValid Then CurrTool.WriteToolParam() If EgtTdbIsCurrToolModified() Or CurrTool.m_IsModifiedName Or CurrTool.NewTool Then Select Case MsgBox(EgtMsg(MSG_TOOLSERRORS), MsgBoxStyle.YesNo, EgtMsg(MSG_TOOLSERRORS + 1)) Case MsgBoxResult.Yes CurrTool.NewTool = False CurrTool.m_Name = CurrTool.m_Name.Trim() CurrTool.WriteToolName() EgtTdbSaveCurrTool() Case MsgBoxResult.No If CurrTool.NewTool Then RemoveTool(CurrTool) ElseIf CurrTool.m_IsModifiedName Then Dim DbName As String = String.Empty EgtTdbGetCurrToolParam(MCH_TP.NAME, DbName) CurrTool.NamePar = DbName End If End Select End If Else MessageBox.Show(EgtMsg(MSG_TOOLSERRORS + 29), EgtMsg(MSG_TOOLSERRORS + 26)) Return End If End If ' Salvataggio DB utensili EgtTdbSave() ' Reset lua EgtLuaResetGlobVar("STU") ' Chiusura finestra ToolTreeViewItem.m_delRemoveTool = Nothing ToolTreeViewItem.m_delErrorOnTool = Nothing ToolTreeViewItem.m_delIsEnabledBtns = Nothing FamilyToolTreeViewItem.m_delIsEnabledBtns = Nothing For Each Window In Application.Current.Windows If TypeOf Window Is ToolsDbView Then Dim ToolsDbWindow As ToolsDbView = DirectCast(Window, ToolsDbView) ToolsDbWindow.DataContext = Nothing ToolsDbWindow.Close() End If Next End Sub #End Region ' CloseToolsDbCommand #End Region ' Commands End Class End Namespace