Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Public Class MyMachinePanelVM
Inherits MachinePanelVM
#Region "FIELDS & PROPERTIES"
' Definizione comandi
Private m_cmdToolDb As ICommand
Private m_cmdMachDb As ICommand
Private m_cmdSetUpDb As ICommand
Private m_cmdMachOptions As ICommand
Private m_ToolDb_IsEnabled As Boolean = True
Public ReadOnly Property ToolDb_IsEnabled As Boolean
Get
Return m_ToolDb_IsEnabled
End Get
End Property
Private m_MachDb_IsEnabled As Boolean = True
Public ReadOnly Property MachDb_IsEnabled As Boolean
Get
Return m_MachDb_IsEnabled
End Get
End Property
Private m_SetUpDb_IsEnabled As Boolean = True
Public ReadOnly Property SetUpDb_IsEnabled As Boolean
Get
Return m_SetUpDb_IsEnabled
End Get
End Property
' Lista delle macchine disponibili nel programma
Private m_MachinesList As New ObservableCollection(Of Machine)
Public Property MachinesList As ObservableCollection(Of Machine)
Get
Return m_MachinesList
End Get
Set(value As ObservableCollection(Of Machine))
m_MachinesList = value
End Set
End Property
' Macchina correntemente selezionata e quindi attiva
Private m_SelectedMachine As Machine
Public Overloads Property SelectedMachine As Machine
Get
Return m_SelectedMachine
End Get
Set(value As Machine)
If IsNothing(value) Then
m_SelectedMachine = Nothing
ElseIf value IsNot m_SelectedMachine Then
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
If EgtSetCurrMachine(value.Name) Then
m_SelectedMachine = value
IniFile.m_sMachineName = m_SelectedMachine.Name
IniFile.m_sCurrMachIniFilePath = m_SelectedMachine.MachineDirPath & "\" & m_SelectedMachine.Name & ".ini"
IniFile.m_sCurrMachToolsDirPath = m_SelectedMachine.MachineDirPath & "\Tools"
IniFile.m_sCurrMachSetUpDirPath = m_SelectedMachine.MachineDirPath & "\SetUp"
IniFile.m_sCurrMachScriptsDirPath = m_SelectedMachine.MachineDirPath & "\Scripts"
UpdateToolAndMachDbParamVisibility()
NotifyPropertyChanged("SelectedMachine")
End If
End If
End Set
End Property
Private m_MachineListIsEnabled As Boolean
Public Property MachineListIsEnabled As Boolean
Get
Return m_MachineListIsEnabled
End Get
Set(value As Boolean)
m_MachineListIsEnabled = value
NotifyPropertyChanged("MachineListIsEnabled")
End Set
End Property
Private m_MachinePanel_Visibility As Visibility
Public ReadOnly Property MachinePanel_Visibility As Visibility
Get
Return m_MachinePanel_Visibility
End Get
End Property
Friend Sub SetMachinePanelVisibility(bValue As Boolean)
m_MachinePanel_Visibility = If(bValue, Visibility.Visible, Visibility.Collapsed)
NotifyPropertyChanged(NameOf(MachinePanel_Visibility))
End Sub
#Region "Messages"
Public ReadOnly Property ToolDBMsg As String
Get
Return EgtMsg(MSG_MAINWINDOW + 6)
End Get
End Property
Public ReadOnly Property MachiningDbMsg As String
Get
Return EgtMsg(MSG_MAINWINDOW + 7)
End Get
End Property
Public ReadOnly Property SetUpDbMsg As String
Get
Return EgtMsg(MSG_MAINWINDOW + 9)
End Get
End Property
#End Region ' Messages
#Region "ToolTip"
Public ReadOnly Property ToolDBToolTip As String
Get
Return EgtMsg(MSG_MAINWINDOW + 3)
End Get
End Property
Public ReadOnly Property MachiningDbToolTip As String
Get
Return EgtMsg(MSG_MAINWINDOW + 4)
End Get
End Property
Public ReadOnly Property SetUpDbToolTip As String
Get
Return EgtMsg(MSG_MAINWINDOW + 10)
End Get
End Property
Public ReadOnly Property MachOptionsToolTip As String
Get
Return EgtMsg(MSG_MAINWINDOW + 8)
End Get
End Property
#End Region ' ToolTip
#End Region 'FIELDS & PROPERTIES
#Region "CONSTRUCTOR"
Sub New()
' Creo riferimento a questa classe in Map
Map.SetRefMachinePanelVM(Me)
SearchMachines()
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Sub LoadCurrentMachine()
If m_MachinesList.Count = 0 Then Return
Dim CurrMach As String = String.Empty
GetPrivateProfileString(S_MACH, K_CURRMACH, String.Empty, CurrMach)
Dim bFound As Boolean = False
If Not String.IsNullOrEmpty(CurrMach) Then
For Each Mach In MachinesList
If Mach.Name = CurrMach Then
bFound = True
SelectedMachine = Mach
Exit For
End If
Next
End If
If Not bFound And MachinesList.Count > 0 Then
SelectedMachine = MachinesList(0)
End If
End Sub
Friend Sub SaveCurrentMachine()
If IsNothing(m_SelectedMachine) Then Return
WritePrivateProfileString(S_MACH, K_CURRMACH, SelectedMachine.Name)
End Sub
Friend Sub UpdateCurrentMachine()
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
Dim sMachName As String = String.Empty
If EgtGetCurrMachineName(sMachName) Then
For Each Mach In MachinesList
If Mach.Name = sMachName Then
SelectedMachine = Mach
Exit For
End If
Next
End If
End Sub
Friend Sub ToolMachSetUpIsEnabled(ToolDb_IsEnabled As Boolean, MachDb_IsEnabled As Boolean, SetUpDb_IsEnabled As Boolean)
m_ToolDb_IsEnabled = ToolDb_IsEnabled
m_MachDb_IsEnabled = MachDb_IsEnabled
m_SetUpDb_IsEnabled = SetUpDb_IsEnabled
NotifyPropertyChanged("ToolDb_IsEnabled")
NotifyPropertyChanged("MachDb_IsEnabled")
NotifyPropertyChanged("SetUpDb_IsEnabled")
End Sub
#End Region ' Methods
#Region "COMMANDS"
#Region "ToolDbCommand"
Public Overloads Shared Sub ToolDb()
If Not EgtVerifyMachinesDir() Then Return
' ricarico il database per intercettare eventuali aggiornamenti fatti da altre istanze del programma (se la cartella Machines è condivisa)
If Not EgtTdbReload() Then
EgtOutLog("Impossible reloading tool Db")
MessageBox.Show(EgtMsg(MSG_TOOLSERRORS + 30), EgtMsg(MSG_MESSAGEBOX + 1), MessageBoxButton.OK, MessageBoxImage.Error)
Return
End If
Dim sMachineDir As String = IniFile.m_sMachinesRoot & "\" & IniFile.m_sMachineName
Dim ToolDbWindowVM As New MyToolDbWindowVM(sMachineDir, IniFile.m_sCurrMachIniFilePath, IniFile.m_ProjectSceneContext, "Wood", IniFile.m_nUserLevel > 9)
Dim ToolDbWindowV As New EgtWPFLib5.ToolDbWindowV(Application.Current.MainWindow, ToolDbWindowVM)
If ToolDbWindowVM.MatType <> 0 Then
ToolDbWindowV.Height = 674
ToolDbWindowV.Width = 1024
ToolDbWindowV.Owner = Application.Current.MainWindow
ToolDbWindowV.ShowDialog()
End If
End Sub
'''
''' Execute the Exec. This method is invoked by the ExecCommand.
'''
Public Overrides Sub ToolDb(ByVal param As Object)
If Not EgtVerifyMachinesDir() Then Return
' ricarico il database per intercettare eventuali aggiornamenti fatti da altre istanze del programma (se la cartella Machines è condivisa)
If Not EgtTdbReload() Then
EgtOutLog("Impossible reloading tool Db")
MessageBox.Show(EgtMsg(MSG_TOOLSERRORS + 30), EgtMsg(MSG_MESSAGEBOX + 1), MessageBoxButton.OK, MessageBoxImage.Error)
Return
End If
'Dim ToolDbWindow As New ToolsDbV
'ToolDbWindow.Height = 640
'ToolDbWindow.Width = 1024
'ToolDbWindow.DataContext = New ToolsDbVM
'ToolDbWindow.Owner = Application.Current.MainWindow
'ToolDbWindow.ShowDialog()
Dim sMachineDir As String = IniFile.m_sMachinesRoot & "\" & IniFile.m_sMachineName
Dim ToolDbWindowVM As New MyToolDbWindowVM(sMachineDir, IniFile.m_sCurrMachIniFilePath, IniFile.m_ProjectSceneContext, "Wood", IniFile.m_nUserLevel > 9)
Dim ToolDbWindowV As New EgtWPFLib5.ToolDbWindowV(Application.Current.MainWindow, ToolDbWindowVM)
If ToolDbWindowVM.MatType <> 0 Then
ToolDbWindowV.Height = 674
ToolDbWindowV.Width = 1024
ToolDbWindowV.Owner = Application.Current.MainWindow
ToolDbWindowV.ShowDialog()
End If
End Sub
#End Region ' ToolDbCommand
#Region "MachDbCommand"
Public Overloads Shared Sub MachDb()
If Not EgtVerifyMachinesDir() Then Return
' ricarico il database per intercettare eventuali aggiornamenti fatti da altre istanze del programma (se la cartella Machines è condivisa)
If Not EgtMdbReload() Then
EgtOutLog("Impossible reloading machining Db")
MessageBox.Show(EgtMsg(MSG_MACHININGSERRORS + 7), EgtMsg(MSG_MESSAGEBOX + 1), MessageBoxButton.OK, MessageBoxImage.Error)
Return
End If
Dim MachDbWindowVM As New EgtWPFLib5.MachiningDbWindowVM(IniFile.m_sCurrMachIniFilePath, IniFile.m_ProjectSceneContext, "Wood", IniFile.m_nUserLevel > 9, True)
Dim MachDbWindowV As New EgtWPFLib5.MachiningDbWindowV(Application.Current.MainWindow, MachDbWindowVM)
If EgtWPFLib5.MachiningTreeViewItem.m_MatType <> 0 Then
MachDbWindowV.Height = 800 '674
MachDbWindowV.Width = 1024
MachDbWindowV.Owner = Application.Current.MainWindow
MachDbWindowV.ShowDialog()
End If
End Sub
'''
''' Execute the Exec. This method is invoked by the ExecCommand.
'''
Public Overrides Sub MachDb(ByVal param As Object)
If Not EgtVerifyMachinesDir() Then Return
' ricarico il database per intercettare eventuali aggiornamenti fatti da altre istanze del programma (se la cartella Machines è condivisa)
If Not EgtMdbReload() Then
EgtOutLog("Impossible reloading machining Db")
MessageBox.Show(EgtMsg(MSG_MACHININGSERRORS + 7), EgtMsg(MSG_MESSAGEBOX + 1), MessageBoxButton.OK, MessageBoxImage.Error)
Return
End If
Dim MachDbWindowVM As New EgtWPFLib5.MachiningDbWindowVM(IniFile.m_sCurrMachIniFilePath, IniFile.m_ProjectSceneContext, "Wood", IniFile.m_nUserLevel > 9, True)
Dim MachDbWindowV As New EgtWPFLib5.MachiningDbWindowV(Application.Current.MainWindow, MachDbWindowVM)
If EgtWPFLib5.MachiningTreeViewItem.m_MatType <> 0 Then
MachDbWindowV.Height = 800 '674
MachDbWindowV.Width = 1024
MachDbWindowV.Owner = Application.Current.MainWindow
MachDbWindowV.ShowDialog()
If Not IsNothing(Map.refMachiningTreeExpanderVM) Then Map.refMachiningTreeExpanderVM.UpdateOperationMachiningList()
End If
End Sub
#End Region ' MachDbCommand
#Region "SetUpCommand"
'''
''' Execute the Exec. This method is invoked by the ExecCommand.
'''
Public Overrides Sub SetUp(ByVal param As Object)
' verifico che il file di configurazione attrezzaggio (lua) della macchina esista
If Not File.Exists(IniFile.m_sCurrMachScriptsDirPath & "\" & SETUP_LUA) Then
EgtOutLog("SetUp error: SetUp configuration file doesn't exist ")
MessageBox.Show(EgtMsg(MSG_SETUPERRORS + 7), EgtMsg(MSG_SETUPERRORS + 1), MessageBoxButton.OK, MessageBoxImage.Error)
Return
End If
' carico Lua che contiene le funzioni per ottenere le posizioni valide dell'utensile selezionato,
' e testa e uscita dell'utensile attrezzato
EgtLuaExecFile(IniFile.m_sCurrMachScriptsDirPath & "\" & SETUP_LUA)
' verifico che le teste riportate in configurazione esistano
Dim Index As Integer = 1
Dim nErr As Integer = 0
While nErr = 0
Dim sHead As String = String.Empty
nErr = 999
EgtLuaSetGlobIntVar("STU.INDEX", Index)
EgtLuaCallFunction("STU.GetTcPosHeadGroupFromPos")
' Leggo variabili
EgtLuaGetGlobStringVar("STU.HEAD", sHead)
EgtLuaGetGlobIntVar("STU.ERR", nErr)
If nErr = 0 Then
If EgtGetHeadExitCount(sHead) = 0 Then
MessageBox.Show(EgtMsg(MSG_SETUPERRORS + 8), EgtMsg(MSG_SETUPERRORS + 1), MessageBoxButton.OK, MessageBoxImage.Error)
Return
End If
End If
Index += 1
End While
' Verifico esistenza direttorio per attrezzaggi
Dim sDir As String = IniFile.m_sMachinesRoot & "\" & IniFile.m_sMachineName & "\SetUp"
If Not Directory.Exists(sDir) Then
Try
Directory.CreateDirectory(sDir)
Catch ex As Exception
EgtOutLog("Error in SetupDir creation " & ex.ToString())
Return
End Try
End If
' creo ed apro finestra SetUp
Dim SetUpDbWindow As New SetUpDbV(Application.Current.MainWindow, New SetUpDbVM)
SetUpDbWindow.ShowDialog()
Map.refProjectVM.EmitTitle()
End Sub
#End Region ' SetUpCommand
#Region "MachOptionsCommand"
'''
''' Execute the Exec. This method is invoked by the ExecCommand.
'''
Public Overrides Sub MachOptions(ByVal param As Object)
Dim MachOptionWindow As New MachOptionV
'MachOptionWindow.Height = 614
'MachOptionWindow.Width = 256
MachOptionWindow.DataContext = New MachOptionVM
MachOptionWindow.Owner = Application.Current.MainWindow
MachOptionWindow.ShowDialog()
End Sub
#End Region ' MachOptionsCommand
#End Region ' COMMANDS
'''
''' Method that search the machines in the correct folder and add to the MachinesList those valid.
'''
Private Sub SearchMachines()
' Svuoto la lista delle macchine
m_MachinesList.Clear()
' Se direttorio base macchine non definito o non esiste, ritorno
If String.IsNullOrWhiteSpace(IniFile.m_sMachinesRoot) OrElse
Not Directory.Exists(IniFile.m_sMachinesRoot) OrElse Directory.GetDirectories(IniFile.m_sMachinesRoot).Count = 0 Then
IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW
EgtOutLog(EgtMsg(MSG_STATUSBAR + 1))
Return
End If
' Cerco le macchine
Dim TempArray As String() = Directory.GetDirectories(IniFile.m_sMachinesRoot)
For i As Integer = 0 To TempArray.Count - 1
AddMachine(TempArray(i))
Next
If m_MachinesList.Count = 0 Then
IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW
EgtOutLog(EgtMsg(MSG_STATUSBAR + 1))
Return
End If
End Sub
Private Function AddMachine(sPath As String) As Boolean
' Verifico presenza file caratteristici
Dim sName As String = Path.GetFileName(sPath)
Dim MachineIniPath As String = sPath & "\" & sName & ".ini"
Dim MachineMldePath As String = sPath & "\" & sName & ".mlde"
If Not File.Exists(MachineIniPath) Or Not File.Exists(MachineMldePath) Then Return False
' Aggiungo alla lista
m_MachinesList.Add(New Machine With {.Name = sName, .MachineDirPath = sPath})
Return True
End Function
Friend Function InsertMachine(sPath As String) As Boolean
' Verifico presenza file caratteristici
Dim sName As String = Path.GetFileName(sPath)
Dim MachineIniPath As String = sPath & "\" & sName & ".ini"
Dim MachineMldePath As String = sPath & "\" & sName & ".mlde"
If Not File.Exists(MachineIniPath) Or Not File.Exists(MachineMldePath) Then Return False
' Cerco la posizione di inserimento
Dim nPos As Integer = 0
For nI As Integer = 0 To m_MachinesList.Count() - 1
Dim nRes As Integer = String.Compare(sName, m_MachinesList(nI).Name, True)
If nRes = 0 Then
Return True
ElseIf nRes < 0 Then
Exit For
Else
nPos += 1
End If
Next
' Inserisco nella lista
m_MachinesList.Insert(nPos, New Machine With {.Name = sName, .MachineDirPath = sPath})
Return True
End Function
'''
''' Class that create the association Name/IniPath for the machine's
'''
Class Machine
Private m_sName As String
Public Property Name As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
End Set
End Property
Friend MachineDirPath As String
End Class
Private Sub UpdateToolAndMachDbParamVisibility()
If EgtUILib.GetPrivateProfileInt(S_MACHININGS, K_SAWINGONARCS, 0, IniFile.m_sCurrMachIniFilePath) <> 0 Then
Sawing(39) = Visibility.Visible ' StepExtArc
Sawing(40) = Visibility.Visible ' StepIntArc
Else
Sawing(39) = Visibility.Collapsed ' StepExtArc
Sawing(40) = Visibility.Collapsed ' StepIntArc
End If
End Sub
End Class