Files
SarmaxWall/MainWindow.xaml.vb
T
Dario Sassi c5afe8df93 SarmaxWall 1.6k5 :
- aggiunta possibilità di minimizzare il programma
- migliorata lettura parametri modificabili da Options
- aggiunti anticipi accensione/spegnimento colla.
2015-11-14 16:29:33 +00:00

429 lines
17 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.Threading
Imports System.Windows.Threading
Imports EgtUILib
Imports System.IO
Class MainWindow
' Mutex per avere una sola istanza del programma in esecuzione
Private m_objMutex As New Mutex
' Dichiarazione delle Page UserControl
Friend m_ImportPageUC As ImportPageUC
Friend m_DrawPageUC As DrawPageUC
Friend m_PlacePageUC As PlacePageUC
Friend m_OptionsPageUC As OptionsPageUC
Friend m_OpenPageUC As OpenPageUC
Friend m_NumericKeyboardWD As NumericKeyboardWD
Friend m_AboutBoxWD As AboutBoxWD
' Dichiarazione variabili direttori
Private m_sDataRoot As String = String.Empty
Private m_sConfigDir As String = String.Empty
Private m_sTempDir As String = String.Empty
Private m_sDataDir As String = String.Empty
Private Shared m_sIniFile As String = String.Empty
Private m_nDebug As Integer = 0
'Dichiarazione variabile contenente la lingua corrente
Friend m_CurrLanguage As Language
' Dichiarazione liste per ListBox della ImportPage e della OpenPage
Friend ImportItemList As New ObservableCollection(Of IconListBoxItem)
Friend OpenItemList As New ObservableCollection(Of IconListBoxItem)
'Dichiarazione lista delle lingue disponibili e lingua corrente
Friend m_LanguagesList As New List(Of Language)
' Riferimento alla pagina correntemente attiva
Friend m_ActivePage As Pages
Enum Pages
Import
Draw
Place
Options
Open
End Enum
Public Function GetIniFile() As String
Return m_sIniFile
End Function
Public Function GetTempDir() As String
Return m_sTempDir
End Function
Public Function GetDataDir() As String
Return m_sDataDir
End Function
Private Sub MainWindow_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.Substring(0, System.AppDomain.CurrentDomain.BaseDirectory.Length - 1)
If GetPrivateProfileString(S_DATA, K_DATAROOT, "", m_sDataRoot, m_sDataRoot & "\" & DAT_FILE_NAME) = 0 Then
m_sDataRoot = System.AppDomain.CurrentDomain.BaseDirectory.Substring(0, System.AppDomain.CurrentDomain.BaseDirectory.Length - 1)
End If
' Impostazione direttorio di configurazione
m_sConfigDir = m_sDataRoot & "\" & CONF_DIR
' Impostazione direttorio per file temporanei
m_sTempDir = m_sDataRoot & "\" & TEMP_DIR
' Impostazione path Ini file
m_sIniFile = m_sConfigDir & "\" & INI_FILE_NAME
' Impostazione direttorio per file di dati
If GetPrivateProfileString(S_GENERAL, K_SAVEDIR, "", m_sDataDir, m_sIniFile) = 0 Or
Not Directory.Exists(m_sDataDir) Then
m_sDataDir = m_sDataRoot & "\" & DATA_DIR
End If
' 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 index As Integer = 1
Dim ReadLanguage As Language = GetPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & index, GetIniFile)
While Not IsNothing(ReadLanguage)
m_LanguagesList.Add(ReadLanguage)
index += 1
ReadLanguage = GetPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & index, 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
' imposto dir font Nfe e font default
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 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)
'Creazione delle Page UserControl
m_ImportPageUC = New ImportPageUC
m_DrawPageUC = New DrawPageUC
m_PlacePageUC = New PlacePageUC
m_OptionsPageUC = New OptionsPageUC
m_OpenPageUC = New OpenPageUC
m_NumericKeyboardWD = New NumericKeyboardWD
'Posizionemento nella griglia delle Page UserControl
m_ImportPageUC.SetValue(Grid.ColumnProperty, 0)
m_ImportPageUC.SetValue(Grid.RowProperty, 1)
m_DrawPageUC.SetValue(Grid.ColumnProperty, 0)
m_DrawPageUC.SetValue(Grid.RowProperty, 1)
m_PlacePageUC.SetValue(Grid.ColumnProperty, 0)
m_PlacePageUC.SetValue(Grid.RowProperty, 1)
m_OptionsPageUC.SetValue(Grid.ColumnProperty, 0)
m_OptionsPageUC.SetValue(Grid.RowProperty, 1)
m_OpenPageUC.SetValue(Grid.ColumnProperty, 0)
m_OpenPageUC.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
ImportBtn.Content = EgtMsg(MSG_GENERAL + 1) 'Import - Importa
DrawBtn.Content = EgtMsg(MSG_GENERAL + 2) 'Draw - Disegna
PlaceBtn.Content = EgtMsg(MSG_GENERAL + 3) 'Place - Posiziona
OptionsBtn.Content = EgtMsg(MSG_GENERAL + 4) 'Options - Opzioni
'AddHandler OpenTimer.Tick, AddressOf OpenTimer_tick
'OpenTimer.Interval = TimeSpan.FromMilliseconds(1)
'OpenTimer.Start()
'AddHandler OpenTimer2.Tick, AddressOf OpenTimer2_tick
'OpenTimer2.Interval = TimeSpan.FromMilliseconds(2)
'OpenTimer2.Start()
End Sub
Private Sub ManageSingleIstance()
Dim bCreated As Boolean
Try
m_objMutex = New Mutex(False, "Global\SarmaxWall", 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("SarmaxWallR32")
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("SarmaxWallR64")
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(sender As Object, e As RoutedEventArgs)
'Assegno NumericKeyboardWD come child della MainWindow
m_NumericKeyboardWD.Owner = Me
'Seleziono la Tab e la Page di apertura
MainWindowGrid.Children.Add(m_PlacePageUC)
m_ActivePage = Pages.Place
PlaceBtn.IsChecked = True
End Sub
Private Sub Border_MouseDown(sender As Object, e As MouseButtonEventArgs)
m_AboutBoxWD = New AboutBoxWD
m_AboutBoxWD.Owner = Me
m_AboutBoxWD.Top = Me.Top + (Me.Height / 2 - m_AboutBoxWD.Height / 2)
m_AboutBoxWD.Left = Me.Left + (Me.Width / 2 - m_AboutBoxWD.Width / 2)
m_AboutBoxWD.Show()
End Sub
Private Sub ImportBtn_Click(sender As Object, e As RoutedEventArgs) Handles ImportBtn.Click
Select Case m_ActivePage
Case Pages.Import
ImportBtn.IsChecked = True
Case Pages.Draw
ImportBtn.IsChecked = False
DrawBtn.IsChecked = True
Case Pages.Place
ImportBtn.IsChecked = True
PlaceBtn.IsChecked = False
MainWindowGrid.Children.Remove(m_PlacePageUC)
MainWindowGrid.Children.Add(m_ImportPageUC)
m_ActivePage = Pages.Import
Case Pages.Options
ImportBtn.IsChecked = False
OptionsBtn.IsChecked = True
Case Pages.Open
ImportBtn.IsChecked = False
OpenBtn.IsChecked = True
End Select
End Sub
Private Sub DrawBtn_Click(sender As Object, e As RoutedEventArgs) Handles DrawBtn.Click
Select Case m_ActivePage
Case Pages.Import
ImportBtn.IsChecked = True
DrawBtn.IsChecked = False
Case Pages.Draw
DrawBtn.IsChecked = True
Case Pages.Place
DrawBtn.IsChecked = True
PlaceBtn.IsChecked = False
MainWindowGrid.Children.Remove(m_PlacePageUC)
MainWindowGrid.Children.Add(m_DrawPageUC)
m_ActivePage = Pages.Draw
Case Pages.Options
DrawBtn.IsChecked = False
OptionsBtn.IsChecked = True
Case Pages.Open
DrawBtn.IsChecked = False
OpenBtn.IsChecked = True
End Select
End Sub
Private Sub PlaceBtn_Click(sender As Object, e As RoutedEventArgs) Handles PlaceBtn.Click
Select Case m_ActivePage
Case Pages.Import
ImportBtn.IsChecked = True
PlaceBtn.IsChecked = False
Case Pages.Draw
DrawBtn.IsChecked = True
PlaceBtn.IsChecked = False
Case Pages.Place
PlaceBtn.IsChecked = True
Case Pages.Options
PlaceBtn.IsChecked = False
OptionsBtn.IsChecked = True
Case Pages.Open
PlaceBtn.IsChecked = False
OpenBtn.IsChecked = True
End Select
End Sub
Private Sub OptionsBtn_Click(sender As Object, e As RoutedEventArgs) Handles OptionsBtn.Click
Select Case m_ActivePage
Case Pages.Import
ImportBtn.IsChecked = True
OptionsBtn.IsChecked = False
Case Pages.Draw
DrawBtn.IsChecked = True
OptionsBtn.IsChecked = False
Case Pages.Place
OptionsBtn.IsChecked = True
PlaceBtn.IsChecked = False
MainWindowGrid.Children.Remove(m_PlacePageUC)
MainWindowGrid.Children.Add(m_OptionsPageUC)
m_ActivePage = Pages.Options
Case Pages.Options
OptionsBtn.IsChecked = True
Case Pages.Open
OptionsBtn.IsChecked = False
OpenBtn.IsChecked = True
End Select
End Sub
Private Sub OpenBtn_Click(sender As Object, e As RoutedEventArgs) Handles OpenBtn.Click
Select Case m_ActivePage
Case Pages.Import
ImportBtn.IsChecked = True
OpenBtn.IsChecked = False
Case Pages.Draw
DrawBtn.IsChecked = True
OpenBtn.IsChecked = False
Case Pages.Place
OpenBtn.IsChecked = True
PlaceBtn.IsChecked = False
MainWindowGrid.Children.Remove(m_PlacePageUC)
MainWindowGrid.Children.Add(m_OpenPageUC)
m_ActivePage = Pages.Open
Case Pages.Options
OptionsBtn.IsChecked = True
OpenBtn.IsChecked = False
Case Pages.Open
OpenBtn.IsChecked = True
End Select
End Sub
'Impedisce di clickare fuori dalla calcolatrice quando questa è attiva
Private Sub MainWindow_PreviewMouseDown(sender As Object, e As MouseButtonEventArgs)
If (m_NumericKeyboardWD.IsVisible And Not m_NumericKeyboardWD.IsMouseOver) Then
e.Handled = True
End If
End Sub
Private Sub MinimizeBtn_Click(sender As Object, e As RoutedEventArgs)
Me.WindowState = Windows.WindowState.Minimized
End Sub
Private Sub ExitBtn_Click(sender As Object, e As RoutedEventArgs)
' Recupero flag di modificato, per salvarlo nel progetto
Dim bModif As Boolean = EgtGetModified()
Dim nMarkId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_PROJMARK)
EgtSetInfo(nMarkId, INFO_MODIF, IIf(bModif, 1, 0))
' Salvo il progetto corrente
Dim sPath As String = GetDataDir() & "\0000.nge"
If Not EgtSaveFile(sPath, NGE.CMPTEXT) Then
Dim sOut As String = "Error saving file " & sPath
EgtOutLog(sOut)
End If
' Chiudo tutto
MainWindow_Unloaded(sender, e)
Me.Close()
End Sub
Private Sub MainWindow_Unloaded(sender As Object, e As RoutedEventArgs)
' Terminazione generale di EgtInterface
EgtExit()
' Rilascio mutex
m_objMutex.Close()
End Sub
Public Function GetPrivateProfileLanguage(
ByVal lpAppName As String,
ByVal lpKeyName As String,
ByVal lpFileName As String) As Language
Dim sVal As String = String.Empty
GetPrivateProfileString(lpAppName, lpKeyName, "", sVal, lpFileName)
Dim sItems() As String = sVal.Split(",".ToCharArray)
If sItems.Count() = 2 Then
Return New Language(sItems(0), sItems(1))
End If
Return Nothing
End Function
End Class
Public Class Language
Private m_sLanguageName As String
Private m_sFileName As String
Public Property LanguageName As String
Get
Return m_sLanguageName
End Get
Set(value As String)
m_sLanguageName = value
End Set
End Property
Public Property FileName As String
Get
Return m_sFileName
End Get
Set(value As String)
m_sFileName = value
End Set
End Property
Sub New(LanguageName As String, FileName As String)
Me.LanguageName = LanguageName
Me.FileName = FileName
End Sub
End Class