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