Imports EgtUILib Imports EgtWPFLib5 Imports System.IO Imports System.Threading Imports System.Windows.Threading Public Class MainWindowVM Inherits VMBase Private m_SupervisorCommThread As Thread Private m_Supervisor_Timer As New DispatcherTimer ' Riferimento al Model della MainWindow Private m_MainWindowM As MainWindowM Friend ReadOnly Property MainWindowM As MainWindowM Get Return m_MainWindowM End Get End Property ' Variabile che indica che il programma è stato avviato correttamente (sia la mappa che l'ambiente Egt) Private m_bInitStatus As Boolean Friend ReadOnly Property bInitStatus As Boolean Get Return m_bInitStatus End Get End Property ' Titolo Private m_Title As String = "" Public ReadOnly Property Title As String Get Return m_Title End Get End Property ' proprietà che seleziona la giusta pagina del TabControl Public Property nSelTabPage As Integer Get ' Return If(IsNothing(Map.refMainMenuVM.SelPage) OrElse Map.refMainMenuVM.SelPage = -1 OrElse Map.refMainMenuVM.SelPage = Pages.VIEW OrElse Map.refMainMenuVM.SelPage = Pages.MACHINING, 0, 1) End Get Set(value As Integer) End Set End Property Private m_MachinePanelVM As MachinePanelVM Public ReadOnly Property MachinePanelVM As MachinePanelVM Get Return m_MachinePanelVM End Get End Property 'Friend m_SupervisorStop As Boolean = False 'Private BlockedWnd As BlockedWndV ' definizione comandi Private m_cmdAboutBox As ICommand Private m_cmdCloseApplication As ICommand #Region "CONSTRUCTOR" Sub New() ' Avvio l'inizializzazione della mappa passandogli il riferimento al MainWindowVM Map.BeginInit(Me) ' Creo Model della MainWindow m_MainWindowM = New MainWindowM ' inizializzo machine panel m_MachinePanelVM = New MachinePanelVM ' inizializzo contatore per blocco da supervisore m_Supervisor_Timer.Interval = TimeSpan.FromMilliseconds(500) ' AddHandler m_Supervisor_Timer.Tick, AddressOf SupervisorTimer_Tick m_Supervisor_Timer.Start() End Sub #End Region ' CONSTRUCTOR '#Region "METHODS" ' Friend Sub SetTitle(sTitle As String) ' m_Title = sTitle ' NotifyPropertyChanged(NameOf(Title)) ' End Sub ' Public Sub UpdateTitle() ' m_Title = "" ' Select Case Map.refMainMenuVM.SelPage ' Case Pages.VIEW ' If Not IsNothing(Map.refProjManagerVM.CurrProj) Then ' If Map.refProjManagerVM.CurrProj.bIsNew Then m_Title = "New - " ' m_Title &= Map.refProjManagerVM.CurrProj.nProjId.ToString("0000") & " - " & Map.refProjManagerVM.CurrProj.sBTLFileName ' End If ' Case Pages.MACHINING ' If Not IsNothing(Map.refProdManagerVM.CurrProd) Then ' If Map.refProdManagerVM.CurrProd.bIsNew Then m_Title = "New - " ' m_Title &= Map.refProdManagerVM.CurrProd.nProdId.ToString("0000") & " - " & Map.refProdManagerVM.CurrProd.sBTLFileName ' End If ' Case Pages.CONFIG ' m_Title = "Configuration Page" ' End Select ' m_Title &= " - EgtBEAMWALL" ' NotifyPropertyChanged(NameOf(Title)) ' End Sub ' Friend Sub ContentRendered() ' DbControllers.Init() ' '' chiamata a caso su Db per inizializzarlo ' DbControllers.m_ProjController.FindByProjDbId(0) ' ' Verifico che l'inizializzazione di tutte le parti del programma sia andata a buon fine ' If Map.EndInit() Then ' m_bInitStatus = True ' ' altrimenti chiudo il programma ' Else ' m_bInitStatus = False ' End If ' ' Aggiorno visualizzazione unità di misura ' 'Map.refStatusBarVM.SetMeasureUnit(If(EgtUiUnitsAreMM(), MeasureUnitOpt.MM, MeasureUnitOpt.INCH)) ' ' imposto MainWindow per finestra di Loading ' LoadingWndHelper.SetMainWindow(Application.Current.MainWindow) ' ' leggo riga di comando ' Dim nCommandType As Integer = 0 ' Dim nPage As Pages = Pages.VIEW ' Dim nProdId As Integer = 0 ' If ProcessCommandLine(nCommandType, nPage, nProdId) Then ' Select Case nCommandType ' Case 1 ' Map.refProdManagerVM.SetCurrProd(nProdId) ' Case 2 ' ' pagina gia' impostata nella variabile ' End Select ' Else ' ' setto il primo file dalla lista degli MRU come progetto corrente da aprire ' Dim sLastProjectPath As String = String.Empty ' GetMainPrivateProfileString(S_MRUPROJFILES, K_FILE & "1", String.Empty, sLastProjectPath) ' If Not String.IsNullOrWhiteSpace(sLastProjectPath) AndAlso File.Exists(sLastProjectPath) Then ' ' ricavo l'Id e il progetto associato per l'apertura di quest'ultimo ' Dim PjId As Integer = 0 ' Dim sPjId As String = Path.GetFileNameWithoutExtension(sLastProjectPath) ' Integer.TryParse(sPjId, PjId) ' Map.refProjManagerVM.SetCurrProj(PjId) ' End If ' End If ' ' seleziono pagina da aprire ' Map.refMainMenuVM.SelPage = nPage ' ' inizializzo thread di aggiornamento e comunicazione con DB ' ' creo thread gestione macchina ' m_SupervisorCommThread = New Thread(Sub() ' SupervisorCommThread.SupervisorCommThreadFunction() ' End Sub) ' m_SupervisorCommThread.SetApartmentState(ApartmentState.STA) ' ' avvio thread di gestione della macchina che avvia la connessione ' m_SupervisorCommThread.Start() ' End Sub ' Friend Function ProcessCommandLine(ByRef nCommandType As Integer, ByRef nPage As Pages, ByRef nProdId As Integer) As Boolean ' ' Se non ci sono veri parametri su linea di comando, esco (il primo è sempre il nome del programma) ' If Environment.GetCommandLineArgs.Count() <= 1 Then Return False ' ' Recupero primo parametro che dovrebbe essere il tipo di modalita' riga di comando ' Dim sFile As String = Environment.GetCommandLineArgs(1) ' If String.IsNullOrWhiteSpace(sFile) OrElse Not Integer.TryParse(sFile, nCommandType) OrElse nCommandType <= 0 Then Return False ' Select Case nCommandType ' Case 1 ' apri progetto in ottimizzatore ' ' recupero secondo parametro ' Dim sProdId As String = Environment.GetCommandLineArgs(2) ' If Not Integer.TryParse(sProdId, nProdId) OrElse nProdId <= 0 Then Return False ' nPage = Pages.MACHINING ' Return True ' Case 2 ' apri pagina specifica senza progetto specifico ' ' recupero secondo parametro ' Dim sPage As String = Environment.GetCommandLineArgs(2) ' If Not Integer.TryParse(sPage, nPage) OrElse (nPage <> Pages.VIEW AndAlso nPage <> Pages.MACHINING) Then Return False ' Return True ' End Select ' Return False ' End Function ' Friend Sub KeyDown(PressedKey As Key) ' ' Con ESC esco dall'azione corrente ' If PressedKey = Key.Escape Then ' ' se in modifica L250 ' If Map.refFreeContourManagerVM.bIsActive Then ' ' se in modifica testo angolo di inclinazione ' If Map.refFreeContourManagerVM.bIsModifyingTextAngle Then ' Map.refFreeContourManagerVM.CloseIsModifyingTextAngle(False) ' End If ' ' reset Azione corrente ' Map.refSceneHostVM.MainController.ResetStatus() ' Map.refFreeContourInputVM.ResetInputBox() ' End If ' ' se misura attiva, la disattivo ' If Map.refInstrumentPanelVM.GetDistIsChecked Then ' Map.refInstrumentPanelVM.SetGetDistance_IsChecked(False) ' End If ' ' se Reset Macchina è aperto ' If (nSelTabPage = Pages.VIEW Or nSelTabPage = Pages.MACHINING) AndAlso Map.refCALCPanelVM.ChooseMachine_Visibility = Visibility.Visible Then ' Map.refCALCPanelVM.CloseResetMachine() ' End If ' ' pulisco output ' Map.refMyStatusBarVM.ClearOutputMessage() ' End If ' End Sub ' Friend m_ManagingSupervisorStop As Boolean = False ' Private Sub SupervisorTimer_Tick() ' If SupervisorCommThread.bViewerOptimizerBlocked And Not m_ManagingSupervisorStop Then ' m_ManagingSupervisorStop = True ' BlockedWnd = New BlockedWndV(Application.Current.MainWindow, New BlockedWndVM) ' BlockedWnd.ShowDialog() ' ElseIf Not SupervisorCommThread.bViewerOptimizerBlocked And m_ManagingSupervisorStop Then ' m_ManagingSupervisorStop = False ' BlockedWnd.Close() ' End If ' End Sub '#End Region ' METHODS '#Region "COMMANDS" '#Region "AboutBoxCommand" ' ' Returns a command that manage the MainWindow_Unloaded command ' Public ReadOnly Property AboutBoxCommand() As ICommand ' Get ' If m_cmdAboutBox Is Nothing Then ' m_cmdAboutBox = New Command(AddressOf AboutBox) ' End If ' Return m_cmdAboutBox ' End Get ' End Property ' ' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded. ' Public Sub AboutBox(ByVal param As Object) ' Dim AboutBoxWindow As New AboutBoxV ' AboutBoxWindow.Owner = Application.Current.MainWindow ' AboutBoxWindow.ShowDialog() ' End Sub '#End Region ' AboutBoxCommand '#Region "CloseApplicationCommand" ' ' Returns a command that manage the MainWindow_Unloaded command ' Public ReadOnly Property CloseApplicationCommand() As ICommand ' Get ' If m_cmdCloseApplication Is Nothing Then ' m_cmdCloseApplication = New Command(AddressOf CloseApplication) ' End If ' Return m_cmdCloseApplication ' End Get ' End Property ' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded. Friend Sub CloseApplication() If (Keyboard.Modifiers And ModifierKeys.Alt) = ModifierKeys.Alt OrElse Keyboard.IsKeyDown(Key.F4) Then Return End If ' Gestisco eventuale file corrente modificato Dim bOk As Boolean = True 'bOk = ProjFileVM.VerifyProjectModification(Map.refProjManagerVM.CurrProj, ProjectType.PROJ) ' se salvataggio annullato, rimango If Not bOk Then Return Dim bAllowClose As Boolean = Map.refSceneHostVM.MainController.ManageModified() ' Salvo impostazione macchina corrente 'Map.refMachinePanelVM.SaveCurrentMachine() ' Se non confermata chiusura, esco If Not bAllowClose Then Return ' salvo modo di visualizzazione WriteMainPrivateProfileString(S_SCENE, K_SHOWMODE, EgtGetShowMode().ToString) ' Termino il Model m_MainWindowM.Close() ' Termino il programma Application.Current.Shutdown() End Sub '#End Region ' CloseApplicationCommand '#End Region ' COMMANDS End Class