Imports combit.ListLabel25 Imports combit.ListLabel25.DataProviders Imports System.Collections.ObjectModel Imports System.Collections.Generic Imports System.ComponentModel Imports System.IO Imports EgtUILib Imports EgtWPFLib5 Imports Ionic.Zip Public Class ProjectManagerVM Implements INotifyPropertyChanged #Region "FIELDS & PROPERTIES" Friend m_CurrProject As Project Friend m_MruFiles As New MruList Public ReadOnly Property MruFileNames As ObservableCollection(Of String) Get Return m_MruFiles.FileNames End Get End Property Public ReadOnly Property DisableHM As Visibility Get If OptionModule.m_DisableHM Then Return Visibility.Visible Else Return Visibility.Collapsed End If End Get End Property Public ReadOnly Property VisibilityDeleteDDF As Visibility Get If OptionModule.m_SingleDoor Then Return Visibility.Visible Else Return Visibility.Collapsed End If End Get End Property Public ReadOnly Property VisibilityTemplate As Visibility Get If OptionModule.m_DisableTemplate Then Return Visibility.Collapsed Else Return Visibility.Visible End If End Get End Property Public ReadOnly Property DeleteProjectVisibility As Visibility Get If OptionModule.m_SingleDoor Then Return Visibility.Visible End If If OptionModule.m_DeleteProject Then Return Visibility.Visible Else Return Visibility.Collapsed End If End Get End Property Public ReadOnly Property VisibilityEgtCAM As Visibility Get If String.IsNullOrEmpty(IniFile.m_sEgtCam5EXEPath) Then Return Visibility.Collapsed ElseIf Not File.Exists(IniFile.m_sEgtCam5EXEPath) Then Return Visibility.Collapsed ElseIf File.Exists(IniFile.m_sEgtCam5EXEPath) Then Return Visibility.Visible Else Return Visibility.Collapsed End If End Get 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 Private m_DeleteProjectImg As String = "/Resources/TopCommandBar/Delete.png" Public ReadOnly Property DeleteProjectImg As String Get If Not OptionModule.m_SingleDoor Then m_DeleteProjectImg = "/Resources/TopCommandBar/DeleteDir.png" End If Return m_DeleteProjectImg End Get End Property Private m_NewProjectImg As String = "/Resources/TopCommandBar/NewFile.png" Public ReadOnly Property NewProjectImg As String Get If Not OptionModule.m_SingleDoor Then m_NewProjectImg = "/Resources/TopCommandBar/NewDir.png" End If Return m_NewProjectImg End Get End Property Public ReadOnly Property EnableProjectManager As Boolean Get If Not IsNothing(Map.refInstrumentPanelVM) Then Return Map.refInstrumentPanelVM.EnablePage Else Return True End If End Get End Property ' se in sola lettura il programma allora abilito solo i camndi Apertura e Stampa Public ReadOnly Property EnableModifyDDF As Boolean Get Return Not OptionModule.ReadOnlyDDF End Get End Property ' Definizione comandi Private m_cmdNew As ICommand Private m_cmdDelete As ICommand Private m_cmdOpen As ICommand Private m_cmdOpenMruFile As ICommand Private m_cmdReload As ICommand Private m_cmdSave As ICommand Private m_cmdSaveAs As ICommand Private m_cmdInsert As ICommand Private m_cmdImport As ICommand Private m_cmdExport As ICommand Private m_cmdPrint As ICommand Private m_cmdOptions As ICommand Private m_CmdLastProject As ICommand Private m_cmdSendFeedback As ICommand Private m_CmdCreateTemplate As ICommand Private m_cmdGuide As ICommand Private m_cmdCopy As ICommand Private m_cmdDuplica As ICommand Private m_cmdHardware As ICommand Private m_cmdRefreshDir As ICommand Private m_cmdCreateAssembly As ICommand Private m_CmdOpenCam 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 DeleteToolTip As String Get ' Delete Return EgtMsg(50126) End Get End Property Public ReadOnly Property OpenToolTip As String Get Return EgtMsg(MSG_TOPCOMMANDBAR + 2) End Get End Property Public ReadOnly Property ReloadToolTip As String Get ' 50421 = Reload Directories Return EgtMsg(50421) End Get End Property Public ReadOnly Property SaveToolTip As String Get Return EgtMsg(MSG_TOPCOMMANDBAR + 3) End Get End Property Public ReadOnly Property SaveAsToolTip As String Get Return EgtMsg(MSG_TOPCOMMANDBAR + 4) End Get End Property Public ReadOnly Property InsertToolTip As String Get Return EgtMsg(MSG_TOPCOMMANDBAR + 5) End Get End Property Public ReadOnly Property ImportToolTip As String Get Return EgtMsg(MSG_TOPCOMMANDBAR + 6) 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 TemplateDoorToolTip As String Get Return EgtMsg(MSG_MAINWINDOW + 223) 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 CopyToolTip As String Get ' Export to machine Return EgtMsg(50416) End Get End Property Public ReadOnly Property OpenCamToolTip As String Get Return "EgtCam5" End Get End Property Public ReadOnly Property DuplicaToolTip As String Get ' Save As Return EgtMsg(50422) End Get End Property Public ReadOnly Property PrintToolTip As String Get ' Print Return EgtMsg(50411) End Get End Property Public ReadOnly Property HardwareToolTip As String Get ' Hardware Return EgtMsg(50413).ToUpper End Get End Property Public ReadOnly Property DoorToolTip As String Get ' Door Return EgtMsg(50308).ToUpper End Get End Property Public ReadOnly Property CreateAssemblyToolTip As String Get ' Create Assembly Return EgtMsg(50420) End Get End Property #End Region ' ToolTip #End Region ' Fields & Properties #Region "CONSTRUCTOR" Sub New() Map.SetRefProjectManagerVM(Me) ' Impostazioni MruLists m_MruFiles.Init(S_MRUFILES, 8) End Sub #End Region ' Constructor #Region "COMMANDS" #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() Utility.OutLog(" +++ NewProject +++") ' Gestisco porta corrente modificata If Not Map.refAssemblyManagerVM.ManageModified() Then Return ' Modalità Progetto If Not OptionModule.m_SingleDoor Then Utility.UnLockDir() ' Richiedo il nome del progetto (cioè la directory da creare) Dim SaveFileDialog As New MySaveFileDialogVM Dim SaveFileDialogWnd As New EgtWPFLib5.SaveFileDialogV(Application.Current.MainWindow, SaveFileDialog) SaveFileDialog.Title = EgtMsg(50304) SaveFileDialog.Directory = IniFile.m_MyProjectDir SaveFileDialog.Extension = "\" ' se non esite il direttorio blocco la creazione If Not Directory.Exists(IniFile.m_MyProjectDir) Then ' 50562=Folder {0} does not exist. Check in OptionPage. MessageBox.Show(String.Format(EgtMsg(50562), IniFile.m_MyProjectDir), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) Utility.OutLog("Annullata la creazione di un nuovo progetto") If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then If Not String.IsNullOrEmpty(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Then If Not Utility.IsFileLocked(Map.refAssemblyManagerVM.CurrProject.Name, Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Then Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) Map.refAssemblyManagerVM.CurrProject.SelAssemblyName = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName End If End If End If Return End If ' se annullo la creazione di un nuovo direttorio, rimango in quello attuale (verifico che l'ultimo file non sia già in lettura) If Not SaveFileDialogWnd.ShowDialog Then Utility.OutLog("Annullata la creazione di un nuovo progetto") If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then If Not String.IsNullOrEmpty(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Then If Not Utility.IsFileLocked(Map.refAssemblyManagerVM.CurrProject.Name, Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Then Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) Map.refAssemblyManagerVM.CurrProject.SelAssemblyName = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName End If End If End If Return End If ' Se decido di continuare la creazione controllo che il direttorio non esista Dim MsgResult As MessageBoxResult = MessageBoxResult.Yes If Directory.Exists(SaveFileDialog.FileName) Then ' se il direttorio contiene almento un file di .lock esco If Utility.IsFileLocked(SaveFileDialog.FileName) Then If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then If Not String.IsNullOrEmpty(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Then If Not Utility.IsFileLocked(Map.refAssemblyManagerVM.CurrProject.Name, Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Then Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) Map.refAssemblyManagerVM.CurrProject.SelAssemblyName = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName End If End If End If Return End If ' Vuoi sovrascrivere il direttorio? String.Format(EgtMsg(50526), SaveFileDialog.FileName) MsgResult = MessageBox.Show(String.Format(EgtMsg(50526), SaveFileDialog.FileName), EgtMsg(50144), MessageBoxButton.YesNo, MessageBoxImage.Asterisk) ' se decido di non cancellare il direttorio esco If MsgResult = MessageBoxResult.No Then Utility.OutLog("Annullata sovrascrittura delprogetto esistente : " & SaveFileDialog.FileName) If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then If Not String.IsNullOrEmpty(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Then If Not Utility.IsFileLocked(Map.refAssemblyManagerVM.CurrProject.Name, Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Then Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) Map.refAssemblyManagerVM.CurrProject.SelAssemblyName = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName End If End If End If Return End If ' cancello il direttorio Try Directory.Delete(SaveFileDialog.FileName, True) Utility.OutLog("Sovrascrivo il progetto : " & 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 Utility.OutLog("Creazione nuovo progetto : " & SaveFileDialog.FileName) ' Creo nuovo progetto Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected Directory.CreateDirectory(SaveFileDialog.FileName) Dim CurrProject As Project = New Project ' salvo il riferimento al progetto corrente m_CurrProject = CurrProject ' salvo path progetto If SaveFileDialog.FileName.EndsWith("\") Then SaveFileDialog.FileName = SaveFileDialog.FileName.Remove(SaveFileDialog.FileName.LastIndexOf("\")) End If CurrProject.Name = SaveFileDialog.FileName ' Ripulisco lista porte CurrProject.AssemblyList.Clear() EgtNewFile() EgtZoom(ZM.ALL) Map.refAssemblyManagerVM.CurrProject = CurrProject Map.refMainWindowVM.ProjectNameMsg = CurrProject.Name ' Creo nuova porta Map.refAssemblyManagerVM.AddAssembly() ' Map.refOptionsVM.MyProjectDir = CurrProject.Name If Not IsNothing(CurrProject.SelAssemblyName) AndAlso Not String.IsNullOrEmpty(CurrProject.SelAssemblyName.GraphicName) Then Map.refAssemblyManagerVM.CurrProject.SelAssemblyName = CurrProject.SelAssemblyName End If Map.refAssemblyManagerVM.VisibilityDoorList = Visibility.Visible Return End If '------------------------------------------------------------------------------------------------------------------------- 'Prima di tutto chiedo se vuole aprire un template Dim sImportTemplate As String = Map.refAssemblyManagerVM.ShowDialogImportTemplate ' dichiaro la finestra di dialogo Dim saveFileDialog1 As New System.Windows.Forms.SaveFileDialog() saveFileDialog1.Filter = "(*.ddf) |*.ddf" saveFileDialog1.FilterIndex = 2 saveFileDialog1.InitialDirectory = Map.refOptionsVM.MyProjectDir ' carico l'ultimo file, se questo procediento fallisce allora parto dal direttorio inserito di default If File.Exists(OptionModule.m_sLastProject) Then saveFileDialog1.InitialDirectory = Path.GetDirectoryName(OptionModule.m_sLastProject) ElseIf Path.HasExtension(OptionModule.m_sLastProject) AndAlso Directory.Exists(Path.GetDirectoryName(OptionModule.m_sLastProject)) Then saveFileDialog1.InitialDirectory = Path.GetDirectoryName(OptionModule.m_sLastProject) ElseIf Not Path.HasExtension(OptionModule.m_sLastProject) AndAlso Directory.Exists(OptionModule.m_sLastProject) Then saveFileDialog1.InitialDirectory = OptionModule.m_sLastProject End If ' apro la finestra di dialogo If saveFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then ' se decido di salvare If Utility.IsFileLocked(Path.GetDirectoryName(saveFileDialog1.FileName), Path.GetFileNameWithoutExtension(saveFileDialog1.FileName)) Then ' apro l'ultimo progetto valido If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then If Not String.IsNullOrEmpty(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Then Dim bShowMessage As Boolean = False If Not Utility.IsFileLocked(Map.refAssemblyManagerVM.CurrProject.Name, Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName, bShowMessage) Then Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) Map.refAssemblyManagerVM.CurrProject.SelAssemblyName = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName End If End If End If Return End If Utility.UnLockDir() ' elimino eventuali file con lo stesso nome If File.Exists(saveFileDialog1.FileName) Then Try File.Delete(saveFileDialog1.FileName) Catch ex As Exception Utility.OutLog("Impossibilie sovrascrivere il file: " & saveFileDialog1.FileName) Return End Try End If Dim FilePath As String = Path.GetFileNameWithoutExtension(saveFileDialog1.FileName) saveFileDialog1.FileName = saveFileDialog1.FileName.Replace(FilePath, Trim(FilePath)) Dim FilePathComplete As String = saveFileDialog1.FileName Dim CurrProject As Project = New Project If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then CurrProject = Map.refAssemblyManagerVM.CurrProject End If ' salvo il riferimento al progetto corrente m_CurrProject = CurrProject ' salvo path progetto CurrProject.Name = Path.GetDirectoryName(FilePathComplete) ' Ripulisco lista porte CurrProject.AssemblyList.Clear() EgtNewFile() EgtZoom(ZM.ALL) Map.refMainWindowVM.ProjectNameMsg = CurrProject.Name ' creo un nuovo assemblato Dim Local_AssemblyName As New AssemblyName Local_AssemblyName.Name = FilePathComplete Local_AssemblyName.OrigTemplate = sImportTemplate Local_AssemblyName.GraphicName = Path.GetFileNameWithoutExtension(FilePathComplete) m_CurrProject.AssemblyList.Add(Local_AssemblyName) ' Seleziono AssembyName creato m_CurrProject.SelAssemblyName = Local_AssemblyName ' carico il nome come Assemblato selezionato If Not OptionModule.m_DisableWindowOrder Then Dim OrderWindow As New OrderV(Application.Current.MainWindow, New OrderVM()) OrderWindow.ShowDialog() End If ' tolgo la visualizzazione della lista dei nomi Map.refAssemblyManagerVM.CurrProject = CurrProject Dim bImportedTemplate As Boolean = Map.refAssemblyManagerVM.ImportTemplate(sImportTemplate) ' Creo nuovo assembly Map.refAssemblyManagerVM.NewCmd(Local_AssemblyName) Utility.OutLog("Creazione nuovo progetto : " & saveFileDialog1.FileName) Utility.LockDir(Path.GetDirectoryName(saveFileDialog1.FileName), Path.GetFileNameWithoutExtension(saveFileDialog1.FileName)) Map.refAssemblyManagerVM.VisibilityDoorList = Visibility.Collapsed CurrProject.NotifyPropertyChanged("Name") ' Se l'importazione del template è andata a buon fine allora salvo If bImportedTemplate Then Save() End If End If End Sub #End Region ' NewCommand #Region "DeleteCommand" Public ReadOnly Property DeleteCommand As ICommand Get If m_cmdDelete Is Nothing Then m_cmdDelete = New Command(AddressOf DeleteCmd) End If Return m_cmdDelete End Get End Property Public Sub DeleteCmd() Utility.OutLog(" +++ Delete +++") Utility.UnLockDir() If OptionModule.m_SingleDoor Then Map.refAssemblyManagerVM.RemoveAssembly() Else DeleteProject() End If End Sub Public Sub DeleteProject() If Not OptionModule.m_DeleteProject Then Return If IsNothing(Map.refAssemblyManagerVM.CurrProject) OrElse String.IsNullOrEmpty(Map.refAssemblyManagerVM.CurrProject.Name) Then ' 50535 = Impossible to delete a project if there is not a project! MessageBox.Show(EgtMsg(50535), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning) Return End If ' 50536 = Do you want to delete entire project? If MessageBox.Show(EgtMsg(50536), EgtMsg(50144), MessageBoxButton.YesNo, MessageBoxImage.Asterisk) <> MessageBoxResult.Yes Then Return End If ' svuoto il direttorio corrente dei file If Not DeleteDDFFile(Map.refAssemblyManagerVM.CurrProject.Name) Then Return End If ' elimina il direttorio solo se è vuoto Try If Directory.GetFiles(Map.refAssemblyManagerVM.CurrProject.Name).Count = 0 Then Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected EgtNewFile() EgtZoom(ZM.ALL) Directory.Delete(Map.refAssemblyManagerVM.CurrProject.Name) Map.refAssemblyManagerVM.CurrProject = Nothing Map.refAssemblyManagerVM.VisibilityDoorList = Visibility.Hidden Map.refMainWindowVM.ProjectNameMsg = "" Return End If Catch ex As Exception End Try If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) Then Map.refAssemblyManagerVM.RefreshAssembly() End If End Sub Private Function DeleteDDFFile(sDirPath As String) As Boolean ' recupero l'elenco dei file presenti nel direttorio Dim FileArray() As String = Directory.GetFiles(sDirPath) ' verificio che non ci siano file bloccati nel direttorio indicato For Each sFile In FileArray If Utility.IsFileLocked(Path.GetDirectoryName(sFile), Path.GetFileNameWithoutExtension(sFile)) Then Return False End If Next ' procedo all'eliminazione dei file nel direttorio corrente For Each sFile In FileArray Try File.Delete(sFile) Catch ex As Exception End Try Next ' recupero l'elenco dei sottodirettori presenti nel direttorio corrente Dim SubDirArray() As String = Directory.GetDirectories(sDirPath) If SubDirArray.Count > 0 Then For Each sSubDir In SubDirArray ' 50537 = Do you want to delete subdirectory {0} ? If MessageBox.Show(String.Format(EgtMsg(50537), sSubDir), EgtMsg(50144), MessageBoxButton.YesNo, MessageBoxImage.Question) <> MessageBoxResult.Yes Then Continue For End If ' se decido di eliminare il sottodirettorio devo svuotarlo da tutti i file If Not DeleteDDFFile(sSubDir) Then Continue For End If Try ' se il direttorio è vuoto allora posso eliminarlo If Directory.GetFiles(sSubDir).Count = 0 Then Directory.Delete(sSubDir) End If Catch ex As Exception End Try Next End If Return True End Function #End Region ' DeleteCommand #Region "OpenCommand" Public ReadOnly Property OpenCommand As ICommand Get If m_cmdOpen Is Nothing Then m_cmdOpen = New Command(AddressOf Open) End If Return m_cmdOpen End Get End Property Public Sub Open() OpenProject("") 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 Dim sFilePathComplete As String = String.Empty Dim bValidPath As Boolean = False ' verifico se selezionato esiste e modificato If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) AndAlso Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified Then Dim sText As String = String.Format(EgtMsg(50109), Path.GetFileNameWithoutExtension(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name)) Select Case MessageBox.Show(sText, "", MessageBoxButton.YesNoCancel, MessageBoxImage.Question) Case MessageBoxResult.Yes Map.refAssemblyManagerVM.Save(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Case MessageBoxResult.No Utility.UnLockDir() Case MessageBoxResult.Cancel Return End Select End If ' VERIFICO IL NOME PROGETTO ( DIERTTORIO/ FILE) If Directory.Exists(sFilePath) AndAlso bIsSingleDoor Then m_MruFiles.Remove(sFilePath) bValidPath = False ElseIf Directory.Exists(sFilePath) AndAlso Not bIsSingleDoor Then sFilePathComplete = sFilePath bValidPath = True 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.IsFileLocked(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.CurrProject.SelAssemblyName.GraphicName) 'Map.refAssemblyManagerVM.Open(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) End If Return End If bValidPath = True Else ' elimino eventual FilePath inesistente dalla lista dei recenti m_MruFiles.Remove(sFilePath) bValidPath = False End If ' CARCIO IL NOME DIRETTORIO ' Se FilePath non valida If Not bValidPath Then 'If OptionModule.m_SingleDoor OrElse Keyboard.Modifiers.HasFlag(ModifierKeys.Shift) Then ' se in modalità porta singola If OptionModule.m_SingleDoor Then bIsSingleDoor = True ' definisco la finestra di dialogo per la scelta dei file Dim fd As System.Windows.Forms.OpenFileDialog = New System.Windows.Forms.OpenFileDialog() ' 50559=Open File Dialog fd.Title = EgtMsg(50559) ' indirizzo la scelta verso una cartella fd.InitialDirectory = Map.refOptionsVM.MyProjectDir If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso Not String.IsNullOrWhiteSpace(Map.refAssemblyManagerVM.CurrProject.Name) Then fd.InitialDirectory = Map.refAssemblyManagerVM.CurrProject.Name ElseIf Not String.IsNullOrEmpty(OptionModule.m_sLastProject) Then fd.InitialDirectory = Path.GetDirectoryName(OptionModule.m_sLastProject) Else fd.InitialDirectory = IniFile.m_MyProjectDir End If ' seleziono il filtro di apertura fd.Filter = "(*.ddf) |*.ddf|(*.ddt) |*.ddt" fd.FilterIndex = GetCurrentFilter() fd.RestoreDirectory = True ' apro la finestra di dialogo If fd.ShowDialog() <> System.Windows.Forms.DialogResult.OK Then If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso 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) End If Return End If Utility.UnLockDir() ' salvo il nome del direttorio sFilePath = Path.GetDirectoryName(fd.FileName) ' salvo il nome completo del file sFilePathComplete = fd.FileName ' salvo l'estensione dell'ultimo progetto aperto WriteMainPrivateProfileString("General", "LastExtensionOpened", Path.GetExtension(fd.FileName).ToLower) ' se esiste un file in lettura con questo nome allora blocco tutto If Utility.IsFileLocked(sFilePath, Path.GetFileNameWithoutExtension(sFilePathComplete)) Then If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso 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) End If Return End If Else ' dichiaro la finestra di scelta cartella di progetto Dim FolderBrowserDialog As New System.Windows.Forms.FolderBrowserDialog If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso Not String.IsNullOrWhiteSpace(Map.refAssemblyManagerVM.CurrProject.Name) Then FolderBrowserDialog.SelectedPath = Map.refAssemblyManagerVM.CurrProject.Name ElseIf Not String.IsNullOrEmpty(OptionModule.m_sLastProject) Then FolderBrowserDialog.SelectedPath = Path.GetDirectoryName(OptionModule.m_sLastProject) Else FolderBrowserDialog.SelectedPath = IniFile.m_MyProjectDir End If ' mostriamo la finestra di dialogo aperta nel direttorio selzionato sopra If FolderBrowserDialog.ShowDialog <> Forms.DialogResult.OK Then If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso 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) End If ' se la risposta è diversa da OK esce Return End If ' salvo il nome del direttorio sFilePath = FolderBrowserDialog.SelectedPath ' se sto eseguendo la selezione dello stesso direttorio allora interrompo If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) Then If Map.refAssemblyManagerVM.CurrProject.Name = sFilePath Then Return End If End If ' se esiste un file in lettura con questo nome allora blocco tutto 'If Utility.VerifyFileLocked(sFilePath) Then ' Return 'End If End If End If ' CARICO ELENCO FILE Dim CurrProject As Project = New Project If Not IsNothing(Map.refAssemblyManagerVM.CurrProject) Then CurrProject = Map.refAssemblyManagerVM.CurrProject Else Map.refAssemblyManagerVM.CurrProject = CurrProject End If ' salvo il riferimento al progetto corrente m_CurrProject = CurrProject ' salvo path progetto CurrProject.Name = sFilePath ' Ripulisco lista porte CurrProject.AssemblyList.Clear() ' caricamento elenco porte If Not bIsSingleDoor Then ' Aggiungo porte trovate nella cartella ad un vettore Dim DDFFileArray() As String = Directory.GetFiles(sFilePath) ' ripulisco il nome della porta (cancello tutto il percorso del file lasciando solo il nome del file) For DDFIndex = 0 To DDFFileArray.Count - 1 If Path.GetExtension(DDFFileArray(DDFIndex)).ToLower = ".ddf" Then ' lo aggiungo alla lista delle porte Dim Local_Assembly As New AssemblyName Local_Assembly.Name = DDFFileArray(DDFIndex) Local_Assembly.IsModified = False CurrProject.AssemblyList.Add(Local_Assembly) End If Next Else ' carcio la singola porta Dim Local_Assembly As New AssemblyName Local_Assembly.Name = sFilePathComplete Local_Assembly.IsModified = False CurrProject.AssemblyList.Add(Local_Assembly) End If ' SELEZIONE FILE DA ELENCO ' Notifico aggiornamento DoorList per aggiornare la grafica CurrProject.NotifyPropertyChanged("AssemblyList") Utility.UnLockDir() ' Se c'è almeno una porta la visualizzo If CurrProject.AssemblyList.Count > 0 Then Dim bAssemblyIsSelected As Boolean = False If Not String.IsNullOrWhiteSpace(sFilePathComplete) Then For Each ItemFile In CurrProject.AssemblyList If sFilePathComplete = ItemFile.Name Then If Not Utility.IsFileLocked(Path.GetDirectoryName(ItemFile.Name), ItemFile.GraphicName, False) Then CurrProject.SelAssemblyName = ItemFile Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) Utility.LockDir(Map.refAssemblyManagerVM.CurrProject.Name, Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) bAssemblyIsSelected = True Exit For End If End If Next End If If Not bAssemblyIsSelected Then For IndexFile As Integer = 0 To CurrProject.AssemblyList.Count - 1 If Not Utility.IsFileLocked(Path.GetDirectoryName(CurrProject.AssemblyList(IndexFile).Name), CurrProject.AssemblyList(IndexFile).GraphicName, False) Then CurrProject.SelAssemblyName = CurrProject.AssemblyList(IndexFile) Utility.OutLog("Apertura progetto : " & Map.refAssemblyManagerVM.CurrProject.Name) Utility.LockDir(Map.refAssemblyManagerVM.CurrProject.Name, Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Exit For End If Next End If Else Map.refPartPageVM.CurrPart = Nothing Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected EgtNewFile() EgtZoom(ZM.ALL) End If ' carico il nome del direttorio e la visbilità della lista delle porte If bIsSingleDoor Then If Not IsNothing(CurrProject.SelAssemblyName.Name) Then Map.refMainWindowVM.ProjectNameMsg = CurrProject.SelAssemblyName.Name End If Map.refAssemblyManagerVM.VisibilityDoorList = Visibility.Collapsed Else Map.refMainWindowVM.ProjectNameMsg = CurrProject.Name Map.refAssemblyManagerVM.VisibilityDoorList = Visibility.Visible End If ' aggiorno la grafica CurrProject.NotifyPropertyChanged("Name") ' salvo il nome del file corrente in lettura If Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) AndAlso Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) Then WriteMainPrivateProfileString(S_LAUNCHERWINDOW, K_LASTPROJECT, Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) Else WriteMainPrivateProfileString(S_LAUNCHERWINDOW, K_LASTPROJECT, Map.refAssemblyManagerVM.CurrProject.Name) End If ' Aggiungo alla lista dei recenti/ verifico se esite anche se posso salvare un indirizzo comlpeto If bIsSingleDoor Then m_MruFiles.Add(CurrProject.SelAssemblyName.Name) Else m_MruFiles.Add(sFilePath) End If End Sub Private Function GetCurrentFilter() As Integer Dim nFilter As Integer = 1 Dim sExt As String = String.Empty GetMainPrivateProfileString("General", "LastExtensionOpened", "ddf", sExt) sExt = sExt.Replace("."c, "") sExt = sExt.Trim Select Case sExt Case = "ddf" nFilter = 1 Case = "ddt" nFilter = 2 End Select Return nFilter End Function #End Region ' OpenCommand #Region "OpenMruFileCommand" Public ReadOnly Property OpenMruFileCommand As ICommand Get If m_cmdOpenMruFile Is Nothing Then m_cmdOpenMruFile = New Command(AddressOf OpenMruFile) End If Return m_cmdOpenMruFile End Get End Property Public Sub OpenMruFile(ByVal param As Object) Dim sLastProject As String = DirectCast(param, String).Replace("__", "_") Utility.UnLockDir() OpenProject(sLastProject) End Sub #End Region ' OpenMruFileCommand #Region "ReloadCommand" Public ReadOnly Property ReloadCommand As ICommand Get If m_cmdReload Is Nothing Then m_cmdReload = New Command(AddressOf ReloadCmd) End If Return m_cmdReload End Get End Property Public Sub ReloadCmd() If OptionModule.m_ConfigurationSoftware = ConfigType.Assembly Then Map.SetRefCompoPanelVM(New CompoPanelVM("PartPage")) If IsNothing(Map.refAssemblyManagerVM.CurrProject) OrElse IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then Return End If ' Map.refAssemblyManagerVM.LoadTempFile() ' Map.refMainWindowVM.selectedWatcher = MainWindowVM.WatcherCalling.OnLoadTempFile Map.refAssemblyManagerVM.RefreshAssembly() Map.refSceneManagerVM.RefreshBtn() End Sub #End Region ' ReloadCommand #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() ' Verifico esista elemento selezionato If IsNothing(Map.refAssemblyManagerVM.CurrProject) OrElse IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) OrElse IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) Then ' Impossibile savare un file se non esiste una porta! Errore MessageBox.Show(EgtMsg(50128), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Exclamation) Return End If ' Eseguo salvataggio Map.refAssemblyManagerVM.Save(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) If DdfFile.DDFIsCorrect Then Map.refSceneManagerVM.RefreshBtn() ' aggiorno l'immagine solo se il salvataggio è andato a buon fine ' Aggiungo alla lista dei recenti/ verifico se esite anche se posso salvare un indirizzo comlpeto ' Map.refOptionsVM.MyProjectDir = Map.refAssemblyManagerVM.CurrProject.Name If OptionModule.m_SingleDoor Then m_MruFiles.Add(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) Else m_MruFiles.Add(Map.refAssemblyManagerVM.CurrProject.Name) End If 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 = 800 OptionsWindow.Width = 650 OptionsWindow.DataContext = New OptionsVM() OptionsWindow.Owner = Application.Current.MainWindow OptionsWindow.ShowDialog() End Sub #End Region ' OptionsCommand #Region "LastProject" Public ReadOnly Property LastProjectCommand As ICommand Get If m_CmdLastProject Is Nothing Then m_CmdLastProject = New Command(AddressOf OpenLastProject) End If Return m_CmdLastProject End Get End Property Public Sub OpenLastProject() 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 If File.Exists(OptionModule.m_sLastProject) Then CurrProject.Name = Path.GetDirectoryName(OptionModule.m_sLastProject) ElseIf Path.HasExtension(OptionModule.m_sLastProject) AndAlso Directory.Exists(Path.GetDirectoryName(OptionModule.m_sLastProject)) Then CurrProject.Name = Path.GetDirectoryName(OptionModule.m_sLastProject) ElseIf Not Path.HasExtension(OptionModule.m_sLastProject) AndAlso Directory.Exists(OptionModule.m_sLastProject) Then CurrProject.Name = OptionModule.m_sLastProject End If End If ' CARICAMENTO LISTA ' ripulisco la lista di porte CurrProject.AssemblyList.Clear() ' verifico che esista la cartella If Directory.Exists(CurrProject.Name) Then ' se sono in modalità porta singola If OptionModule.m_SingleDoor Then Dim Local_Assembly As New AssemblyName ' nascondo l'elenco delle porte Map.refAssemblyManagerVM.VisibilityDoorList = Visibility.Collapsed ' verifico che il file selezionato esista e non sia in lettura If File.Exists(OptionModule.m_sLastProject) And Not Utility.IsFileLocked(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 EgtOutLog("LastProject '" & OptionModule.m_sLastProject & "' is not a file or does not exist!") Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected If OptionModule.AdjustDDT Then EgtExit() Map.refMainWindowVM.MainWindowModel.ReleaseInstance() Application.Current.Shutdown(3) End If Return End If Else ' 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) For DDFIndex = 0 To DDFFileArray.Count - 1 If Path.GetExtension(DDFFileArray(DDFIndex)).ToLower = ".ddf" Then ' lo aggiungo alla lista delle porte Dim Local_Assembly As New AssemblyName Local_Assembly.Name = DDFFileArray(DDFIndex) Local_Assembly.IsModified = False CurrProject.AssemblyList.Add(Local_Assembly) End If Next Map.refAssemblyManagerVM.VisibilityDoorList = Visibility.Visible End If ' Notifico aggiornamento DoorList e Name per aggiornare la grafica CurrProject.NotifyPropertyChanged("Name") CurrProject.NotifyPropertyChanged("AssemblyList") Map.refMainWindowVM.ProjectNameMsg = CurrProject.Name ' CARICAMENTO ELEMENTO LISTA ' Se c'è almeno una porta la visualizzo If CurrProject.AssemblyList.Count > 0 Then ' 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 If Utility.IsFileLocked(Path.GetDirectoryName(OptionModule.m_sLastProject), Path.GetFileNameWithoutExtension(OptionModule.m_sLastProject)) Then Utility.OutLog("Annullata apertura ultimo progetto : " & OptionModule.m_sLastProject) Exit For End If CurrProject.SelAssemblyName = ItemFile 'If OptionModule.m_SingleDoor Then 'Map.refMainWindowVM.ProjectNameMsg = OptionModule.m_sLastProject Dim sFileName As String = Path.GetFileNameWithoutExtension(CurrProject.SelAssemblyName.Name) Utility.OutLog("Blocco progetto : " & sFileName) Utility.LockDir(CurrProject.Name, sFileName) 'End If Return End If Index = Index + 1 Next End If ' se non esiste il file allora provo a caricare il primo della lista Dim bFileExist As Boolean = False For IndexFile As Integer = 0 To CurrProject.AssemblyList.Count - 1 If File.Exists(CurrProject.AssemblyList(IndexFile).Name) And Not Utility.IsFileLocked(Path.GetDirectoryName(CurrProject.AssemblyList(IndexFile).Name), Path.GetFileNameWithoutExtension(CurrProject.AssemblyList(IndexFile).Name), False) Then 'CurrProject.VerifySelAssemblyName(CurrProject.AssemblyList(IndexFile)) CurrProject.SelAssemblyName = CurrProject.AssemblyList(IndexFile) 'If OptionModule.m_SingleDoor Then Utility.LockDir(CurrProject.Name, CurrProject.SelAssemblyName.GraphicName) Map.refMainWindowVM.ProjectNameMsg = CurrProject.AssemblyList(IndexFile).Name 'End If bFileExist = True Exit For 'Else ' Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected End If Next If Not bFileExist Then Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected End If Else Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected End If Else Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected Map.refAssemblyManagerVM.VisibilityDoorList = Visibility.Collapsed End If End Sub #End Region ' LastProject #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, Path.GetFileName(IniFile.m_sDoorsDirPath)) 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 "CreateTemplate" Public ReadOnly Property CreateTemplateCommand As ICommand Get If m_CmdCreateTemplate Is Nothing Then m_CmdCreateTemplate = New Command(AddressOf CreateTemplate) End If Return m_CmdCreateTemplate End Get End Property Public Sub CreateTemplate() If IsNothing(Map.refAssemblyManagerVM.CurrProject) OrElse IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) OrElse IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) Then ' 50538 = Impossibile savare un file se non esiste una porta! Errore MessageBox.Show(EgtMsg(50538), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Exclamation) Return End If ' se esite una porta, allora rendo possibile la creazione di un template della porta corrente If Not IsNothing(Map.refPartPageVM.CurrPart) Then ' ' Stampo il file correte nella cartella Template ' Dim SaveFileDialog As New MySaveFileDialogVM ' Dim SaveFileDialogWnd As New EgtWPFLib5.SaveFileDialogV(Application.Current.MainWindow, SaveFileDialog) ' SaveFileDialog.Title = EgtMsg(50417) ' SaveFileDialog.Directory = IniFile.m_TemplateDir ' SaveFileDialog.Extension = DDT_EXTENSION ' 'SaveFileDialog.FileName = m_CurrProject.Name & "\" ' ' se decido di chiuedere la finestra ' If Not SaveFileDialogWnd.ShowDialog Then ' Return ' End If ' Apro la finestra di salvataggio generica Dim SaveFileDialog As New System.Windows.Forms.SaveFileDialog() ' controllo se esiste il file DDF Dim sFilePath As String = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name If File.Exists(sFilePath) Then ' recupero il nome del template che ha generato il DDF corrente Dim DDTOrig As String = String.Empty Dim fStream As String() = File.ReadAllLines(sFilePath) DDTOrig = ReadOrigTemplate(fStream) SaveFileDialog.Filter = "(*.ddt) |*.ddt" SaveFileDialog.FilterIndex = 2 If String.IsNullOrEmpty(DDTOrig) Then If OptionModule.m_SingleDoor Then SaveFileDialog.FileName = Path.GetFileNameWithoutExtension(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) Else SaveFileDialog.FileName = Path.GetFileNameWithoutExtension(Map.refAssemblyManagerVM.CurrProject.Name) End If Else SaveFileDialog.FileName = Path.GetFileNameWithoutExtension(DDTOrig) End If End If ' avvio la ricerca nell'ultimo direttorio aperto SaveFileDialog.InitialDirectory = IniFile.m_TemplateDir If SaveFileDialog.ShowDialog() <> System.Windows.Forms.DialogResult.OK Then ' Interrompo la creazione del template Return End If ' Controllo se ha estensione il nome della porta If Path.HasExtension(SaveFileDialog.FileName) Then Dim sExtension As String = Path.GetExtension(SaveFileDialog.FileName) If Not sExtension.ToLower = DDT_EXTENSION Then SaveFileDialog.FileName = SaveFileDialog.FileName.Replace(sExtension, DDT_EXTENSION) End If Else SaveFileDialog.FileName &= DDT_EXTENSION End If If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then DdfFile.WriteDDFPart(Map.refPartPageVM.CurrPart, SaveFileDialog.FileName, False, False) Else DdfFile.WriteDDFAssembly(Map.refAssemblyPageVM.CurrAssembly, SaveFileDialog.FileName, False) End If Else MessageBox.Show(EgtMsg(50155), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Exclamation) End If End Sub #End Region ' CreateTemplate #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) If Not OptionModule.m_SmartHelp = HelpPage.WebBrowserPC Then GuideWindow.Show() End Sub #End Region ' Guide #Region "Copy" Public ReadOnly Property CopyCommand As ICommand Get If m_cmdCopy Is Nothing Then m_cmdCopy = New Command(AddressOf CopyDDF) End If Return m_cmdCopy End Get End Property Public Sub CopyDDF() If IsNothing(Map.refAssemblyManagerVM.CurrProject) OrElse IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then ' 50192 = Impossible to export to machine a door if there is not a door! MessageBox.Show(EgtMsg(50192), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning) Return End If 'Verifico che tutto sia salvato, altrimenti esco con messaggio If Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified() Then ' Project must be saved before copying MessageBox.Show(EgtMsg(50186), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning) Return End If ' Do you want to copy all files ? {0} (No to copy only the current file) Dim sMsg As String = String.Format(EgtMsg(50187), vbCrLf & vbCrLf) ' Export to machine Dim Result = MessageBox.Show(sMsg, EgtMsg(50188), MessageBoxButton.YesNoCancel, MessageBoxImage.Question) Dim CurrProjetc As String = Map.refAssemblyManagerVM.CurrProject.Name Dim MachinProject As String = IniFile.m_MachinProject If String.IsNullOrEmpty(MachinProject) Then ' Machine Directory not found MessageBox.Show(EgtMsg(50189), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) Return End If Select Case Result Case MessageBoxResult.Yes For IndexFile As Integer = 0 To Map.refAssemblyManagerVM.CurrProject.AssemblyList.Count - 1 ' controllo che abbia estensione ddf If Path.GetExtension(Map.refAssemblyManagerVM.CurrProject.AssemblyList(IndexFile).Name).ToLower = ".ddf" Then Dim SouFile As String = Map.refAssemblyManagerVM.CurrProject.AssemblyList(IndexFile).Name Dim DestFile As String = Path.Combine(MachinProject, Path.GetFileName(SouFile)) Try File.Copy(SouFile, DestFile, True) Catch ex As System.IO.IOException ' Error in copying: {0} MessageBox.Show(String.Format(EgtMsg(50189), ex.Message)) Exit For End Try End If Next Case MessageBoxResult.No Dim SouFile As String = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name Dim DestFile As String = Path.Combine(MachinProject, Path.GetFileName(SouFile)) Try File.Copy(SouFile, DestFile, True) Catch ex As System.IO.IOException ' Error in copying: {0} MessageBox.Show(String.Format(EgtMsg(50189), ex.Message)) End Try Case Else End Select End Sub #End Region ' Copy #Region "OpenCam5" Public ReadOnly Property OpenCamCommand As ICommand Get If m_CmdOpenCam Is Nothing Then m_CmdOpenCam = New Command(AddressOf OpenCam) End If Return m_CmdOpenCam End Get End Property Public Sub OpenCam() If IsNothing(Map.refAssemblyManagerVM.CurrProject) OrElse IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then ' 50192 = Impossible to export to machine a door if there is not a door! MessageBox.Show(EgtMsg(50192), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning) Return End If 'Verifico che tutto sia salvato, altrimenti esco con messaggio If Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified Then ' 50177=Do you want to save the current changes? Dim ResultMsg As MessageBoxResult = MessageBox.Show(EgtMsg(50177), EgtMsg(50144), MessageBoxButton.OKCancel, MessageBoxImage.Warning) If ResultMsg = MessageBoxResult.OK Then ' salvo e continuo Save() Else ' esco Return End If End If ' Lancio esecuzione CAM5 Dim Proc As New Process Dim sCurrFile As String = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name ' Flag : 0 = solo disegno, 1 = anche calcolo lavorazioni Dim nFlag As Integer = If((Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift, 1, 0) Try Proc.StartInfo.FileName = IniFile.m_sEgtCam5EXEPath Proc.StartInfo.Arguments = """" & sCurrFile & """ """ & nFlag & """" If Not Proc.Start() Then ' Error in starting EgtCam5.exe MessageBox.Show(EgtMsg(50567), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) End If Catch ex As Exception ' Error in starting EgtCam5.exe MessageBox.Show(EgtMsg(50567), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) End Try End Sub #End Region ' Copy #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() 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 ' 50191 = Impossible to copy a door if there is not a door! MessageBox.Show(EgtMsg(50191), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning) Return End If '' anche se il file è modificato procedo con il salvataggio 'If Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified() Then ' ' Project must be saved before copying ' MessageBox.Show(EgtMsg(50186), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning) ' Return 'End If 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 = Map.refAssemblyManagerVM.CurrProject.Name ' apro la finestra di dialogo Dim bChangeProject As Boolean = True If SaveFileDialog.ShowDialog() <> System.Windows.Forms.DialogResult.OK Then Utility.OutLog("Annullata creazione di una copia di : " & Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name) Return ElseIf Trim(SaveFileDialog.InitialDirectory.ToLower) <> Trim(Path.GetDirectoryName(SaveFileDialog.FileName).ToLower) And Not OptionModule.m_SingleDoor Then ' 50539 = Do you want to change project? Question Dim ResultMsg As MessageBoxResult = MessageBox.Show(EgtMsg(50539), EgtMsg(50110), MessageBoxButton.YesNoCancel, MessageBoxImage.Warning) If ResultMsg = MessageBoxResult.Cancel Then Return ElseIf ResultMsg = MessageBoxResult.No Then bChangeProject = False End If End If ' aggiorno 'elenco dei file presenti nel direttorio selezionato LocalCurrProject.Name = Path.GetDirectoryName(SaveFileDialog.FileName) LocalCurrProject.AssemblyList = New ObservableCollection(Of AssemblyName) Dim DDFFileArray() As String = Directory.GetFiles(LocalCurrProject.Name) ' ripulisco il nome della porta (cancello tutto il percorso del file lasciando solo il nome del file) For DDFIndex = 0 To DDFFileArray.Count - 1 If Path.GetExtension(DDFFileArray(DDFIndex)).ToLower = ".ddf" Then ' lo aggiungo alla lista delle porte Dim Local_Assembly As New AssemblyName Local_Assembly.Name = DDFFileArray(DDFIndex) Local_Assembly.IsModified = False LocalCurrProject.AssemblyList.Add(Local_Assembly) End If Next 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 Dim sExtension As String = Path.GetExtension(SaveFileDialog.FileName) If Not sExtension.ToLower = DDF_EXTENSION Then SaveFileDialog.FileName = SaveFileDialog.FileName.Replace(sExtension, DDF_EXTENSION) End If Else SaveFileDialog.FileName &= DDF_EXTENSION End If If Utility.IsFileLocked(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 ' 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 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 Utility.OutLog("Sovrascrivo file : " & SaveFileDialog.FileName) 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 LocalCurrProject.AssemblyList.RemoveAt(IndexDoorList) End If ' aggiungo il nome del file alla lista degli assemblati Dim Local_AssemblyName As New AssemblyName Local_AssemblyName.Name = SaveFileDialog.FileName Local_AssemblyName.GraphicName = Path.GetFileNameWithoutExtension(SaveFileDialog.FileName) LocalCurrProject.AssemblyList.Add(Local_AssemblyName) ' devo creare tutto l'assemblato (comando GoBack nel CompoPanel) If OptionModule.m_ConfigurationSoftware = ConfigType.Assembly Then Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nAssemblyPage Map.refSceneManagerVM.RefreshBtn() End If ' Seleziono AssembyName creato Try Utility.OutLog("Creazione copia : " & Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name & " -> " & Local_AssemblyName.Name) File.Copy(IniFile.m_sTempDir & "\" & TEMP_FILE, Local_AssemblyName.Name, True) 'File.Copy(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name, Local_AssemblyName.Name, True) Catch ex As System.IO.IOException ' Error in copying: {0} MessageBox.Show(String.Format(EgtMsg(50190), ex.Message)) ' interrompo la copia e la creazione del nuovo file File.Delete(Local_AssemblyName.Name) Return End Try If bChangeProject Then Try Map.refAssemblyManagerVM.CurrProject = LocalCurrProject LocalCurrProject.SelAssemblyName = LocalCurrProject.AssemblyList.First(Function(x) x.Name = Local_AssemblyName.Name) Catch ex As Exception EgtOutLog("Impossibile trovare" & Local_AssemblyName.Name & " nel direttorio " & LocalCurrProject.Name) Return End Try End If Map.refAssemblyManagerVM.Save(LocalCurrProject.SelAssemblyName) '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), Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Else m_MruFiles.Add(Map.refAssemblyManagerVM.CurrProject.Name) If Not String.IsNullOrEmpty(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) Then Utility.LockDir(Path.GetDirectoryName(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name), Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.GraphicName) End If End If End Sub #End Region ' Duplica #Region "Hardware" Public ReadOnly Property HardwareCommand As ICommand Get If m_cmdHardware Is Nothing Then m_cmdHardware = New Command(AddressOf GoToHardwarePage) End If Return m_cmdHardware End Get End Property Public Sub GoToHardwarePage() ' se decido di annullare l'operazione di salvataggio If Not Map.refAssemblyManagerVM.ManageModified() Then Return Utility.OutLog(" +++ HardwarePage +++") Utility.UnLockDir() ' 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 Map.refCompoPanelHardwareVM.GoBackVisibility = Visibility.Collapsed Map.refHardwarePageVM.VisibilityGeneral = Visibility.Collapsed ' disabilito DimensioningPanel Map.refDimensioningPanelVM.SetDimensioningPanel_Visibility(False) ' creo una porta per il disegno dell'Hardware Map.refHardwarePageVM.CreateDoor() ' creo un pezzo di telaio per il disegno dell'hardware Map.refHardwarePageVM.CreateJamb() Map.refSceneManagerVM.RefreshBtn() ' carico la lista dei nomi delle geometrie CompoMatch.LoadTableGeometry() Map.refHardwareHelpSceneHostV.CleanHelpProject() Map.refRefreshPanelVM.ButtonVisibility = Visibility.Collapsed Map.refRefreshPanelVM.DimensionVisibility = Visibility.Visible Map.refInstrumentPanelVM.DimensionVisibility = OptionModule.m_DimensionHardware Map.refInstrumentPanelVM.SaveImgHardware = OptionModule.m_DimensionHardware Map.refProjectManagerHardwareVM.HardwareIsChecked = True End Sub Private m_DoorIsChecked As Boolean = True Public Property DoorIsChecked As Boolean Get Return m_DoorIsChecked End Get Set(value As Boolean) m_DoorIsChecked = value NotifyPropertyChanged("DoorIsChecked") End Set End Property #End Region ' Hardware #Region "PrintCommand" Public ReadOnly Property PrintCommand As ICommand Get If m_cmdPrint Is Nothing Then m_cmdPrint = New Command(AddressOf Print) End If Return m_cmdPrint End Get End Property Public Sub Print(ByVal param As Object) Utility.OutLog(" +++ PrintDoor +++") ' 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 ' 50193 = Impossible to print a door if there is not a door! MessageBox.Show(EgtMsg(50193), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning) Return End If If Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified() Then ' Project must be saved before printing MessageBox.Show(EgtMsg(50186), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning) Return End If Dim PrintWindow As New PrintWndV(Application.Current.MainWindow, New PrintWndVM) PrintWindow.ShowDialog() End Sub #End Region ' PrintCommand #Region "CreateAssemblyCommand" Private m_VisibilityCreateAssembly As Visibility = Visibility.Collapsed Public ReadOnly Property VisibilityCreateAssembly As Visibility Get If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then Return Visibility.Collapsed ' verifco di essere nelle condizioni di poter mostrare il bottone If Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nDDFPage AndAlso Not IsNothing(Map.refAssemblyManagerVM) AndAlso Not IsNothing(Map.refAssemblyManagerVM.CurrProject) AndAlso Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) AndAlso Not IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly) AndAlso Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly.JambExists AndAlso Not IsNothing(Map.refPartPageVM) AndAlso Not IsNothing(Map.refPartPageVM.CurrPart) AndAlso Not IsNothing(Map.refPartPageVM.CurrPart.refPartDoor) AndAlso Not IsNothing(Map.refPartPageVM.CurrPart.refPartDoor.Door) AndAlso Map.refPartPageVM.CurrPart.refPartDoor.Door.TypePart.Contains("DO_") Then ' se sono sono nella schermata principale oppure su un'anta 'If (Not IsNothing(Map.refPartPageVM) AndAlso Not IsNothing(Map.refPartPageVM.CurrPart) AndAlso ' Not IsNothing(Map.refPartPageVM.CurrPart.refPartDoor) AndAlso ' Not IsNothing(Map.refPartPageVM.CurrPart.refPartDoor.Door) AndAlso ' Map.refPartPageVM.CurrPart.refPartDoor.Door.TypePart.Contains("DO_")) OrElse ' Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nAssemblyPage Then ' m_VisibilityCreateAssembly = Visibility.Visible 'Else ' m_VisibilityCreateAssembly = Visibility.Collapsed 'End If m_VisibilityCreateAssembly = Visibility.Visible Else m_VisibilityCreateAssembly = Visibility.Collapsed End If Return m_VisibilityCreateAssembly End Get End Property Public ReadOnly Property CreateAssemblyCommand As ICommand Get If m_cmdCreateAssembly Is Nothing Then m_cmdCreateAssembly = New Command(AddressOf CreateAssembly) End If Return m_cmdCreateAssembly End Get End Property Public Sub CreateAssembly() If Not IsNothing(Map.refAssemblyPageVM) AndAlso Not IsNothing(Map.refAssemblyPageVM.CurrAssembly) Then Map.refAssemblyPageVM.CurrAssembly.CreateAssembly() End If End Sub #End Region ' CreateAssemblyCommand #Region "METHODS" #End Region ' Methos 'questo metodo restituisce l'errore letto nel file CurrDoor.txt Public Sub ShowGraphicError(ByRef ErrorMessages As String, ByRef Type As Integer) ' se non c'è nessuna porta aperta allora esco If IsNothing(Map.refAssemblyManagerVM.CurrProject) OrElse IsNothing(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Then Return End If Dim FileLog As String = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.Name FileLog = FileLog.Replace(DDF_EXTENSION, ".txt") Dim FileContent() As String ' controllo se esite il file CurrDoor.txt If Not File.Exists(FileLog) Then Return FileContent = File.ReadAllLines(FileLog) ' se il file esiste ma è vuoto If FileContent.Count = 0 Then MessageBox.Show(EgtMsg(50107), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) End If Dim IndexLine As Integer = 0 Dim nMsgErr As Integer = 0 ' leggo il valore numerico (se il valore non è numerico è passato di default il valore 0) nMsgErr = RegexFunction.ErrDraw(FileContent(IndexLine)) Type = nMsgErr ' passo alla riga succesiva IndexLine += 1 ' se il valore è maggiore di zero allora è un errore If nMsgErr > 0 Then ' salto tutte le righe vuote While String.IsNullOrEmpty(FileContent(IndexLine)) AndAlso IndexLine < FileContent.Count IndexLine += 1 End While ErrorMessages = FileContent(IndexLine) IndexLine += 1 While IndexLine < FileContent.Count ErrorMessages &= vbNewLine & FileContent(IndexLine) IndexLine += 1 End While ' altrimenti un avvertimento ElseIf nMsgErr < 0 Then While String.IsNullOrEmpty(FileContent(IndexLine)) AndAlso IndexLine < FileContent.Count IndexLine += 1 End While ErrorMessages = FileContent(IndexLine) IndexLine += 1 While IndexLine < FileContent.Count ErrorMessages &= vbNewLine & FileContent(IndexLine) IndexLine += 1 End While Else ErrorMessages = String.Empty End If End Sub #End Region ' Commands Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Public NotInheritable Class ObjectDataProvider 'Implements ICanHandleUsedIdentifiers, IDataProvider, ISupportsLogger End Class Public Sub NotifyPropertyChanged(propName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) End Sub End Class Public NotInheritable Class ObjectDataProvider Private order As ReportOrder Public Sub New(order As ReportOrder) Me.order = order End Sub End Class