Imports System.IO Imports EgtUILib.EgtInterface Imports EgtWPFLib5 Public Class ParametricCompoVM Inherits SceneUserControlVM #Region "FIELDS & PROPERTIES" Private m_sLuaPath As String = String.Empty Friend ReadOnly bFileExsist As Boolean = False Private m_nVeinCtx As Integer #End Region ' Fields & Properties #Region "CONSTRUCTOR" Sub New(sFile As String, nVeinCtx As Integer, Optional dir As String = "") MyBase.New() m_nVeinCtx = nVeinCtx Title = EGT_PARAMETRIC.ToUpper() ' Recupero path cartella che contiene i componenti If Not File.Exists(dir & sFile) Then GetMainPrivateProfileString(K_COMPO, COMPO_DIR, "", m_sLuaPath) ' Controllo se il file esiste m_sLuaPath &= sFile Else m_sLuaPath = dir & sFile End If If File.Exists(m_sLuaPath) Then LoadParamList() bFileExsist = True Else EgtOutLog("File " & m_sLuaPath & " non esiste nella cartella dei componenti") End If ' aggiorno visualizzazione EgtSetView(VT.TOP, False) EgtZoom(ZM.ALL) End Sub #End Region ' Contructor #Region "METHODS" Public Overrides Sub LoadParamList() ' Pulisco lista variabili ParamList.Clear() EgtLuaExecFile(m_sLuaPath) Dim sPar As String = "0" EgtLuaGetGlobStringVar("CMP.Npar", sPar) If Not String.IsNullOrEmpty(sPar) Then Dim sName As String = String.Empty EgtLuaGetGlobStringVar("CMP.Nome", sName) Dim nPar As Integer = CInt(sPar) ParamList.Add(New _TextBlockParam("Messaggio", sName, Visibility.Visible)) ' Recupero nome, tipo e valore delle variabili globali For Index As Integer = 1 To nPar Dim NewCompo As GenericParam = Nothing If NameTypeValueFromLua(Index, NewCompo) Then ParamList.Add(NewCompo) End If Next End If End Sub Private Sub ExecLua() If Not File.Exists(m_sLuaPath) Then EgtOutLog("Matching error: missing file (" & m_sLuaPath & ")") Return End If ' Parsing EgtLuaExecFile(m_sLuaPath) EgtSetCurrentContext(m_nVeinCtx) For Index As Integer = 0 To ParamList.Count - 1 If TypeOf ParamList(Index) Is _TextBoxParam Then Dim _TextBox As _TextBoxParam = DirectCast(ParamList(Index), _TextBoxParam) EgtLuaSetGlobNumVar("CMP.V" & Index, CDbl(_TextBox.sValue)) ElseIf TypeOf ParamList(Index) Is _CheckBoxParam Then Dim _CheckBox As _CheckBoxParam = DirectCast(ParamList(Index), _CheckBoxParam) EgtLuaSetGlobBoolVar("CMP.V" & Index, _CheckBox.IsChecked) End If Next EgtLuaExecLine("CMP_Draw" & "(true)") EgtLuaResetGlobVar("CMP") End Sub Public Overrides Sub Conferma() Map.refSceneHostVM.m_bPreviewShown = False ExecLua() EgtDraw() Close() End Sub Public Overrides Sub Annulla() EgtErase(EgtGetFirstPart()) EgtDraw() Close() End Sub Public Overrides Sub ShowPreview() Map.refSceneHostVM.m_bPreviewShown = True ExecLua() EgtDraw() End Sub Private Sub Close() Map.refSceneButtonVM.RemoveUC(Map.refSceneButtonVM.m_ParametricCompoUC) End Sub Private Function NameTypeValueFromLua(nInd As Integer, ByRef Param As GenericParam) As Boolean Dim bOk As Boolean = True Dim sName As String = String.Empty Dim nType As Integer = 0 bOk = bOk AndAlso EgtLuaGetGlobStringVar(LUA_NAME & nInd.ToString(), sName) bOk = bOk AndAlso EgtLuaGetGlobIntVar(LUA_TYPE & nInd.ToString(), nType) Return bOk AndAlso FromLua(nInd, sName, nType, Param) End Function Private Function FromLua(nInd As Integer, sName As String, nType As Integer, ByRef Param As GenericParam) As Boolean Dim sVal As String = String.Empty Dim dVal As Double = 0 Dim nVal As Integer = 0 Dim bOk As Boolean Select Case nType Case ParamType.BOOL bOk = EgtLuaGetGlobBoolVar(LUA_VALUE & nInd.ToString(), ParamType.BOOL) Param = New _CheckBoxParam(sName, sVal) Return bOk Case ParamType.INT bOk = EgtLuaGetGlobIntVar(LUA_VALUE & nInd.ToString(), nVal) Param = New _TextBoxParam(sName, nVal.ToString(), nType) Return bOk Case ParamType.LEN, ParamType.DOUB bOk = EgtLuaGetGlobNumVar(LUA_VALUE & nInd.ToString(), dVal) Param = New _TextBoxParam(sName, dVal.ToString(), nType) Return bOk Case ParamType.STR bOk = EgtLuaGetGlobStringVar(LUA_VALUE & nInd.ToString(), sVal) Param = New _TextBoxParam(sName, sVal, nType) Return bOk End Select Return False End Function #End Region ' Methods End Class