Files
EgtDOORCreator/ProjectManager/ProjectManagerHardwareVM.vb
2023-12-27 15:56:05 +01:00

626 lines
23 KiB
VB.net

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"
''' <summary>
''' Returns a command that do SendFeedback.
''' </summary>
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
''' <summary>
''' Execute the SendFeedback. This method is invoked by the SendFeedbackCommand.
''' </summary>
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