Imports System.Collections.ObjectModel Imports System.ComponentModel Imports System.IO Imports EgtUILib Imports System.Text.RegularExpressions Imports EgtWPFLib5 Public Class HardwarePageVM Implements INotifyPropertyChanged 'Inherits VMBase Private m_GenericPart As Part Public Property GenericPart As Part Get Return m_GenericPart End Get Set(value As Part) m_GenericPart = value NotifyPropertyChanged("GenericPart") End Set End Property Private m_Door As Part Public Property Door As Part Get Return m_Door End Get Set(value As Part) m_Door = value NotifyPropertyChanged("Door") End Set End Property Private m_Jamb As Part Public Property Jamb As Part Get Return m_Jamb End Get Set(value As Part) m_Jamb = value NotifyPropertyChanged("Jamb") End Set End Property Private m_CurrHardware As Hardware Public Property CurrHardware As Hardware Get Return m_CurrHardware End Get Set(value As Hardware) m_CurrHardware = value NotifyPropertyChanged("CurrHardware") End Set End Property ' l'elenco dei bottoni Private m_CompoPanelPart As ContentControl Public Property CompoPanelControl As ContentControl Get Return m_CompoPanelPart End Get Set(value As ContentControl) m_CompoPanelPart = value End Set End Property ' mostra la visibilità del general della pagina Private m_VisibilityGeneral As Visibility = Visibility.Collapsed Public Property VisibilityGeneral As Visibility Get Return m_VisibilityGeneral End Get Set(value As Visibility) m_VisibilityGeneral = value NotifyPropertyChanged("VisibilityGeneral") End Set End Property Private m_EnablePageHardware As Boolean Sub SetStatusPage() NotifyPropertyChanged("EnablePageHardware") End Sub Public ReadOnly Property EnablePageHardware As Boolean Get Map.refProjectManagerHardwareVM.NotifyPropertyChanged("EnableProjectManagerHardware") If Not IsNothing(Map.refInstrumentPanelVM) Then Return Map.refInstrumentPanelVM.EnablePage Else Return True End If End Get End Property #Region "MESSAGES" Public ReadOnly Property GeneralMsg As String Get ' General Return EgtMsg(50040) End Get End Property Public ReadOnly Property TemplateMsg As String Get ' Template Return EgtMsg(50031) End Get End Property Public ReadOnly Property TypeMsg As String Get ' Type Return EgtMsg(50009) End Get End Property Public ReadOnly Property BrandMsg As String Get ' Brand Return EgtMsg(50052) End Get End Property #End Region ' Messages ' definizione comando Private m_EnterRefreshCmd As ICommand Private m_F1GuideCmd As ICommand Private m_GeometryConfig As ICommand Private m_ImportGeometryCmd As ICommand Private m_DeleteNgeGeometryCmd As ICommand Private m_ImportLuaCmd As ICommand #Region "COMMANDS" Public ReadOnly Property RefreshCmd As ICommand Get If m_EnterRefreshCmd Is Nothing Then m_EnterRefreshCmd = New Command(AddressOf EnterRefresh) End If Return m_EnterRefreshCmd End Get End Property Public Sub EnterRefresh() Map.refSceneManagerVM.RefreshBtn() End Sub ' Comando Guida Public ReadOnly Property GuideCmd As ICommand Get If m_F1GuideCmd Is Nothing Then m_F1GuideCmd = New Command(AddressOf F1Guide) End If Return m_F1GuideCmd End Get End Property Public Sub F1Guide() Dim rfGuideVM As New GuideVM If String.IsNullOrEmpty(GuideVM.m_AddressGuide) Then GuideVM.m_AddressGuide = GUIDE_FILE End If Map.refProjectManagerVM.Guide() End Sub ' GeometryConfig Public ReadOnly Property GeometryConfigCmd As ICommand Get If m_GeometryConfig Is Nothing Then m_GeometryConfig = New Command(AddressOf GeometryConfig) End If Return m_GeometryConfig End Get End Property Public Sub GeometryConfig(param As Object) Dim NameParameter As String = CStr(param) Dim ref_GeometryListConfigVM As New GeometryListConfigVM(NameParameter) Dim GeometryConfigWnd As New GeometryListConfigV(Application.Current.MainWindow, ref_GeometryListConfigVM) GeometryConfigWnd.ShowDialog() ref_GeometryListConfigVM = Nothing End Sub ' ImportGeometry Public ReadOnly Property ImportGeometryCmd As ICommand Get If m_ImportGeometryCmd Is Nothing Then m_ImportGeometryCmd = New Command(AddressOf ImportGeometry) End If Return m_ImportGeometryCmd End Get End Property Public Sub ImportGeometry() Dim sFilePath As String = String.Empty Dim FolderBrowserDialog As New System.Windows.Forms.OpenFileDialog() ' 50559=Open File Dialog FolderBrowserDialog.Title = EgtMsg(50559) FolderBrowserDialog.InitialDirectory = Path.GetDirectoryName(CurrHardware.CurrPath) FolderBrowserDialog.Filter = "File (*.nge)|*.nge|All (*.*)|*.*" If FolderBrowserDialog.ShowDialog <> Forms.DialogResult.OK Then ' se la risposta è diversa da OK esce Return End If sFilePath = FolderBrowserDialog.FileName Dim DestFile As String = Path.Combine(FolderBrowserDialog.InitialDirectory, Path.GetFileNameWithoutExtension(CurrHardware.CurrPath) & "_" & Path.GetFileName(sFilePath)) Try File.Copy(sFilePath, DestFile, True) Catch ex As System.IO.IOException ' Error in copying: {0} MessageBox.Show(String.Format(EgtMsg(50189), ex.Message)) Return End Try CurrHardware.SetGeometryName(Path.GetFileName(DestFile)) SetModified() EnterRefresh() '------------------------------------------------------------------------------------------------------------------------ ' Dim FolderBrowserDialog As New Microsoft.Win32.OpenFileDialog ' FolderBrowserDialog.Filter = "File (*.nge)|*.nge|All (*.*)|*.*" ' If FolderBrowserDialog.ShowDialog() Then ' sFilePath = FolderBrowserDialog.FileName ' Dim CurrFolder As String = Path.GetDirectoryName(CurrHardware.CurrPath) ' Dim DestFile As String = Path.Combine(CurrFolder, Path.GetFileNameWithoutExtension(CurrHardware.CurrPath) & "_" & Path.GetFileName(sFilePath)) ' Try ' File.Copy(sFilePath, DestFile, True) ' Catch ex As System.IO.IOException ' ' Error in copying: {0} ' MessageBox.Show(String.Format(EgtMsg(50189), ex.Message)) ' Return ' End Try ' CurrHardware.SetGeometryName(Path.GetFileName(DestFile)) ' SetModified() ' EnterRefresh() ' End If End Sub ' DeleteGeometry Public ReadOnly Property DeleteGeometryCmd As ICommand Get If m_DeleteNgeGeometryCmd Is Nothing Then m_DeleteNgeGeometryCmd = New Command(AddressOf DeleteGeometry) End If Return m_DeleteNgeGeometryCmd End Get End Property Public Sub DeleteGeometry() Dim FileNgeName As String = CurrHardware.GetGeometryName() If String.IsNullOrEmpty(FileNgeName) Then Return FileNgeName = Path.GetDirectoryName(CurrHardware.CurrPath) & "\" & FileNgeName If Not Path.HasExtension(FileNgeName) Then FileNgeName = FileNgeName & NGE_EXTENSION End If If File.Exists(FileNgeName) Then Try File.Delete(FileNgeName) Catch ex As System.IO.IOException ' 50557=Error in deleting file: {0} MessageBox.Show(String.Format(EgtMsg(50557), ex.Message)) Return End Try End If CurrHardware.SetGeometryName("") SetModified() EnterRefresh() Return End Sub ' ImportLua Public ReadOnly Property ImportLuaCmd As ICommand Get If m_ImportLuaCmd Is Nothing Then m_ImportLuaCmd = New Command(AddressOf ImportLua) End If Return m_ImportLuaCmd End Get End Property Public Sub ImportLua(param As Object) Dim sDDFName As String = CStr(param) Dim sFilePath As String = String.Empty Dim FileDialog As New Microsoft.Win32.OpenFileDialog FileDialog.Filter = "File (*.lua)|*.lua|All (*.*)|*.*" FileDialog.InitialDirectory = CurrHardware.HardwareGeneral.Path If FileDialog.ShowDialog() Then sFilePath = FileDialog.FileName If String.Compare(sFilePath, 0, FileDialog.InitialDirectory, 0, FileDialog.InitialDirectory.Length(), True) <> 0 Then ' 50558=Impossible to import a different hardware! MessageBox.Show(EgtMsg(50558), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) Return End If Dim CurrFolder As String = Path.GetDirectoryName(CurrHardware.CurrPath) Dim DestFile As String = Path.Combine(CurrFolder, Path.GetFileNameWithoutExtension(CurrHardware.CurrPath) & "_" & Path.GetFileName(sFilePath)) Try File.Copy(sFilePath, DestFile, True) Catch ex As System.IO.IOException ' Error in copying: {0} MessageBox.Show(String.Format(EgtMsg(50189), ex.Message)) Return End Try CurrHardware.SetLuaFileInAggregate(Path.GetFileName(DestFile), sDDFName) SetModified() EnterRefresh() End If End Sub #End Region ' Command ' creo un'anta Public Function CreateDoor() As Boolean Dim Hardware As String = String.Empty ' questa stringa serve solo per costruire un overload della sub New! Dim ref_Door As New Part(Hardware) Door = ref_Door Dim sTempFile As String = IniFile.m_sTempDir & "\" & TEMP_FILE DdfFile.WriteDDFPartForTestHardware(Door, sTempFile, False, False) GenericPart = Door 'ExecDoors(Map.refSceneManagerVM.ProjectScene, sTempFile) Return True End Function ' creo un jamb Public Function CreateJamb() As Boolean Dim HardwareJamb As String = "Jamb" Dim ref_Jamb As New Part(HardwareJamb) Jamb = ref_Jamb Dim sTempFile As String = IniFile.m_sTempDir & "\" & TEMP_FILE DdfFile.WriteDDFPartForTestHardware(Jamb, sTempFile, False, False) 'ExecDoors(Map.refSceneManagerVM.ProjectScene, sTempFile) Return True End Function Sub New() Map.SetRefHardwarePageVM(Me) ' se non esiste la lista dei componenti per l'HardwareManager viene creata nuova If IsNothing(Map.refCompoPanelHardwareVM) Then Map.SetRefCompoPaneHardwarelVM(New CompoPanelVM("HardwarePage")) ' se il ContentControl è vuoto allora viene creato nuovo If IsNothing(m_CompoPanelPart) Then m_CompoPanelPart = New CompoPanelHardwareV m_CompoPanelPart.DataContext = Map.refCompoPanelHardwareVM End Sub Sub PrepareEvent() If Not IsNothing(Map.refInstrumentPanelVM) Then AddHandler Map.refInstrumentPanelVM.EnableCurrentPage, AddressOf Me.SetStatusPage End If End Sub Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Public Sub NotifyPropertyChanged(propName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) End Sub End Class