Imports System.IO Imports EgtUILib Public Class ProjectFile Private m_nProjectType As ProjectType Public ReadOnly Property nProjectType As ProjectType Get Return m_nProjectType End Get End Property Friend Sub SetProjectType(nProjectType As ProjectType) m_nProjectType = nProjectType End Sub Private m_nProjId As Integer = 0 Public ReadOnly Property nProjId As Integer Get Return m_nProjId End Get End Property Friend ReadOnly Property sProjDirPath As String Get If IsNothing(m_nProjId) OrElse m_nProjId = 0 Then Return String.Empty Return refMainWindowVM.MainWindowM.sProjsDir & "\" & nProjId.ToString("0000") End Get End Property Friend ReadOnly Property sProjPath As String Get Dim sPath As String = String.Empty If IsNothing(m_nProjId) OrElse m_nProjId = 0 Then Return String.Empty sPath = refMainWindowVM.MainWindowM.sProjsDir & "\" & nProjId.ToString("0000") & "\" & nProjId.ToString("0000") & FILENAMESEPARATOR If Not IsNothing(m_nProdId) AndAlso m_nProdId > 0 Then sPath &= nProdId.ToString("0000") End If sPath &= FILENAMESEPARATOR & BTLFileName & ".nge" Return sPath End Get End Property Private m_nProdId As Integer = 0 Public ReadOnly Property nProdId As Integer Get Return m_nProdId End Get End Property Friend ReadOnly Property sProdDirPath As String Get Dim sPath As String = String.Empty If IsNothing(m_nProdId) OrElse m_nProdId = 0 Then Return String.Empty Return refMainWindowVM.MainWindowM.sProdsDir & "\" & nProdId.ToString("0000") End Get End Property Friend ReadOnly Property sProdPath As String Get Dim sPath As String = String.Empty If IsNothing(m_nProdId) OrElse m_nProdId = 0 Then Return String.Empty Return refMainWindowVM.MainWindowM.sProdsDir & "\" & nProdId.ToString("0000") & "\" & nProdId.ToString("0000") & ".nge" End Get End Property Private m_BTLFileName As String = String.Empty Public ReadOnly Property BTLFileName As String Get Return m_BTLFileName End Get End Property Private m_NewProj As Boolean Friend Property NewProj As Boolean Get Return m_NewProj End Get Set(value As Boolean) m_NewProj = value End Set End Property Private m_NewProd As Boolean Friend Property NewProd As Boolean Get Return m_NewProd End Get Set(value As Boolean) m_NewProd = value End Set End Property ' nome del file mostrato nella finestra OpenProjFileDialog Public ReadOnly Property OpenFileName As String Get If m_nProjectType = ProjectType.PROJ Then Return m_nProjId.ToString("0000") & " " & BTLFileName ElseIf m_nProjectType = ProjectType.PROD Then Return m_nProdId.ToString("0000") Else Return "" End If End Get End Property Sub New(nProjectType As ProjectType, ProjectFileName As String) m_nProjectType = nProjectType If m_nProjectType = ProjectType.PROJ Then Dim DataFromFileName As String() = ProjectFileName.Split(FILENAMESEPARATOR) If Not String.IsNullOrEmpty(DataFromFileName(0)) Then Integer.TryParse(DataFromFileName(0), m_nProjId) End If If Not String.IsNullOrEmpty(DataFromFileName(1)) Then Integer.TryParse(DataFromFileName(1), m_nProdId) Else m_nProdId = 0 End If If Not String.IsNullOrEmpty(DataFromFileName(2)) Then m_BTLFileName = DataFromFileName(2) End If ElseIf m_nProjectType = ProjectType.PROD Then Integer.TryParse(ProjectFileName, m_nProdId) End If End Sub Sub New(nProjectType As ProjectType, nProjId As Integer, nProdId As Integer, sBTLFileName As String) m_nProjectType = nProjectType If m_nProjectType = ProjectType.PROJ Then m_nProjId = nProjId m_nProdId = nProdId m_BTLFileName = sBTLFileName ElseIf m_nProjectType = ProjectType.PROD Then m_nProdId = nProdId End If End Sub Friend Sub SetProdId(nProdId As Integer) ' rinomino proj con riferimento a prod Dim OldPath As String = sProjPath m_nProdId = nProdId Dim NewPath As String = sProjPath File.Move(OldPath, NewPath) End Sub Friend Sub ResetProdId() SetProdId(0) End Sub ' funzione che restituisce le parti di nome file Friend Shared Function VerifyProjectFile(nProjectType As ProjectType, ProjectFileName As String, ByRef nProjId As Integer, ByRef nProdId As Integer, ByRef sBTLFileName As String) As Boolean If nProjectType = ProjectType.PROJ Then Dim DataFromFileName As String() = ProjectFileName.Split(FILENAMESEPARATOR) If DataFromFileName.Count = 3 Then If Not String.IsNullOrEmpty(DataFromFileName(0)) Then Integer.TryParse(DataFromFileName(0), nProjId) Else Return False End If If Not String.IsNullOrEmpty(DataFromFileName(1)) Then Integer.TryParse(DataFromFileName(1), nProdId) Else nProdId = 0 End If If Not String.IsNullOrEmpty(DataFromFileName(2)) Then sBTLFileName = DataFromFileName(2) End If Return True Else Return False End If ElseIf nProjectType = ProjectType.PROD Then Return Integer.TryParse(ProjectFileName, nProdId) Else Return False End If End Function ' funzione che dato un nome file e il tipo restituisce il corretto numero di progetto Friend Shared Function GetProjectNumber(nProjectType As ProjectType, ProjectFileName As String, ByRef nProjId As Integer, ByRef nProdId As Integer, ByRef sBTLFileName As String) As Boolean If String.IsNullOrWhiteSpace(ProjectFileName) Then nProjId = 0 nProdId = 0 sBTLFileName = "" Return False ElseIf ProjectFileName.Contains(FILENAMESEPARATOR) Then Dim DataFromFileName As String() = ProjectFileName.Split(FILENAMESEPARATOR) If DataFromFileName.Count = 3 Then If Not String.IsNullOrEmpty(DataFromFileName(0)) Then Integer.TryParse(DataFromFileName(0), nProjId) Else Return False End If If Not String.IsNullOrEmpty(DataFromFileName(1)) Then Integer.TryParse(DataFromFileName(1), nProdId) Else nProdId = 0 End If If Not String.IsNullOrEmpty(DataFromFileName(2)) Then sBTLFileName = DataFromFileName(2) End If Return True Else Return False End If ElseIf nProjectType = ProjectType.PROJ Then Dim ProjectFileNameProd As String = Integer.TryParse(ProjectFileName, nProdId) Dim nTempProjId As Integer = 0 Dim nTempProdId As Integer = 0 Dim sTempBTLFileName As String = "" ' ricavo lista cartelle proj Dim AllDirsInDir As IEnumerable(Of String) = IO.Directory.EnumerateDirectories(Map.refMainWindowVM.MainWindowM.sProjsDir) For Each Directory In AllDirsInDir Dim AllFilesInDir As IEnumerable(Of String) = IO.Directory.EnumerateFiles(Directory) For Each File In AllFilesInDir If Path.GetExtension(File).ToLower() = ".nge" Then If File.Contains(FILENAMESEPARATOR) Then Dim DataFromFileName As String() = ProjectFileName.Split(FILENAMESEPARATOR) If DataFromFileName.Count = 3 Then If Not String.IsNullOrEmpty(DataFromFileName(0)) Then Integer.TryParse(DataFromFileName(0), nTempProjId) Else Return False End If If Not String.IsNullOrEmpty(DataFromFileName(1)) Then Integer.TryParse(DataFromFileName(1), nTempProdId) Else nProdId = 0 End If If Not String.IsNullOrEmpty(DataFromFileName(2)) Then sTempBTLFileName = DataFromFileName(2) End If If ProjectFileNameProd = nTempProdId Then nProjId = nTempProjId nProdId = nTempProdId sTempBTLFileName = sBTLFileName Return True End If Else Return False End If End If End If Next Next End If Return False End Function Friend Shared Function VerifyProjectModification(CurrProject As ProjectFile, Type As ProjectType) As Boolean If IsNothing(CurrProject) Then Return False Dim bNewProject As Boolean = False Dim sProjectDirPath As String = "" If Type = ProjectType.PROJ Then bNewProject = CurrProject.NewProj sProjectDirPath = CurrProject.sProjDirPath Else bNewProject = CurrProject.NewProd sProjectDirPath = CurrProject.sProdDirPath End If ' verifico se progetto modificato, e chiedo se salvare If (EgtGetModified() Or bNewProject) Then If MessageBox.Show("Salvare le modifiche apportate al progetto?", "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then ' salvo proj If Type = ProjectType.PROJ Then Map.refProjManagerVM.Save() Else Map.refProdManagerVM.Save() End If Return True Else ' se da non salvare e nuovo proj If bNewProject Then ' lo elimino Directory.Delete(sProjectDirPath, True) If Type = ProjectType.PROD AndAlso CurrProject.m_nProdId = Map.refProjManagerVM.CurrProj.m_nProdId Then ' reset prod in path proj Map.refProjManagerVM.CurrProj.ResetProdId() End If CurrProject = Nothing End If EgtResetModified() Return False End If End If Return True End Function End Class