Imports System.Threading Imports System.Math Imports EgtUILib Imports EgtWPFLib5 Imports EgtBEAMWALL.Core Public Class MainWindowM #Region "FIELDS" ' massimo numero di istanze del programma ammesse Const MAX_INST As Integer = 1 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_bAutoNestOption As Boolean = False Friend ReadOnly Property AutoNestOption As Boolean Get Return m_bAutoNestOption End Get End Property Friend ReadOnly Property sVersion As String Get Return 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() 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_sMachinesRoot As String Friend ReadOnly Property sMachinesRoot As String Get Return m_sMachinesRoot End Get End Property Private m_sBeamRoot As String Friend ReadOnly Property sBeamRoot As String Get Return m_sBeamRoot End Get End Property Private m_sWallRoot As String Friend ReadOnly Property sWallRoot As String Get Return m_sWallRoot End Get End Property Private m_sWarehouseRoot As String Friend ReadOnly Property sWarehouseRoot As String Get Return m_sWarehouseRoot End Get End Property Private m_sToolMakersDir As String Friend ReadOnly Property sToolMakersDir As String Get Return m_sToolMakersDir End Get End Property Private m_sResourcesRoot As String Friend ReadOnly Property sResourcesRoot As String Get Return m_sResourcesRoot 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 sProjsDir As String Get Return m_sDataRoot & "\" & PROJS_DIR End Get End Property Friend ReadOnly Property sProdsDir As String Get Return m_sDataRoot & "\" & PRODS_DIR End Get End Property ' File ini della macchina Private m_sMachIniFile As String = String.Empty Public ReadOnly Property sMachIniFile As String Get Return m_sMachIniFile End Get End Property #End Region ' FIELDS #Region "CONSTRUCTOR" Sub New() InitializeEgtEnvironment() End Sub #End Region ' CONSTRUCTOR #Region "METHODS" Private Sub InitializeEgtEnvironment() '' Abilito drag and drop 'Me.AllowDrop = True ' 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 ' Impostazione path Ini file IniFile.m_sIniFile = m_sConfigDir & "\" & INI_FILE_NAME ' Impostazione path resources dir m_sResourcesRoot = m_sDataRoot & "\" & RES_DIR ' Impostazione direttorio per le macchine If GetMainPrivateProfileString(S_MACH, K_MACHINESDIR, "", m_sMachinesRoot) = 0 Then m_sMachinesRoot = m_sDataRoot & "\" & MACHINES_DFL_DIR End If ' Impostazione direttorio per toolmakers If GetMainPrivateProfileString(S_MACH, K_TOOLMAKERSDIR, "", m_sToolMakersDir) = 0 Then m_sToolMakersDir = m_sDataRoot & "\" & TOOLMAKERS_DFL_DIR End If ' 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 sNestKey As String = "" 'EgtUILib.GetPrivateProfileString(S_LICENCE, K_NESTKEY, "", sNestKey, sLicFile) 'EgtSetNestKey(sNestKey) '' Verifico abilitazione nesting automatico 'm_bAutoNestOption = Not String.IsNullOrWhiteSpace(sNestKey) '' Recupero livello e opzioni della chiave 'Dim bKey As Boolean = EgtGetKeyLevel(5327, 2308, 1, m_nKeyLevel) And ' EgtGetKeyOptions(5327, 2308, 1, m_nKeyOptions) '' 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_SCENE, 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) '' Info su opzioni chiave 'EgtOutLog("KeyOptions : " & bKey.ToString() & " " & m_nKeyOptions.ToString()) End Sub Friend Sub SetMachIniFile(sPath As String) m_sMachIniFile = sPath End Sub 'Private Sub ManageInstance() ' Dim bCreated As Boolean ' Try ' m_objMutex = New Mutex(False, "Global\OmagOFFICE", 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 ' Dim nMaxInst As Integer = GetMaxInstances() ' ' 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("OmagOFFICER32") ' 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("OmagOFFICER64") ' 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 Function GetMaxInstances() As Integer ' ' Leggo il massimo numero di istanze ammesse ' Dim nMaxInst As Integer = GetMainPrivateProfileInt(S_GENERAL, K_MAXINST, 1) ' Return Max(1, Min(nMaxInst, MAX_INST)) '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