Imports System.Collections.ObjectModel Imports System.ComponentModel Imports System.IO Imports EgtUILib Imports EgtWPFLib5 Imports Ionic.zip Public Class ProjectManagerHardwareVM Implements INotifyPropertyChanged #Region "FIELDS & PROPERTIES" Friend Shared StopRefresh As Boolean = True Private m_IsModified As Boolean = False Public Property IsModified As Boolean Get Return m_IsModified End Get Set(value As Boolean) m_IsModified = value If m_IsModified Then Map.refMainWindowVM.ProjectNameMsg = "HardwareManager*" IsModifiedImage = "/Resources/TopCommandBar/IsModify.png" Else Map.refMainWindowVM.ProjectNameMsg = "HardwareManager" IsModifiedImage = "/Resources/TopCommandBar/Save.png" End If Return End Set End Property Private m_IsModifiedImage As String = "/Resources/TopCommandBar/Save.png" Public Property IsModifiedImage As String Get Return m_IsModifiedImage End Get Set(value As String) m_IsModifiedImage = value NotifyPropertyChanged("IsModifiedImage") End Set End Property Public ReadOnly Property DisableDeleteCommandHM As Visibility Get If OptionModule.m_DisableDeleteCommandHM Then Return Visibility.Visible Else Return Visibility.Collapsed End If End Get End Property Public ReadOnly Property EnableProjectManagerHardware As Boolean Get If Not IsNothing(Map.refInstrumentPanelVM) Then Return Map.refInstrumentPanelVM.EnablePage Else Return True End If End Get End Property ' Definizione comandi Private m_cmdNewDir As ICommand Private m_cmdRefreshDir As ICommand Private m_cmdNew As ICommand Private m_cmdSave As ICommand Private m_cmdDelete As ICommand Private m_cmdOptions As ICommand Private m_cmdSendFeedback As ICommand Private m_cmdGuide As ICommand Private m_cmdDuplica As ICommand Private m_cmdDoor As ICommand Private m_cmdDimensionPart As ICommand #Region "ToolTip" 'Proprietà ToolTip Public ReadOnly Property NewToolTip As String Get Return EgtMsg(MSG_TOPCOMMANDBAR + 1) End Get End Property Public ReadOnly Property SaveToolTip As String Get Return EgtMsg(MSG_TOPCOMMANDBAR + 3) End Get End Property Public ReadOnly Property SendFeedbackToolTip As String Get Return EgtMsg(50046) End Get End Property Public ReadOnly Property OptionsToolTip As String Get Return EgtMsg(MSG_MAINWINDOW + 209) End Get End Property Public ReadOnly Property GuideToolTip As String Get Return EgtMsg(50305) End Get End Property Public ReadOnly Property Help As String Get Return EgtMsg(50305) End Get End Property Public ReadOnly Property DuplicaToolTip As String Get ' Duplicate Return EgtMsg(50415) End Get End Property Public ReadOnly Property DeleteToolTip As String Get ' Delete Return EgtMsg(50126) End Get End Property Public ReadOnly Property DoorToolTip As String Get ' Door Return EgtMsg(50308).ToUpper End Get End Property Public ReadOnly Property HardwareToolTip As String Get ' Hardware Return EgtMsg(50413).ToUpper End Get End Property Public ReadOnly Property NewDirToolTip As String Get ' New Directory Return EgtMsg(50419) End Get End Property Public ReadOnly Property DimensionToolTip As String Get Return EgtMsg(50418) End Get End Property Public ReadOnly Property RefreshDirToolTip As String Get ' 50728=Refresh Directory Return EgtMsg(50728) End Get End Property #End Region ' ToolTip #End Region ' Fields & Properties #Region "CONSTRUCTOR" Sub New() Map.SetRefProjectManagerHardwareVM(Me) End Sub #End Region ' Constructor #Region "COMMANDS" #Region "NewDirCommand" Public ReadOnly Property NewDirCommand As ICommand Get If m_cmdNewDir Is Nothing Then m_cmdNewDir = New Command(AddressOf NewDirCmd) End If Return m_cmdNewDir End Get End Property Public Sub NewDirCmd() If Not IsNothing(Map.refHardwarePageVM) And Not IsNothing(Map.refHardwarePageVM.CurrHardware) Then If Map.refHardwarePageVM.CurrHardware.SaveControl() = Hardware.SaveResult.nCancel Then Return ElseIf Map.refHardwarePageVM.CurrHardware.SaveControl() = Hardware.SaveResult.nYes Then Map.refHardwarePageVM.CurrHardware.Save() End If ' Richiedo il nome del progetto (cioè la directory da creare) Dim ref_SaveFileDialogVM As New MySaveFileDialogVM Dim SaveFileDialogWnd As New MySaveFileDialogV(Application.Current.MainWindow, ref_SaveFileDialogVM) ' New Directory ref_SaveFileDialogVM.Title = EgtMsg(50419) ref_SaveFileDialogVM.Directory = Map.refHardwarePageVM.CurrHardware.HardwareGeneral.Path ref_SaveFileDialogVM.IsFolder = True If Not SaveFileDialogWnd.ShowDialog Then Return End If If Directory.Exists(ref_SaveFileDialogVM.FileName) Then ' 50561=Directory already exists MessageBox.Show(EgtMsg(50561), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning) Return End If Directory.CreateDirectory(ref_SaveFileDialogVM.FileName) Map.refHardwarePageVM.CurrHardware.BrandList.Add(New CompoBrandDir(ref_SaveFileDialogVM.FileName, Path.GetFileName(Map.refHardwarePageVM.CurrHardware.HardwareGeneral.Path))) Map.refHardwarePageVM.CurrHardware.SelBrand = Map.refHardwarePageVM.CurrHardware.BrandList(Map.refHardwarePageVM.CurrHardware.BrandList.Count - 1) Map.refHardwarePageVM.CurrHardware.VisibilityType = Visibility.Collapsed Map.refHardwarePageVM.CurrHardware.RefreshTemplateListEgtDOORCreator() ref_SaveFileDialogVM = Nothing End If End Sub #End Region ' NewDirCommand #Region "RefreshDirCommand" Public ReadOnly Property RefreshDirCommand As ICommand Get If m_cmdRefreshDir Is Nothing Then m_cmdRefreshDir = New Command(AddressOf RefreshDirCmd) End If Return m_cmdRefreshDir End Get End Property Public Sub RefreshDirCmd() If Not IsNothing(Map.refHardwarePageVM) AndAlso Not IsNothing(Map.refHardwarePageVM.CurrHardware) Then If Map.refHardwarePageVM.CurrHardware.SaveControl <> Hardware.SaveResult.nCancel Then Map.refHardwarePageVM.CurrHardware.RefreshTemplateListEgtDOORCreator() End If End If End Sub #End Region ' NewDirCommand #Region "NewCommand" Public ReadOnly Property NewCommand As ICommand Get If m_cmdNew Is Nothing Then m_cmdNew = New Command(AddressOf NewCmd) End If Return m_cmdNew End Get End Property Public Sub NewCmd() If Not IsNothing(Map.refHardwarePageVM) And Not IsNothing(Map.refHardwarePageVM.CurrHardware) Then If Map.refHardwarePageVM.CurrHardware.SaveControl() = Hardware.SaveResult.nCancel Then Return ElseIf Map.refHardwarePageVM.CurrHardware.SaveControl() = Hardware.SaveResult.nYes Then Map.refHardwarePageVM.CurrHardware.Save() End If If Not IsNothing(Map.refHardwarePageVM.CurrHardware) Then Dim refNewHardwareV As New NewHardwareV Dim refNewhardwareVM As New NewHardwareVM(Map.refHardwarePageVM.CurrHardware.HardwareGeneral, NewHardwareVM.CommandList.nNew) ' refNewhardwareVM.TypeVisibility = Map.refHardwarePageVM.CurrHardware.VisibilityType refNewHardwareV.DataContext = refNewhardwareVM refNewHardwareV.Owner = Application.Current.MainWindow refNewHardwareV.ShowDialog() End If End If End Sub #End Region ' NewCommand #Region "SaveCommand" Public ReadOnly Property SaveCommand As ICommand Get If m_cmdSave Is Nothing Then m_cmdSave = New Command(AddressOf Save) End If Return m_cmdSave End Get End Property Public Sub Save() If Not IsNothing(Map.refHardwarePageVM.CurrHardware) Then Map.refHardwarePageVM.CurrHardware.Save() End Sub #End Region ' SaveCommand #Region "OptionsCommand" Public ReadOnly Property OptionsCommand As ICommand Get If m_cmdOptions Is Nothing Then m_cmdOptions = New Command(AddressOf Options) End If Return m_cmdOptions End Get End Property Public Sub Options(ByVal param As Object) Dim OptionsWindow As New OptionsV OptionsWindow.Height = 750 OptionsWindow.Width = 650 OptionsWindow.DataContext = New OptionsVM() OptionsWindow.Owner = Application.Current.MainWindow OptionsWindow.ShowDialog() End Sub #End Region ' OptionsCommand #Region "SendFeedbackCommand" ''' ''' Returns a command that do SendFeedback. ''' Public ReadOnly Property SendFeedbackCommand As ICommand Get If m_cmdSendFeedback Is Nothing Then m_cmdSendFeedback = New Command(AddressOf SendFeedback) End If Return m_cmdSendFeedback End Get End Property ''' ''' Execute the SendFeedback. This method is invoked by the SendFeedbackCommand. ''' Public Sub SendFeedback() ' Recupero indirizzo a cui spedire la mail Dim sSupportAddress As String = String.Empty GetMainPrivateProfileString(S_GENERAL, K_SUPPORT, "support@egaltech.com", sSupportAddress) ' se vuoto do messaggio di errore ed esco If String.IsNullOrWhiteSpace(sSupportAddress) Then MessageBox.Show(EgtMsg(MSG_TOPCOMMANDBAR + 10), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) Return End If ' Recupero numero chiave Dim sKey As String = String.Empty EgtGetKeyInfo(sKey) ' Recupero file del progetto corrente (tipo file .nge) Dim sCurrProject As String = String.Empty EgtGetCurrFilePath(sCurrProject) ' se nome file vuoto, chiedo se si vuole salvare (file .nge) If String.IsNullOrWhiteSpace(sCurrProject) Then If MessageBox.Show(EgtMsg(MSG_TOPCOMMANDBAR + 11), "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then Save() End If EgtGetCurrFilePath(sCurrProject) ' se modificato, chiedo se si vuole salvare Else If EgtGetModified() Then If MessageBox.Show(EgtMsg(MSG_TOPCOMMANDBAR + 11), "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then Save() End If End If End If ' recuro il file DDF associato al file .nge Dim sCurrProjectDDF As String = String.Empty sCurrProjectDDF = IniFile.m_sTempDir & "\CurrPart.ddf" ' recupero il file di log Dim sFileLog As String = String.Empty sFileLog = IniFile.m_sTempDir & "\EgtDOORCreatorLog1.txt" ' Creo zip file da allegare Dim sZipToCreate As String = IniFile.m_sTempDir & "\Feedback.zip" If File.Exists(sZipToCreate) Then File.Delete(sZipToCreate) End If Try Using zip As New Ionic.Zip.ZipFile(sZipToCreate, Console.Out) zip.AlternateEncodingUsage = Ionic.Zip.ZipOption.Always zip.AlternateEncoding = Text.Encoding.UTF8 ' aggiungo progetto corrente .nge If File.Exists(sCurrProject) Then zip.AddItem(sCurrProject, "") End If ' aggiungo progetto corrente .ddf If File.Exists(sCurrProjectDDF) Then zip.AddItem(sCurrProjectDDF, "") End If ' aggiungo file log If File.Exists(sFileLog) Then zip.AddItem(sFileLog, "") End If ' aggiungo la cartella Doors If Directory.Exists(IniFile.m_sDoorsDirPath) Then zip.AddItem(IniFile.m_sDoorsDirPath, "Doors") End If zip.Save() End Using Catch ex1 As Exception EgtOutLog("Exception in zip: " & ex1.ToString()) End Try ' preparo la mail per il supporto Dim bEx As Boolean = False Try Dim SendFeedbackWindow As New EgtWPFLib5.MapiMailMessage("EgtDOORCreator Feedback - " & sKey) SendFeedbackWindow.Recipients.Add(sSupportAddress) If Not String.IsNullOrWhiteSpace(sZipToCreate) AndAlso File.Exists(sZipToCreate) Then SendFeedbackWindow.Files.Add(IniFile.m_sTempDir & "\Feedback.zip") End If SendFeedbackWindow.ShowDialog() Catch ex As Exception EgtOutLog("Feedback exception: " & ex.ToString) bEx = True End Try If bEx OrElse EgtWPFLib5.MapiMailMessage.m_ErrorCode <> 0 Then MessageBox.Show(String.Format(EgtMsg(MSG_TOPCOMMANDBAR + 12), sSupportAddress, sZipToCreate), EgtMsg(MSG_EGTDOORCREATOR + 118), MessageBoxButton.OK, MessageBoxImage.Information) ' stampo il messaggio nella StatusBar Map.refStatusBarVM.StatusOutput = EgtMsg(MSG_TOPCOMMANDBAR + 14) Else ' stampo il messaggio nella StatusBar Map.refStatusBarVM.StatusOutput = EgtMsg(MSG_TOPCOMMANDBAR + 14) End If End Sub #End Region ' SendFeedbackCommand #Region "Guide" Public ReadOnly Property GuideCommand As ICommand Get If m_cmdGuide Is Nothing Then m_cmdGuide = New Command(AddressOf Guide) End If Return m_cmdGuide End Get End Property Public Sub Guide() Dim GuideWindow As New GuideV(Application.Current.MainWindow, New GuideVM) GuideWindow.Show() End Sub #End Region ' Guide #Region "Duplica" Public ReadOnly Property DuplicaCommand As ICommand Get If m_cmdDuplica Is Nothing Then m_cmdDuplica = New Command(AddressOf Duplica) End If Return m_cmdDuplica End Get End Property Public Sub Duplica() If Not IsNothing(Map.refHardwarePageVM) And Not IsNothing(Map.refHardwarePageVM.CurrHardware) Then If String.IsNullOrEmpty(Map.refHardwarePageVM.CurrHardware.SelTemplate) Then ' Impossible to duplicate Hardware if there is no Hardware selected! MessageBox.Show(EgtMsg(50185), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Exclamation) Return End If If Map.refHardwarePageVM.CurrHardware.SaveControl() = Hardware.SaveResult.nCancel Then Return ElseIf Map.refHardwarePageVM.CurrHardware.SaveControl() = Hardware.SaveResult.nYes Then Map.refHardwarePageVM.CurrHardware.Save() End If End If If Not IsNothing(Map.refHardwarePageVM.CurrHardware) Then Dim refNewHardwareV As New NewHardwareV Dim OldHardwareName As String = Map.refHardwarePageVM.CurrHardware.CurrPath Dim refNewhardwareVM As New NewHardwareVM(Map.refHardwarePageVM.CurrHardware.HardwareGeneral, NewHardwareVM.CommandList.nDuplicate) refNewHardwareV.DataContext = refNewhardwareVM refNewhardwareVM.TypeVisibility = Visibility.Collapsed refNewHardwareV.Owner = Application.Current.MainWindow refNewHardwareV.ShowDialog() refNewHardwareV.Close() ' aggiorno la grafica sull'ultimo elemnto inserito For Each ItemFile In Map.refHardwarePageVM.CurrHardware.TemplateList If ItemFile = refNewhardwareVM.Template Then Map.refHardwarePageVM.CurrHardware.ClearGroupChapters() Map.refHardwarePageVM.CurrHardware.SelTemplate = ItemFile Map.refHardwarePageVM.CurrHardware.ReadChapterTemplate() Map.refHardwarePageVM.CurrHardware.ReadTemplate() Map.refHardwarePageVM.CurrHardware.SetLayerName(refNewhardwareVM.Template) Map.refHardwarePageVM.CurrHardware.NotifyPropertyChanged("SelTemplate") Map.refHardwarePageVM.NotifyPropertyChanged("CurrHardware") Map.refHardwarePageVM.CurrHardware.DuplicateGeometryName(OldHardwareName) Map.refHardwarePageVM.CurrHardware.DuplicateFileLuaInAggreagate(OldHardwareName) Map.refHardwarePageVM.CurrHardware.Save() Exit For End If Next End If End Sub #End Region ' Duplica #Region "Delete" Public ReadOnly Property DeleteCommand As ICommand Get If m_cmdDelete Is Nothing Then m_cmdDelete = New Command(AddressOf Delete) End If Return m_cmdDelete End Get End Property Public Sub Delete() If Not IsNothing(Map.refHardwarePageVM) And Not IsNothing(Map.refHardwarePageVM.CurrHardware) Then If String.IsNullOrEmpty(Map.refHardwarePageVM.CurrHardware.SelTemplate) Then ' Impossible to delete Hardware if there is no Hardware selected! MessageBox.Show(EgtMsg(50184), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Exclamation) Return End If 'Some Doors could use this hardware, do you want to proceed deleting? Select Case MessageBox.Show(EgtMsg(50183), EgtMsg(50101), MessageBoxButton.YesNo, MessageBoxImage.Exclamation) Case MessageBoxResult.Yes Map.refProjectManagerHardwareVM.IsModified = False Dim LastCompoType As CompoType = Map.refHardwarePageVM.CurrHardware.HardwareGeneral Dim TypeVisibility As Visibility = Map.refHardwarePageVM.CurrHardware.VisibilityType Map.refHardwarePageVM.CurrHardware.DeleteHardware() Map.refSceneManagerVM.RefreshBtn() Case Else End Select End If End Sub #End Region ' Delete #Region "Door" Public ReadOnly Property DoorCommand As ICommand Get If m_cmdDoor Is Nothing Then m_cmdDoor = New Command(AddressOf GoToPartPage) End If Return m_cmdDoor End Get End Property Public Sub GoToPartPage() ' controllo che sia stato salvato If Not IsNothing(Map.refHardwarePageVM) And Not IsNothing(Map.refHardwarePageVM.CurrHardware) Then If Map.refHardwarePageVM.CurrHardware.SaveControl() = Hardware.SaveResult.nCancel Then Return ElseIf Map.refHardwarePageVM.CurrHardware.SaveControl() = Hardware.SaveResult.nYes Then Map.refHardwarePageVM.CurrHardware.Save() End If ' elimino il file temporaneo Map.refHardwarePageVM.CurrHardware.DeleteTempFile() End If ' abilito DimensioningPanel Map.refDimensioningPanelVM.SetDimensioningPanel_Visibility(True) 'riporto la vista a top 'Map.refSceneManagerVM.ProjectScene.SetStatusNull() EgtSetView(VT.TOP, False) EgtZoom(ZM.ALL, False) ' torna all'EgtDOORCreator Map.refMainWindowVM.StartReload = False If OptionModule.m_ConfigurationSoftware = ConfigType.Assembly Then Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nAssemblyPage Map.refRefreshPanelVM.ButtonVisibility = Visibility.Visible Else Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nDDFPage Map.refCompoPanelVM.GoBackVisibility = Visibility.Collapsed Map.refMainWindowVM.ProjectNameMsg = "" End If 'Map.refRefreshPanelVM.DimensionVisibility = Visibility.Collapsed ' elimino i riferimenti all'hardware corrente Map.refHardwarePageVM.CurrHardware = Nothing ' spengo il focus su tutti i bottoni For IndexCompoType As Integer = 0 To Map.refCompoPanelHardwareVM.CompoTypeList.Count - 1 Map.refCompoPanelHardwareVM.CompoTypeList(IndexCompoType).IsSelectedBtn = False Next Map.refHardwarePageVM.CompoPanelControl.DataContext = Map.refCompoPanelHardwareVM 'ShowDimensionCommand = Visibility.Collapsed ' apro l'ultimo progetto LauncherModule.InitLauncherModule() Map.refProjectManagerVM.DoorIsChecked = True Assembly.Refreshing = False Map.refProjectManagerVM.OpenLastProject() Assembly.Refreshing = True ' controllo quale pagina deve essere avviata If OptionModule.m_ConfigurationSoftware = ConfigType.Assembly AndAlso Map.refMainWindowVM.SelectedPage <> MainWindowVM.ListPageEnum.nNothingSelected Then Map.refAssemblyPageVM.JambBtn(Map.refAssemblyPageVM.SlectedPart) Else Map.refSceneManagerVM.RefreshBtn() End If Map.refInstrumentPanelVM.DimensionVisibility = OptionModule.m_DimensionDoor Map.refInstrumentPanelVM.SaveImgHardware = OptionModule.m_DimensionDoor Map.refProjectManagerVM.NotifyPropertyChanged("VisibilityCreateAssembly") Map.refRefreshPanelVM.DimensionVisibility = Visibility.Collapsed CompoMatch.ResetSTU() End Sub Private m_HardwareIsChecked As Boolean =True Public Property HardwareIsChecked As Boolean Get Return m_HardwareIsChecked End Get Set(value As Boolean) m_HardwareIsChecked = value NotifyPropertyChanged("HardwareIsChecked") End Set End Property #End Region ' LastProject '#Region "Dimension Part" ' Public ReadOnly Property DimensionCommand As ICommand ' Get ' If m_cmdDimensionPart Is Nothing Then ' m_cmdDimensionPart = New Command(AddressOf Dimension) ' End If ' Return m_cmdDimensionPart ' End Get ' End Property ' Public Sub Dimension() ' Dim ref_HardwarePartVM As New HardwarePartVM() ' Dim HardwarePartWnd As New HardwarePartV(Application.Current.MainWindow, ref_HardwarePartVM) ' HardwarePartWnd.ShowDialog() ' ref_GeometryListConfigVM = Nothing ' End Sub '#End Region ' Dimension Part #End Region ' Commands Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Public Sub NotifyPropertyChanged(propName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) End Sub End Class