Imports System.Collections.ObjectModel Imports System.ComponentModel Imports System.IO Imports EgtUILib Imports EgtWPFLib5 Imports Ionic.zip Public Class ProjectManagerVM Implements INotifyPropertyChanged 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 #Region "FIELDS & PROPERTIES" Friend m_CurrProject As Project ' Definizione comandi Private m_cmdNew As ICommand Private m_cmdOpen As ICommand Private m_cmdOpenMruFile 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 #Region "ToolTip" 'Proprietà ToolTip Public ReadOnly Property NewToolTip As String Get Return EgtMsg(MSG_TOPCOMMANDBAR + 1) End Get End Property Public ReadOnly Property OpenToolTip As String Get Return EgtMsg(MSG_TOPCOMMANDBAR + 2) 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 DuplicaToolTip As String Get ' Duplicate Return EgtMsg(50415) 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) 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() ' Gestisco porta corrente modificata If Not Map.refAssemblyManagerVM.ManageModified() Then Return ' Richiedo il nome del progetto (cioè la directory da creare) Dim SaveFileDialog As New EgtWPFLib5.EgtSaveFileDialog SaveFileDialog.Title = EgtMsg(50304) SaveFileDialog.Directory = IniFile.m_MyProjectDir & "\" SaveFileDialog.Extension = "\" If Not SaveFileDialog.EgtShowDialog Then Map.refAssemblyManagerVM.Open(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) 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) ' cancello il direttorio Directory.Delete(SaveFileDialog.FileName, True) End If If MsgResult = MessageBoxResult.No Then Map.refAssemblyManagerVM.Open(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Return End If ' Creo nuovo progetto Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected Directory.CreateDirectory(SaveFileDialog.FileName) Dim CurrProject As Project = Map.refAssemblyManagerVM.CurrProject ' salvo il riferimento al progetto corrente m_CurrProject = CurrProject ' salvo path progetto CurrProject.Name = SaveFileDialog.FileName ' Ripulisco lista porte CurrProject.AssemblyList.Clear() EgtNewFile() EgtZoom(ZM.ALL) Map.refMainWindowVM.ProjectNameMsg = CurrProject.Name ' Creo nuova porta Map.refAssemblyManagerVM.AddAssembly() End Sub #End Region ' NewCommand #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 ''' ''' Execute the Open. This method is invoked by the OpenCommand. ''' Public Sub Open() OpenProject("") End Sub Public Sub OpenProject(sFilePath As String) ' verifico se selezionato esiste e modificato If 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 'Map.refAssemblyManagerVM.Delete(Map.refAssemblyManagerVM.CurrProject.SelAssemblyName) Case MessageBoxResult.Cancel Return End Select End If ' Se FilePath non valida If String.IsNullOrWhiteSpace(sFilePath) OrElse Not Directory.Exists(sFilePath) Then ' elimino eventual FilePath inesistente dalla lista dei recenti m_MruFiles.Remove(sFilePath) ' apro finestra di scelta cartella di progetto Dim FolderBrowserDialog As New System.Windows.Forms.FolderBrowserDialog If Not String.IsNullOrWhiteSpace(Map.refAssemblyManagerVM.CurrProject.Name) Then FolderBrowserDialog.SelectedPath = Map.refAssemblyManagerVM.CurrProject.Name ElseIf Not String.IsNullOrEmpty(OptionModule.m_sLastProject) Then FolderBrowserDialog.SelectedPath = OptionModule.m_sLastProject Else FolderBrowserDialog.SelectedPath = IniFile.m_MyProjectDir End If ' mostriamo la finestra di dialogo aperta fino alla directory MyProjects If FolderBrowserDialog.ShowDialog <> Forms.DialogResult.OK Then ' se la risposta è diversa da OK esce Return End If sFilePath = FolderBrowserDialog.SelectedPath End If Dim CurrProject As Project = Map.refAssemblyManagerVM.CurrProject ' salvo il riferimento al progetto corrente m_CurrProject = CurrProject ' salvo path progetto CurrProject.Name = sFilePath ' Ripulisco lista porte CurrProject.AssemblyList.Clear() ' 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 ' Notifico aggiornamento DoorList e Name per aggiornare la grafica CurrProject.NotifyPropertyChanged("Name") CurrProject.NotifyPropertyChanged("AssemblyList") ' Se c'è almeno una porta la visualizzo If CurrProject.AssemblyList.Count > 0 Then CurrProject.SelAssemblyName = CurrProject.AssemblyList(0) 'Map.refAssemblyManagerVM.Open(CurrProject.AssemblyList(0)) Else Map.refPartPageVM.CurrPart = Nothing Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected EgtNewFile() EgtZoom(ZM.ALL) End If Map.refMainWindowVM.ProjectNameMsg = CurrProject.Name ' Aggiungo alla lista dei recenti m_MruFiles.Add(sFilePath) End Sub #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) OpenProject(DirectCast(param, String).Replace("__", "_")) End Sub #End Region ' OpenMruFileCommand #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.SelAssemblyName) 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 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 = 650 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() ' Apro l'ultimo progetto Dim CurrName As String = String.Empty 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 Dim CurrProject As Project = Map.refAssemblyManagerVM.CurrProject ' carico il percorso dell'ultimo progetto salvato (sul file Config.ini) If IsNothing(CurrProject.Name) Then CurrProject.Name = OptionModule.m_sLastProject End If ' ripulisco la lista di porte CurrProject.AssemblyList.Clear() ' verifico che esista la cartella If Directory.Exists(CurrProject.Name) Then ' Aggiungo porte trovate nella cartella ad un vettore 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 ' Notifico aggiornamento DoorList e Name per aggiornare la grafica CurrProject.NotifyPropertyChanged("Name") CurrProject.NotifyPropertyChanged("AssemblyList") Map.refMainWindowVM.ProjectNameMsg = CurrProject.Name 'Map.refMainWindowVM.ModifyTitle(False) ' Se c'è almeno una porta la visualizzo If CurrProject.AssemblyList.Count > 0 Then If Not IsNothing(CurrName) Then For IndexListAss As Integer = 0 To CurrProject.AssemblyList.Count - 1 If CurrName = CurrProject.AssemblyList(IndexListAss).Name Then CurrProject.SelAssemblyName = CurrProject.AssemblyList(IndexListAss) 'Map.refAssemblyManagerVM.Open(CurrProject.AssemblyList(IndexListAss)) Return End If Next End If CurrProject.SelAssemblyName = CurrProject.AssemblyList(0) Else Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected End If Else Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected 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) ' aggiungo progetto corrente .nge If File.Exists(sCurrProject) Then zip.AddItem(sCurrProject, "") End If ' aggiungo progetto corrente .ddf If File.Exists(sCurrProjectDDF) Then zip.AddItem(sCurrProjectDDF, "") End If ' aggiungo file log If File.Exists(sFileLog) Then zip.AddItem(sFileLog, "") End If ' aggiungo la cartella Doors If Directory.Exists(IniFile.m_sDoorsDirPath) Then zip.AddItem(IniFile.m_sDoorsDirPath, "Doors") End If zip.Save() End Using Catch ex1 As Exception EgtOutLog("Exception in zip: " & ex1.ToString()) End Try ' preparo la mail per il supporto Dim bEx As Boolean = False Try Dim SendFeedbackWindow As New EgtWPFLib5.MapiMailMessage("EgtDOORCreator Feedback - " & sKey) SendFeedbackWindow.Recipients.Add(sSupportAddress) If Not String.IsNullOrWhiteSpace(sZipToCreate) AndAlso File.Exists(sZipToCreate) Then SendFeedbackWindow.Files.Add(IniFile.m_sTempDir & "\Feedback.zip") End If SendFeedbackWindow.ShowDialog() Catch ex As Exception EgtOutLog("Feedback exception: " & ex.ToString) bEx = True End Try If bEx OrElse EgtWPFLib5.MapiMailMessage.m_ErrorCode <> 0 Then MessageBox.Show(String.Format(EgtMsg(MSG_TOPCOMMANDBAR + 12), sSupportAddress, sZipToCreate), EgtMsg(MSG_EGTDOORCREATOR + 118), MessageBoxButton.OK, MessageBoxImage.Information) ' stampo il messaggio nella StatusBar Map.refStatusBarVM.StatusOutput = EgtMsg(MSG_TOPCOMMANDBAR + 14) Else ' stampo il messaggio nella StatusBar Map.refStatusBarVM.StatusOutput = EgtMsg(MSG_TOPCOMMANDBAR + 14) End If End Sub #End Region ' SendFeedbackCommand #Region "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() ' 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 EgtWPFLib5.EgtSaveFileDialog 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 SaveFileDialog.EgtShowDialog Then 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) 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) = ".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 "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() ' 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 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 ' Lancio la finestra per chiedere il nome dell'assemblato Dim SaveFileDialog As New EgtWPFLib5.EgtSaveFileDialog ' New Door SaveFileDialog.Title = EgtMsg(50113) SaveFileDialog.Directory = LocalCurrProject.Name SaveFileDialog.Extension = DDF_EXTENSION ' Se annullo esco If Not SaveFileDialog.EgtShowDialog Then Return ' Controllo se il nome della porta ha estensione If Path.HasExtension(SaveFileDialog.FileName) Then Dim sExtension As String = Path.GetExtension(SaveFileDialog.FileName) If Not sExtension.ToLower = DDF_EXTENSION Then SaveFileDialog.FileName = SaveFileDialog.FileName.Replace(sExtension, DDF_EXTENSION) End If Else SaveFileDialog.FileName &= DDF_EXTENSION 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 bNameExist = False Next ' se il nome è nella lista allora sovrascrivo la porta esistente If bNameExist Then ' elimino la porta esistente If File.Exists(SaveFileDialog.FileName) Then Try File.Delete(SaveFileDialog.FileName) Catch ex As FileNotFoundException ' non è un problema Catch ex As Exception ' non è un problema End Try End If ' elimino dalla lista 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 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 LocalCurrProject.SelAssemblyName = Local_AssemblyName Map.refAssemblyManagerVM.Save(LocalCurrProject.SelAssemblyName) Map.refAssemblyManagerVM.Open(LocalCurrProject.AssemblyList(LocalCurrProject.AssemblyList.Count - 1)) 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 ' 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() Map.refSceneManagerVM.RefreshBtn() ' carico la lista dei nomi delle geometrie CompoMatch.LoadTableGeometry() Map.refHardwareHelpSceneHostV.CleanHelpProject() End Sub #End Region ' LastProject #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) ' 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.Height = 550 PrintWindow.Width = 650 PrintWindow.ShowDialog() End Sub #End Region ' PrintCommand #End Region ' Commands Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Public Sub NotifyPropertyChanged(propName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) End Sub End Class