Imports System.Collections.ObjectModel Imports EgtUILib Imports EgtWPFLib Imports System.ComponentModel Imports System.Threading Imports System.Windows.Threading Class MainWindow ' Mutex per avere una sola istanza del programma in esecuzione Private m_objMutex As New Mutex ' Dichiarazione della classe di connessione al CN Friend m_CNCommunication As CNCommunication ' Variabile per presenza collegamento al CN Friend m_bNCLink As Boolean = False ' Dichiarazione della MachineStatusBar Friend m_MachineStatusUC As MachineStatusUC ' Dichiarazione delle Page UserControl Friend m_WorkInProgressPageUC As WorkInProgressPageUC Friend m_CurrentProjectPageUC As CurrentProjectPageUC Friend m_DirectCutPageUC As DirectCutPageUC Friend m_CadCutPageUC As CadCutPageUC Friend m_OpenPage As OpenPageUC Friend m_PhotoPage As PhotoPageUC Friend m_RawPartPage As RawPartPageUC Friend m_SimulationPage As SimulationPageUC Friend m_DrawPageUC As DrawPageUC Friend m_ImportPageUC As ImportPageUC Friend m_FrameCutPageUC As FrameCutPageUC Friend m_MachinePageUC As MachinePageUC Friend m_OptionsPageUC As OptionsPageUC ' Riferimento alla NumericKeyboard necessario per poter impedire il click fuori da essa quando attiva Friend m_NumericKeyboardWD As NumericKeyboardWD ' Dichiarazione variabili direttori Private m_sDataRoot As String = String.Empty Private m_sConfigDir As String = String.Empty Private m_sResourcesDir As String = String.Empty Private m_sTempDir As String = String.Empty Private m_sSaveDir As String = String.Empty Private m_sCncDir As String = String.Empty Private m_sMachinesRoot As String = String.Empty Private m_sIniFile As String = String.Empty Private m_sMachIniFile As String = String.Empty Private m_nDebug As Integer = 0 'Dichiarazione variabile contenente la lingua corrente Friend m_CurrLanguage As Language 'Dichiarazione lista delle lingue disponibili e lingua corrente Friend m_LanguagesList As New List(Of Language) ' Dichiarazione classe macchina Friend m_CurrentMachine As CurrentMachine ' Macchina corrente Private m_sCurrMachine As String = String.Empty ' Dichiarazione lista per ListBox della ImportPage Friend m_ImportItemList As New ObservableCollection(Of IconListBoxItem) Friend m_OpenItemList As New ObservableCollection(Of IconListBoxItem) Friend m_PhotoItemList As New ObservableCollection(Of IconListBoxItem) ' Dichiarazione lista materiali e materiale corrente Friend m_MaterialsList As New List(Of Material) Friend m_nCurrentMaterial As Integer = 0 ' Riferimento alla pagina correntemente attiva Friend m_ActivePage As Pages Friend Enum Pages WorkInProgress DirectCut CadCut Open RawPart Simulation Draw Import FrameCut Machine Alarms Options End Enum Public Function GetIniFile() As String Return m_sIniFile End Function Public Function GetResourcesDir() As String Return m_sResourcesDir End Function Public Function GetTempDir() As String Return m_sTempDir End Function Public Function GetSaveDir() As String Return m_sSaveDir End Function Public Function GetCamAutoDir() As String Return m_sDataRoot & "\" & CAMAUTO_DIR End Function Public Function GetCncDir() As String Return m_sCncDir End Function Public Function GetMachinesRootDir() As String Return m_sMachinesRoot End Function Public Function GetCurrMachine() As String Return m_sCurrMachine End Function Public Function GetMachIniFile() As String Return m_sMachIniFile End Function Private Sub Window_Initialized(sender As Object, e As EventArgs) ' Verifico sia l'unica istanza ManageSingleIstance() ' Impostazione path radice per i dati m_sDataRoot = System.AppDomain.CurrentDomain.BaseDirectory If GetPrivateProfileString(S_DATA, K_DATAROOT, "", m_sDataRoot, m_sDataRoot & "\" & DAT_FILE_NAME) = 0 Then m_sDataRoot = System.AppDomain.CurrentDomain.BaseDirectory End If ' Impostazione direttorio di configurazione m_sConfigDir = m_sDataRoot & "\" & CONF_DIR ' Impostazione direttorio delle risorse m_sResourcesDir = m_sDataRoot & "\" & RES_DIR ' Impostazione direttorio per file temporanei m_sTempDir = m_sDataRoot & "\" & TEMP_DIR ' Impostazione direttorio per file Cnc m_sCncDir = m_sDataRoot & "\" & CNC_DIR ' Impostazione path Ini file m_sIniFile = m_sConfigDir & "\" & INI_FILE_NAME ' Impostazione direttorio di salvataggio If GetPrivateProfileString(S_GENERAL, K_SAVEDIR, "", m_sSaveDir, m_sIniFile) = 0 Then m_sSaveDir = m_sDataRoot & "\" & SAVE_DFL_DIR End If ' Impostazione direttorio per le macchine If GetPrivateProfileString(S_MACH, K_MACHINESDIR, "", m_sMachinesRoot, m_sIniFile) = 0 Then m_sMachinesRoot = m_sDataRoot & "\" & MACHINES_DFL_DIR End If ' Recupero nome macchina corrente GetPrivateProfileString(S_MACH, K_CURRMACH, "", m_sCurrMachine, m_sIniFile) ' Impostazione path MachIni file m_sMachIniFile = m_sMachinesRoot & "\" & m_sCurrMachine & "\" & m_sCurrMachine & ".ini" ' Inizializzo classe macchina corrente m_CurrentMachine = New CurrentMachine ' Leggo e imposto chiave di protezione Dim sLicFileName As String = String.Empty GetPrivateProfileString(S_GENERAL, K_LICENCE, LIC_FILE_NAME, sLicFileName, m_sIniFile) Dim sLicFile As String = m_sConfigDir & "\" & sLicFileName Dim sKey As String = String.Empty GetPrivateProfileString(S_LICENCE, K_KEY, "", sKey, sLicFile) EgtSetKey(sKey) 'Inizializzazione generale di EgtInterface m_nDebug = GetPrivateProfileInt(S_GENERAL, K_DEBUG, 0, m_sIniFile) Dim sLogFile As String = m_sTempDir & "\" & GENLOG_FILE_NAME Dim sLogMsg As String = My.Application.Info.Description.ToString() & " ver. " & My.Application.Info.Version.ToString() EgtInit(m_nDebug, sLogFile, sLogMsg) ' Leggo direttorio dei messaggi (se manca uso direttorio di configurazione) Dim sMsgDir As String = String.Empty If GetPrivateProfileString(S_GENERAL, K_MESSAGESDIR, "", sMsgDir, m_sIniFile) = 0 Then sMsgDir = m_sConfigDir End If 'Leggo elenco lingue disponibili da file ini Dim nIndex As Integer = 1 Dim ReadLanguage As Language = GetPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex, GetIniFile) While Not IsNothing(ReadLanguage) m_LanguagesList.Add(ReadLanguage) nIndex += 1 ReadLanguage = GetPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex, GetIniFile) End While ' Leggo file messaggi Dim sMsgFile As String = String.Empty GetPrivateProfileString(S_GENERAL, K_MESSAGES, "", sMsgFile, m_sIniFile) For i As Integer = 0 To m_LanguagesList.Count - 1 If m_LanguagesList(i).LanguageName = sMsgFile Then m_CurrLanguage = m_LanguagesList(i) End If Next Dim sMsgFilePath As String = sMsgDir & "\EgalTechIta.txt" If Not IsNothing(m_CurrLanguage) Then sMsgFilePath = sMsgDir & "\" & m_CurrLanguage.FileName End If If Not EgtLoadMessages(sMsgFilePath) Then EgtOutLog("Error in EgtLoadMessages") End If Dim sNfeDir As String = String.Empty GetPrivateProfileString(S_GEOMDB, K_NFEFONTDIR, "", sNfeDir, m_sIniFile) Dim sDefFont As String = String.Empty GetPrivateProfileString(S_GEOMDB, K_DEFAULTFONT, "", sDefFont, m_sIniFile) EgtSetFont(sNfeDir, sDefFont) ' imposto dir di default per libreria Lua e lancio libreria di base Dim sLuaLibsDir As String = String.Empty GetPrivateProfileString(S_LUA, K_LIBSDIR, "", sLuaLibsDir, m_sIniFile) EgtSetLuaLibs(sLuaLibsDir) Dim sLuaBaseLib As String = String.Empty GetPrivateProfileString(S_LUA, K_BASELIB, "EgtBase", sLuaBaseLib, m_sIniFile) EgtLuaRequire(sLuaBaseLib) ' imposto unità di misura per interfaccia utente Dim bMM As Boolean = (GetPrivateProfileInt(S_GENERAL, K_MMUNITS, 1, m_sIniFile) <> 0) EgtSetUiUnits(bMM) ' Imposto posizione e dimensioni della MainWindow Dim nFlag As Integer Dim nLeft As Integer Dim nTop As Integer Dim nWidth As Integer Dim nHeight As Integer GetPrivateProfileWinPos(S_GENERAL, K_WINPLACE, nFlag, nLeft, nTop, nWidth, nHeight, m_sIniFile) Me.WindowStartupLocation = Windows.WindowStartupLocation.Manual Me.Top = nTop Me.Left = nLeft Me.Height = nHeight Me.Width = nWidth WindowState = If(nFlag = 1, WindowState.Maximized, WindowState.Normal) ' Inizializzazione della libreria EgtWPFLib EgtWPFInit() ' Crezione della MachineStatusBar m_MachineStatusUC = New MachineStatusUC ' Creazione delle Page UserControl m_WorkInProgressPageUC = New WorkInProgressPageUC m_DirectCutPageUC = New DirectCutPageUC m_CadCutPageUC = New CadCutPageUC m_OpenPage = New OpenPageUC m_PhotoPage = New PhotoPageUC m_RawPartPage = New RawPartPageUC m_SimulationPage = New SimulationPageUC m_DrawPageUC = New DrawPageUC m_ImportPageUC = New ImportPageUC m_FrameCutPageUC = New FrameCutPageUC m_CurrentProjectPageUC = New CurrentProjectPageUC m_MachinePageUC = New MachinePageUC m_OptionsPageUC = New OptionsPageUC ' Creazione gestore comunicazione con macchina CN m_CNCommunication = New CNCommunication ' Posizionamento nella griglia della MachineStatusBar m_MachineStatusUC.SetValue(Grid.RowProperty, 2) ' Posizionemento nella griglia delle Page UserControl m_WorkInProgressPageUC.SetValue(Grid.ColumnProperty, 0) m_WorkInProgressPageUC.SetValue(Grid.RowProperty, 1) m_OpenPage.SetValue(Grid.ColumnProperty, 0) m_OpenPage.SetValue(Grid.RowProperty, 1) m_PhotoPage.SetValue(Grid.ColumnProperty, 0) m_PhotoPage.SetValue(Grid.RowProperty, 1) m_RawPartPage.SetValue(Grid.ColumnSpanProperty, 2) m_RawPartPage.SetValue(Grid.RowSpanProperty, 3) m_SimulationPage.SetValue(Grid.ColumnSpanProperty, 2) m_SimulationPage.SetValue(Grid.RowSpanProperty, 3) m_DrawPageUC.SetValue(Grid.ColumnProperty, 0) m_DrawPageUC.SetValue(Grid.RowProperty, 1) m_ImportPageUC.SetValue(Grid.ColumnProperty, 0) m_ImportPageUC.SetValue(Grid.RowProperty, 1) m_CurrentProjectPageUC.SetValue(Grid.ColumnProperty, 0) m_CurrentProjectPageUC.SetValue(Grid.RowProperty, 1) m_MachinePageUC.SetValue(Grid.ColumnProperty, 0) m_MachinePageUC.SetValue(Grid.RowProperty, 1) m_OptionsPageUC.SetValue(Grid.ColumnProperty, 0) m_OptionsPageUC.SetValue(Grid.RowProperty, 1) 'Posizionemento nella griglia di pagine e usercontrol di utilità m_WorkInProgressPageUC.SetValue(Grid.ColumnProperty, 0) m_WorkInProgressPageUC.SetValue(Grid.RowProperty, 1) 'Disabilita la possibilità di imitare il click del tasto destro del mouse tenendo premuto il dito sul touch 'NB: Se abilitato impedisce di utilizzare lo stato Pressed dei Button che quindi non si evidenziano quando premuti Stylus.SetIsPressAndHoldEnabled(Me, False) ' Leggo lista materiali da file ini Dim index As Integer = 1 Dim sMaterial As String = String.Empty While GetPrivateProfileString(S_MATERIALS, K_MATERIAL & index, "", sMaterial, GetIniFile) > 0 Dim cMaterial As New Material(sMaterial) m_MaterialsList.Add(cMaterial) index += 1 End While ' Leggo materiale corrente da file ini Dim sCurrentMaterial As String = String.Empty GetPrivateProfileString(S_MATERIALS, K_CURRMATERIAL, "", sCurrentMaterial, GetIniFile) For i As Integer = 0 To m_MaterialsList.Count - 1 If sCurrentMaterial = m_MaterialsList(i).Name Then m_nCurrentMaterial = i Exit For End If Next ' Imposto i messaggi letti dal file dei messaggi WorkInProgressBtn.Content = EgtMsg(MSG_GENERAL + 1) DirectCutBtn.Content = EgtMsg(MSG_GENERAL + 2) CadCutBtn.Content = EgtMsg(MSG_GENERAL + 3) FrameCutBtn.Content = EgtMsg(MSG_GENERAL + 4) MachineBtn.Content = EgtMsg(MSG_GENERAL + 5) End Sub Private Sub ManageSingleIstance() Dim bCreated As Boolean Try m_objMutex = New Mutex(False, "Global\OmagCut", bCreated) Catch bCreated = False End Try If Not bCreated Then ' porto in primo piano la prima istanza Dim bFound As Boolean = False ' processi del programma a 32 bit Dim localProc As Process() = Process.GetProcessesByName("OmagCutR32") For Each p As Process In localProc If p.Id <> Process.GetCurrentProcess().Id Then bFound = True ShowWindow(p.MainWindowHandle, 1) Exit For End If Next ' se non trovati processi a 32 bit provo a 64 bit If Not bFound Then localProc = Process.GetProcessesByName("OmagCutR64") For Each p As Process In localProc If p.Id <> Process.GetCurrentProcess().Id Then bFound = True ShowWindow(p.MainWindowHandle, SW.RESTORE) Exit For End If Next End If ' esco dal programma End End If End Sub Private Sub Window_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) 'Aggiungo la MachineStatusBar alla MainWindow MainWindowGrid.Children.Add(m_MachineStatusUC) 'Seleziono la Tab e la Page di apertura MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_CadCutPageUC) m_ActivePage = Pages.CadCut CadCutBtn.IsChecked = True End Sub Private Sub WorkInProgressBtn_Click(sender As Object, e As RoutedEventArgs) Handles WorkInProgressBtn.Click Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = True Case Pages.DirectCut WorkInProgressBtn.IsChecked = True DirectCutBtn.IsChecked = False m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_DirectCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_WorkInProgressPageUC) m_ActivePage = Pages.WorkInProgress Case Pages.CadCut WorkInProgressBtn.IsChecked = True CadCutBtn.IsChecked = False m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_CadCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_WorkInProgressPageUC) m_ActivePage = Pages.WorkInProgress Case Pages.RawPart WorkInProgressBtn.IsChecked = False CadCutBtn.IsChecked = True Case Pages.Simulation WorkInProgressBtn.IsChecked = False CadCutBtn.IsChecked = True Case Pages.Draw WorkInProgressBtn.IsChecked = False CadCutBtn.IsChecked = True Case Pages.Import WorkInProgressBtn.IsChecked = False CadCutBtn.IsChecked = True Case Pages.FrameCut WorkInProgressBtn.IsChecked = True FrameCutBtn.IsChecked = False m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_FrameCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_WorkInProgressPageUC) m_ActivePage = Pages.WorkInProgress Case Pages.Machine WorkInProgressBtn.IsChecked = False If Not ExitFromMachine() Then WorkInProgressBtn.IsChecked = False MachineBtn.IsChecked = True Exit Sub End If WorkInProgressBtn.IsChecked = True MachineBtn.IsChecked = False MainWindowGrid.Children.Remove(m_MachinePageUC) MainWindowGrid.Children.Add(m_WorkInProgressPageUC) m_ActivePage = Pages.WorkInProgress Case Pages.Options WorkInProgressBtn.IsChecked = True OptionsBtn.IsChecked = False MainWindowGrid.Children.Remove(m_OptionsPageUC) MainWindowGrid.Children.Add(m_WorkInProgressPageUC) m_ActivePage = Pages.WorkInProgress End Select End Sub Private Sub DirectCutBtn_Click(sender As Object, e As RoutedEventArgs) Handles DirectCutBtn.Click Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False DirectCutBtn.IsChecked = True MainWindowGrid.Children.Remove(m_WorkInProgressPageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_DirectCutPageUC) m_ActivePage = Pages.DirectCut Case Pages.DirectCut DirectCutBtn.IsChecked = True Case Pages.CadCut DirectCutBtn.IsChecked = True CadCutBtn.IsChecked = False m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_CadCutPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_DirectCutPageUC) m_ActivePage = Pages.DirectCut Case Pages.RawPart DirectCutBtn.IsChecked = False CadCutBtn.IsChecked = True Case Pages.Simulation DirectCutBtn.IsChecked = False CadCutBtn.IsChecked = True Case Pages.Draw DirectCutBtn.IsChecked = False CadCutBtn.IsChecked = True Case Pages.Import DirectCutBtn.IsChecked = False CadCutBtn.IsChecked = True Case Pages.FrameCut DirectCutBtn.IsChecked = True FrameCutBtn.IsChecked = False m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_FrameCutPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_DirectCutPageUC) m_ActivePage = Pages.DirectCut Case Pages.Machine DirectCutBtn.IsChecked = False If Not ExitFromMachine() Then DirectCutBtn.IsChecked = False MachineBtn.IsChecked = True Exit Sub End If DirectCutBtn.IsChecked = True MachineBtn.IsChecked = False MainWindowGrid.Children.Remove(m_MachinePageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_DirectCutPageUC) m_ActivePage = Pages.DirectCut Case Pages.Options DirectCutBtn.IsChecked = True OptionsBtn.IsChecked = False MainWindowGrid.Children.Remove(m_OptionsPageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_DirectCutPageUC) m_ActivePage = Pages.DirectCut End Select End Sub Private Sub CadCutBtn_Click(sender As Object, e As RoutedEventArgs) Handles CadCutBtn.Click Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False CadCutBtn.IsChecked = True MainWindowGrid.Children.Remove(m_WorkInProgressPageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_CadCutPageUC) m_ActivePage = Pages.CadCut Case Pages.DirectCut DirectCutBtn.IsChecked = False CadCutBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_DirectCutPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_CadCutPageUC) m_ActivePage = Pages.CadCut Case Pages.CadCut CadCutBtn.IsChecked = True Case Pages.RawPart CadCutBtn.IsChecked = True Case Pages.Simulation CadCutBtn.IsChecked = True Case Pages.Draw CadCutBtn.IsChecked = True Case Pages.Import CadCutBtn.IsChecked = True Case Pages.FrameCut CadCutBtn.IsChecked = True FrameCutBtn.IsChecked = False m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_FrameCutPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_CadCutPageUC) m_ActivePage = Pages.CadCut Case Pages.Machine CadCutBtn.IsChecked = False If Not ExitFromMachine() Then CadCutBtn.IsChecked = False MachineBtn.IsChecked = True Exit Sub End If CadCutBtn.IsChecked = True MachineBtn.IsChecked = False MainWindowGrid.Children.Remove(m_MachinePageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_CadCutPageUC) m_ActivePage = Pages.CadCut Case Pages.Options CadCutBtn.IsChecked = True OptionsBtn.IsChecked = False MainWindowGrid.Children.Remove(m_OptionsPageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_CadCutPageUC) m_ActivePage = Pages.CadCut End Select End Sub Private Sub FrameCutBtn_Click(sender As Object, e As RoutedEventArgs) Handles FrameCutBtn.Click Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False FrameCutBtn.IsChecked = True MainWindowGrid.Children.Remove(m_WorkInProgressPageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_FrameCutPageUC) m_ActivePage = Pages.FrameCut Case Pages.DirectCut DirectCutBtn.IsChecked = False FrameCutBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_DirectCutPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_FrameCutPageUC) m_ActivePage = Pages.FrameCut Case Pages.CadCut CadCutBtn.IsChecked = False FrameCutBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_CadCutPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_FrameCutPageUC) m_ActivePage = Pages.FrameCut Case Pages.RawPart CadCutBtn.IsChecked = True FrameCutBtn.IsChecked = False Case Pages.Simulation CadCutBtn.IsChecked = True FrameCutBtn.IsChecked = False Case Pages.Draw CadCutBtn.IsChecked = True FrameCutBtn.IsChecked = False Case Pages.Import CadCutBtn.IsChecked = True FrameCutBtn.IsChecked = False Case Pages.FrameCut FrameCutBtn.IsChecked = True Case Pages.Machine FrameCutBtn.IsChecked = False If Not ExitFromMachine() Then FrameCutBtn.IsChecked = False MachineBtn.IsChecked = True Exit Sub End If FrameCutBtn.IsChecked = True MachineBtn.IsChecked = False MainWindowGrid.Children.Remove(m_MachinePageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_FrameCutPageUC) m_ActivePage = Pages.FrameCut Case Pages.Options FrameCutBtn.IsChecked = True OptionsBtn.IsChecked = False MainWindowGrid.Children.Remove(m_OptionsPageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_FrameCutPageUC) m_ActivePage = Pages.FrameCut End Select End Sub Private Sub MachineBtn_Click(sender As Object, e As RoutedEventArgs) Handles MachineBtn.Click Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False MachineBtn.IsChecked = True MainWindowGrid.Children.Remove(m_WorkInProgressPageUC) MainWindowGrid.Children.Add(m_MachinePageUC) m_ActivePage = Pages.Machine Case Pages.DirectCut DirectCutBtn.IsChecked = False MachineBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_DirectCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_MachinePageUC) m_ActivePage = Pages.Machine Case Pages.CadCut CadCutBtn.IsChecked = False MachineBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_CadCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_MachinePageUC) m_ActivePage = Pages.Machine Case Pages.RawPart CadCutBtn.IsChecked = True MachineBtn.IsChecked = False Case Pages.Simulation CadCutBtn.IsChecked = True MachineBtn.IsChecked = False Case Pages.Draw CadCutBtn.IsChecked = True MachineBtn.IsChecked = False Case Pages.Import CadCutBtn.IsChecked = True MachineBtn.IsChecked = False Case Pages.FrameCut FrameCutBtn.IsChecked = False MachineBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_FrameCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_MachinePageUC) m_ActivePage = Pages.Machine Case Pages.Machine MachineBtn.IsChecked = True Case Pages.Options MachineBtn.IsChecked = True OptionsBtn.IsChecked = False MainWindowGrid.Children.Remove(m_OptionsPageUC) MainWindowGrid.Children.Add(m_MachinePageUC) m_ActivePage = Pages.Machine End Select End Sub Private Sub OptionsBtn_Click(sender As Object, e As RoutedEventArgs) Handles OptionsBtn.Click Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False OptionsBtn.IsChecked = True MainWindowGrid.Children.Remove(m_WorkInProgressPageUC) MainWindowGrid.Children.Add(m_OptionsPageUC) m_ActivePage = Pages.Options Case Pages.DirectCut DirectCutBtn.IsChecked = False OptionsBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_DirectCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_OptionsPageUC) m_ActivePage = Pages.Options Case Pages.CadCut CadCutBtn.IsChecked = False OptionsBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_CadCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_OptionsPageUC) m_ActivePage = Pages.Options Case Pages.RawPart CadCutBtn.IsChecked = True OptionsBtn.IsChecked = False Case Pages.Simulation CadCutBtn.IsChecked = True OptionsBtn.IsChecked = False Case Pages.Draw CadCutBtn.IsChecked = True OptionsBtn.IsChecked = False Case Pages.Import CadCutBtn.IsChecked = True OptionsBtn.IsChecked = False Case Pages.FrameCut FrameCutBtn.IsChecked = False OptionsBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_FrameCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_OptionsPageUC) m_ActivePage = Pages.Options Case Pages.Machine OptionsBtn.IsChecked = False If Not ExitFromMachine() Then OptionsBtn.IsChecked = False MachineBtn.IsChecked = True Exit Sub End If MachineBtn.IsChecked = False OptionsBtn.IsChecked = True MainWindowGrid.Children.Remove(m_MachinePageUC) MainWindowGrid.Children.Add(m_OptionsPageUC) m_ActivePage = Pages.Options Case Pages.Options OptionsBtn.IsChecked = True End Select End Sub Private Function ExitFromMachine() As Boolean Select Case m_MachinePageUC.m_ActiveMachinePage Case MachinePageUC.MachinePages.Alarms Case MachinePageUC.MachinePages.ToolsDb ' Verifica ed eventuale salvataggio utensile corrente If Not m_MachinePageUC.m_ToolsDbPageUC.SaveCurrTool() Then Return False End If ' salvo il DB utensili EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) EgtTdbSave() Case MachinePageUC.MachinePages.MachiningDb ' Verifica ed eventuale salvataggio lavorazione corrente If Not m_MachinePageUC.m_MachiningDbPageUC.SaveCurrMachining() Then Return False End If ' salvo il DB utensili EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) EgtMdbSave() End Select Return True End Function Private Function ExitFromSimulation() As Boolean ' Se non sono in simulazione tutto ok If m_ActivePage <> Pages.Simulation Then Return True End If ' Mi assicuro di terminare correttamente la simulazione m_SimulationPage.ResetSimulation() Return True End Function Private Sub MainWindow_PreviewMouseDown(sender As Object, e As MouseButtonEventArgs) ' Se sto fotografando, impedisco tutte le operazioni If m_CadCutPageUC.m_Camera.m_bBusy And Not m_CurrentProjectPageUC.m_SceneButtons.IsMouseOver Then e.Handled = True Return End If ' Se già visualizzato errore, lo nascondo If m_CurrentProjectPageUC.OutMessageBrd.IsMouseOver Then m_CurrentProjectPageUC.ClearMessage() End If ' Impedisce di clickare fuori dal NumericKeyboard finchè questo è aperto If Not m_NumericKeyboardWD Is Nothing Then If (m_NumericKeyboardWD.IsVisible And Not m_NumericKeyboardWD.IsMouseOver) Then e.Handled = True Return End If End If End Sub Private Sub MainWindow_KeyDown(sender As Object, e As KeyEventArgs) 'If (m_NumericKeyboardWD.IsVisible And e.Key = Key.Enter) Then ' m_NumericKeyboardWD.Visibility = Windows.Visibility.Hidden 'End If End Sub Private Sub ExitBtn_Click(sender As Object, e As RoutedEventArgs) ' Uscita da pagina corrente di simulazione If Not ExitFromSimulation() Then Return End If ' Uscita da pagina corrente di macchina If Not ExitFromMachine() Then Return End If ' Verifica e salvataggio progetto corrente EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) If EgtGetModified() Then Dim SaveCurrProj As New EgtMsgBox(Me, "", EgtMsg(MSG_EGTMSGBOX + 1), EgtMsgBox.Buttons.YES_NO_CANCEL, EgtMsgBox.Icons.NULL) Select Case SaveCurrProj.DialogResult Case 0 ' Annulla Return Case 1 ' Si m_CurrentProjectPageUC.SaveProject() Case 2 ' No ' Non devo fare alcunchè End Select End If If m_ActivePage = Pages.DirectCut And m_DirectCutPageUC.m_ActiveDirectCutPage = DirectCutPageUC.DirectCutPages.SingleCut Then m_DirectCutPageUC.m_SingleCut.SingleCut_Unloaded(sender, e) End If MainWindow_Unloaded(sender, e) Me.Close() End Sub Private Sub MainWindow_Unloaded(sender As Object, e As RoutedEventArgs) If m_nCurrentMaterial >= 0 And m_nCurrentMaterial < m_MaterialsList.Count() Then WritePrivateProfileString(S_MATERIALS, K_CURRMATERIAL, m_MaterialsList(m_nCurrentMaterial).Name, GetIniFile()) End If ' Chiudo il gestore della macchina fotografica m_CadCutPageUC.m_Camera.Close() ' Terminazione generale di EgtInterface EgtExit() ' Rilascio mutex m_objMutex.Close() End Sub Private Sub Window_ContentRendered(sender As Object, e As EventArgs) ' Verifico presenza del collegamento al CN m_bNCLink = (GetPrivateProfileInt(S_GENERAL, K_CNLINK, 0, m_sIniFile) <> 0) m_CNCommunication.CNCommunication_Initialization() End Sub Private Sub EgtWPFInit() 'EgtBasicInfo EgtWPFLib.InitializeEgtWPFLib.EgtBasicInfo_Initialization("C:/EgtDev/OmagCUT", 1280, 1024, 15, 12, "/#Century Gothic", "/gothic.ttf", Application.Current.FindResource("FontSize_UpperCaseCharacter"), Application.Current.FindResource("FontSize_LowerCaseCharacter")) ' EgtMessageBox EgtWPFLib.InitializeEgtWPFLib.EgtMsgBox_Initialization(Application.Current.FindResource("OmagCut_Border"), Application.Current.FindResource("OmagCut_YellowTextButton"), Nothing, Application.Current.FindResource("FontSize_UpperCaseCharacter"), Application.Current.FindResource("FontSize_LowerCaseCharacter")) 'Inizializzazione della libreria EgtWPFLib.InitializeEgtWPFLib.EgtPaths_Initialization() End Sub End Class Friend Class Material Private Shared pId As Integer = 0 Private m_iId As Integer Private m_sName As String Public ReadOnly Property Id() As Integer Get Return m_iId End Get End Property Public Property Name() As String Get Return m_sName End Get Set(value As String) m_sName = value End Set End Property Sub New(sName As String) m_iId = pId Name = sName pId += 1 End Sub End Class