396 lines
15 KiB
VB.net
396 lines
15 KiB
VB.net
Imports System.Threading
|
|
Imports System.Windows.Threading
|
|
Imports System.Math
|
|
Imports System.IO
|
|
Imports EgtUILib
|
|
Imports EgtWPFLib5
|
|
Imports EgtPHOTOLib
|
|
|
|
Public Class MainWindowM
|
|
|
|
#Region "FIELDS"
|
|
|
|
' Timer
|
|
Private m_TimerIsBusy As Boolean = False
|
|
Private m_RefreshTimer As New DispatcherTimer
|
|
|
|
Private m_sDataRoot As String = String.Empty
|
|
Friend ReadOnly Property sDataRoot As String
|
|
Get
|
|
Return m_sDataRoot
|
|
End Get
|
|
End Property
|
|
|
|
Private m_sConfigDir As String = String.Empty
|
|
Public ReadOnly Property sConfigDir As String
|
|
Get
|
|
Return m_sConfigDir
|
|
End Get
|
|
End Property
|
|
|
|
Private m_nDebug As Integer = 0
|
|
|
|
Private m_objMutex As Mutex
|
|
|
|
Private m_bFirstInstance As Boolean = False
|
|
Friend ReadOnly Property bFirstInstance As Boolean
|
|
Get
|
|
Return m_bFirstInstance
|
|
End Get
|
|
End Property
|
|
|
|
Private m_nInstance As Integer = 0
|
|
Friend ReadOnly Property nInstance As Integer
|
|
Get
|
|
Return m_nInstance
|
|
End Get
|
|
End Property
|
|
|
|
Private m_nUserLevel As Integer = 1
|
|
Friend ReadOnly Property nUserLevel As Integer
|
|
Get
|
|
Return m_nUserLevel
|
|
End Get
|
|
End Property
|
|
|
|
Private m_nKeyLevel As Integer = 0
|
|
Friend ReadOnly Property nKeyLevel As Integer
|
|
Get
|
|
Return m_nKeyLevel
|
|
End Get
|
|
End Property
|
|
|
|
Private m_nKeyOptions As UInteger = 0
|
|
Friend ReadOnly Property nKeyOptions As Integer
|
|
Get
|
|
Return m_nKeyOptions
|
|
End Get
|
|
End Property
|
|
|
|
Private m_sTempDir As String
|
|
Friend ReadOnly Property sTempDir As String
|
|
Get
|
|
Return m_sTempDir
|
|
End Get
|
|
End Property
|
|
Private m_sLogFile As String
|
|
Friend ReadOnly Property sLogFile As String
|
|
Get
|
|
Return m_sLogFile
|
|
End Get
|
|
End Property
|
|
|
|
Friend ReadOnly Property sImgAutoDir As String
|
|
Get
|
|
Return m_sDataRoot & "\" & IMGAUTO_DIR
|
|
End Get
|
|
End Property
|
|
|
|
Private m_sPhotoDir As String
|
|
Friend ReadOnly Property sPhotoDir As String
|
|
Get
|
|
Return m_sPhotoDir
|
|
End Get
|
|
End Property
|
|
|
|
' l'indirizzo del file può essere modificato dalla pagina OptionPage
|
|
Private m_TemplateFilePrinter As String
|
|
Friend Property sTemplateFilePrinter As String
|
|
Get
|
|
Return m_TemplateFilePrinter
|
|
End Get
|
|
Set(value As String)
|
|
m_TemplateFilePrinter = value
|
|
' salvo il nome del nuovo file template in uso
|
|
WriteMainPrivateProfileString(S_PRINTER, K_TEMPLATE, m_TemplateFilePrinter)
|
|
' comunico alla librearia il nuovo nome del file in uso dal programma
|
|
EgtPHOTOLib.MainData.SetTemplateFilePrinter(m_TemplateFilePrinter)
|
|
End Set
|
|
End Property
|
|
|
|
Private m_DatFilePrinter As String
|
|
Friend ReadOnly Property DataFilePrinter As String
|
|
Get
|
|
Return m_DatFilePrinter
|
|
End Get
|
|
End Property
|
|
|
|
Private m_ZebraUtilitiesExe As String
|
|
Friend ReadOnly Property ZebraUtilitiesExe As String
|
|
Get
|
|
Return m_ZebraUtilitiesExe
|
|
End Get
|
|
End Property
|
|
|
|
Private m_PrinterIsVisible As Boolean = False
|
|
Friend ReadOnly Property PrinterIsVisible As Boolean
|
|
Get
|
|
Return m_PrinterIsVisible
|
|
End Get
|
|
End Property
|
|
|
|
Private m_sBackUpDir As String
|
|
Friend ReadOnly Property sBackUpDir As String
|
|
Get
|
|
Return m_sBackUpDir
|
|
End Get
|
|
End Property
|
|
|
|
Private m_EnableTextId As Boolean = True
|
|
Public ReadOnly Property EnableTextId As Boolean
|
|
Get
|
|
Return m_EnableTextId
|
|
End Get
|
|
End Property
|
|
|
|
Private m_LastId As Integer = 10000
|
|
Public Property nLastId As Integer
|
|
Get
|
|
Return m_LastId
|
|
End Get
|
|
Set(value As Integer)
|
|
m_LastId = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_bCapsLock As Boolean
|
|
Public ReadOnly Property bCapsLock As Boolean
|
|
Get
|
|
Return m_bCapsLock
|
|
End Get
|
|
End Property
|
|
|
|
#End Region ' FIELDS
|
|
|
|
#Region "CONSTRUCTOR"
|
|
|
|
Sub New()
|
|
InitializeEgtEnvironment()
|
|
End Sub
|
|
|
|
#End Region ' CONSTRUCTOR
|
|
|
|
#Region "METHODS"
|
|
|
|
Private Sub InitializeEgtEnvironment()
|
|
' Impostazione path radice per i dati
|
|
m_sDataRoot = System.AppDomain.CurrentDomain.BaseDirectory
|
|
If EgtUILib.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 per file temporanei
|
|
m_sTempDir = m_sDataRoot & "\" & TEMP_DIR
|
|
Directory.CreateDirectory(m_sTempDir)
|
|
' Impostazione path Ini file
|
|
IniFile.m_sIniFile = m_sConfigDir & "\" & INI_FILE_NAME
|
|
' Impostazione direttorio per backup
|
|
m_sBackUpDir = m_sDataRoot & "\" & BACKUP_DIR
|
|
Directory.CreateDirectory(m_sBackUpDir)
|
|
' Verifico indice di istanza
|
|
ManageInstance()
|
|
' Imposto tipo di chiave
|
|
EgtSetLockType(KEY_TYPE.HW)
|
|
' Leggo e imposto chiave di protezione
|
|
Dim sLicFileName As String = String.Empty
|
|
GetMainPrivateProfileString(S_GENERAL, K_LICENCE, LIC_FILE_NAME, sLicFileName)
|
|
Dim sLicFile As String = m_sConfigDir & "\" & sLicFileName
|
|
Dim sKey As String = String.Empty
|
|
EgtUILib.GetPrivateProfileString(S_LICENCE, K_KEY, "", sKey, sLicFile)
|
|
EgtSetKey(sKey)
|
|
Dim bNetHwKey As Boolean = ( GetMainPrivateProfileInt(S_GENERAL, K_NETKEY, 0) = 1)
|
|
EgtSetNetHwKey( bNetHwKey)
|
|
' Recupero livello e opzioni della chiave
|
|
Dim bKey As Boolean = EgtGetKeyLevel(9423, 2407, 1, m_nKeyLevel) And
|
|
EgtGetKeyOptions(9423, 2407, 1, m_nKeyOptions)
|
|
' Verifico abilitazione prodotto
|
|
Dim bProd As Boolean = GetKeyOption(KEY_OPT.PHOTO_BASE)
|
|
' Inizializzazione generale di EgtInterface
|
|
m_nDebug = GetMainPrivateProfileInt(S_GENERAL, K_DEBUG, 0)
|
|
m_sLogFile = m_sTempDir & "\" & GENLOG_FILE_NAME.Replace("#", m_nInstance.ToString())
|
|
Dim sLogMsg As String = "User " & Environment.MachineName & "\" & Environment.UserName & " (" & m_nInstance.ToString() & ")" & vbLf &
|
|
My.Application.Info.Title.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, m_sLogFile, sLogMsg)
|
|
EgtSetTempDir(m_sTempDir)
|
|
EgtSetIniFile(IniFile.m_sIniFile)
|
|
' Leggo direttorio dei messaggi (se manca uso direttorio di configurazione)
|
|
Dim sMsgDir As String = String.Empty
|
|
If GetMainPrivateProfileString(S_GENERAL, K_MESSAGESDIR, "", sMsgDir) = 0 Then
|
|
sMsgDir = m_sConfigDir
|
|
End If
|
|
' Leggo lingua corrente
|
|
Dim sLanguage As String = String.Empty
|
|
GetMainPrivateProfileString(S_GENERAL, K_MESSAGES, "", sLanguage)
|
|
' Recupero nome file dei messaggi della lingua corrente
|
|
Dim sMsgName As String = "EgalTechIta.txt"
|
|
Dim nIndex As Integer = 1
|
|
While True
|
|
Dim ReadLanguage As Language = GetMainPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex)
|
|
If IsNothing(ReadLanguage) Then Exit While
|
|
If String.Compare(ReadLanguage.Name, sLanguage, True) = 0 Then
|
|
sMsgName = ReadLanguage.FilePath
|
|
Exit While
|
|
End If
|
|
nIndex += 1
|
|
End While
|
|
' Leggo file messaggi
|
|
Dim sMsgFilePath As String = sMsgDir & "\" & sMsgName
|
|
If Not EgtLoadMessages(sMsgFilePath) Then
|
|
EgtOutLog("Error in EgtLoadMessages")
|
|
End If
|
|
' Leggo e imposto unità di misura per interfaccia utente
|
|
EgtSetUiUnits(GetMainPrivateProfileInt(S_GENERAL, K_MMUNITS, 1) <> 0)
|
|
' Leggo e imposto livello utilizzatore
|
|
m_nUserLevel = Math.Min(m_nKeyLevel, GetMainPrivateProfileInt(S_GENERAL, K_USERLEVEL, 1))
|
|
' Imposto dir font Nfe e font default
|
|
Dim sNfeDir As String = String.Empty
|
|
GetMainPrivateProfileString(S_GEOMDB, K_NFEFONTDIR, "", sNfeDir)
|
|
Dim sDefFont As String = String.Empty
|
|
GetMainPrivateProfileString(S_GEOMDB, K_DEFAULTFONT, "", sDefFont)
|
|
EgtSetFont(sNfeDir, sDefFont)
|
|
' imposto dir di default per libreria Lua e lancio libreria di base
|
|
Dim sLuaLibsDir As String = String.Empty
|
|
GetMainPrivateProfileString(S_LUA, K_LIBSDIR, "", sLuaLibsDir)
|
|
EgtSetLuaLibs(sLuaLibsDir)
|
|
Dim sLuaBaseLib As String = String.Empty
|
|
GetMainPrivateProfileString(S_LUA, K_BASELIB, "EgtBase", sLuaBaseLib)
|
|
EgtLuaRequire(sLuaBaseLib)
|
|
' Leggo nome cartella delle foto
|
|
GetMainPrivateProfileString(S_GENERAL, K_PHOTODIR, sDataRoot & "\Data", m_sPhotoDir)
|
|
' leggo nome file prn (per stampante zebra)
|
|
GetMainPrivateProfileString(S_PRINTER, K_TEMPLATE, sDataRoot & "\Label\Default.prn", m_TemplateFilePrinter)
|
|
' leggo nome del direttorio in cui scrivere il file ini (per stampante zebra) -- solo se si desidera scrivere il file in un direttorio diverso
|
|
GetMainPrivateProfileString(S_PRINTER, K_DAT, sDataRoot & "\Temp", m_DatFilePrinter)
|
|
' leggo nome file exe (per stampante zebra)
|
|
GetMainPrivateProfileString(S_PRINTER, K_ZEBRAUTILITIES, System.AppDomain.CurrentDomain.BaseDirectory & "ZebraPrinterUtilitiesR32.exe", m_ZebraUtilitiesExe)
|
|
' verifico che sia abilitata la stampante con flag
|
|
m_PrinterIsVisible = (GetMainPrivateProfileInt(S_PRINTER, K_ENABLE_PRINTER, 0) = 1)
|
|
' verifico che sia abilitata il CapsLock
|
|
m_bCapsLock = (GetMainPrivateProfileInt(S_GENERAL, K_CAPSLOCK, 0) = 1)
|
|
' Creo connessione al Db
|
|
If Not ManageDb.ConnectToDb(m_sPhotoDir & "\" & DB_FILENAME) Then
|
|
EgtOutLog("Error connecting to DB")
|
|
MessageBox.Show(EgtMsg(MSG_OMAGPHOTO + 1) & EgtMsg(MSG_OMAGPHOTO + 2), EgtMsg(MSG_EGTMSGBOX + 15), MessageBoxButton.OK, MessageBoxImage.Error)
|
|
End
|
|
End If
|
|
|
|
Dim sLastBlock As String = String.Empty
|
|
|
|
' Info su opzioni chiave
|
|
EgtOutLog("KeyOptions : " & bKey.ToString() & " " & m_nKeyOptions.ToString() & " " & bProd.ToString())
|
|
' Imposto parametri EgtPHOTOLib
|
|
EgtPHOTOLib.MainData.SetConfigDir(m_sConfigDir)
|
|
EgtPHOTOLib.MainData.SetKeyLevel(m_nKeyLevel)
|
|
EgtPHOTOLib.MainData.SetKeyOptions(m_nKeyOptions)
|
|
EgtPHOTOLib.MainData.SetUser(Environment.MachineName & "\" & Environment.UserName & " (" & nInstance.ToString() & ")")
|
|
EgtPHOTOLib.MainData.SetPhotoDir(m_sPhotoDir)
|
|
EgtPHOTOLib.MainData.SetBackUpDir(m_sBackUpDir)
|
|
EgtPHOTOLib.MainData.SetTemplateFilePrinter(m_TemplateFilePrinter)
|
|
EgtPHOTOLib.MainData.SetDataFilePrinter(m_DatFilePrinter)
|
|
EgtPHOTOLib.MainData.SetZebraPrinterExe(m_ZebraUtilitiesExe)
|
|
EgtPHOTOLib.MainData.SetPrinterVisibility(m_PrinterIsVisible)
|
|
EgtPHOTOLib.MainData.SetCapsLock(m_bCapsLock)
|
|
If GetMainPrivateProfileString(S_GENERAL, "LastBlock", "", sLastBlock) <> 0 Then EgtPHOTOLib.MainData.SetLastBlock(sLastBlock)
|
|
Dim sIdKey As String = String.Empty
|
|
EgtGetKeyInfo(sIdKey)
|
|
EgtPHOTOLib.MainData.SetKey(sIdKey)
|
|
' lancio il timer di aggiornamento dell'interfaccia, per la gestione di due OmagPHOTO che accedono allo stesso SQL
|
|
AddHandler m_RefreshTimer.Tick, AddressOf RefreshTimer_Tick
|
|
m_RefreshTimer.Interval = TimeSpan.FromMilliseconds(2000)
|
|
m_RefreshTimer.Start()
|
|
End Sub
|
|
|
|
' per la gestione di due OmagPHOTO che accedono allo stesso SQL
|
|
Private Sub RefreshTimer_Tick()
|
|
If Not m_TimerIsBusy And PhotoMap.refProjectVM.SelProjectMode = ProjectSlabVM.ProjectModeOpt.LIST Then
|
|
m_TimerIsBusy = True
|
|
m_RefreshTimer.Stop()
|
|
EgtPHOTOLib.PhotoMap.refListPageVM.RefreshLisPage()
|
|
m_TimerIsBusy = False
|
|
m_RefreshTimer.Start()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub ManageInstance()
|
|
Dim bCreated As Boolean
|
|
Try
|
|
m_objMutex = New Mutex(False, "Global\OmagPHOTO", bCreated)
|
|
Catch
|
|
bCreated = False
|
|
End Try
|
|
m_bFirstInstance = bCreated
|
|
If bCreated Then
|
|
' Prima istanza
|
|
m_nInstance = 1
|
|
' Aggiorno stato istanze attive
|
|
WriteMainPrivateProfileString(S_GENERAL, K_INSTANCES, m_nInstance.ToString())
|
|
Else
|
|
' Leggo il massimo numero di istanze ammesse
|
|
Const MAX_INST As Integer = 32
|
|
Dim nMaxInst As Integer = GetMainPrivateProfileInt(S_GENERAL, K_MAXINST, 1)
|
|
nMaxInst = Max(1, Min(nMaxInst, MAX_INST))
|
|
' Cerco il primo indice di istanza libero
|
|
Dim nTmp As Integer = GetMainPrivateProfileInt(S_GENERAL, K_INSTANCES, 0)
|
|
m_nInstance = 1
|
|
Dim nMask As Integer = 1
|
|
While (nTmp And nMask) <> 0 And m_nInstance < MAX_INST
|
|
m_nInstance += 1
|
|
nMask *= 2
|
|
End While
|
|
' Se l'indice supera il massimo
|
|
If m_nInstance > nMaxInst 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("OmagPHOTOR32")
|
|
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("OmagPHOTOR64")
|
|
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
|
|
' Aggiorno stato istanze attive
|
|
nTmp += (1 << (m_nInstance - 1))
|
|
WriteMainPrivateProfileString(S_GENERAL, K_INSTANCES, nTmp.ToString())
|
|
End If
|
|
End Sub
|
|
|
|
Friend Function GetKeyOption(nKeyOpt As KEY_OPT) As Boolean
|
|
Return ((m_nKeyOptions And nKeyOpt) <> 0)
|
|
End Function
|
|
|
|
Friend Sub Close()
|
|
' Terminazione generale di EgtInterface
|
|
EgtExit()
|
|
' Rilascio mutex
|
|
If Not IsNothing(m_objMutex) Then m_objMutex.Close()
|
|
' Aggiorno istanze usate
|
|
Dim nTmp As Integer = GetMainPrivateProfileInt(S_GENERAL, K_INSTANCES, 0)
|
|
nTmp -= (1 << (m_nInstance - 1))
|
|
WriteMainPrivateProfileString(S_GENERAL, K_INSTANCES, nTmp.ToString())
|
|
End Sub
|
|
|
|
#End Region ' METHODS
|
|
|
|
End Class
|