Files
EgtDOORCreator/AssemblyManager/AssemblyManagerVM.vb
T
Nicola Pievani 57ee7991df EgtDOORCreator 1.8l4 :
- Aggiunta dei template
2017-12-11 18:58:06 +00:00

452 lines
20 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Public Class AssemblyManagerVM
Inherits VMBase
' creiamo un nuovo progetto: un nome e una lista di porte
Private m_CurrProject As New Project
Public Property CurrProject As Project
Get
Return m_CurrProject
End Get
Set(value As Project)
m_CurrProject = value
End Set
End Property
#Region "MESSAGES"
Public ReadOnly Property AddNewDoorToolTip As String
Get
Return EgtMsg(50302)
End Get
End Property
Public ReadOnly Property RemoveDoorToolTip As String
Get
Return EgtMsg(50303)
End Get
End Property
#End Region 'MESSAGES
' Definizione comandi
Private m_cmdAddAssembly As ICommand
Private m_cmdRemoveAssembly As ICommand
Sub New()
Map.SetRefDoorManagerVM(Me)
End Sub
#Region "METHODS"
#Region "Apertura e salvataggio"
Public Sub NewCmd(NewAssName As AssemblyName)
' segno come modificato il nome dell'assemblato
CurrProject.SelAssemblyName.IsModified = True
' definisco e rimuovo file temporaneo di assemblato
Dim sTempFile As String = IniFile.m_sTempDir & "\" & TEMP_FILE
Try
File.Delete(sTempFile)
Catch ex As Exception
End Try
' creo nuovo assemblato
m_CurrProject.SelAssemblyName.SelAssembly = CreateNewAssembly(CurrProject.SelAssemblyName.Name)
If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then
' ricarico la lista completa degli swing
NewAssName.SelAssembly.GetArrayPartDoor(0).Door.SwingTypeList = OptionModule.m_SwingTypeList
DdfFile.WriteDDFPart(NewAssName.SelAssembly.GetArrayPartDoor(0).Door, sTempFile, False, False)
ExecDoors(Map.refSceneManagerVM.ProjectScene, sTempFile)
Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nDDFPage
Else
DdfFile.WriteDDFAssembly(NewAssName.SelAssembly, sTempFile, False)
ExecDoors(Map.refSceneManagerVM.ProjectScene, sTempFile)
Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nAssemblyPage
End If
Return
End Sub
Public Function Save(SavedAssName As AssemblyName) As Boolean
If IsNothing(SavedAssName) Then Return False
' Salvo
If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then
DdfFile.WriteDDFPart(SavedAssName.SelAssembly.GetArrayPartDoor(0).Door, SavedAssName.Name, True, False)
Else
DdfFile.WriteDDFAssembly(SavedAssName.SelAssembly, SavedAssName.Name, True)
End If
SavedAssName.IsModified = False
SavedAssName.NotifyPropertyChanged("IsModify")
Return True
End Function
Public Function Open(OpenedAssName As AssemblyName) As Boolean
If IsNothing(OpenedAssName) Then Return False
If Not File.Exists(OpenedAssName.Name) Then Return False
' Seleziono questo AssemblyName
CurrProject.SelAssemblyName = OpenedAssName
' resetto errori sui bevel edge
Part.FirstReadingEdge = False
' leggo il ddf e creo relativo assemblato
OpenedAssName.SelAssembly = CreateNewAssembly(OpenedAssName.Name)
Assembly.ReadDDFAssembly(OpenedAssName.Name, OpenedAssName.SelAssembly)
' definisco e rimuovo file temporaneo di assemblato
Dim sTempFile As String = IniFile.m_sTempDir & "\" & TEMP_FILE
Try
File.Delete(sTempFile)
Catch ex As Exception
End Try
' se l'apertura di un assemblato genera un errore esco
If IsNothing(OpenedAssName.SelAssembly) Then Return False
OpenedAssName.IsModified = Part.FirstReadingEdge
If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then
DdfFile.WriteDDFPart(OpenedAssName.SelAssembly.GetArrayPartDoor(0).Door, sTempFile, True, False)
ExecDoors(Map.refSceneManagerVM.ProjectScene, sTempFile)
Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nDDFPage
Else
DdfFile.WriteDDFAssembly(OpenedAssName.SelAssembly, sTempFile, True)
ExecDoors(Map.refSceneManagerVM.ProjectScene, sTempFile)
Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nAssemblyPage
End If
Return True
End Function
Public Sub Delete(DeleteAssName As AssemblyName)
' Se il file esiste eliminalo
If File.Exists(DeleteAssName.Name) Then
Try
File.Delete(DeleteAssName.Name)
Catch ex As Exception
' non è un problema
End Try
End If
' Elimino anche il temporaneo
Dim sTempFile As String = IniFile.m_sTempDir & "\" & TEMP_FILE
Try
File.Delete(sTempFile)
Catch ex As Exception
End Try
' Salvo indice posizione elemento da eliminare
Dim SelIndex As Integer = m_CurrProject.AssemblyList.IndexOf(DeleteAssName)
m_CurrProject.AssemblyList.Remove(DeleteAssName)
If m_CurrProject.AssemblyList.Count > 0 Then
' aggiorno la porta da visualizzare
If SelIndex > m_CurrProject.AssemblyList.Count - 1 Then
m_CurrProject.SelAssemblyName = m_CurrProject.AssemblyList(m_CurrProject.AssemblyList.Count - 1)
Open(m_CurrProject.SelAssemblyName)
Else
m_CurrProject.SelAssemblyName = m_CurrProject.AssemblyList(SelIndex)
Open(m_CurrProject.SelAssemblyName)
End If
' se non ci sono altre porte nella lista allora
Else
' elimino qualsiasi resto di porta
m_CurrProject.SelAssemblyName = Nothing
' pulisco entry page
Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected
' aggiorno l'immagine a nulla
EgtNewFile()
EgtZoom(ZM.ALL)
End If
End Sub
Public Function ManageModified() As Boolean
' verifico se selezionato esiste e modificato
If Not IsNothing(m_CurrProject.SelAssemblyName) AndAlso m_CurrProject.SelAssemblyName.IsModified Then
Dim sText As String = String.Format(EgtMsg(50109), Path.GetFileNameWithoutExtension(m_CurrProject.SelAssemblyName.Name))
Select Case MessageBox.Show(sText, "", MessageBoxButton.YesNoCancel, MessageBoxImage.Question)
Case MessageBoxResult.Yes
Save(m_CurrProject.SelAssemblyName)
m_CurrProject.SelAssemblyName.IsModified = False
Case MessageBoxResult.No
If Not File.Exists(m_CurrProject.SelAssemblyName.Name) Then
m_CurrProject.AssemblyList.Remove(m_CurrProject.SelAssemblyName)
Else
m_CurrProject.SelAssemblyName.IsModified = False
End If
Case MessageBoxResult.Cancel
Return False
End Select
End If
Return True
End Function
#End Region ' Apertura e salvataggio
#Region "Creazione e caricamento degli oggetti dell'assemblato"
' Caricamento dei dati della pagina generale degli assemblati
Friend Function CreateNewAssembly(value As String) As Assembly
'' se non esisteva nessuna porta allora posso procedere
'CurrProject.SelAssemblyName.Name = value
'NotifyPropertyChanged("SelectedAssembly")
' costruisco un nuvo assemblato e lo carico con i valori
Dim Local_SelAssembly As New Assembly
Local_SelAssembly.SetExterior(OptionModule.m_Exterior)
Local_SelAssembly.DoorListNumber = OptionModule.m_DoorsListNumber
' Carico tutti i vettori in sola lettura (i metodi set non contengono nessuna operazione)
Local_SelAssembly.SetThickness(OptionModule.m_ThicknessJamb)
Local_SelAssembly.SetWidth(OptionModule.m_WidthJamb)
Local_SelAssembly.SetLightUp(OptionModule.m_LightUp)
Local_SelAssembly.SetLightLock(OptionModule.m_LightLock)
Local_SelAssembly.SetLightBottom(OptionModule.m_LightBottom)
Local_SelAssembly.SetLightHinge(OptionModule.m_LightHinge)
Local_SelAssembly.SetThicknessHead(OptionModule.m_ThicknessHead)
Local_SelAssembly.SetOverlapHinge(OptionModule.m_OverlapHinge)
Local_SelAssembly.SetOverlapLock(OptionModule.m_OverlapLock)
Local_SelAssembly.SetOverlapTop(OptionModule.m_OverlapTop)
Local_SelAssembly.SetDeltaThickness(OptionModule.m_DeltaThickness)
Local_SelAssembly.SetLockEdgeType(OptionModule.m_LockEdgeTypeAssembly)
Local_SelAssembly.SetHingeEdgeType(OptionModule.m_HingeEdgeTypeAssembly)
Local_SelAssembly.SetTopType(OptionModule.m_TopTypeAssembly)
Local_SelAssembly.SetBottomType(OptionModule.m_BottomTypeAssembly)
Local_SelAssembly.SetLockEdgeMachining(OptionModule.m_LockEdgeMachiningAssembly)
Local_SelAssembly.SetHingeEdgeMachining(OptionModule.m_HingeEdgeMachiningAssembly)
Local_SelAssembly.SetTopMachining(OptionModule.m_TopMachiningAssembly)
Local_SelAssembly.SetBottomMachining(OptionModule.m_BottomMachiningAssembly)
Local_SelAssembly.SetLockEdgeOverMaterial(OptionModule.m_LockEdgeOverMaterialAssembly)
Local_SelAssembly.SetHingeEdgeOverMaterial(OptionModule.m_HingeEdgeOverMaterialAssembly)
Local_SelAssembly.SetTopOverMaterial(OptionModule.m_TopOverMaterialAssembly)
Local_SelAssembly.SetBottomOverMaterial(OptionModule.m_BottomOverMaterialAssembly)
Local_SelAssembly.SetDoorNumber(OptionModule.m_DoorsNumber)
' costruisco e carico le parti
CreatePart(Local_SelAssembly)
' carico l'assemblato che sto creando in locale (così da poter gestire i Jamb)
m_CurrProject.SelAssemblyName.SelAssembly = Local_SelAssembly
CreateDoor(Local_SelAssembly)
' calcolo la dimensione dei Jambs in funzione del numero di porte visibili ed assegno gli swing
Local_SelAssembly.DoorVisibilityNew()
Local_SelAssembly.TopRabbetJamb()
'Local_SelAssembly.HingeRabbetJamb()
Return Local_SelAssembly
End Function
' creazione dei jamb
Private Sub CreatePart(ByRef CurrAssembly As Assembly)
CurrAssembly.LeftJamb = New Part
CurrAssembly.LeftJamb.TypePart = "FL_"
CurrAssembly.LeftJamb.SetThickness(CurrAssembly.Thickness)
CurrAssembly.LeftJamb.SetWidth(CurrAssembly.Width)
CurrAssembly.LeftJamb.SwingTypeList = OptionModule.m_SwingTypeList
CurrAssembly.LeftJamb.IsActive = OptionModule.m_LeftJambChk
CurrAssembly.RightJamb = New Part
CurrAssembly.RightJamb.TypePart = "FR_"
CurrAssembly.RightJamb.SetThickness(CurrAssembly.Thickness)
CurrAssembly.RightJamb.SetWidth(CurrAssembly.Width)
CurrAssembly.RightJamb.SwingTypeList = OptionModule.m_SwingTypeList
CurrAssembly.RightJamb.IsActive = OptionModule.m_RightJambChk
CurrAssembly.TopJamb = New Part
CurrAssembly.TopJamb.TypePart = "FT_"
CurrAssembly.TopJamb.SetThickness(CurrAssembly.Thickness)
CurrAssembly.TopJamb.SetHeight(CurrAssembly.ThicknessHead)
CurrAssembly.TopJamb.SwingTypeList = OptionModule.m_SwingTypeList
CurrAssembly.TopJamb.IsActive = OptionModule.m_TopJambChk
CurrAssembly.BottomJamb = New Part
CurrAssembly.BottomJamb.TypePart = "FB_"
CurrAssembly.BottomJamb.SetThickness(CurrAssembly.Thickness)
CurrAssembly.BottomJamb.SetHeight(CurrAssembly.Width)
CurrAssembly.BottomJamb.SwingTypeList = OptionModule.m_SwingTypeList
CurrAssembly.BottomJamb.IsActive = OptionModule.m_BottomJambChk
End Sub
' Caricamento del vettore delle porte, se già ne esiste uno esso viene sovrascritto con nuovi oggetti
Private Sub CreateDoor(ByRef CurrAssembly As Assembly)
CurrAssembly.LockEdgeType = CurrAssembly.LockEdgeType
CurrAssembly.HingeEdgeType = CurrAssembly.HingeEdgeType
CurrAssembly.TopType = CurrAssembly.TopType
CurrAssembly.BottomType = CurrAssembly.BottomType
CurrAssembly.LockEdgeMachining = CurrAssembly.LockEdgeMachining
CurrAssembly.HingeEdgeMachining = CurrAssembly.HingeEdgeMachining
CurrAssembly.TopMachining = CurrAssembly.TopMachining
CurrAssembly.BottomMachining = CurrAssembly.BottomMachining
CurrAssembly.LockEdgeOverMaterial = CurrAssembly.LockEdgeOverMaterial
CurrAssembly.HingeEdgeOverMaterial = CurrAssembly.HingeEdgeOverMaterial
CurrAssembly.TopOverMaterial = CurrAssembly.TopOverMaterial
CurrAssembly.BottomOverMaterial = CurrAssembly.BottomOverMaterial
' qui carico il vettore delle porte (se il vettore è vuoto)
Dim ref_PartDoor As PartDoor
Dim ref_Door As Part
For IndexDoor As Integer = 0 To K_DOORNUMBER
ref_PartDoor = New PartDoor
ref_Door = New Part
ref_Door.TypePart = "DO_" & IndexDoor + 1
LoadDefaultPartOne(ref_Door)
ref_PartDoor.Door = ref_Door
ref_PartDoor.IsChecked = True
CurrAssembly.ArrayPartDoor.Add(ref_PartDoor)
Next
End Sub
' carica i valori di default negli oggetti appena creati
Public Sub LoadDefaultPartOne(ByRef ref_Part As Part)
'OptionModule.GeneralDoor.CompoList.Clear()
'---------------------------------------------------------------------------------------------------------------
' Date le dimensioni della porta calcoliamo la dimensione dei Jamb
ref_Part.Width = OptionModule.m_Width
ref_Part.Height = OptionModule.m_Height
ref_Part.Thickness = OptionModule.m_Thickness
'---------------------------------------------------------------------------------------------------------------
' i parametri che seguono non influenzano in alcun modo i jamb
ref_Part.SetSwing(OptionModule.m_Swing)
ref_Part.IsActive = False
ref_Part.Measure = OptionModule.m_SelectedMeasureUnit
ref_Part.Weight = OptionModule.m_Weight
ref_Part.LockEdgeType = OptionModule.m_LockEdgeType
ref_Part.HingeEdgeType = OptionModule.m_HingeEdgeType
ref_Part.TopType = OptionModule.m_TopType
ref_Part.BottomType = OptionModule.m_BottomType
ref_Part.LockEdgeMachining = OptionModule.m_LockEdgeMachining
ref_Part.HingeEdgeMachining = OptionModule.m_HingeEdgeMachining
ref_Part.TopMachining = OptionModule.m_TopMachining
ref_Part.BottomMachining = OptionModule.m_BottomMachining
ref_Part.LockEdgeOverMaterial = OptionModule.m_LockEdgeOverMaterial
ref_Part.HingeEdgeOverMaterial = OptionModule.m_HingeEdgeOverMaterial
ref_Part.TopOverMaterial = OptionModule.m_TopOverMaterial
ref_Part.BottomOverMaterial = OptionModule.m_BottomOverMaterial
End Sub
#End Region ' Creazione e caricamento degli oggetti dell'assemblato
#End Region ' METHODS
#Region "COMMANDS"
#Region "AddDoor"
Public ReadOnly Property AddAssembly_Command As ICommand
Get
If m_cmdAddAssembly Is Nothing Then
m_cmdAddAssembly = New Command(AddressOf AddAssembly)
End If
Return m_cmdAddAssembly
End Get
End Property
Public Sub AddAssembly()
' Gestisco porta corrente modificata
If Not ManageModified() Then Return
'---------------------------------------------------------------------------------------------------------------------------------------------------
' CHIEDO SE SI VUOLE IMPORTARE UN TEMPLATE
'Prima di tutto chiedo se vuole aprire un template
Dim ImportTemplate As String = String.Empty
If MessageBox.Show(EgtMsg(50146), EgtMsg(50110), MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes) = MessageBoxResult.Yes Then
' Apro la finestra di dialogo aperta direttamente sulla cartella cercata
Dim OpenFileDialog As New Microsoft.Win32.OpenFileDialog() With {
.InitialDirectory = IniFile.m_TemplateDir
}
If OpenFileDialog.ShowDialog() <> True Then
' se la risposta è diversa da OK esce
Return
End If
' carico l'indirizzo del template che voglio aprire
ImportTemplate = OpenFileDialog.FileName
End If
'----------------------------------------------------------------------------------------------------------------------------------------------------
' Creo nuovo assembly
' Lancio la finestra per chiedere il nome dell'assemblato
Dim SaveFileDialog As New EgtWPFLib5.EgtSaveFileDialog
SaveFileDialog.Title = K_NEWDOOR
SaveFileDialog.Directory = m_CurrProject.Name
SaveFileDialog.Extension = K_DDFEXTENSION
' Se annullo esco
If Not SaveFileDialog.EgtShowDialog Then Return
' Controllo se il nome della porta ha estensione
If Path.HasExtension(SaveFileDialog.FileName) Then
Dim sExtension As String = Path.GetExtension(SaveFileDialog.FileName)
If Not sExtension.ToLower = K_DDFEXTENSION Then
SaveFileDialog.FileName = SaveFileDialog.FileName.Replace(sExtension, K_DDFEXTENSION)
End If
Else
SaveFileDialog.FileName &= K_DDFEXTENSION
End If
' controllo che il nome non sia presente nella lista degli assemblati
Dim bNameExist As Boolean = False
Dim IndexDoorList As Integer
For IndexDoorList = 0 To m_CurrProject.AssemblyList.Count - 1
If m_CurrProject.AssemblyList(IndexDoorList).Name = SaveFileDialog.FileName Then
' se il nome è nella lista allora esco dal ciclo e rendo falsa la variabile bNameExist
bNameExist = True
Exit For
End If
bNameExist = False
Next
' se il nome è nella lista allora sovrascrivo la porta esistente
If bNameExist Then
' elimino la porta esistente
If File.Exists(SaveFileDialog.FileName) Then
Try
File.Delete(SaveFileDialog.FileName)
Catch ex As FileNotFoundException
' non è un problema
Catch ex As Exception
' non è un problema
End Try
End If
' elimino dalla lista
m_CurrProject.AssemblyList.RemoveAt(IndexDoorList)
' ''CurrProject.NotifyPropertyChanged("AssemblyList")
End If
' aggiungo il nome del file alla lista degli assemblati
Dim Local_AssemblyName As New AssemblyName
Local_AssemblyName.Name = SaveFileDialog.FileName
m_CurrProject.AssemblyList.Add(Local_AssemblyName)
' Seleziono AssembyName creato
m_CurrProject.SelAssemblyName = Local_AssemblyName
' aggiorno la lista
''CurrProject.NotifyPropertyChanged("AssemblyList")
'------------------------------------------------------------------------------------------------------------------------------------------------
' LETTURA DI UN FILE DI TIPO TEMPLATE
If Not String.IsNullOrEmpty(ImportTemplate) Then
' creo il file ddf associato al template
m_CurrProject.SelAssemblyName.SelAssembly = CreateNewAssembly(ImportTemplate)
Assembly.ReadDDFAssembly(ImportTemplate, m_CurrProject.SelAssemblyName.SelAssembly)
DdfFile.WriteDDFAssembly(m_CurrProject.SelAssemblyName.SelAssembly, Local_AssemblyName.Name, False)
If Open(m_CurrProject.SelAssemblyName) Then
m_CurrProject.SelAssemblyName.IsModified = True
File.Delete(m_CurrProject.SelAssemblyName.Name)
Return
End If
End If
'------------------------------------------------------------------------------------------------------------------------------------------------
' Creo nuovo assembly
NewCmd(Local_AssemblyName)
' carico il nome come Assemblato selezionato
Dim OrderWindow As New OrderV(Application.Current.MainWindow, New OrderVM())
OrderWindow.ShowDialog()
End Sub
#End Region ' AddDoor
#Region "RemoveAssembly"
Public ReadOnly Property RemoveAssembly_Command As ICommand
Get
If m_cmdRemoveAssembly Is Nothing Then
m_cmdRemoveAssembly = New Command(AddressOf RemoveAssembly)
End If
Return m_cmdRemoveAssembly
End Get
End Property
Public Sub RemoveAssembly()
If IsNothing(CurrProject.SelAssemblyName) Then Return
Select Case MessageBox.Show(String.Format(EgtMsg(50116), Path.GetFileNameWithoutExtension(CurrProject.SelAssemblyName.Name)), EgtMsg(50110), MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No)
Case MessageBoxResult.Yes
Delete(CurrProject.SelAssemblyName)
Case MessageBoxResult.No
' non faccio alcunchè
End Select
End Sub
#End Region ' RemoveAssembly
#End Region ' COMMANDS
End Class