Files
EgtDOORCreator/HardwareGeometry/GeometryListConfigVM.vb
T
Nicola Pievani f422f7a25f EgtDOOCreator 2.3a1:
-> riscalato i pixel per le immagini Hardware (1500x2000) mentre per la Door è rimasta invariata (3000x4000).
2021-01-07 17:20:47 +00:00

433 lines
15 KiB
VB.net

Imports System.ComponentModel
Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Public Class GeometryListConfigVM
Inherits VMBase
Dim m_HardwareTemp As Hardware
#Region "MESSAGES"
Public ReadOnly Property Title As String
Get
' 50721=New Geometry
Return EgtMsg(50721)
End Get
End Property
Public ReadOnly Property GeometryNameMsg As String
Get
' 50722=Geometry Name
Return EgtMsg(50722)
End Get
End Property
Public ReadOnly Property TypeHardwareMsg As String
Get
' 50723=Type Hardware
Return EgtMsg(50723)
End Get
End Property
Public ReadOnly Property ParameterMsg As String
Get
' 50724=Parameter
Return EgtMsg(50724)
End Get
End Property
Public ReadOnly Property SaveMsg As String
Get
' 50410=Save
Return EgtMsg(50410)
End Get
End Property
#End Region ' Messages
#Region "GEOMETRY NAME"
Private m_ColorText As SolidColorBrush = DirectCast(New BrushConverter().ConvertFrom("Black"), SolidColorBrush)
Public Property ColorText As SolidColorBrush
Get
Return m_ColorText
End Get
Set(value As SolidColorBrush)
m_ColorText = value
NotifyPropertyChanged("ColorText")
End Set
End Property
Private m_GeometryName As String = "Geometry"
Public Property GeometryName As String
Get
Return m_GeometryName
End Get
Set(value As String)
m_GeometryName = Trim(value)
If Not GetWorkListGeometryName(m_SelHardware.DDFName) Then
ColorText = DirectCast(New BrushConverter().ConvertFrom(OptionModule.ColorNewGeometry), SolidColorBrush)
Else
ColorText = DirectCast(New BrushConverter().ConvertFrom("Black"), SolidColorBrush)
End If
NotifyPropertyChanged("GeometryName")
End Set
End Property
Private m_GeometryNameList As New ObservableCollection(Of String)
Public Property GeometryNameList As ObservableCollection(Of String)
Get
Return m_GeometryNameList
End Get
Set(value As ObservableCollection(Of String))
m_GeometryNameList = value
End Set
End Property
#End Region ' Geommetry Name
#Region "HARDWARE LIST"
Private m_HardwareList As New ObservableCollection(Of CompoType)
Private m_SelHardware As CompoType
Private m_GraphicHardwareList As New ObservableCollection(Of String)
Public Property GraphicHardwareList As ObservableCollection(Of String)
Get
Return m_GraphicHardwareList
End Get
Set(value As ObservableCollection(Of String))
m_GraphicHardwareList = value
NotifyPropertyChanged("GraphicHardwareList")
End Set
End Property
Private m_SelGraphicHardware As String
Public Property SelGraphicHardware As String
Get
Return m_SelGraphicHardware
End Get
Set(value As String)
m_SelGraphicHardware = value
For Each Item In m_HardwareList
If Item.Name = m_SelGraphicHardware Then
m_SelHArdware = Item
Exit For
End If
Next
LoadParamBySelecetedHardware()
GetWorkListGeometryName(m_SelHardware.DDFName)
NotifyPropertyChanged("SelGraphicHardware")
End Set
End Property
#End Region ' Hardware List
#Region "PARAMETER LIST"
'Private m_Parameter As CompoParam
Private m_ParameterList As New ObservableCollection(Of ItemGeometry)
Public Property ParameterList As ObservableCollection(Of ItemGeometry)
Get
Return m_ParameterList
End Get
Set(value As ObservableCollection(Of ItemGeometry))
m_ParameterList = value
NotifyPropertyChanged("ParameterList")
End Set
End Property
Private m_SelParameter As String
Private m_CurrentWork() As String
#End Region ' Parameter List
#Region "METODI"
Public Function LoadNameComboBoxLua(LocalHardware As Hardware) As Boolean
' prima di ricaricare la lista deve essere svuotata
ParameterList.Clear()
For Each Chapter In LocalHardware.GroupChapters
For Each Parameter In Chapter.CompoParamList
If TypeOf Parameter Is ComboBoxParamLua Then
Dim Text As ComboBoxParamLua = DirectCast(Parameter, ComboBoxParamLua)
Dim sItem() As String = Text.DDFName.Split("."c)
If sItem.Count > 0 Then
ParameterList.Add(New ItemGeometry(sItem(1)))
Else
ParameterList.Add(New ItemGeometry(Text.DDFName))
End If
End If
Next
Next
Return True
End Function
Public Function LoadParamBySelecetedHardware() As Boolean
' creo un HardwareTemporaneo per leggere le sue componenti
m_HardwareTemp = New Hardware
m_HardwareTemp.LoadTemplate(m_SelHardware)
LoadNameComboBoxLua(m_HardwareTemp)
HardwareTemp = Nothing
Return True
End Function
Public Sub AddNewGeometryNameList()
If IsNothing(Map.refHardwarePageVM) OrElse IsNothing(Map.refHardwarePageVM.CurrHardware) Then Return
For Each ItemGrupoChapter In Map.refHardwarePageVM.CurrHardware.GroupChapters
If m_SelHardware.DDFName <> ItemGrupoChapter.CompoType.DDFName Then Return
For Each ItemParam In ItemGrupoChapter.CompoParamList
If TypeOf ItemParam Is ComboBoxParamLua Then
Dim Param As ComboBoxParamLua = DirectCast(ItemParam, ComboBoxParamLua)
Dim sItem() As String = Param.DDFName.Split("."c)
If sItem.Count = 1 Then Continue For
Dim NewListGeometry As ObservableCollection(Of String) = Map.refHardwarePageVM.CurrHardware.GetCurrentListGeometry(m_SelHardware.DDFName, sItem(1))
Param.ItemList = NewListGeometry
Param.ItemListDDF.Clear()
For Each ItemGeometryName In NewListGeometry
Param.ItemListDDF.Add("'" & ItemGeometryName & "'")
Next
' eseguo un aggiornamento della selezione
If ItemParam.ErrorInReading Then
Param.SelItem = Param.SelItem
End If
End If
Next
Next
End Sub
Public Function GetWorkListGeometryName(sNameDDF As String) As Boolean
m_CurrentWork = Nothing
Dim sGeometry As String = String.Empty
Dim sName As String = String.Empty
Dim Index As Integer = 1
Dim WorkList As New List(Of String)
Dim bNameExists As Boolean = False
While IniFile.GetGeometryNameList("GeometryNames", CStr(Index), sName, WorkList)
If m_GeometryName = sName Then
bNameExists = True
Exit While
End If
Index += 1
WorkList.Clear()
End While
For Each ItemWork In WorkList
Dim sItems() As String = ItemWork.Split(","c)
If sItems.Count() > 1 And Trim(sItems(0)) = Trim(sNameDDF) Then
m_CurrentWork = sItems
Exit For
End If
Next
For Each ItemParam In m_ParameterList
ItemParam.IsChecked = False
ItemParam.IsEnable = True
Next
If Not IsNothing(m_CurrentWork) Then
For Each ItemWork In m_CurrentWork
For Each ItemParam In m_ParameterList
If Trim(ItemParam.NameDDF) = Trim(ItemWork) Then
ItemParam.IsChecked = True
ItemParam.IsEnable = False
Exit For
End If
Next
Next
End If
Return bNameExists
End Function
#End Region
Private m_CmdSave As ICommand
#Region "SAVE"
Public ReadOnly Property SaveCommand As ICommand
Get
If m_CmdSave Is Nothing Then
m_CmdSave = New Command(AddressOf SaveGeometryName)
End If
Return m_CmdSave
End Get
End Property
Public Sub SaveGeometryName(param As Object)
Dim sGeometry As String = String.Empty
Dim sName As String = String.Empty
Dim Index As Integer = 1
Dim WorkList As New List(Of String)
Dim bNameExists As Boolean = False
Dim bWorkExist As Boolean = False
Dim bOk As Boolean = True
Dim sErrMessage As String = String.Empty
Dim LocalList As New List(Of String)
Dim sList As String = String.Empty
' verifico che non ci siano delle copie
For Each ItemGeometry In ParameterList
If ItemGeometry.IsChecked And ItemGeometry.IsEnable Then
WorkList.Clear()
LocalList.Add(ItemGeometry.NameDDF)
m_SelParameter = ItemGeometry.NameDDF
sList = sList & ", " & m_SelParameter
While IniFile.GetGeometryNameList("GeometryNames", CStr(Index), sName, WorkList)
If m_GeometryName = sName Then
bNameExists = True
Exit While
End If
Index += 1
WorkList.Clear()
End While
' verifico il NomeGeometria associato al parametro, ed eventualmente lo inserisco
If bNameExists Then
For Each ItemWork In WorkList
Dim sWorks() As String = ItemWork.Split(","c)
If sWorks.Count = 1 Then
' 50568=Error in definition {0} in file GeometryNameList.ini
sErrMessage = String.Format(EgtMsg(50568), m_GeometryName)
bOk = False
Else
If Trim(sWorks(0)) = Trim(m_SelHardware.DDFName) Then
For Each ItemParameter In sWorks
If Trim(ItemParameter) = Trim(m_SelParameter) Then
' 50554=Parameter {0} is already deinfed in geometry {1}., 50144=Warning
MessageBox.Show(String.Format(EgtMsg(50554), m_SelParameter, m_GeometryName), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning)
Return
End If
Next
End If
End If
Next
End If
End If
Next
If LocalList.Count = 0 Then
' 50570=Nothing has been selected.
sErrMessage = EgtMsg(50570)
bOk = False
End If
' verifico che il NomeGeometria, ed eventualmente lo inserisco
If bNameExists And bOk Then
sGeometry = Trim(m_GeometryName)
Dim bExistWork As Boolean = False
For Each ItemWork In WorkList
Dim sNamehardware As String = ItemWork.Split(","c)(0)
If Trim(sNamehardware) = Trim(m_SelHardware.DDFName) Then
ItemWork = ItemWork & sList
bExistWork = True
End If
Dim sWorks() As String = ItemWork.Split(","c)
sGeometry = sGeometry & "; "
If sWorks.Count > 1 Then
For IndexWork = 0 To sWorks.Count - 1
If IndexWork = 0 Then
sGeometry = sGeometry & Trim(sWorks(IndexWork))
Else
sGeometry = sGeometry & ", " & Trim(sWorks(IndexWork))
End If
Next
Else
' 50568=Error in definition {0} in file GeometryNameList.ini
sErrMessage = String.Format(EgtMsg(50568), m_GeometryName)
bOk = False
End If
Next
If Not bExistWork Then
sGeometry = sGeometry & "; " & m_SelHardware.DDFName & sList
WorkList.Add(m_SelHardware.DDFName & sList)
End If
IniFile.SetGeometryNameList("GeometryNames", CStr(Index), sGeometry)
ElseIf bOk Then
'Dim sItems() As String = m_Parameter.DDFName.Split("."c)
If Not String.IsNullOrEmpty(sList) Then
sGeometry = m_GeometryName & "; " & m_HardwareTemp.HardwareGeneral.DDFName & sList
IniFile.SetGeometryNameList("GeometryNames", CStr(Index), sGeometry)
Else
' 50569=Error in definition {0} in file StdTemplate.ini .
sErrMessage = String.Format(EgtMsg(50568), sList)
bOk = False
End If
End If
' chiudo finestra
For Each Window In Application.Current.Windows
If TypeOf Window Is GeometryListConfigV Then
Dim GeometryListWindow As GeometryListConfigV = DirectCast(Window, GeometryListConfigV)
GeometryListWindow.Close()
'aggiorno la tabella in lettura
CompoMatch.ResetSTU()
CompoMatch.LoadTableGeometry()
End If
Next
' comunico eventuali errori
If Not bOk Then
' 50555=Param Name is not correct, Impossible to save. ,50101=Error
sErrMessage = EgtMsg(50555) & vbCrLf & sErrMessage
MessageBox.Show(sErrMessage, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Warning)
Return
End If
AddNewGeometryNameList()
End Sub
#End Region ' Save
Sub New(ParamName As String)
' carico la lista degli Hardware
For Each Element In Map.refCompoPanelVM.CompoTypeList
m_HardwareList.Add(Element)
m_GraphicHardwareList.Add(Element.Name)
m_HardwareTemp = Map.refHardwarePageVM.CurrHardware
If Map.refHardwarePageVM.CurrHardware.HardwareGeneral.Name = Element.Name Then
' selziono il nome da mostrare in grafica
m_SelGraphicHardware = m_GraphicHardwareList(m_GraphicHardwareList.Count - 1)
m_SelHardware = Element
End If
Next
If Not String.IsNullOrEmpty(ParamName) Then
GeometryName = ParamName
End If
' carico la lista dei Parametri
LoadNameComboBoxLua(Map.refHardwarePageVM.CurrHardware)
GetWorkListGeometryName(m_HardwareTemp.HardwareGeneral.DDFName)
End Sub
End Class
Public Class ItemGeometry
Inherits VMBase
Private m_NameDDF As String = String.Empty
Public ReadOnly Property NameDDF As String
Get
Return m_NameDDF
End Get
End Property
Private m_IsChecked As Boolean = False
Public Property IsChecked As Boolean
Get
Return m_IsChecked
End Get
Set(value As Boolean)
m_IsChecked = value
NotifyPropertyChanged("IsChecked")
End Set
End Property
Private m_IsEnable As Boolean = True
Public Property IsEnable As Boolean
Get
Return m_IsEnable
End Get
Set(value As Boolean)
m_IsEnable = value
NotifyPropertyChanged("IsEnable")
End Set
End Property
Sub New(sNameDDF As String)
m_NameDDF = sNameDDF
End Sub
End Class