Files
EgtDOORCreator/DoorParameters/Compo.vb
T
Dario Sassi c946993403 EgtDOORCreator :
- scrittura in log di errori legati a Config.ini dei componenti.
2017-12-14 18:22:16 +00:00

958 lines
41 KiB
VB.net

Imports System.ComponentModel
Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtUILib
Public Class Compo
Implements INotifyPropertyChanged
Friend TempFileDDF As String = IniFile.m_sTempDir & "\" & TEMP_FILE
'Friend m_rfCurrDoor As Part
' definizione della funzione delegato: riceve il valore di modifica della compo e della general
'Delegate Function CompareIsModify(rIsModifyCompo As Boolean, rIsModifyDoor As Boolean) As Boolean
'' aggiorno la variabile globale di cambiamento: verifico che sia il template che una combo/text sono state modificate
'Function IsModify() As Boolean
' If m_IsModifiedTemplateSelItem Then
' Return True
' End If
' For IndexCompoParamList = 0 To Me.CompoParamList.Count - 1
' If Me.CompoParamList(IndexCompoParamList).m_IsModifyCompoParam Then
' m_rfCurrDoor.m_IsModifyDoor = True
' Return True
' End If
' Next
' Return False
'End Function
' creo la stringa che contiene la lista degli errori
Dim ErrorList As String = String.Empty
Dim SetCompo As Integer = 0
Private m_CompoType As CompoType
Public ReadOnly Property CompoType As CompoType
Get
Return m_CompoType
End Get
End Property
Private m_refCompoJamb As Compo
Public Property refJambCompo As Compo
Get
Return m_refCompoJamb
End Get
Set(value As Compo)
m_refCompoJamb = value
End Set
End Property
Private m_IsReadOnly As Boolean = True
Public Property IsReadOnly As Boolean
Get
Return m_IsReadOnly
End Get
Set(value As Boolean)
m_IsReadOnly = value
End Set
End Property
Private m_IdCode As String
Public Property IdCode As String
Get
Return m_IdCode
End Get
Set(value As String)
m_IdCode = value
End Set
End Property
#Region "Template ComboBox"
Private m_TemplateName As String
Public Property TemplateName As String
Get
Return m_TemplateName
End Get
Set(value As String)
m_TemplateName = value
End Set
End Property
Private m_TemplateDDFName As String
Public Property TemplateDDFName As String
Get
Return m_TemplateDDFName
End Get
Set(value As String)
m_TemplateDDFName = value
End Set
End Property
Private m_TemplateItemList As New List(Of String)
Public Property TemplateItemList As List(Of String)
Get
Return m_TemplateItemList
End Get
Set(value As List(Of String))
m_TemplateItemList = value
End Set
End Property
Friend m_IsModifiedTemplateSelItem As Boolean = False
Private m_TemplateSelItem As String
Public Property TemplateSelItem As String
Get
Return m_TemplateSelItem
End Get
Set(value As String)
SetTemplateSelItem(value)
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
Map.refSceneManagerVM.RefreshBtn()
End Set
End Property
' setta il valore del template
Friend Sub SetTemplateSelItem(value As String)
Dim CurrConfig As String = m_CompoType.Path & "\" & CONFIGINI_FILE_NAME
Dim CurrItemPath As String = m_CompoType.Path & "\" & value
Dim ErrorList As String = String.Empty
' se il file ha estensione nge
If Path.HasExtension(CurrItemPath) AndAlso Path.GetExtension(CurrItemPath).ToLower = K_NGEEXTENSION Then
' controllo che esiste il file altrimenti esco
If Not File.Exists(CurrItemPath) Then Return
m_TemplateSelItem = value
' creo la stringa che contiene la lista degli errori
Dim ParamIndex As Integer = 1
Dim ConfigDefault As String = String.Empty
Dim NewCompoParam As CompoParam = Nothing
EgtUILib.GetPrivateProfileString(S_NGECONFIG, K_DEFAULT, "", ConfigDefault, CurrConfig)
' ricerco la parola chiave Param nella stringa nel file Cinfig.ini
ReadParamConfig(NewCompoParam, ErrorList, ParamIndex, ConfigDefault)
Else
' se il file non ha estensione allora creo l'estensione .lua
If Not Path.GetExtension(CurrItemPath).ToLower = K_LUAEXTENSION Then
CurrItemPath &= K_LUAEXTENSION
End If
' controllo che esiste il file altrimenti esco
If Not File.Exists(CurrItemPath) Then Return
m_TemplateSelItem = value
' carico un vettore con le stringhe del file corrente
Dim ReadCurrCompo() As String = File.ReadAllLines(CurrItemPath)
Dim EndOfFile As Boolean = False
' leggo il vettore di stringhe del file corrente
For LineIndex = 0 To ReadCurrCompo.Count - 1
' copio il valore della riga
Dim CurrCompoFileLine As String = ReadCurrCompo(LineIndex)
' cerco il titolo [Graphic parameters]: se lo trovo
If RegexFunction.IsGraphicParametersTitle(CurrCompoFileLine) Then
' mi preparo per leggere la prima riga dopo il titolo
Dim ParamIndex As Integer = 1
Dim NewCompoParam As CompoParam = Nothing
Dim bIsFinished As Boolean = False
' se la lettura del primo parametro "--Default=" restituisce un valore non nullo
If Not String.IsNullOrWhiteSpace(ParamLine(ReadCurrCompo(LineIndex + ParamIndex), K_DEFAULT)) Then
Dim ConfigDefault As String = Trim(ParamLine(ReadCurrCompo(LineIndex + ParamIndex), K_DEFAULT))
If Not IsNumeric(ConfigDefault) Then
' se il valore letto non è numerico allora esco dal cilo per la lettura dei parametri
Exit For
Else
ReadParamConfig(NewCompoParam, ErrorList, ParamIndex, ConfigDefault)
Exit For
End If
Else
' se il primo parametro non è "Dafault" allora mi aspetto di leggere i parametri
While Not bIsFinished
' attualizzo il componente a nulla
NewCompoParam = Nothing
' cerco nella riga successiva al titolo il primo parametro
If Not String.IsNullOrWhiteSpace(ReadCurrCompo(LineIndex + ParamIndex)) Then
Dim ReadLine As String
' carico i valori della stringa che seguono la chiave "--Param1="
ReadLine = ParamLine(ReadCurrCompo(LineIndex + ParamIndex), K_PARAM & ParamIndex)
' se uno dei paraemtri è completamente sbagliato allora restituisce falso e non riempo la NewCompoParam che rimane Nothing
bIsFinished = Not ReadParam(ReadLine, NewCompoParam, ErrorList)
Else
' altrimenti se la riga è vuota mi sposto alla successiva
LineIndex += 1
' e continuo il ciclo while
Continue While
End If
' insrisco la nuova componenenet: se la riga è vuota o la componente non è stata creata allora il componete è Nothing
InsertCompoParam(NewCompoParam, ParamIndex)
' se il parametro è stato creato passa alla riga successiva
If Not bIsFinished Then ParamIndex += 1
End While
NotifyPropertyChanged("TemplateSelItem")
End If
' esiste già una lista
For DeleteIndex = m_CompoParamList.Count - 1 To ParamIndex - 1 Step -1
m_CompoParamList.RemoveAt(DeleteIndex)
Next
Exit For
ElseIf LineIndex = ReadCurrCompo.Count - 1 Then
' se non trovo il capitoletto nel file leggo i parametri di default del file Config.ini
Dim ParamIndex As Integer = 1
Dim NewCompoParam As CompoParam = Nothing
ReadParamConfig(NewCompoParam, ErrorList, ParamIndex, "")
Exit For
End If
Next
End If
If Not String.IsNullOrWhiteSpace(ErrorList) Then EgtOutLog(ErrorList)
'----------------------------------------------------------------------------------------------------------------------------------------------
' Not IsNothing(Me.refJambCompo) And
If Assembly.BuiltReffCompo Then
Dim FrameCompoFile As String = String.Empty
Dim FrameCompoFileConfig As String = String.Empty
Dim nDoorNbr As Integer = 1
Int32.TryParse(Map.refAssemblyPageVM.CurrAssembly.DoorNumber, nDoorNbr)
If CalcCompoMatching(Me.CompoType.Path, nDoorNbr, Me.TemplateSelItem, FrameCompoFile) AndAlso
Not String.IsNullOrEmpty(FrameCompoFile) Then
If Not SearchFileConfig(FrameCompoFile, FrameCompoFileConfig) Then
MessageBox.Show("Jamb compo does not exist", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning)
If Not IsNothing(Me.refJambCompo) Then
Map.refPartPageVM.CurrPart.RemoveRefCompo(Me.refJambCompo)
Me.refJambCompo = Nothing
return
End If
Else
Dim FrameCompoNameDDF As String = String.Empty
Dim FrameCompoName As String = String.Empty
Dim Side As String = String.Empty
Dim CurrCompoPath As String = FrameCompoFileConfig
' sostituisco il vecchio CompoType con quello corretto
If File.Exists(CurrCompoPath) Then
GetPrivateProfileCompoName(ConstCompo.S_COMPO, ConstCompo.K_NAME, FrameCompoNameDDF, FrameCompoName, CurrCompoPath)
GetPrivateProfileJambSide("PositionSide", "Side", Side, CurrCompoPath)
If String.IsNullOrEmpty(Side) Then Side = Me.CompoType.JambSide
'-------------------------------------------------------------------------------------------------------------------------------
If IsNothing(Me.refJambCompo) Then
Part.CreateRefCompo(Me.CompoType, Me, Map.refAssemblyPageVM.CurrAssembly, FrameCompoFileConfig, FrameCompoFile, Map.refPartPageVM.CurrPart)
If CompoMatch.LoadCompoParam(Me) Then Map.refAssemblyPageVM.CurrAssembly.UpDateCurrCompoJamb(Me)
Return
End If
'-------------------------------------------------------------------------------------------------------------------------------
Me.refJambCompo.CompoType.SetDDFName(FrameCompoNameDDF)
Me.refJambCompo.CompoType.SetName(FrameCompoName)
Dim FrameCompoDirectory As String
FrameCompoDirectory = FrameCompoFileConfig.Remove(FrameCompoFileConfig.LastIndexOf("\"))
Me.refJambCompo.CompoType.SetPath(FrameCompoDirectory)
Me.refJambCompo.CompoType.SetJambSide(Side)
End If
End If
' Carico il nome
FrameCompoFile = FrameCompoFile.Substring(FrameCompoFileConfig.LastIndexOf("\") + 1)
Me.refJambCompo.SetTemplateSelItemRefCompo(FrameCompoFile, Me.refJambCompo)
LoadCompoParam(Me)
Map.refAssemblyPageVM.CurrAssembly.UpDateCurrCompoJamb(Me)
ResetCompoParam()
End If
End If
End Sub
' setto la lista dei parametri da caricare la lista dei paramestri
Private Sub ReadParamConfig(ByRef NewCompoParam As CompoParam, ByRef ErrorList As String, ParamIndex As Integer, DefaultConfig As String)
Dim sParam As String = String.Empty
Dim CurrConfig As String = m_CompoType.Path & "\" & CONFIGINI_FILE_NAME
Dim S_CHAPTER As String
If String.IsNullOrWhiteSpace(DefaultConfig) Then
S_CHAPTER = S_GR_PARAM_DEFAULT & "1"
Else
S_CHAPTER = S_GR_PARAM_DEFAULT & DefaultConfig
End If
While EgtUILib.GetPrivateProfileString(S_CHAPTER, K_PARAM & ParamIndex, "", sParam, CurrConfig) > 0
If Not String.IsNullOrWhiteSpace(sParam) Then
' leggo il tipo di parametro
ReadParam(sParam, NewCompoParam, ErrorList)
' carico il parametro nella lista della componente
InsertCompoParam(NewCompoParam, ParamIndex)
End If
ParamIndex += 1
End While
' controllo di aver tolto tutti i parametri che potrrebbero esistere da una precedente chiamata
For DeleteIndex = m_CompoParamList.Count - 1 To ParamIndex - 1 Step -1
m_CompoParamList.RemoveAt(DeleteIndex)
Next
End Sub
' inserisco il parametro letto nella lista dei paramtri senza modificare i parametri già esistenti
Private Sub InsertCompoParam(NewCompoParam As CompoParam, ParamIndex As Integer)
If Not IsNothing(NewCompoParam) Then
' se non esiste l'indice
If Not m_CompoParamList.Count > ParamIndex - 1 Then
' creo il parametro
Me.CompoParamList.Insert(ParamIndex - 1, NewCompoParam)
Else
' se esiste ma è diverso il nome DDF o il tipo
If m_CompoParamList(ParamIndex - 1).DDFName <> NewCompoParam.DDFName OrElse
Not Object.ReferenceEquals(m_CompoParamList(ParamIndex - 1).GetType(), NewCompoParam.GetType()) Then
' creo il nuovo parametro
m_CompoParamList.RemoveAt(ParamIndex - 1)
m_CompoParamList.Insert(ParamIndex - 1, NewCompoParam)
End If
End If
End If
End Sub
' a differenza delle funzioni sopra queste ricevono come parametro l'oggetto compo che deve essere modificato
' il prossimo passo sarà eliminare le funzioni sopra scritte per lasciare solo queste
#Region "SettemplateREFCOMPO"
Friend Sub SetTemplateSelItemRefCompo(value As String, CurrRefCompo As Compo)
Dim CurrConfig As String = CurrRefCompo.CompoType.Path & "\" & CONFIGINI_FILE_NAME
Dim CurrItemPath As String = CurrRefCompo.CompoType.Path
If value.Contains(CurrItemPath) Then
value = value.Substring(CurrItemPath.Count + 1)
CurrItemPath &= "\" & value
Else
CurrItemPath &= "\" & value
End If
Dim ErrorList As String = String.Empty
' se il file ha estensione nge
If Path.HasExtension(CurrItemPath) AndAlso Path.GetExtension(CurrItemPath).ToLower = K_NGEEXTENSION Then
' controllo che esiste il file altrimenti esco
If Not File.Exists(CurrItemPath) Then Return
CurrRefCompo.TemplateSelItem = value
' creo la stringa che contiene la lista degli errori
Dim ParamIndex As Integer = 1
Dim ConfigDefault As String = String.Empty
Dim NewCompoParam As CompoParam = Nothing
EgtUILib.GetPrivateProfileString(S_NGECONFIG, K_DEFAULT, "", ConfigDefault, CurrConfig)
' ricerco la parola chiave Param nella stringa nel file Cinfig.ini
ReadParamConfig(NewCompoParam, ErrorList, ParamIndex, ConfigDefault)
Else
' se il file non ha estensione allora creo l'estensione .lua
If Not Path.GetExtension(CurrItemPath).ToLower = K_LUAEXTENSION Then
CurrItemPath &= K_LUAEXTENSION
End If
' controllo che esiste il file altrimenti esco
If Not File.Exists(CurrItemPath) Then Return
CurrRefCompo.TemplateSelItem = value
' carico un vettore con le stringhe del file corrente
Assembly.BuiltReffCompo = False
Dim ReadCurrCompo() As String = File.ReadAllLines(CurrItemPath)
Assembly.BuiltReffCompo = True
Dim EndOfFile As Boolean = False
' leggo il vettore di stringhe del file corrente
For LineIndex = 0 To ReadCurrCompo.Count - 1
' copio il valore della riga
Dim CurrCompoFileLine As String = ReadCurrCompo(LineIndex)
' cerco il titolo [Graphic parameters]: se lo trovo
If RegexFunction.IsGraphicParametersTitle(CurrCompoFileLine) Then
' mi preparo per leggere la prima riga dopo il titolo
Dim ParamIndex As Integer = 1
Dim NewCompoParam As CompoParam = Nothing
Dim bIsFinished As Boolean = False
' se la lettura del primo parametro "--Default=" restituisce un valore non nullo
If Not String.IsNullOrWhiteSpace(ParamLine(ReadCurrCompo(LineIndex + ParamIndex), K_DEFAULT)) Then
Dim ConfigDefault As String = Trim(ParamLine(ReadCurrCompo(LineIndex + ParamIndex), K_DEFAULT))
If Not IsNumeric(ConfigDefault) Then
' se il valore letto non è numerico allora esco dal cilo per la lettura dei parametri
Exit For
Else
ReadParamConfig(NewCompoParam, ErrorList, ParamIndex, ConfigDefault)
Exit For
End If
Else
' se il primo parametro non è "Dafault" allora mi aspetto di leggere i parametri
While Not bIsFinished
' attualizzo il componente a nulla
NewCompoParam = Nothing
' cerco nella riga successiva al titolo il primo parametro
If Not String.IsNullOrWhiteSpace(ReadCurrCompo(LineIndex + ParamIndex)) Then
Dim ReadLine As String
' carico i valori della stringa che seguono la chiave "--Param1="
ReadLine = ParamLine(ReadCurrCompo(LineIndex + ParamIndex), K_PARAM & ParamIndex)
' se uno dei paraemtri è completamente sbagliato allora restituisce falso e non riempo la NewCompoParam che rimane Nothing
bIsFinished = Not ReadParam(ReadLine, NewCompoParam, ErrorList)
Else
' altrimenti se la riga è vuota mi sposto alla successiva
LineIndex += 1
' e continuo il ciclo while
Continue While
End If
' insrisco la nuova componenenet: se la riga è vuota o la componente non è stata creata allora il componete è Nothing
InsertCompoParam(NewCompoParam, ParamIndex)
' se il parametro è stato creato passa alla riga successiva
If Not bIsFinished Then ParamIndex += 1
End While
NotifyPropertyChanged("TemplateSelItem")
End If
' esiste già una lista
For DeleteIndex = Me.refJambCompo.CompoParamList.Count - 1 To ParamIndex - 1 Step -1
Me.refJambCompo.CompoParamList.RemoveAt(DeleteIndex)
Next
Exit For
ElseIf LineIndex = ReadCurrCompo.Count - 1 Then
' se non trovo il capitoletto nel file leggo i parametri di default del file Config.ini
Dim ParamIndex As Integer = 1
Dim NewCompoParam As CompoParam = Nothing
ReadParamConfigRefCompo(NewCompoParam, ErrorList, ParamIndex, "", CurrRefCompo)
Exit For
End If
Next
End If
If Not String.IsNullOrWhiteSpace(ErrorList) Then EgtOutLog(ErrorList)
End Sub
' setto la lista dei parametri da caricare la lista dei paramestri
Private Sub ReadParamConfigRefCompo(ByRef NewCompoParam As CompoParam, ByRef ErrorList As String, ParamIndex As Integer, DefaultConfig As String, CurrRefCompo As Compo)
Dim sParam As String = String.Empty
Dim CurrConfig As String = CurrRefCompo.CompoType.Path & "\" & CONFIGINI_FILE_NAME
Dim S_CHAPTER As String
If String.IsNullOrWhiteSpace(DefaultConfig) Then
S_CHAPTER = S_GR_PARAM_DEFAULT & "1"
Else
S_CHAPTER = S_GR_PARAM_DEFAULT & DefaultConfig
End If
While EgtUILib.GetPrivateProfileString(S_CHAPTER, K_PARAM & ParamIndex, "", sParam, CurrConfig) > 0
If Not String.IsNullOrWhiteSpace(sParam) Then
' leggo il tipo di parametro
ReadParam(sParam, NewCompoParam, ErrorList)
' carico il parametro nella lista della componente
InsertCompoParamRef(NewCompoParam, ParamIndex, CurrRefCompo)
End If
ParamIndex += 1
End While
' controllo di aver tolto tutti i parametri che potrrebbero esistere da una precedente chiamata
For DeleteIndex = CurrRefCompo.CompoParamList.Count - 1 To ParamIndex - 1 Step -1
CurrRefCompo.CompoParamList.RemoveAt(DeleteIndex)
Next
End Sub
' inserisco il parametro letto nella lista dei paramtri senza modificare i parametri già esistenti
Private Sub InsertCompoParamRef(NewCompoParam As CompoParam, ParamIndex As Integer, CurrRefCompo As Compo)
If Not IsNothing(NewCompoParam) Then
' se non esiste l'indice
If Not CurrRefCompo.CompoParamList.Count > ParamIndex - 1 Then
' creo il parametro combo
CurrRefCompo.CompoParamList.Insert(ParamIndex - 1, NewCompoParam)
Else
' se esiste ma è diverso il nome DDF
If Not m_CompoParamList(ParamIndex - 1).DDFName = NewCompoParam.DDFName Then
' creo il nuovo parametro combo
CurrRefCompo.CompoParamList.RemoveAt(ParamIndex - 1)
CurrRefCompo.CompoParamList.Insert(ParamIndex - 1, NewCompoParam)
End If
End If
End If
End Sub
#End Region ' SetTemplateREFCOMPO
' Utilizzo nome DDF e nome, restituisco il nome solo se esiste un messaggio associato
Private Function MsgControl(sDDFName As String, sName As String, ByRef sErrorList As String) As String
'Se nome è numerico
Dim nInd As Integer
If Integer.TryParse(sName, nInd) Then
' recupero il messaggio
Dim sMsg As String = EgtMsg(nInd)
' se non esiste lo sostituico con il nome
Dim ErrorMsg As String = "Msg" & Trim(sName)
If String.Equals(sMsg, ErrorMsg) Then
' Errore nella lettura dei messaggi. Non esiste corrispondenza con il numero {0}.
sErrorList = ConcatErrorString(sErrorList, String.Format(EgtMsg(50119), sName))
Return sDDFName
' altrimenti lo restituisco
Else
Return sMsg
End If
' Altrimenti restituisco il nome
Else
Return sName
End If
End Function
Private Function ReadParam(sReadLine As String, ByRef NewCompoParam As CompoParam, ByRef sErrorList As String) As Boolean
' Se linea vuota, esco con errore
If String.IsNullOrWhiteSpace(sReadLine) Then
sErrorList = ConcatErrorString(sErrorList, "Empty Line")
Return False
End If
' Scompongo la linea nelle sue parti
Dim sItems() As String = sReadLine.Split(";"c)
' Devono esserci almeno due parti
If sItems.Count() < 2 Then
' Errore nella lettura {0} nel parametro {1} della componente: non esiste.
Dim sError As String = String.Format(EgtMsg(50121), m_CompoType.DDFName, sItems(0))
sErrorList = ConcatErrorString(sErrorList, sError)
Return False
End If
' La prima parte definisce la categoria
Select Case Trim(sItems(0))
Case "ComboBox"
' NomeDDF e Nome del combo
Dim sComboList() As String = sItems(1).Split("/"c)
Dim sDDFName As String = String.Empty
Dim sName As String = String.Empty
If sComboList.Count() >= 1 Then sDDFName = Trim(sComboList(0))
If sComboList.Count() >= 2 Then
sName = Trim(MsgControl(sComboList(0), sComboList(1), sErrorList))
Else
sName = sDDFName
' Errore nella lettura del nome {0} in {1}. Attesa una corrispondenza numerica.
sErrorList = ConcatErrorString(sErrorList, String.Format(EgtMsg(50120), sComboList(0), m_CompoType.Path))
End If
' La combobox deve contenere almeno un elemento "ComboBox; NomeDDF/Nome; NomeDDFItem/NomeItem, ...."
If sItems.Count < 3 Then
' Errore nella lettura {0} nel parametro {1} della componente: non esiste.
Dim sError As String = String.Format(EgtMsg(50121), sDDFName, m_CompoType.DDFName)
sErrorList = ConcatErrorString(sErrorList, sError)
Return False
End If
' Ricavo i diversi item
Dim sComboItemList() As String = sItems(2).Split(","c)
Dim ComboItemList As New List(Of String)
Dim DDFComboItemList As New List(Of String)
For ItemIndex = 0 To sComboItemList.Count - 1
Dim ComboItem() As String = sComboItemList(ItemIndex).Split("/"c)
' se esiste il NomeDDFItem
If ComboItem.Count >= 1 Then DDFComboItemList.Add(Trim(ComboItem(0)))
' se esiste anche il NomeItem
If ComboItem.Count >= 2 Then
' carico la lista con i nomi
ComboItemList.Add(Trim(MsgControl(ComboItem(0), ComboItem(1), sErrorList)))
Else
' se esiste solo un nome considero sia il nome DDF
ComboItemList.Add(Trim(ComboItem(0)))
' Errore nella lettura del nome {0} in {1}. Attesa una corrispondenza numerica.
sErrorList = ConcatErrorString(sErrorList, String.Format(EgtMsg(50120), ComboItem(0), m_CompoType.Path))
End If
Next
' Creo il parametro
NewCompoParam = New ComboBoxParam(sDDFName, sName, Me, ComboItemList, DDFComboItemList, ComboItemList(0))
Return True
Case "TextBox"
' NomeDDF e Nome del Text
Dim sTextList() As String = sItems(1).Split("/"c)
Dim sDDFName As String = String.Empty
Dim sName As String = String.Empty
If sTextList.Count() >= 1 Then sDDFName = Trim(sTextList(0))
If sTextList.Count() >= 2 Then
sName = Trim(MsgControl(sTextList(0), sTextList(1), sErrorList))
Else
sName = sDDFName
' Errore nella lettura del nome {0} in {1}. Attesa una corrispondenza numerica.
sErrorList = ConcatErrorString(sErrorList, String.Format(EgtMsg(50120), sTextList(0), m_CompoType.Path))
End If
' Se ci sono 2 elementi "TextBox; NomeDDF/Nome"
If sItems.Count < 3 Then
NewCompoParam = New TextBoxParam(sDDFName, sName, Me, "0.000", Nothing, Nothing)
' Errore nella lettura {0} nel parametro {1} della componente: non esiste il valore.
sErrorList = ConcatErrorString(sErrorList, String.Format(EgtMsg(50125), sName, m_CompoType.DDFName))
Return True
End If
' recupero il valore di default
Dim dHeight As Double = 500 ' Attenzione ai mm
Dim dDefaultValue As Double
If StringToDouble(sItems(2), dDefaultValue) AndAlso dDefaultValue < dHeight Then
Dim sDefaultValue As String = DoubleToString(dDefaultValue, 5)
NewCompoParam = New TextBoxParam(sDDFName, sName, Me, sDefaultValue, Nothing, Nothing)
Return True
Else
NewCompoParam = New TextBoxParam(sDDFName, sName, Me, "0.000", Nothing, Nothing)
' Errore nell'espressione {0}. {1} non associa nulla.
sErrorList = ConcatErrorString(sErrorList, String.Format(EgtMsg(50147), NewCompoParam.Name, sItems(2)))
Return True
End If
Case "TextBoxOnOff"
' NomeDDF e Nome del Text
Dim sTextList() As String = sItems(1).Split("/"c)
Dim sDDFName As String = String.Empty
Dim sName As String = String.Empty
If sTextList.Count() >= 1 Then sDDFName = Trim(sTextList(0))
If sTextList.Count() >= 2 Then
sName = Trim(MsgControl(sTextList(0), sTextList(1), sErrorList))
Else
sName = sDDFName
' Errore nella lettura del nome {0} in {1}. Attesa una corrispondenza numerica.
sErrorList = ConcatErrorString(sErrorList, String.Format(EgtMsg(50120), sTextList(0), m_CompoType.Path))
End If
' Se ci sono 2 elementi "TextBox; NomeDDF/Nome"
If sItems.Count < 3 Then
NewCompoParam = New TextBoxOnOffParam(sDDFName, sName, Me, "0.000", Nothing, Nothing)
' Errore nella lettura {0} nel parametro {1} della componente: non esiste il valore.
sErrorList = ConcatErrorString(sErrorList, String.Format(EgtMsg(50125), sName, m_CompoType.DDFName))
Return True
End If
' recupero il valore di default
Dim dHeight As Double = 500 ' Attenzione ai mm
Dim dDefaultValue As Double
If StringToDouble(sItems(2), dDefaultValue) AndAlso dDefaultValue < dHeight Then
Dim sDefaultValue As String = DoubleToString(dDefaultValue, 5)
NewCompoParam = New TextBoxOnOffParam(sDDFName, sName, Me, sDefaultValue, Nothing, Nothing)
Return True
Else
NewCompoParam = New TextBoxOnOffParam(sDDFName, sName, Me, "0.000", Nothing, Nothing)
' Errore nell'espressione {0}. {1} non associa nulla.
sErrorList = ConcatErrorString(sErrorList, String.Format(EgtMsg(50147), NewCompoParam.Name, sItems(2)))
Return True
End If
End Select
Return False
End Function
' converto questo vettore {"TextBox", "NomeDDF/Nome"} in {"TextBox", "NomeDDF", "Nome"}
Private Sub ConvertTextBoxString(ByRef Items() As String)
Dim Arrays(Items.Count) As String
Dim IndexArray As Integer = 0
Dim IndexItems As Integer = 0
For IndexItems = 0 To Items.Count - 1
If Not String.IsNullOrEmpty(RegexFunction.ParamExpression(Items(IndexItems))) Then
Arrays(IndexArray) = Trim(RegexFunction.ParamExpression(Items(IndexItems)))
IndexArray += 1
ElseIf Items(IndexItems).Split("/"c).Count = 1 Then
Arrays(IndexArray) = Trim(Items(IndexItems))
IndexArray += 1
ElseIf Items(IndexItems).Split("/"c).Count = 2 Then
Arrays(IndexArray) = Trim(Items(IndexItems).Split("/"c)(0))
IndexArray += 1
If IndexArray < Arrays.Count - 1 Then
Arrays(IndexArray) = Trim(Items(IndexItems).Split("/"c)(1))
IndexArray += 1
End If
End If
Next
If IndexArray = IndexItems + 1 Then
System.Array.Resize(Items, IndexArray)
Items = Arrays
'Else
' Items = Arrays
End If
End Sub
' converto questo vettore {"ComboBox", "NomeDDF/Nome"} in {"ComboBox", "NomeDDF", "Nome"}
Private Sub ConvertComboBoxString(ByRef Items() As String)
Dim bCovert As Boolean = False
Dim Arrays(Items.Count) As String
Dim IndexArray As Integer = 0
Dim IndexItems As Integer = 0
For IndexItems = 0 To Items.Count - 1
If Items(IndexItems).Split("/"c).Count = 1 Then
Arrays(IndexArray) = Trim(Items(IndexItems))
IndexArray += 1
ElseIf Items(IndexItems).Split("/"c).Count = 2 Then
Arrays(IndexArray) = Trim(Items(IndexItems).Split("/"c)(0))
Arrays(IndexArray + 1) = Trim(Items(IndexItems).Split("/"c)(1))
IndexArray += 2
For Index = IndexItems + 1 To Items.Count - 1
Arrays(Index + 1) = Trim(Items(Index))
Next
bCovert = True
Exit For
End If
Next
If bCovert Then
System.Array.Resize(Items, Items.Count)
Items = Arrays
'Else
' Items = Arrays
End If
End Sub
Private m_TemplateVisibility As Visibility
Public Property TemplateVisibility As Visibility
Get
Return m_TemplateVisibility
End Get
Set(value As Visibility)
m_TemplateVisibility = value
End Set
End Property
#End Region ' Template ComboBox
Private m_CompoParamList As New ObservableCollection(Of CompoParam)
Public Property CompoParamList As ObservableCollection(Of CompoParam)
Get
Return m_CompoParamList
End Get
Set(value As ObservableCollection(Of CompoParam))
m_CompoParamList = value
End Set
End Property
' Definizione comando
Private m_CmdDelete As ICommand
Sub New(CompoType As CompoType, MyDoor As Part)
m_CompoType = CompoType
m_rfCurrDoor = MyDoor
End Sub
#Region "COMMANDS"
#Region "DeleteCommand"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property DeleteCommand As ICommand
Get
If m_CmdDelete Is Nothing Then
m_CmdDelete = New Command(AddressOf Delete)
End If
Return m_CmdDelete
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub Delete()
Map.refPartPageVM.CurrPart.RemoveCompo(Me)
Map.refSceneManagerVM.RefreshBtn()
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End Sub
#End Region ' DeleteCommand
#End Region 'Commands
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Sub NotifyPropertyChanged(propName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
End Sub
End Class
Public Class CompoParam
Friend Shared m_rfSetTitle As Action
Private m_Name As String
Public Property Name As String
Get
Return m_Name
End Get
Set(value As String)
m_Name = value
End Set
End Property
Private m_DDFName As String
Public Property DDFName As String
Get
Return m_DDFName
End Get
Set(value As String)
m_DDFName = value
End Set
End Property
Private m_CurrCompo As Compo
Public Property CurrCompo As Compo
Get
Return m_CurrCompo
End Get
Set(value As Compo)
m_CurrCompo = value
End Set
End Property
Sub New(sDDFName As String, sName As String, CurrCompo As Compo)
m_DDFName = sDDFName
m_Name = sName
m_CurrCompo = CurrCompo
End Sub
End Class
Public Class TextBoxParam
Inherits CompoParam
Implements INotifyPropertyChanged
Private m_IsReadOnly As Boolean = True
Public Property IsReadOnly As Boolean
Get
Return m_IsReadOnly
End Get
Set(value As Boolean)
m_IsReadOnly = value
End Set
End Property
Dim dValue As Double = -1
Friend m_Value As String
Public Property Value As String
Get
Return m_Value
End Get
Set(value As String)
m_Value = value
NotifyPropertyChanged("ToolTipValue")
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
' se la componente non ha un riferimento esce
If IsNothing(CurrCompo.refJambCompo) Then Return
' se fallisce il caricamento dei parametri esce
If Not LoadCompoParam(CurrCompo) Then Return
If Not UpdateParam() Then MessageBox.Show("No matching param ", EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
ResetCompoParam()
End Set
End Property
Public Sub SetValue(sValue As String)
m_Value = sValue
NotifyPropertyChanged("ToolTipValue")
End Sub
Public ReadOnly Property ToolTipValue As String
Get
If StringToDouble(Value, dValue) Then
Return DoubleToString(dValue, 4)
Else
Return EgtMsg(50143)
End If
End Get
End Property
Private m_ComboValuelList As New List(Of String)
Public Property ComboValuelList As List(Of String)
Get
Return m_ComboValuelList
End Get
Set(value As List(Of String))
m_ComboValuelList = value
End Set
End Property
Private m_ComboBox As ComboBoxParam
Private m_Visibility As Visibility
Public Property Visibility As Visibility
Get
Return m_Visibility
End Get
Set(value As Visibility)
m_Visibility = value
End Set
End Property
Public Function UpdateParam() As Boolean
Dim CmpPar As CompoParam = Me
Dim IndexP As Integer = CurrCompo.CompoParamList.IndexOf(Me)
Dim CmpRefPar As CompoParam = CurrCompo.refJambCompo.CompoParamList(IndexP)
For IndexParam As Integer = 0 To CurrCompo.refJambCompo.CompoParamList.Count - 1
If TypeOf CmpRefPar Is TextBoxParam AndAlso CmpPar.DDFName = CmpRefPar.DDFName Then
Dim TBoxPar As TextBoxParam = DirectCast(CmpPar, TextBoxParam)
Dim TBoxRefPar As TextBoxParam = DirectCast(CmpRefPar, TextBoxParam)
CalcCompoParamValue(TBoxPar.DDFName, TBoxPar.m_Value, TBoxRefPar.m_Value, TBoxRefPar.IsReadOnly)
Return True
ElseIf TypeOf CmpRefPar Is ComboBoxParam AndAlso CmpPar.DDFName = CmpRefPar.DDFName Then
DirectCast(CmpRefPar, ComboBoxParam).IsReadOnly = False
Return True
ElseIf TypeOf CmpRefPar Is TextBoxOnOffParam AndAlso CmpPar.DDFName = CmpRefPar.DDFName Then
Dim TBoxPar As TextBoxOnOffParam = DirectCast(CmpPar, TextBoxOnOffParam)
Dim TBoxRefPar As TextBoxOnOffParam = DirectCast(CmpRefPar, TextBoxOnOffParam)
CalcCompoParamValue(TBoxPar.DDFName, TBoxPar.m_Value, TBoxRefPar.m_Value, TBoxRefPar.IsReadOnly)
Return True
End If
Next
Return False
End Function
Sub New(sDDFName As String, sName As String, CurrCompo As Compo, sValue As String, ComboBox As ComboBoxParam, ComboValuelList As List(Of String))
MyBase.New(sDDFName, sName, CurrCompo)
m_Value = sValue
m_ComboBox = ComboBox
m_ComboValuelList = ComboValuelList
End Sub
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Sub NotifyPropertyChanged(propName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
End Sub
End Class
Public Class ComboBoxParam
Inherits CompoParam
Private m_IsReadOnly As Boolean = True
Public Property IsReadOnly As Boolean
Get
Return m_IsReadOnly
End Get
Set(value As Boolean)
m_IsReadOnly = value
End Set
End Property
Private m_ItemList As New List(Of String)
Public Property ItemList As List(Of String)
Get
Return m_ItemList
End Get
Set(value As List(Of String))
m_ItemList = value
End Set
End Property
Private m_ItemListDDF As New List(Of String)
Public Property ItemListDDF As List(Of String)
Get
Return m_ItemListDDF
End Get
Set(value As List(Of String))
m_ItemListDDF = value
End Set
End Property
Private m_SelItem As String
Public Property SelItem As String
Get
Return m_SelItem
End Get
Set(value As String)
m_SelItem = value
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
Map.refSceneManagerVM.RefreshBtn()
End Set
End Property
Friend Sub SetSelItem(value As String)
m_SelItem = value
End Sub
Sub New(sDDFName As String, sName As String, CurrCompo As Compo, ItemList As List(Of String), ItemListDDF As List(Of String), sSelItem As String)
MyBase.New(sDDFName, sName, CurrCompo)
m_ItemList = ItemList
m_ItemListDDF = ItemListDDF
m_SelItem = sSelItem
End Sub
End Class
Public Class TextBoxOnOffParam
Inherits TextBoxParam
Private m_IsActive As Boolean = True
Public Property IsActive As Boolean
Get
Return m_IsActive
End Get
Set(value As Boolean)
m_IsActive = value
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
Map.refSceneManagerVM.RefreshBtn()
End Set
End Property
Public Sub SetIsActive(IsActive As Boolean)
m_IsActive = IsActive
'NotifyPropertyChanged("IsActive")
End Sub
Sub New(sDDFName As String, sName As String, CurrCompo As Compo, sValue As String, ComboBox As ComboBoxParam, ComboValuelList As List(Of String))
MyBase.New(sDDFName, sName, CurrCompo, sValue, ComboBox, ComboValuelList)
End Sub
End Class