Imports System.Collections.ObjectModel Imports System.IO Imports EgtUILib Imports EgtWPFLib5 Public Class ProdManagerVM Inherits VMBase #Region "FIELDS & PROPERTIES" Private m_CurrProd As ProjectFile Friend Property CurrProd As ProjectFile Get Return m_CurrProd End Get Set(value As ProjectFile) m_CurrProd = value End Set End Property ' indice ultimo progetto Private m_nLastProdId As Integer Friend ReadOnly Property nLastProdId As Integer Get Return m_nLastProdId End Get End Property ' Definizione comandi Private m_cmdOpen As ICommand Private m_cmdSave As ICommand Private m_cmdGoToProj As ICommand #Region "ToolTip" 'Proprietà ToolTip 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 #End Region ' ToolTip #End Region ' Fields & Properties #Region "CONSTRUCTOR" Sub New() ' Creo riferimento a questa classe in Map Map.SetRefProdManagerVM(Me) ' Leggo ultimo indice di progetto m_nLastProdId = GetMainPrivateProfileInt(S_GENERAL, K_PRODSINDEX, 1) End Sub #End Region ' CONSTRUCTOR #Region "COMMANDS" #Region "OpenCommand" ''' ''' Returns a command that do Open. ''' 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. ''' Friend Sub Open() OpenProject(String.Empty) End Sub Friend Sub OpenProject(sFilePath As String) ' verifico se progetto modificato, e chiedo se salvare ProjectFile.VerifyProjectModification(CurrProd, ProjectType.PROD) ' se la string è vuota Dim TempCurrProd As ProjectFile Dim OpenProjectFileDialogVM As OpenProjectFileDialogVM = Nothing If String.IsNullOrEmpty(sFilePath) Then ' apro dialogo di scelta file OpenProjectFileDialogVM = New OpenProjectFileDialogVM Dim OpenFile As New OpenProjectFileDialogV(Application.Current.MainWindow, OpenProjectFileDialogVM) Dim DialogResult As Boolean? = OpenFile.EgtShowDialog(ProjectType.PROD) If IsNothing(DialogResult) OrElse Not DialogResult Then Return sFilePath = OpenProjectFileDialogVM.SelProject.sProdPath TempCurrProd = OpenProjectFileDialogVM.SelProject Else Dim nProjId As Integer = 0 Dim nProdId As Integer = 0 Dim sBTLFileName As String = "" If ProjectFile.VerifyProjectFile(ProjectType.PROD, Path.GetFileNameWithoutExtension(sFilePath), nProjId, nProdId, sBTLFileName) Then TempCurrProd = New ProjectFile(ProjectType.PROD, nProjId, nProdId, sBTLFileName) Else MessageBox.Show("Error in file name!!") Return End If End If If File.Exists(sFilePath) Then If Map.refSceneHostVM.MainController.OpenProject(sFilePath, False) Then If Map.refMachGroupPanelVM.InitMachGroupList() Then m_CurrProd = TempCurrProd Map.refMainWindowVM.SetTitle(CurrProd.nProdId.ToString("0000") & " - EgtBEAMWALL") Else MessageBox.Show("Impossibile aprire gruppi di lavorazione del file!!") Map.refSceneHostVM.MainController.NewProject() Map.refMainWindowVM.SetTitle("New - EgtBEAMWALL") End If Else MessageBox.Show("Impossibile aprire il file!!") Map.refSceneHostVM.MainController.NewProject() Map.refMainWindowVM.SetTitle("New - EgtBEAMWALL") End If Else MessageBox.Show("File non trovato!!") Map.refSceneHostVM.MainController.NewProject() Map.refMainWindowVM.SetTitle("New - EgtBEAMWALL") End If End Sub #End Region ' OpenCommand #Region "SaveCommand" ''' ''' Returns a command that do Save. ''' 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 ''' ''' Execute the Save. This method is invoked by the SaveCommand. ''' Public Sub Save() Map.refSceneHostVM.SaveProject() Map.refMainWindowVM.SetTitle(CurrProd.nProdId.ToString("0000") & " - EgtBEAMWALL") Dim MyMachGroupList As New List(Of Core.MyMachGroup) For Each MachGroup In Map.refProjectVM.MachGroupPanelVM.MachGroupList If Map.refMachinePanelVM.SelectedMachine.nType = MachineType.BEAM Then MyMachGroupList.Add(New Core.BeamMachGroup(MachGroup.Id, MachGroup.Name, MachGroup.Machine)) ElseIf Map.refMachinePanelVM.SelectedMachine.nType = MachineType.WALL Then MyMachGroupList.Add(New Core.WallMachGroup(MachGroup.Id, MachGroup.Name, MachGroup.Machine)) End If Next 'If Map.refMachinePanelVM.SelectedMachine.nType = MachineType.BEAM Then ' MyMachGroupList = Map.refProjectVM.MachGroupPanelVM.MachGroupList.Select(Function(x) New Core.BeamMachGroup(x.Id, x.Name, x.Machine)).ToList() 'ElseIf Map.refMachinePanelVM.SelectedMachine.nType = MachineType.wall Then ' MyMachGroupList = Map.refProjectVM.MachGroupPanelVM.MachGroupList.Select(Function(x) New Core.WallMachGroup(x.Id, x.Name, x.Machine)) 'End If DbControllers.m_ProdController.UpdateMachGroup(CurrProd.nProdId, MyMachGroupList.ToList()) ' se nuovo progetto, incremento l'indice di progetto If m_CurrProd.NewProd Then m_nLastProdId = m_nLastProdId + 1 WriteMainPrivateProfileString(S_GENERAL, K_PRODSINDEX, (m_nLastProdId).ToString()) m_CurrProd.NewProd = False End If End Sub #End Region ' SaveCommand #Region "GoToProj" ''' ''' Returns a command that do Open. ''' Public ReadOnly Property GoToProj_Command As ICommand Get If m_cmdGoToProj Is Nothing Then m_cmdGoToProj = New Command(AddressOf GoToProj) End If Return m_cmdGoToProj End Get End Property ''' ''' Execute the Open. This method is invoked by the OpenCommand. ''' Friend Sub GoToProj() ' verifico se salvare progetto corrente ProjectFile.VerifyProjectModification(Map.refProdManagerVM.CurrProd, ProjectType.PROD) ' cerco proj associato Dim ProjList As New List(Of ProjectFile) Dim AllDirsInDir As IEnumerable(Of String) = IO.Directory.EnumerateDirectories(Map.refMainWindowVM.MainWindowM.sProjsDir) For Each Directory In AllDirsInDir Dim AllFilesInDir As IEnumerable(Of String) = IO.Directory.EnumerateFiles(Directory) For Each File In AllFilesInDir If Path.GetExtension(File).ToLower() = ".nge" Then If File.Contains(FILENAMESEPARATOR) Then Dim DataFromFileName As String() = File.Split(FILENAMESEPARATOR) If DataFromFileName.Count = 3 Then If Not String.IsNullOrEmpty(DataFromFileName(1)) Then Dim nTempProdId As Integer = 0 Integer.TryParse(DataFromFileName(1), nTempProdId) If nTempProdId = CurrProd.nProdId Then ProjList.Add(New ProjectFile(ProjectType.PROJ, Path.GetFileNameWithoutExtension(File))) End If End If End If End If End If Next Next If ProjList.Count = 0 Then Return ' se c'è più di un proj Dim Proj As ProjectFile If ProjList.Count > 1 Then ' apro dialogo di scelta file Dim OpenProjectFileDialogVM As New OpenProjectFileDialogVM Dim OpenFile As New OpenProjectFileDialogV(Application.Current.MainWindow, OpenProjectFileDialogVM) Dim DialogResult As Boolean? = OpenFile.EgtShowDialog(ProjectType.PROJ, ProjList) If IsNothing(DialogResult) OrElse Not DialogResult Then Return Proj = OpenProjectFileDialogVM.SelProject Else Proj = ProjList(0) End If ' apro progetto proj Map.refProjManagerVM.CurrProj = Proj ' vado in pagina prod Map.refMainMenuVM.SetSelPage(Pages.VIEW, False) End Sub #End Region ' GoToProj #End Region ' Commands End Class