Imports System.Collections.ObjectModel Imports System.IO Imports EgtBEAMWALL.Core Imports EgtBEAMWALL.Optimizer.MainMenuVM Imports EgtUILib Imports EgtWPFLib5 Imports Newtonsoft.Json Public Class GeneralParametersWndVM Inherits VMBase #Region "FIELDS & PROPERTIES" Friend Event m_CloseWindow(bDialogResult As Boolean) Private m_GeneralParametersList As New ObservableCollection(Of ProjectParameters) Public Property GeneralParametersList As ObservableCollection(Of ProjectParameters) Get Return m_GeneralParametersList End Get Set(value As ObservableCollection(Of ProjectParameters)) m_GeneralParametersList = value NotifyPropertyChanged(NameOf(GeneralParametersList)) End Set End Property Private m_bSaveGeneralParameters As Boolean Public Property bSaveGeneralParameters As Boolean Get Return m_bSaveGeneralParameters End Get Set(value As Boolean) m_bSaveGeneralParameters = value If m_bSaveGeneralParameters Then SetGeneralParametersIsEnable(True) Else SetGeneralParametersIsEnable(False) Dim sStrategiesDirPath As String = Map.refMainWindowVM.MainWindowM.GetStrategiesDirPath(Map.refStrategyManagerVM.SelStrategyType.Id) Dim sGeneralParametersFilePath As String = sStrategiesDirPath & "\" & GENERALPARAMETERS_FILE & ".json" If File.Exists(sGeneralParametersFilePath) Then Dim sReadedFiles As String = File.ReadAllText(sGeneralParametersFilePath) Dim JsonGeneralParametersList As List(Of JsonGeneralParameters) = JsonConvert.DeserializeObject(Of List(Of JsonGeneralParameters))(sReadedFiles) m_GeneralParametersList = New ObservableCollection(Of ProjectParameters)((From JsonGeneralParameter In JsonGeneralParametersList Select JsonGeneralParameter.Deserialize(Map.refStrategyManagerVM.SelStrategyType.Id)).ToList()) End If End If NotifyPropertyChanged(NameOf(bSaveGeneralParameters)) End Set End Property Friend Sub SetbSaveGeneralParameters(value As Boolean) m_bSaveGeneralParameters = value NotifyPropertyChanged(NameOf(bSaveGeneralParameters)) End Sub Private m_GeneralParametersIsEnable As Boolean = False Public ReadOnly Property GeneralParametersIsEnable As Boolean Get Return m_GeneralParametersIsEnable End Get End Property Friend Sub SetGeneralParametersIsEnable(value As Boolean) m_GeneralParametersIsEnable = value NotifyPropertyChanged(NameOf(GeneralParametersIsEnable)) End Sub Private m_StrategySetupList As New ObservableCollection(Of String) Public ReadOnly Property StrategySetupList As ObservableCollection(Of String) Get Return m_StrategySetupList End Get End Property Private m_SelStrategySetup As String Public Property SelStrategySetup As String Get Return m_SelStrategySetup End Get Set(value As String) m_SelStrategySetup = value NotifyPropertyChanged(NameOf(SelStrategySetup)) End Set End Property ' Definizione Comandi Private m_cmdOk_Command As ICommand #End Region ' Fields & Properties #Region "CONSTRUCTOR" Sub New(nType As BWType) ' leggo cartella dei setup delle strategie Dim AISetupDirPath As String = Map.refMainWindowVM.MainWindowM.GetAISetupDirPath(nType, True) Dim AISetupPaths As String() = Directory.GetFiles(AISetupDirPath).Where(Function(f) Path.GetExtension(f).ToLower() <> ".ini").ToArray() For Each AiSetup In AISetupPaths m_StrategySetupList.Add(Path.GetFileNameWithoutExtension(AiSetup)) Next Dim sStrategiesDirPath As String = Map.refMainWindowVM.MainWindowM.GetStrategiesDirPath(nType) Dim sGeneralParametersFilePath As String = sStrategiesDirPath & "\" & GENERALPARAMETERS_FILE & ".json" If File.Exists(sGeneralParametersFilePath) Then Dim sReadedFiles As String = File.ReadAllText(sGeneralParametersFilePath) Dim JsonGeneralParametersList As List(Of JsonGeneralParameters) = JsonConvert.DeserializeObject(Of List(Of JsonGeneralParameters))(sReadedFiles) m_GeneralParametersList = New ObservableCollection(Of ProjectParameters)((From JsonGeneralParameter In JsonGeneralParametersList Select JsonGeneralParameter.Deserialize(Map.refStrategyManagerVM.SelStrategyType.Id)).ToList()) For Each GenericItem As ProjectParameters In m_GeneralParametersList Select Case GenericItem.sMinUserLevel Case UserLevel.ADVANCED Map.refMainMenuVM.UserLevelGenericVisibility(GenericItem, If(Map.refMainMenuVM.UserAdmin_IsChecked, Visibility.Visible, Visibility.Collapsed)) Case Else If Not Map.refMainMenuVM.UserAdmin_IsChecked Then Map.refMainMenuVM.UserLevelGenericVisibility(GenericItem, If(GenericItem.sMinUserLevel = UserLevel.USER, Visibility.Visible, Visibility.Collapsed)) Map.refMainMenuVM.SetUnloackImage("pack://application:,,,/Resources/NewPage/padlock.png") End If End Select Next NotifyPropertyChanged(NameOf(GeneralParametersList)) End If ' Leggo info se presenti Dim nBTLInfoLayerId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, PROJECTINFO) ' leggo file default config Map.refMainWindowVM.MainWindowM.GetDefaultConfigDirPath(nType, True) Dim sInfo As String = String.Empty Dim sDefaultConfigFile As String = String.Empty EgtGetInfo(nBTLInfoLayerId, AI_SETUP, m_SelStrategySetup) If m_SelStrategySetup Is String.Empty Then If EgtUILib.GetPrivateProfileString(S_STRATEGY, K_DEFAULTCONFIG, "", sDefaultConfigFile, Map.refMainWindowVM.MainWindowM.sDefaultConfig) <> 0 Then m_SelStrategySetup = sDefaultConfigFile Else ' restituisce la lista dei file presenti nella cartella con le relative informazioni Dim StrategySetupListFile As List(Of FileInfo) = m_StrategySetupList.Where(Function(f) File.Exists(AISetupDirPath & "\" & f & ".json")). Select(Function(f) New FileInfo(AISetupDirPath & "\" & f & ".json")). OrderByDescending(Function(fi) fi.LastWriteTime).ToList() ' restituisce l'ultimo file modificato If StrategySetupListFile.Any() Then sDefaultConfigFile = Path.GetFileNameWithoutExtension(StrategySetupListFile.First().Name) End If sDefaultConfigFile = m_StrategySetupList.FirstOrDefault(Function(x) x = sDefaultConfigFile) m_SelStrategySetup = sDefaultConfigFile End If End If For Each GeneralParameter In m_GeneralParametersList Select Case GeneralParameter.GetType() Case GetType(BooleanGenericParameter) SetbSaveGeneralParameters(True) SetGeneralParametersIsEnable(True) Dim sTmpBoolValue As Boolean = DirectCast(GeneralParameter, BooleanGenericParameter).bValue If Not EgtGetInfo(nBTLInfoLayerId, GeneralParameter.sNameNge, DirectCast(GeneralParameter, BooleanGenericParameter).bValue) Then SetbSaveGeneralParameters(False) SetGeneralParametersIsEnable(False) DirectCast(GeneralParameter, BooleanGenericParameter).bValue = sTmpBoolValue Return End If Case GetType(DoubleGenericParameter) SetbSaveGeneralParameters(True) SetGeneralParametersIsEnable(True) Dim sTmpDoubleValue As String = DirectCast(GeneralParameter, DoubleGenericParameter).sValue If Not EgtGetInfo(nBTLInfoLayerId, GeneralParameter.sNameNge, DirectCast(GeneralParameter, DoubleGenericParameter).sValue) Then SetbSaveGeneralParameters(False) SetGeneralParametersIsEnable(False) DirectCast(GeneralParameter, DoubleGenericParameter).sValue = sTmpDoubleValue Return End If Case GetType(ComboGenericParameter) SetbSaveGeneralParameters(True) SetGeneralParametersIsEnable(True) Dim sTmpComboValue As String = DirectCast(GeneralParameter, ComboGenericParameter).SelValue.sValue If Not EgtGetInfo(nBTLInfoLayerId, GeneralParameter.sNameNge, DirectCast(GeneralParameter, ComboGenericParameter).SelValue.sValue) Then DirectCast(GeneralParameter, ComboGenericParameter).SelValue.sValue = sTmpComboValue SetbSaveGeneralParameters(False) SetGeneralParametersIsEnable(False) Return End If Case GetType(StringGenericParameter) SetbSaveGeneralParameters(True) SetGeneralParametersIsEnable(True) Dim sTmpStringValue As String = DirectCast(GeneralParameter, StringGenericParameter).sValue If Not EgtGetInfo(nBTLInfoLayerId, GeneralParameter.sNameNge, DirectCast(GeneralParameter, StringGenericParameter).sValue) Then SetbSaveGeneralParameters(False) SetGeneralParametersIsEnable(False) DirectCast(GeneralParameter, StringGenericParameter).sValue = sTmpStringValue Return End If Case GetType(ListGenericParameter) SetbSaveGeneralParameters(True) SetGeneralParametersIsEnable(True) For Each Item As ToolParameter In DirectCast(GeneralParameter, ListGenericParameter).ListValue If Item.bIsActive Then sInfo &= Item.sUUID & "," & Item.sName & ";" Dim sTmpInfo As String = sInfo If Not EgtGetInfo(nBTLInfoLayerId, GeneralParameter.sNameNge, sInfo) Then SetbSaveGeneralParameters(False) SetGeneralParametersIsEnable(False) sInfo = sTmpInfo Return End If End If Next End Select Next End Sub #End Region ' Constructor #Region "METHODS" Friend Sub SaveProjectParameters() Dim sInfo As String = String.Empty Dim sDefaultConfigFile As String = String.Empty Dim nBTLInfoLayerId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, PROJECTINFO) EgtSetInfo(nBTLInfoLayerId, AI_SETUP, m_SelStrategySetup) If m_SelStrategySetup Is String.Empty Then If EgtUILib.GetPrivateProfileString(S_STRATEGY, K_DEFAULTCONFIG, "", sDefaultConfigFile, Map.refMainWindowVM.MainWindowM.sDefaultConfig) <> 0 Then m_SelStrategySetup = sDefaultConfigFile EgtSetInfo(nBTLInfoLayerId, AI_SETUP, m_SelStrategySetup) End If End If For Each GeneralParameter In m_GeneralParametersList Select Case GeneralParameter.GetType() Case GetType(BooleanGenericParameter) EgtSetInfo(nBTLInfoLayerId, GeneralParameter.sNameNge, DirectCast(GeneralParameter, BooleanGenericParameter).bValue) Case GetType(DoubleGenericParameter) EgtSetInfo(nBTLInfoLayerId, GeneralParameter.sNameNge, DirectCast(GeneralParameter, DoubleGenericParameter).sValue) Case GetType(ComboGenericParameter) EgtSetInfo(nBTLInfoLayerId, GeneralParameter.sNameNge, DirectCast(GeneralParameter, ComboGenericParameter).SelValue.sValue) Case GetType(StringGenericParameter) EgtSetInfo(nBTLInfoLayerId, GeneralParameter.sNameNge, DirectCast(GeneralParameter, StringGenericParameter).sValue) Case GetType(ListGenericParameter) For Each Item As ToolParameter In DirectCast(GeneralParameter, ListGenericParameter).ListValue If Item.bIsActive Then sInfo &= Item.sUUID & "," & Item.sName & ";" EgtSetInfo(nBTLInfoLayerId, GeneralParameter.sNameNge, sInfo) End If Next End Select Next End Sub #End Region ' Methods #Region "COMMANDS" #Region "Ok_Command" Public ReadOnly Property Ok_Command As ICommand Get If m_cmdOk_Command Is Nothing Then m_cmdOk_Command = New Command(AddressOf Ok) End If Return m_cmdOk_Command End Get End Property Public Sub Ok() SaveProjectParameters() Map.refProdManagerVM.Save() ' Chiudo finestra RaiseEvent m_CloseWindow(True) End Sub #End Region ' Ok_Command #End Region ' Commands End Class