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 ' Coefficiente di scalatura della finestra rispetto a standard Friend m_dMWinScale As Double = 1 ' 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_DrawPageUC As DrawPageUC Friend m_ImportPageUC As ImportPageUC Friend m_SimulationPage As SimulationPageUC Friend m_FrameCutPageUC As FrameCutPageUC Friend m_MachinePageUC As MachinePageUC Friend m_OptionsPageUC As OptionsPageUC ' Dichiarazione variabili direttori Private m_sExeRoot As String = String.Empty 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_sNamedSaveDir As String = String.Empty Private m_sCopyTemplateDir 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 ' Opzioni abilitate dalla licenza attiva associata alla chiave Private m_nKeyOptions As UInteger Friend Enum KEY_OPT As UInteger BASE = 1 MAN_MANIP = 2 AUTO_MANIP = 4 MAN_PHOTO = 8 AUTO_PHOTO = 16 AUTO_NESTING = 32 ENABLE_MILL = 64 PROCUCTION_LINE = 128 End Enum ' 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) ' Riferimento alla pagina correntemente attiva Friend m_ActivePage As Pages Friend m_PrevActivePage As Pages ' Funziona solo per tornare indietro da grezzo e foto !! ' Timer per aggiornamento interfaccia Private m_IdleTimer As New DispatcherTimer(DispatcherPriority.ApplicationIdle) ' Timer per linea di produzione Private m_ProdLineTimer As New DispatcherTimer(DispatcherPriority.ApplicationIdle) ' Variabile che indica il tipo di pc su cui gira il programma Private m_bIsSiemensPc As Boolean = False Friend Enum Pages WorkInProgress DirectCut CadCut Photo Open RawPart Draw Import CSV Simulation FrameCut Machine Alarms Options End Enum Public Function GetExeRootDir() As String Return m_sExeRoot End Function 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 GetNamedSaveDir() As String Return m_sNamedSaveDir End Function Public Function GetCamAutoDir() As String Return m_sDataRoot & "\" & CAMAUTO_DIR End Function Public Function GetCsvAutoDir() As String Return m_sDataRoot & "\" & CSVAUTO_DIR End Function Public Function GetCopyTemplateDir() As String Return m_sCopyTemplateDir 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 Friend Function GetKeyOption(nKeyOpt As KEY_OPT) As Boolean Return ((m_nKeyOptions And nKeyOpt) <> 0) End Function Friend Function GetKeyOptions() As UInteger Return m_nKeyOptions End Function Public Function IsSiemensPc() As Boolean Return m_bIsSiemensPc End Function Private Sub MainWindow_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized ' Verifico sia l'unica istanza ManageSingleIstance() ' Imposto path di esecuzione m_sExeRoot = System.AppDomain.CurrentDomain.BaseDirectory.TrimEnd("\".ToCharArray()) ' Impostazione path radice per i dati If GetPrivateProfileString(S_DATA, K_DATAROOT, "", m_sDataRoot, m_sExeRoot & "\" & DAT_FILE_NAME) = 0 Then m_sDataRoot = m_sExeRoot 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 automatico If GetPrivateProfileString(S_GENERAL, K_SAVEDIR, "", m_sSaveDir, m_sIniFile) = 0 Then m_sSaveDir = m_sDataRoot & "\" & SAVE_DFL_DIR End If ' Impostazione direttorio di salvataggio dei progetti con nome If GetPrivateProfileString(S_GENERAL, K_SAVENAMEDIR, "", m_sNamedSaveDir, m_sIniFile) = 0 Then m_sNamedSaveDir = m_sDataRoot & "\" & SAVE_DFL_NAMEDIR End If ' Impostazione direttorio di salvataggio dei DXF delle dime (CopyTemplate) If GetPrivateProfileString(S_COPYTEMPLATE, K_CPTCURRDIR, "", m_sCopyTemplateDir, m_sIniFile) = 0 Then m_sCopyTemplateDir = m_sDataRoot & "\" & TEMPLATE_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" ' 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) ' Recupero opzioni della chiave Dim bKey As Boolean = EgtGetKeyOptions(9423, 16, 1, m_nKeyOptions) ' 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.Major.ToString() & "." & My.Application.Info.Version.Minor.ToString() & (ChrW(97 - 1 + My.Application.Info.Version.Build)).ToString() & My.Application.Info.Version.Revision.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, nLeft, nTop, nWidth, 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) m_dMWinScale = Math.Min(Me.Width / 1280, Me.Height / 832) ' Info su opzioni chiave EgtOutLog("KeyOptions : " & bKey.ToString() & " " & m_nKeyOptions.ToString()) ' Inizializzazione della libreria EgtWPFLib EgtWPFInit() ' Inizializzo classe macchina corrente m_CurrentMachine = New CurrentMachine ' 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_DrawPageUC = New DrawPageUC m_ImportPageUC = New ImportPageUC m_SimulationPage = New SimulationPageUC 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 ' Imposto tipologia di pc su cui gira il programma m_bIsSiemensPc = If(GetPrivateProfileInt(S_GENERAL, K_SIEMENSPC, 0, GetIniFile()) = 0, False, True) ' Posizionamento nella griglia della MachineStatusBar If Not m_bIsSiemensPc Then m_MachineStatusUC.SetValue(Grid.RowProperty, 2) MainWindowGrid.ColumnDefinitions.RemoveAt(MainWindowGrid.ColumnDefinitions.Count - 1) Else m_MachineStatusUC.SetValue(Grid.ColumnProperty, 2) m_MachineStatusUC.SetValue(Grid.RowSpanProperty, 3) MainWindowGrid.RowDefinitions.RemoveAt(MainWindowGrid.RowDefinitions.Count - 1) Application.Current.Resources("FontSize_LowerCaseCharacter") = New FontSizeConverter().ConvertFrom(CStr("17")) Application.Current.Resources("ComboBox_Height") = New LengthConverter().ConvertFrom(CStr("35")) Application.Current.Resources("FontSize_GroupBoxHeader") = New LengthConverter().ConvertFrom(CStr("19")) Application.Current.Resources("CheckBox_Height") = New LengthConverter().ConvertFrom(CStr("35")) Application.Current.Resources("TextBoxInGroupBox_Margin") = New Thickness(2, 0, 9, 0) Application.Current.Resources("RightTextBoxInBorder_Margin") = New Thickness(1, 0, 12, 0) Application.Current.Resources("LeftTextBoxInBorder_Margin") = New Thickness(4, 0, 9, 0) Application.Current.Resources("LeftTextBoxNoBorder_Margin") = New Thickness(6, 0, 9, 0) Application.Current.Resources("RightComboBoxInBorder_Margin") = New Thickness(2, 0, 11, 0) Application.Current.Resources("MachRightTextBoxInBorder_Margin") = New Thickness(2, 0, 11, 0) Application.Current.Resources("MachLeftTextBoxInBorder_Margin") = New Thickness(4, 0, 9, 0) Application.Current.Resources("LeftComboBoxInBorder_Margin") = New Thickness(4, 0, 9, 0) Application.Current.Resources("MachToolLeftTextBoxNoBorder_Margin") = New Thickness(3, 0, 15, 0) Application.Current.Resources("ArrowImage_Height") = New LengthConverter().ConvertFrom(CStr("52")) Application.Current.Resources("ScaleImage_Height") = New LengthConverter().ConvertFrom(CStr("60")) Application.Current.Resources("MachineStatusImage_Height") = New LengthConverter().ConvertFrom(CStr("65")) End If ' 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) ' Posizionamento 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) ' 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) ' Imposto OnIdle AddHandler m_IdleTimer.Tick, AddressOf OnIdle ' Imposto OnProdLine AddHandler m_ProdLineTimer.Tick, AddressOf OnProdLine 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 MainWindow_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles Me.Loaded ' Aggiungo la MachineStatusBar alla MainWindow MainWindowGrid.Children.Add(m_MachineStatusUC) ' Preparo la macchina per la lavorazione in corso m_WorkInProgressPageUC.Prepare() m_WorkInProgressPageUC.UpdateTools() ' Seleziono la Page di apertura MainWindowGrid.Children.Add(m_CurrentProjectPageUC) ' Lancio timer per aggiornamento interfaccia m_IdleTimer.Interval = TimeSpan.FromMilliseconds(100) m_IdleTimer.Start() 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.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation 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.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation 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.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation 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.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation 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.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation 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.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation 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 Sub MainWindow_PreviewMouseDown(sender As Object, e As MouseButtonEventArgs) Handles Me.PreviewMouseDown ' 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 ' Condizioni che impediscono di clickare fuori dalla calcolatrice o tastiera quando una di queste è aperta If EgtWPFLib.EgtCalculator.GetbIsActive Then e.Handled = True Return End If If EgtWPFLib.EgtKeyboard.GetbIsActive Then e.Handled = True Return End If End Sub Private Sub MainWindow_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown '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) ' Verifica se progetto corrente da salvare Dim bPrjToSave As Boolean = False EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) If EgtGetModified() Then Dim SaveCurrProj As EgtMsgBox If IsSiemensPc() Then SaveCurrProj = New EgtMsgBox(Me, Me.ActualWidth / 17 * 5, EgtMsgBox.WidthType.PIXEL, "", EgtMsg(MSG_EGTMSGBOX + 1), EgtMsgBox.Buttons.YES_NO_CANCEL, EgtMsgBox.Icons.NULL) Else SaveCurrProj = New EgtMsgBox(Me, "", EgtMsg(MSG_EGTMSGBOX + 1), EgtMsgBox.Buttons.YES_NO_CANCEL, EgtMsgBox.Icons.NULL) End If Select Case SaveCurrProj.DialogResult Case 0 ' Annulla Return Case 1 ' Si bPrjToSave = True Case 2 ' No bPrjToSave = False End Select End If ' Uscita da pagina corrente definizione grezzo If Not ExitFromRaw() Then Return ' Uscita da pagina corrente CSV If Not ExitFromCsv() Then Return ' Uscita da pagina corrente di split If Not ExitFromSplit() Then Return ' Uscita da pagina corrente di simulazione If Not ExitFromSimulation() Then Return ' Uscita da pagina corrente di macchina If Not ExitFromMachine() Then Return ' Uscita da pagina tagli diretti If Not ExitFromDirectCut(sender, e) Then Return ' Eventuale salvataggio progetto corrente If bPrjToSave Then EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) m_CurrentProjectPageUC.SaveNamedProject() m_CurrentProjectPageUC.SaveProject() End If ' Uscita MainWindow_Unloaded(sender, e) Me.Close() End Sub Private Function ExitFromRaw() As Boolean ' Se non sono in definizione grezzo tutto ok If m_ActivePage <> Pages.RawPart Then Return True ' Mi assicuro di terminare correttamente le operazioni Return m_RawPartPage.ExitRawPart(True) End Function Private Function ExitFromCsv() As Boolean ' Salvo lo stato attuale della lista m_CadCutPageUC.m_CSVPage.SaveCsvPartList() Return True End Function Private Function ExitFromSplit() As Boolean ' Se non sono in split tutto ok If m_ActivePage <> Pages.CadCut Or m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.Nest Then Return True ' Mi assicuro di terminare correttamente lo split m_CadCutPageUC.m_SplitPage.ExitSplit() Return True End Function Private Function ExitFromSimulation() As Boolean ' Se non sono in simulazione tutto ok If m_ActivePage <> Pages.Simulation Then Return True ' Mi assicuro di terminare correttamente la simulazione m_SimulationPage.ResetSimulation() Return True End Function Private Function ExitFromDirectCut(sender As Object, e As RoutedEventArgs) As Boolean ' Se non sono in tagli diretti tutto ok If m_ActivePage <> Pages.DirectCut Then Return True ' Concludo le attività in corso Select Case m_DirectCutPageUC.m_ActiveDirectCutPage Case DirectCutPageUC.DirectCutPages.SingleCut m_DirectCutPageUC.m_SingleCut.SingleCut_Unloaded(sender, e) Case DirectCutPageUC.DirectCutPages.MultipleCut m_DirectCutPageUC.m_MultipleCut.MultipleCut_Unloaded(sender, e) Case DirectCutPageUC.DirectCutPages.GridCut m_DirectCutPageUC.m_GridCut.GridCut_Unloaded(sender, e) Case DirectCutPageUC.DirectCutPages.CopyTemplate m_DirectCutPageUC.m_CopyTemplate.CopyTemplate_Unloaded(sender, e) Case DirectCutPageUC.DirectCutPages.FlatteningCut m_DirectCutPageUC.m_FlatteningCut.FlatteningCut_Unloaded(sender, e) Case DirectCutPageUC.DirectCutPages.SawTest m_DirectCutPageUC.m_SawTest.SawTest_Unloaded(sender, e) End Select Return True End Function Private Function ExitFromMachine() As Boolean ' Se non sono in machine tutto ok If m_ActivePage <> Pages.Machine Then Return True ' Concludo le attività in corso 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 Sub MainWindow_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded ' Chiudo comunicazione con CN m_CNCommunication.m_CN.Stop_Connection() ' 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 MainWindow_ContentRendered(sender As Object, e As EventArgs) Handles Me.ContentRendered ' Verifico presenza del collegamento al CN m_bNCLink = (GetPrivateProfileInt(S_GENERAL, K_CNLINK, 0, m_sIniFile) <> 0) m_CNCommunication.CNCommunication_Initialization() ' Se linea di produzione abilitata e collegata, lancio relativo timer If m_bNCLink And m_CurrentMachine.bProdLine Then m_ProdLineTimer.Interval = TimeSpan.FromMilliseconds(2000) m_ProdLineTimer.Start() End If 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_WindowBorder"), Application.Current.FindResource("OmagCut_WindowGrayTextButton"), Nothing, Application.Current.FindResource("FontSize_UpperCaseCharacter"), Application.Current.FindResource("FontSize_LowerCaseCharacter")) 'Inizializzazione della libreria EgtWPFLib.InitializeEgtWPFLib.EgtPaths_Initialization() End Sub ' OnIdle Private Sub OnIdle() ' Recupero il tipo di progetto Dim nPrjType As Integer = m_CurrentProjectPageUC.GetCurrentProjectType() ' Aggiorno interfaccia CadCutBtn.IsEnabled = (nPrjType <> CurrentProjectPageUC.PRJ_TYPE.FRAMES) FrameCutBtn.IsEnabled = (nPrjType <> CurrentProjectPageUC.PRJ_TYPE.FLATS) End Sub ' OnProdLine Private Sub OnProdLine() ' Acquisizione eventuale file epl dei pezzi rovinati : ' lo sposto dal direttorio condiviso al direttorio corrente dei CSV Const CURR_PROJ_EPL As String = "CurrProj.epl" If My.Computer.FileSystem.FileExists(m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_EPL) Then ' Leggo direttorio corrente dei file CSV Dim sCurrDir As String = String.Empty GetPrivateProfileString(S_CSV, K_CSVCURRDIR, "C:\", sCurrDir, GetIniFile()) If My.Computer.FileSystem.DirectoryExists(sCurrDir) Then ' Recupero da INI ultimo progetto mandato a View Dim sName As String = String.Empty GetPrivateProfileString(S_GENERAL, K_LASTPROJTOVIEW, "", sName, GetIniFile()) ' Eseguo spostamento Try My.Computer.FileSystem.MoveFile(m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_EPL, sCurrDir & "\Ruined" & sName & ".epl", True) Catch ex As Exception EgtOutLog("Error moving " & CURR_PROJ_EPL) End Try Else EgtOutLog("Error in ruined parts management : " & sCurrDir & " not found") ' Errore nella gestione dei pezzi rovinati m_CurrentProjectPageUC.SetErrorMessage(EgtMsg(91119)) End If End If ' Leggo variabile con indice progetto da copiare per OmagVIEW (standard E80025) m_CNCommunication.m_CN.n_DReadELS_handle = 0 m_CNCommunication.m_CN.ReadEls_Add_Parameter(m_CurrentMachine.sVarProjCopy, 1) Dim nVarCopy As Integer = 0 For I = 0 To 20 System.Threading.Thread.Sleep(100) If m_CNCommunication.m_CN.n_DReadELS_handle = 1 Then nVarCopy = CInt(m_CNCommunication.m_CN.d_DReadELS_value) Exit For End If Next ' Se non nulla, verifico se eseguire la copia If nVarCopy <> 0 Then ' Verifico esistenza progetto con numerazione equivalente e assenza file di lock Dim sNgeFile As String = GetSaveDir() & "\" & nVarCopy.ToString("D4") & ".nge" Dim sLockFile As String = m_CurrentMachine.sLineDataDir & "\CurrProj.lck" Dim sEplFile As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_EPL If My.Computer.FileSystem.FileExists(sNgeFile) And Not My.Computer.FileSystem.FileExists(sLockFile) And Not My.Computer.FileSystem.FileExists(sEplFile) Then Try ' Copio file di progetto nge Dim sNgeDest As String = m_CurrentMachine.sLineDataDir & "\CurrProj.nge" My.Computer.FileSystem.CopyFile(sNgeFile, sNgeDest, True) ' Se esiste file jpg omonimo, lo copio Dim sJpgFile As String = System.IO.Path.ChangeExtension(sNgeFile, ".jpg") If My.Computer.FileSystem.FileExists(sJpgFile) Then Dim sJpgDest As String = m_CurrentMachine.sLineDataDir & "\CurrProj.jpg" My.Computer.FileSystem.CopyFile(sJpgFile, sJpgDest, True) End If ' Creo file per flag di nuovo progetto Dim sNewDest As String = m_CurrentMachine.sLineDataDir & "\CurrProj.new" Dim nF As Integer = FreeFile() FileOpen(nF, sNewDest, OpenMode.Output) Print(nF, "Status") FileClose(nF) ' Dichiaro progetto copiato m_CNCommunication.m_CN.DVariables_WriteVariables2(m_CurrentMachine.sVarProjCopy, "0") ' Salvo in INI indice del progetto copiato WritePrivateProfileString(S_GENERAL, K_LASTPROJTOVIEW, nVarCopy.ToString("D4"), GetIniFile()) Catch ex As Exception EgtOutLog("Error copying files to OmagVIEW") ' Errore in copia file per OmagVIEW m_CurrentProjectPageUC.SetErrorMessage(EgtMsg(91117)) End Try End If End If End Sub ' Evento che apre AboutBox quando viene clickato il logo Private Sub LogoBrd_MouseDown(sender As Object, e As MouseButtonEventArgs) Handles LogoBrd.MouseDown Dim AboutBox As New AboutBoxWD(Me) End Sub End Class