From 0f344f6c50a56a4c58fcacfbd061dead06fbf40e Mon Sep 17 00:00:00 2001 From: Nicola Pievani Date: Fri, 20 Sep 2019 14:53:23 +0000 Subject: [PATCH] EgtDOORCreator 2.1i1 : -> aggiunta di un bottone nella TextBoxNge per eliminare la geometria; -> sostituito il comando duplica con il comando Save As; -> gestione della multilettura di un file ddf. --- HardwareManager/Hardware.vb | 17 ++ HardwareManager/HardwarePageV.xaml | 20 +- HardwareManager/HardwarePageVM.vb | 78 ++++++- My Project/AssemblyInfo.vb | 4 +- OptionsWindow/OptionsViewModel.vb | 1 + Print/PrintWndVM.vb | 15 +- ProjectManager/ProjectManagerVM.vb | 218 +++++++++++++----- .../DimensioningPanel/DimensioningPanelVM.vb | 1 + Utility.vb | 133 +++++++++-- 9 files changed, 388 insertions(+), 99 deletions(-) diff --git a/HardwareManager/Hardware.vb b/HardwareManager/Hardware.vb index 263793a..ec6f9d3 100644 --- a/HardwareManager/Hardware.vb +++ b/HardwareManager/Hardware.vb @@ -1417,6 +1417,23 @@ Public Class Hardware Return False End Function + ' per caricare a video il nome del file nge + Public Function GetGeometryName() As String + For Each Compo In m_GroupChapters + For Each Param In Compo.CompoParamList + If Param.DDFName.Contains(".CGF") And TypeOf Param Is TextBoxNgeParam Then + Dim Text As TextBoxNgeParam = DirectCast(Param, TextBoxNgeParam) + If String.IsNullOrEmpty(Text.Value) Then + Return "" + Else + Return Text.Value + End If + End If + Next + Next + Return "" + End Function + ' per caricare a video il nome del file lua Public Function SetLuaFileInAggregate(sLuaFile As String, ByVal sDDFParam As String) As Boolean If String.IsNullOrWhiteSpace(sDDFParam) Then sDDFParam = ".Name" diff --git a/HardwareManager/HardwarePageV.xaml b/HardwareManager/HardwarePageV.xaml index d32d8ef..bbbe6ea 100644 --- a/HardwareManager/HardwarePageV.xaml +++ b/HardwareManager/HardwarePageV.xaml @@ -283,6 +283,7 @@ + + @@ -382,6 +388,7 @@ + @@ -569,10 +576,15 @@ Margin="0,2,2,2" ToolTip="{Binding ToolTipValue}"/> + diff --git a/HardwareManager/HardwarePageVM.vb b/HardwareManager/HardwarePageVM.vb index e6344d5..4eaaa3f 100644 --- a/HardwareManager/HardwarePageVM.vb +++ b/HardwareManager/HardwarePageVM.vb @@ -109,6 +109,7 @@ Public Class HardwarePageVM 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" @@ -174,23 +175,78 @@ Public Class HardwarePageVM Public Sub ImportGeometry() Dim sFilePath As String = String.Empty - Dim FolderBrowserDialog As New Microsoft.Win32.OpenFileDialog + + Dim FolderBrowserDialog As New System.Windows.Forms.OpenFileDialog() + FolderBrowserDialog.Title = "Open File Dialog" + FolderBrowserDialog.InitialDirectory = Path.GetDirectoryName(CurrHardware.CurrPath) 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)) + 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.Copy(sFilePath, DestFile, True) + File.Delete(FileNgeName) Catch ex As System.IO.IOException ' Error in copying: {0} - MessageBox.Show(String.Format(EgtMsg(50189), ex.Message)) + MessageBox.Show(String.Format("Error in deleting file! {0}", ex.Message)) Return End Try - CurrHardware.SetGeometryName(Path.GetFileName(DestFile)) - SetModified() - EnterRefresh() End If + CurrHardware.SetGeometryName("") + SetModified() + EnterRefresh() + Return End Sub ' ImportLua @@ -211,7 +267,7 @@ Public Class HardwarePageVM 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 + If String.Compare(sFilePath, 0, FileDialog.InitialDirectory, 0, FileDialog.InitialDirectory.Length(), True) <> 0 Then MessageBox.Show("Impossible to import a different hardware!", EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) Return End If diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb index 137402b..46815a2 100644 --- a/My Project/AssemblyInfo.vb +++ b/My Project/AssemblyInfo.vb @@ -72,5 +72,5 @@ Imports System.Windows ' by using the '*' as shown below: ' - - + + diff --git a/OptionsWindow/OptionsViewModel.vb b/OptionsWindow/OptionsViewModel.vb index 20ccc4c..8fd1c44 100644 --- a/OptionsWindow/OptionsViewModel.vb +++ b/OptionsWindow/OptionsViewModel.vb @@ -207,6 +207,7 @@ Public Class OptionsVM End If End Set End Property + Public Shared Sub SetIsCheckedWeight(IsChecked As Boolean) If IsChecked Then Part.IsCheckedWeight = Visibility.Visible diff --git a/Print/PrintWndVM.vb b/Print/PrintWndVM.vb index 4b67adc..2fdf022 100644 --- a/Print/PrintWndVM.vb +++ b/Print/PrintWndVM.vb @@ -239,6 +239,17 @@ Public Class HardwareDimension End Set End Property + Private m_NameHardwareDDF As String + Public Property NameHardwareDDF As String + Get + Return m_NameHardwareDDF + End Get + Set(value As String) + m_NameHardwareDDF = value + NotifyPropertyChanged("NameHardware") + End Set + End Property + Private m_IsActive As Boolean Public Property IsActive As Boolean Get @@ -268,7 +279,7 @@ Public Class HardwareDimension Set(value As Boolean) m_SelectedLayer = value PrintWndVM.TurnDimensioningLayer(m_NameLayer, m_SelectedLayer) - WriteMainPrivateProfileString("Dimensions", NameHardware, If(m_SelectedLayer, "1", "0")) + WriteMainPrivateProfileString("Dimensions", NameHardwareDDF, If(m_SelectedLayer, "1", "0")) Map.refSceneManagerVM.RefreshBtn() EgtZoom(ZM.ALL) NotifyPropertyChanged("SelectedLayer") @@ -278,7 +289,7 @@ Public Class HardwareDimension Public Sub SetSelectedLayer(value As Boolean) m_SelectedLayer = value PrintWndVM.TurnDimensioningLayer(m_NameLayer, m_SelectedLayer) - WriteMainPrivateProfileString("Dimensions", NameHardware, If(m_SelectedLayer, "1", "0")) + WriteMainPrivateProfileString("Dimensions", NameHardwareDDF, If(m_SelectedLayer, "1", "0")) NotifyPropertyChanged("SelectedLayer") End Sub diff --git a/ProjectManager/ProjectManagerVM.vb b/ProjectManager/ProjectManagerVM.vb index 4cc9173..df54fdc 100644 --- a/ProjectManager/ProjectManagerVM.vb +++ b/ProjectManager/ProjectManagerVM.vb @@ -218,6 +218,7 @@ Public Class ProjectManagerVM End Property Public Sub NewCmd() + Utility.OutLog(" +++ NewProject +++") Utility.UnLockDir() ' Gestisco porta corrente modificata If Not Map.refAssemblyManagerVM.ManageModified() Then Return @@ -228,23 +229,52 @@ Public Class ProjectManagerVM SaveFileDialog.Title = EgtMsg(50304) SaveFileDialog.Directory = IniFile.m_MyProjectDir SaveFileDialog.Extension = "\" + ' se annullo la creazione di un nuovo direttorio, rimango in quello attuale If Not SaveFileDialogWnd.ShowDialog Then - Map.refAssemblyManagerVM.Open(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) - Utility.LockDir(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) + Utility.OutLog("Annullata la creazione di un nuovo progetto") + If Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then + Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) + Utility.LockDir(Map.refAssemblyManagerVM.CurrProject.Name) + 'Map.refAssemblyManagerVM.Open(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) + End If Return End If ' controllo che il direttorio non esista Dim MsgResult As MessageBoxResult = MessageBoxResult.Yes If Directory.Exists(SaveFileDialog.FileName) Then - MsgResult = MessageBox.Show("Directory " & SaveFileDialog.FileName & " already exists! Do you want to overwrite it?", "Caution", MessageBoxButton.YesNo, MessageBoxImage.Asterisk) + If Utility.VerifyFileLocked(SaveFileDialog.FileName) Then + If Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then + Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) + Utility.LockDir(Map.refAssemblyManagerVM.CurrProject.Name) + End If + Return + End If + ' 50526 = Directory " & SaveFileDialog.FileName & " already exists! Do you want to overwrite it? + ' 50144 = Warning + String.Format(EgtMsg(50526), SaveFileDialog.FileName) + MsgResult = MessageBox.Show(String.Format(EgtMsg(50526), SaveFileDialog.FileName), EgtMsg(50144), MessageBoxButton.YesNo, MessageBoxImage.Asterisk) ' cancello il direttorio - Directory.Delete(SaveFileDialog.FileName, True) + Try + Directory.Delete(SaveFileDialog.FileName, True) + Utility.OutLog("Sovrascrittura delprogetto esistente : " & SaveFileDialog.FileName) + Catch ex As Exception + ' 50527 = Impossible to overwrite {0} + MessageBox.Show(String.Format(EgtMsg(50527), SaveFileDialog.FileName), EgtMsg(501001), MessageBoxButton.OK, MessageBoxImage.Error) + Return + End Try End If + ' se decido di non sovrascrivere allora rimango in quello attuale If MsgResult = MessageBoxResult.No Then - Map.refAssemblyManagerVM.Open(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) - Utility.LockDir(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) + Utility.OutLog("Annullata sovrascrittura delprogetto esistente : " & SaveFileDialog.FileName) + If Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then + Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) + Utility.LockDir(Map.refAssemblyManagerVM.CurrProject.Name) + 'Map.refAssemblyManagerVM.Open(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) + End If Return End If + + Utility.OutLog("Creazione nuovo progetto : " & SaveFileDialog.FileName) ' Creo nuovo progetto Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected Directory.CreateDirectory(SaveFileDialog.FileName) @@ -286,7 +316,13 @@ Public Class ProjectManagerVM End If ' apro la finestra di dialogo If saveFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then - ' ripulisco il nome da eventuali spazi + If Utility.VerifyFileLocked(Path.GetDirectoryName(saveFileDialog1.FileName), Path.GetFileNameWithoutExtension(saveFileDialog1.FileName)) Then + Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) + Utility.LockDir(Map.refAssemblyManagerVM.CurrProject.Name, Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) + Return + End If + Utility.OutLog("Creazione nuovo progetto : " & saveFileDialog1.FileName) + Utility.LockDir(Path.GetDirectoryName(saveFileDialog1.FileName), Path.GetFileNameWithoutExtension(saveFileDialog1.FileName)) Dim FilePath As String = Path.GetFileNameWithoutExtension(saveFileDialog1.FileName) saveFileDialog1.FileName = saveFileDialog1.FileName.Replace(FilePath, Trim(FilePath)) Dim FilePathComplete As String = saveFileDialog1.FileName @@ -307,10 +343,7 @@ Public Class ProjectManagerVM ' Seleziono AssembyName creato m_CurrProject.SelAssemblyName = Local_AssemblyName ' Creo nuovo assembly - If Map.refAssemblyManagerVM.ImportTemplate(sImportTemplate) Then - Utility.LockDir(Path.GetDirectoryName(FilePathComplete)) - Return - End If + Map.refAssemblyManagerVM.ImportTemplate(sImportTemplate) Map.refAssemblyManagerVM.NewCmd(Local_AssemblyName) ' carico il nome come Assemblato selezionato If Not OptionModule.m_DisableWindowOrder Then @@ -320,7 +353,6 @@ Public Class ProjectManagerVM ' tolgo la visualizzazione della lista dei nomi Map.refAssemblyManagerVM.VisibilityDoorList = Visibility.Collapsed CurrProject.NotifyPropertyChanged("Name") - Utility.LockDir(Path.GetDirectoryName(FilePathComplete)) End If End Sub @@ -339,6 +371,8 @@ Public Class ProjectManagerVM End Property Public Sub DeleteCmd() + Utility.OutLog(" +++ Delete +++") + Utility.UnLockDir() Map.refAssemblyManagerVM.RemoveAssembly() End Sub @@ -360,6 +394,7 @@ Public Class ProjectManagerVM End Sub Public Sub OpenProject(sFilePath As String) + Utility.OutLog(" +++ OpenProject +++") Utility.UnLockDir() ' se true carica una singola porta del progetto Dim bIsSingleDoor As Boolean = OptionModule.m_SingleDoor @@ -379,6 +414,16 @@ Public Class ProjectManagerVM End If If Directory.Exists(sFilePath) AndAlso Not bIsSingleDoor Then + ' se esiste un file in lettura con questo nome allora blocco tutto + If Utility.VerifyFileLocked(sFilePath, Path.GetFileNameWithoutExtension(sFilePathComplete)) Then + Utility.OutLog("Annullo l'apertura di : " & sFilePathComplete) + If Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then + Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) + Utility.LockDir(Map.refAssemblyManagerVM.CurrProject.Name) + 'Map.refAssemblyManagerVM.Open(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) + End If + Return + End If bValidPath = True ElseIf Directory.Exists(sFilePath) AndAlso bIsSingleDoor Then m_MruFiles.Remove(sFilePath) @@ -386,6 +431,16 @@ Public Class ProjectManagerVM ElseIf File.Exists(sFilePath) Then sFilePathComplete = sFilePath sFilePath = Path.GetDirectoryName(sFilePath) + ' se esiste un file in lettura con questo nome allora blocco tutto + If Utility.VerifyFileLocked(sFilePath, Path.GetFileNameWithoutExtension(sFilePathComplete)) Then + Utility.OutLog("Annullo l'apertura di : " & sFilePathComplete) + If Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then + Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) + Utility.LockDir(Map.refAssemblyManagerVM.CurrProject.Name) + 'Map.refAssemblyManagerVM.Open(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) + End If + Return + End If bValidPath = True Else ' elimino eventual FilePath inesistente dalla lista dei recenti @@ -395,7 +450,6 @@ Public Class ProjectManagerVM ' Se FilePath non valida If Not bValidPath Then - 'If OptionModule.m_SingleDoor OrElse Keyboard.Modifiers.HasFlag(ModifierKeys.Shift) Then If OptionModule.m_SingleDoor Then bIsSingleDoor = True @@ -423,6 +477,15 @@ Public Class ProjectManagerVM sFilePath = Path.GetDirectoryName(fd.FileName) ' salvo il nome completo del file sFilePathComplete = fd.FileName + ' se esiste un file in lettura con questo nome allora blocco tutto + If Utility.VerifyFileLocked(sFilePath, Path.GetFileNameWithoutExtension(sFilePathComplete)) Then + If Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then + Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) + Utility.LockDir(Map.refAssemblyManagerVM.CurrProject.Name, Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) + 'Map.refAssemblyManagerVM.Open(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) + End If + Return + End If Else ' dichiaro la finestra di scelta cartella di progetto Dim FolderBrowserDialog As New System.Windows.Forms.FolderBrowserDialog @@ -440,6 +503,10 @@ Public Class ProjectManagerVM End If ' salvo il nome del direttorio sFilePath = FolderBrowserDialog.SelectedPath + ' se esiste un file in lettura con questo nome allora blocco tutto + If Utility.VerifyFileLocked(sFilePath) Then + Return + End If End If End If @@ -497,6 +564,7 @@ Public Class ProjectManagerVM EgtNewFile() EgtZoom(ZM.ALL) End If + Utility.OutLog("Apertura file : " & CurrProject.SelAssemblyName.Name) ' carico il nome del direttorio e la visbilità della lista delle porte If bIsSingleDoor Then Map.refMainWindowVM.ProjectNameMsg = CurrProject.SelAssemblyName.Name @@ -518,7 +586,7 @@ Public Class ProjectManagerVM ' Map.refOptionsVM.MyProjectDir = sFilePath If bIsSingleDoor Then m_MruFiles.Add(CurrProject.SelAssemblyName.Name) - Utility.LockDir(Path.GetDirectoryName(CurrProject.SelAssemblyName.Name)) + Utility.LockDir(Path.GetDirectoryName(CurrProject.SelAssemblyName.Name), CurrProject.SelAssemblyName.GraphicName) Else m_MruFiles.Add(sFilePath) Utility.LockDir(sFilePath) @@ -633,15 +701,7 @@ Public Class ProjectManagerVM End Property Public Sub OpenLastProject() - '' Apro l'ultimo progetto - 'Dim CurrName As String = String.Empty - '' verifico se esiste una precedente selezione - 'If Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then - ' If Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) Then - ' CurrName = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name - ' End If - 'End If - + Utility.OutLog(" +++ OpenLastProject +++") Dim CurrProject As Project = Map.refAssemblyManagerVM.CurrProject ' carico il percorso dell'ultimo progetto salvato (sul file Config.ini) If IsNothing(CurrProject.Name) Then @@ -661,15 +721,20 @@ Public Class ProjectManagerVM ' carico la singola porta dell'ultimo progetto come unica porta If OptionModule.m_SingleDoor Then Dim Local_Assembly As New AssemblyName - If File.Exists(OptionModule.m_sLastProject) Then + ' verifico che il file selezionato esista e non sia in lettura + If File.Exists(OptionModule.m_sLastProject) And + Not Utility.VerifyFileLocked(Path.GetDirectoryName(OptionModule.m_sLastProject), Path.GetFileNameWithoutExtension(OptionModule.m_sLastProject)) Then Local_Assembly.Name = OptionModule.m_sLastProject Local_Assembly.IsModified = False CurrProject.AssemblyList.Add(Local_Assembly) Else ' Aggiungo il primo nome all'elenco Dim DDFFileArray() As String = Directory.GetFiles(CurrProject.Name) + Utility.OutLog("Cerco il primo file disponibile nel progetto : " & CurrProject.Name) For DDFIndex = 0 To DDFFileArray.Count - 1 - If Path.GetExtension(DDFFileArray(DDFIndex)).ToLower = ".ddf" Then + ' verifico che il file sia un ddf e non sia in lettura - se il file che trovo è in lettura restituisce un messaggio !! da togliere !! + If Path.GetExtension(DDFFileArray(DDFIndex)).ToLower = ".ddf" And + Not Utility.VerifyFileLocked(Path.GetDirectoryName(DDFFileArray(DDFIndex)), DDFFileArray(DDFIndex), False) Then OptionModule.m_sLastProject = DDFFileArray(DDFIndex) Local_Assembly.Name = OptionModule.m_sLastProject Local_Assembly.IsModified = False @@ -679,7 +744,16 @@ Public Class ProjectManagerVM Next End If Map.refAssemblyManagerVM.VisibilityDoorList = Visibility.Collapsed + Else + '------------------------------------------------------------------------------------------------- + ' se esiste un file in lettura con questo nome allora blocco tutto + If Utility.VerifyFileLocked(CurrProject.Name) Then + Utility.OutLog("Annullata apertura ultimo progetto : " & CurrProject.Name) + Map.refMainWindowVM.AssemblyManagerControl.Visibility = Visibility.Collapsed + Return + End If + '------------------------------------------------------------------------------------------------- ' carico un vettore con i file della cartella Dim DDFFileArray() As String = Directory.GetFiles(CurrProject.Name) ' ripulisco il nome della porta (cancello tutto il percorso del file lasciando solo il nome del file) @@ -699,29 +773,22 @@ Public Class ProjectManagerVM CurrProject.NotifyPropertyChanged("Name") CurrProject.NotifyPropertyChanged("AssemblyList") Map.refMainWindowVM.ProjectNameMsg = CurrProject.Name - Utility.LockDir(CurrProject.Name) - 'Map.refOptionsVM.MyProjectDir = CurrProject.Name - 'Map.refMainWindowVM.ModifyTitle(False) + If Not OptionModule.m_SingleDoor Then + Utility.LockDir(CurrProject.Name) + End If ' Se c'è almeno una porta la visualizzo If CurrProject.AssemblyList.Count > 0 Then - 'If Not String.IsNullOrEmpty(CurrName) Then - ' ' ricerco nell'elenco la porta salvata - ' For IndexListAss As Integer = 0 To CurrProject.AssemblyList.Count - 1 - ' If CurrName = CurrProject.AssemblyList(IndexListAss).Name Then - ' CurrProject.SelAssemblyName = CurrProject.AssemblyList(IndexListAss) - ' Return - ' End If - ' Next - 'End If - - ' provo a caricare l'ultimo file aperto + ' provo a caricare l'ultimo file aperto cercando nell'elenco dei file del progetto If File.Exists(OptionModule.m_sLastProject) Then For Each ItemFile In CurrProject.AssemblyList Dim Index As Integer = 1 If ItemFile.Name = OptionModule.m_sLastProject Then CurrProject.SelAssemblyName = ItemFile - If OptionModule.m_SingleDoor Then Map.refMainWindowVM.ProjectNameMsg = OptionModule.m_sLastProject + If OptionModule.m_SingleDoor Then + Map.refMainWindowVM.ProjectNameMsg = OptionModule.m_sLastProject + Utility.LockDir(CurrProject.Name, CurrProject.SelAssemblyName.GraphicName) + End If Return End If Index = Index + 1 @@ -730,7 +797,10 @@ Public Class ProjectManagerVM ' se non esiste il file allora provo a caricare il primo della lista If File.Exists(CurrProject.AssemblyList(0).Name) Then CurrProject.SelAssemblyName = CurrProject.AssemblyList(0) - If OptionModule.m_SingleDoor Then Map.refMainWindowVM.ProjectNameMsg = CurrProject.AssemblyList(0).Name + If OptionModule.m_SingleDoor Then + Utility.LockDir(CurrProject.Name, CurrProject.SelAssemblyName.GraphicName) + Map.refMainWindowVM.ProjectNameMsg = CurrProject.AssemblyList(0).Name + End If Else Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected End If @@ -992,6 +1062,7 @@ Public Class ProjectManagerVM End Property Public Sub Duplica() + Utility.OutLog(" +++ SaveAs +++") ' questo test potrebbe essere sostituito con il controllo : If IsNothing(Map.refPartPageVM.CurrPart) Then Return If IsNothing(Map.refAssemblyManagerVM.CurrProject) OrElse IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then @@ -1007,21 +1078,42 @@ Public Class ProjectManagerVM Dim LocalCurrProject As New Project LocalCurrProject = Map.refAssemblyManagerVM.CurrProject ' Creo nuovo assembly + Dim SaveFileDialog As New System.Windows.Forms.SaveFileDialog() + SaveFileDialog.Filter = "(*.ddf) |*.ddf" + SaveFileDialog.FilterIndex = 2 + ' avvio la ricerca nell'ultimo direttorio aperto + SaveFileDialog.InitialDirectory = LocalCurrProject.Name + ' apro la finestra di dialogo + If SaveFileDialog.ShowDialog() <> System.Windows.Forms.DialogResult.OK Then + Utility.OutLog("Annullata creazione di una copia di : " & Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) + Return + ElseIf SaveFileDialog.InitialDirectory <> Path.GetDirectoryName(SaveFileDialog.FileName) And Not OptionModule.m_SingleDoor Then + ' 50528 = Impossibile salvare file fuori dal progetto! Errore + MessageBox.Show(EgtMsg(50528), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Exclamation) + Utility.OutLog("Annullata creazione di una copia di : " & Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) + Return + End If + + ' controllo che il direttorio non esista + '--------------------------------------------------------------------------------------------------------------------------------------- + ' in questa versione viene visualizzata solo la casella per inserire il nome del file + + ' 'Lancio la finestra per chiedere il nome dell'assemblato + ' Dim SaveFileDialog As New EgtWPFLib5.SaveFileDialogVM + ' Dim SaveFileDialogWnd As New EgtWPFLib5.SaveFileDialogV(Application.Current.MainWindow, SaveFileDialog) + ' ' New Door + ' SaveFileDialog.Title = EgtMsg(50113) + ' SaveFileDialog.Directory = LocalCurrProject.Name + ' SaveFileDialog.Extension = DDF_EXTENSION + ' ' Se annullo esco + ' If Not SaveFileDialogWnd.ShowDialog Then Return + + '--------------------------------------------------------------------------------------------------------------------------------------- - ' Lancio la finestra per chiedere il nome dell'assemblato - 'Dim SaveFileDialog As New MySaveFileDialogVM - Dim SaveFileDialog As New EgtWPFLib5.SaveFileDialogVM - Dim SaveFileDialogWnd As New EgtWPFLib5.SaveFileDialogV(Application.Current.MainWindow, SaveFileDialog) - ' New Door - SaveFileDialog.Title = EgtMsg(50113) - SaveFileDialog.Directory = LocalCurrProject.Name - SaveFileDialog.Extension = DDF_EXTENSION - ' Se annullo esco - If Not SaveFileDialogWnd.ShowDialog Then Return Dim FilePath As String = Path.GetFileNameWithoutExtension(SaveFileDialog.FileName) SaveFileDialog.FileName = SaveFileDialog.FileName.Replace(FilePath, Trim(FilePath)) ' Controllo se il nome della porta ha estensione - If Path.HasExtension(SaveFileDialog.FileName) Then + If Path.HasExtension(SaveFileDialog.FileName) Then Dim sExtension As String = Path.GetExtension(SaveFileDialog.FileName) If Not sExtension.ToLower = DDF_EXTENSION Then SaveFileDialog.FileName = SaveFileDialog.FileName.Replace(sExtension, DDF_EXTENSION) @@ -1029,12 +1121,19 @@ Public Class ProjectManagerVM Else SaveFileDialog.FileName &= DDF_EXTENSION End If + + If OptionModule.m_SingleDoor Then + If Utility.VerifyFileLocked(Path.GetDirectoryName(SaveFileDialog.FileName), Path.GetFileNameWithoutExtension(SaveFileDialog.FileName)) Then + Utility.OutLog("Annullata creazione di una copia di : " & Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name & " -> " & SaveFileDialog.FileName) + Return + End If + 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 LocalCurrProject.AssemblyList.Count - 1 If LocalCurrProject.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 @@ -1045,6 +1144,7 @@ Public Class ProjectManagerVM ' elimino la porta esistente If File.Exists(SaveFileDialog.FileName) Then Try + Utility.OutLog("Sovrascrivo file : " & SaveFileDialog.FileName) File.Delete(SaveFileDialog.FileName) Catch ex As FileNotFoundException ' non è un problema @@ -1052,16 +1152,20 @@ Public Class ProjectManagerVM ' non è un problema End Try End If + ' elimino dalla lista LocalCurrProject.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 LocalCurrProject.AssemblyList.Add(Local_AssemblyName) + ' Seleziono AssembyName creato Try + Utility.OutLog("Creazione copia : " & Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name & " -> " & Local_AssemblyName.Name) File.Copy(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name, Local_AssemblyName.Name, True) Catch ex As System.IO.IOException ' Error in copying: {0} @@ -1072,12 +1176,13 @@ Public Class ProjectManagerVM End Try LocalCurrProject.SelAssemblyName = Local_AssemblyName Map.refAssemblyManagerVM.Save(LocalCurrProject.SelAssemblyName) - Map.refAssemblyManagerVM.Open(LocalCurrProject.AssemblyList(LocalCurrProject.AssemblyList.Count - 1)) + 'Map.refAssemblyManagerVM.Open(LocalCurrProject.AssemblyList(LocalCurrProject.AssemblyList.Count - 1)) If OptionModule.m_SingleDoor Then m_MruFiles.Add(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) - Utility.LockDir(Path.GetDirectoryName(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name)) + Utility.LockDir(Path.GetDirectoryName(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name), Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Else m_MruFiles.Add(Map.refAssemblyManagerVM.CurrProject.Name) + Utility.LockDir(Path.GetDirectoryName(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name)) End If End Sub @@ -1098,6 +1203,7 @@ Public Class ProjectManagerVM Public Sub GoToHardwarePage() ' se decido di annullare l'operazione di salvataggio If Not Map.refAssemblyManagerVM.ManageModified() Then Return + Utility.OutLog(" +++ HardwarePage +++") ' prima di continuare salvo il riferimento all'ultima cartella aperta Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nHardwarePage ' nascondo la visibilità del bottone goback dalla lista dei bottoni @@ -1186,7 +1292,7 @@ Public Class ProjectManagerVM End Property Public Sub CreateAssembly() - Map.refAssemblyPageVM.CurrAssembly.CreateAssembly() + Map.refAssemblyPageVM.CurrAssembly.CreateAssembly() End Sub #End Region ' CreateAssemblyCommand diff --git a/SceneManager/DimensioningPanel/DimensioningPanelVM.vb b/SceneManager/DimensioningPanel/DimensioningPanelVM.vb index 6b45f14..68cf5de 100644 --- a/SceneManager/DimensioningPanel/DimensioningPanelVM.vb +++ b/SceneManager/DimensioningPanel/DimensioningPanelVM.vb @@ -54,6 +54,7 @@ Public Class DimensioningPanelVM If Not String.IsNullOrWhiteSpace(CurrNameLayer) Then LocalHardware = New HardwareDimension LocalHardware.NameHardware = CompoType.Name + LocalHardware.NameHardwareDDF = CompoType.DDFName LocalHardware.NameLayer = CurrNameLayer LocalHardware.SetSelectedLayer(GetMainPrivateProfileInt("Dimensions", LocalHardware.NameHardware, 0) <> 0) HardwareDimensionList.Add(LocalHardware) diff --git a/Utility.vb b/Utility.vb index 500d951..a7f8de8 100644 --- a/Utility.vb +++ b/Utility.vb @@ -5,38 +5,123 @@ Imports System.Text.RegularExpressions Imports System.IO Public Module Utility - Friend CurrDirLock As String - Friend bIsLock As Boolean = False + Dim PrintMyLog As Boolean = False + Dim FisrtLog As Boolean = False + Dim m_CurrLockFile As String + Dim m_bIsLock As Boolean = False + Dim m_StopSaving As Boolean = False - ' apertura di un file nel direttorio specificato - Public Function LockDir(ByVal CurrDirectory As String) As Boolean - If bIsLock Then UnLockDir() - If Not Directory.Exists(CurrDirectory) Then - bIsLock = False - Return False + Public ReadOnly Property StopSaving As Boolean + Get + Return m_StopSaving + End Get + End Property + +#Region "Blocca file/progetto" + + ' CurrFile deve arrivare già senza estensione! + Private Function CrateFileLock(ByVal CurrDirectory As String, Optional ByVal CurrFile As String = "") As String + Dim sLockFile As String = CurrDirectory & "\Lock_Project.txt" + If Not String.IsNullOrEmpty(CurrFile) Then + sLockFile = CurrDirectory & "\Lock_Project_" & CurrFile & ".txt" End If - CurrDirLock = CurrDirectory - Dim sLockFile As String = CurrDirectory & "\~Lock_Project~.txt" - FileSystem.FileOpen(1, sLockFile, OpenMode.Binary) - FileSystem.FilePut(1, "Directory in reading by EgtDOORCreator.") - FileSystem.Lock(1) - bIsLock = True - Return True + Return sLockFile End Function - ' chiusura del file "~Lock_Project~.txt" - Public Function UnLockDir() As Boolean - If Not bIsLock Then Return False - Unlock(1) - FileClose(1) - bIsLock = False + Public Function VerifyFileLocked(ByVal CurrDirectory As String, Optional ByVal CurrFile As String = "", Optional ByVal SendMsg As Boolean = True) As Boolean + Dim sLockFile As String = CrateFileLock(CurrDirectory, CurrFile) + If File.Exists(sLockFile) Then + ' leggere il nome dell'utente + If OptionModule.m_SingleDoor Then + If SendMsg Then + ' file in reading by another EgtDOORCreator. + Dim sMsg As String = String.Format(EgtMsg(50524), sLockFile) + MessageBox.Show(sMsg, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Asterisk) + End If + OutLog("File in reading : " & sLockFile) + Else + If SendMsg Then + ' directory in reading by another EgtDOORCreator. + Dim sMsg As String = String.Format(EgtMsg(50525), sLockFile) + MessageBox.Show(sMsg, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Asterisk) + End If + OutLog("Directoru in reading : " & CurrDirectory) + End If + m_StopSaving = True + 'Map.refMainWindowVM.AssemblyManagerControl.Visibility = Visibility.Collapsed + 'Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected + Return True + End If + Return False + End Function + + ' apertura di un file nel direttorio specificato + Public Function LockDir(ByVal CurrDirectory As String, Optional ByVal CurrFile As String = "") As Boolean + If m_bIsLock Then UnLockDir() + ' costruisco il nome del nuovo file di lock + If Not Directory.Exists(CurrDirectory) Then + m_bIsLock = False + Return False + End If + Dim sLockFile As String = CrateFileLock(CurrDirectory, CurrFile) + m_CurrLockFile = sLockFile + m_StopSaving = False + 'If VerifyFileLocked(CurrDirectory, CurrFile) Then Return False + Map.refMainWindowVM.AssemblyManagerControl.Visibility = Visibility.Visible Try - File.Delete(CurrDirLock & "\~Lock_Project~.txt") + Dim NomeUtente As String = Environment.MachineName & "/" & Environment.UserName + File.WriteAllText(sLockFile, NomeUtente, Text.Encoding.UTF8) + 'File.Open(sLockFile, FileMode.Open) + 'File.SetAccessControl(sLockFile, System.Security.AccessControl.FileSecur) + FileSystem.FileOpen(1, sLockFile, OpenMode.Binary) + FileSystem.FilePut(1, True) + FileSystem.Lock(1) + m_bIsLock = True + If String.IsNullOrEmpty(CurrFile) Then + OutLog("Lock directory : " & m_CurrLockFile) + Else + OutLog("Lock file : " & m_CurrLockFile) + End If + Catch ex As Exception End Try Return True End Function + ' chiusura del file "Lock_Project.txt" + Public Function UnLockDir() As Boolean + If Not m_bIsLock Then Return False + ' se esiste chiudo il file lockdir della porta corrente + Try + Unlock(1) + FileClose(1) + m_bIsLock = False + OutLog("UnLock : " & m_CurrLockFile) + Catch ex As Exception + End Try + Try + File.Delete(m_CurrLockFile) + Catch ex As Exception + End Try + Return True + End Function + +#End Region ' Blocca file/progetto + + Public Sub OutLog(sMsg As String) + FisrtLog = True + Dim OutLogFile As String = IniFile.m_sTempDir & "\MyOutLog.txt" + If PrintMyLog Then + If Not File.Exists(OutLogFile) And FisrtLog Then + File.WriteAllText(OutLogFile, sMsg & Environment.NewLine) + FisrtLog = False + Else + File.AppendAllText(OutLogFile, sMsg & Environment.NewLine) + End If + End If + EgtOutLog(sMsg) + End Sub + ' dato il nome della componete ricerco il file di configurazione associato Public Function SearchFileConfig(ByRef FrameCompoFile As String, ByRef FrameCompoFileConfig As String) As Boolean Dim CurrDir() As String = FrameCompoFile.Split("\"c) @@ -225,7 +310,7 @@ Public Module Utility Friend Function InchesToMm(ByRef sMeasure As String) As Boolean Dim dVal As Double = 0.0 If Not StringToDouble(sMeasure, dVal) Then Return False - dVal = dVal * 25.4 + dVal = dVal * ONEINCH sMeasure = LenToString(dVal, 3) Return True End Function @@ -233,7 +318,7 @@ Public Module Utility Friend Function MmToInches(ByRef sMeasure As String) As Boolean Dim dVal As Double = 0.0 If Not StringToDouble(sMeasure, dVal) Then Return False - dVal = dVal / 25.4 + dVal = dVal / ONEINCH sMeasure = LenToString(dVal, 4) Return True End Function