Imports EgtUILib Imports EgtWPFLib5 Imports System.IO Imports System.Threading Imports System.Windows.Threading Public Class MainWindowVM Inherits VMBase ' Riferimento al Model della MainWindow Private m_MainWindowM As MainWindowM Friend ReadOnly Property MainWindowM As MainWindowM Get Return m_MainWindowM End Get End Property ' Funzioni di callback per output in interfaccia da LUA Private m_ProcEventsCallback As New ProcessEventsCallback(AddressOf ProcessEvents) ' 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 Public ReadOnly Property sTitle As String Get Return "EgtWindowMaker" End Get End Property Public ReadOnly Property sProjectName As String Get Dim sFilePath As String = "" EgtGetCurrFilePath(sFilePath) If String.IsNullOrEmpty(sFilePath) Then sFilePath = EgtMsg(MSG_TOPCOMMANDBAR + 1) & Map.refMainWindowVM.MainWindowM.nInstance.ToString() Return sFilePath Else Return Path.GetFileNameWithoutExtension(sFilePath) & If(EgtGetModified(), "*", "") End If End Get End Property Public ReadOnly Property sProjectPath As String Get Dim sFilePath As String = "" EgtGetCurrFilePath(sFilePath) If String.IsNullOrEmpty(sFilePath) Then sFilePath = EgtMsg(MSG_TOPCOMMANDBAR + 1) & Map.refMainWindowVM.MainWindowM.nInstance.ToString() End If Return sFilePath End Get End Property Private m_MachinePanelVM As MachinePanelVM Public ReadOnly Property MachinePanelVM As MachinePanelVM Get Return m_MachinePanelVM End Get End Property Private m_SelPage As Pages Public Property SelPage As Integer Get Return m_SelPage End Get Set(value As Integer) SetSelPage(value) End Set End Property Friend Sub SetSelPage(Page As Pages) Dim bOk As Boolean = True ' Esco dallo stato corrente Select Case m_SelPage Case Pages.HOME 'bOk = ExitHOME() Case Pages.ESTIMATING 'bOk = ExitESTIMATING() Case Pages.PRODUCING ' bOk = ExitPRODUCING() Case Pages.DESIGNING 'bOk = ExitDESIGNING() End Select If bOk Then ' Entro nel nuovo stato m_SelPage = Page Select Case m_SelPage Case Pages.HOME 'bOk = InitHOME() Case Pages.ESTIMATING 'bOk = InitESTIMATING() bOk = Map.refCRMPageVM.InitCRMPage() Case Pages.PRODUCING 'bOk = InitPRODUCING() Case Pages.DESIGNING 'bOk = InitDESIGNING() End Select End If NotifyPropertyChanged(NameOf(SelPage)) End Sub ' 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 ' Installo funzione gestione eventi per lua EgtSetProcessEvents(m_ProcEventsCallback) End Sub #End Region ' CONSTRUCTOR '#Region "METHODS" Friend Sub ContentRendered() End Sub Friend Sub KeyDown(PressedKey As Key) ' ' Con ESC esco dall'azione corrente ' If PressedKey = Key.Escape Then ' ' resetto sempre input box a meno che non sia nelle ribs e stia creando il percorso ' If Not (Not IsNothing(Map.refTopPanelVM.SelPage) AndAlso Map.refTopPanelVM.SelPage = Pages.MODIFY AndAlso ' Not IsNothing(Map.refTopPanelVM.SelModifyMode) AndAlso ' ((Map.refTopPanelVM.SelModifyMode.ModifyMode = ModifyModes.RIBS AndAlso Map.refRibPanelVM.bIsCreatingPath) OrElse ' (Map.refTopPanelVM.SelModifyMode.ModifyMode = ModifyModes.SHELLNUMBER AndAlso Map.refShellNumberPanelVM.bIsCreatingPath))) Then ' Map.refControllerInputPanelVM.ResetInputBox() ' End If ' If Not IsNothing(Map.refTopPanelVM.SelPage) AndAlso Map.refTopPanelVM.SelPage = Pages.MODIFY AndAlso ' Not IsNothing(Map.refTopPanelVM.SelModifyMode) Then ' Dim nNewExtrusionLayerId As Integer = GDB_ID.NULL ' If Map.refTopPanelVM.SelModifyMode.ModifyMode = ModifyModes.RIBS Then ' ' cancello eventuali layer di modifica ' If Not IsNothing(Map.refTopPanelVM.SelPart) AndAlso Not Map.refRibPanelVM.bIsCreatingPath Then ' nNewExtrusionLayerId = EgtGetFirstNameInGroup(Map.refTopPanelVM.SelPart.nPartId, LAY_NEWEXTRUSION) ' If nNewExtrusionLayerId <> GDB_ID.NULL Then ' EgtErase(nNewExtrusionLayerId) ' End If ' Dim nNewRibLayerId As Integer = EgtGetFirstNameInGroup(Map.refTopPanelVM.SelPart.nPartId, LAY_NEWRIB) ' If nNewRibLayerId <> GDB_ID.NULL Then ' EgtErase(nNewRibLayerId) ' End If ' End If ' ' annullo trasparenza attivata durante edit rib ' If Not IsNothing(Map.refRibPanelVM.SelRib) Then ' 'EgtSetAlpha(Map.refRibPanelVM.SelRib.nExtrusionId, 100) ' End If ' ElseIf Map.refTopPanelVM.SelModifyMode.ModifyMode = ModifyModes.SHELLNUMBER Then ' ' cancello eventuali layer di modifica ' If Not IsNothing(Map.refTopPanelVM.SelPart) AndAlso Not Map.refShellNumberPanelVM.bIsCreatingPath Then ' nNewExtrusionLayerId = EgtGetFirstNameInGroup(Map.refTopPanelVM.SelPart.nPartId, LAY_NEWEXTRUSION) ' If nNewExtrusionLayerId <> GDB_ID.NULL Then ' EgtErase(nNewExtrusionLayerId) ' End If ' Dim nNewRibLayerId As Integer = EgtGetFirstNameInGroup(Map.refTopPanelVM.SelPart.nPartId, LAY_NEWRIB) ' If nNewRibLayerId <> GDB_ID.NULL Then ' EgtErase(nNewRibLayerId) ' End If ' End If ' ' annullo trasparenza attivata durante edit rib ' If Not IsNothing(Map.refShellNumberPanelVM.SelShellNumber) Then ' 'EgtSetAlpha(Map.refShellNumberPanelVM.SelShellNumber.nExtrusionId, 100) ' End If ' End If ' End If ' ' reset Azione corrente ' Map.refSceneHostVM.MainController.ResetStatus() ' ' se misura attiva, la disattivo ' If Map.refInstrumentPanelVM.GetDistIsChecked Then ' Map.refInstrumentPanelVM.SetGetDistance_IsChecked(False) ' End If ' ' pulisco output ' Map.refMyStatusBarVM.ClearOutputMessage() ' End If End Sub Private Function ProcessEvents(ByVal nProg As Integer, ByVal nPause As Integer) As Integer ' If Map.refSliceManagerVM.bCalculating OrElse Map.refSliceManagerVM.bCalcSolid Then ' Map.refSliceManagerVM.ProcessEvents(nProg, nPause) ' End If ' If Not IsNothing(Map.refImportLoadingWndVM) Then ' Map.refImportLoadingWndVM.ProcessEvents(nProg, nPause) ' End If ' Map.refMyStatusBarVM.ProcessEvents(nProg, nPause) ' Return 0 End Function Friend Sub CloseApplication() If (Keyboard.Modifiers And ModifierKeys.Alt) = ModifierKeys.Alt OrElse Keyboard.IsKeyDown(Key.F4) Then Return End If '' gestisco la chiusura della simulazione 'If Map.refRightPanelVM.SelPanel = RightPanelVM.Panels.SIMULATION AndAlso Not IsNothing(Map.refSimulationPanelVM) Then ' Map.refSimulationPanelVM.MySimul.ResetSimulation() '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()) ' Salvo stato visualizzazione direzione curve WriteMainPrivateProfileString(S_SCENE, K_CURVEDIR, If(EgtGetShowCurveDirection(), "1", "0")) '' Salvo stato visualizzazione griglia 'WriteMainPrivateProfileString(S_GRID, K_SHOWGRID, If(Map.refMyStatusBarVM.bGridVisibility, "1", "0")) ' Termino il Model m_MainWindowM.Close() ' Termino il programma Application.Current.Shutdown() End Sub #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. Public Sub CloseApplication(ByVal param As Object) 'If Map.refSliceManagerVM.bCalculating Then ' MessageBox.Show("Impossible closing software! Wait end of calculation!", "Error", MessageBoxButton.OK, MessageBoxImage.Error) ' Return 'End If CloseApplication() End Sub #End Region ' CloseApplicationCommand #End Region ' COMMANDS End Class