Imports System.Collections.ObjectModel
Imports System.ComponentModel
Imports System.Globalization
Imports System.IO
Imports EgtBEAMWALL.Core
Imports EgtUILib
Imports EgtWPFLib5
Imports Newtonsoft.Json
Public Class StrategyManagerVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
Private SAVE_IMAGE As String = "pack://application:,,,/Resources/NewPage/diskette.png"
Private MODIFY_IMAGE As String = "pack://application:,,,/Resources/NewPage/SaveModify.png"
Private m_StrategyTypeList As New List(Of IdNameStruct)({New IdNameStruct(BWType.BEAM, "Beam"), New IdNameStruct(BWType.WALL, "Wall")})
Public ReadOnly Property StrategyTypeList As List(Of IdNameStruct)
Get
Return m_StrategyTypeList
End Get
End Property
Private m_SelStrategyType As IdNameStruct
Public Property SelStrategyType As IdNameStruct
Get
Return m_SelStrategyType
End Get
Set(value As IdNameStruct)
m_SelStrategyType = value
' deseleziono eventuale strategia selezionata
If Not IsNothing(m_SelTreeItem) Then
m_SelTreeItem.IsSelected = False
End If
NotifyPropertyChanged(NameOf(SelStrategyType))
End Set
End Property
Private m_StrategySetupList As New ObservableCollection(Of StrategySetup)
Public ReadOnly Property StrategySetupList As ObservableCollection(Of StrategySetup)
Get
Return m_StrategySetupList
End Get
End Property
Private m_SelStrategySetup As StrategySetup
Public Property SelStrategySetup As StrategySetup
Get
Return m_SelStrategySetup
End Get
Set(value As StrategySetup)
' deseleziono eventuale strategia precedentemente selezionata
If Not IsNothing(m_SelTreeItem) Then
m_SelTreeItem.IsSelected = False
m_SelTreeItem.StrategyList.Clear()
End If
m_SelStrategySetup = value
Dim sDefaultConfigFile As String = String.Empty
If Not IsNothing(m_SelStrategySetup) Then
If EgtUILib.GetPrivateProfileString(S_STRATEGY, K_DEFAULTCONFIG, "", sDefaultConfigFile, Map.refMainWindowVM.MainWindowM.sDefaultConfig) <> 0 Then
If Not m_SelStrategySetup.sName.Equals(sDefaultConfigFile) Then
SetDefaultConfig_IsChecked(False)
Else
SetDefaultConfig_IsChecked(True)
End If
End If
m_SelStrategySetup.Read()
End If
SetSaveImage(MODIFY_IMAGE)
NotifyPropertyChanged(NameOf(SelStrategySetup))
End Set
End Property
Friend Sub SetSelStrategySetup(value As StrategySetup)
m_SelStrategySetup = value
If Not IsNothing(m_SelStrategySetup) Then
' Scrivo file defaultconfig nell'ini
EgtUILib.WritePrivateProfileString(S_STRATEGY, K_DEFAULTCONFIG, m_SelStrategySetup.sName, Map.refMainWindowVM.MainWindowM.sDefaultConfig)
m_SelStrategySetup.Read()
End If
NotifyPropertyChanged(NameOf(SelStrategySetup))
End Sub
' Permette di selezionare l'elemento dell'albero
Public m_SelTreeItem As Topology
Public Property SelTreeItem As Topology
Get
Return m_SelTreeItem
End Get
Set(value As Topology)
m_SelTreeItem = value
NotifyPropertyChanged(NameOf(SelTreeItem))
End Set
End Property
'''
''' Funzione che aggiorna la selezione dell'elemento dell'albero
'''
''' Elemento dell'albero
Friend Sub UpdateSelTreeItem(Item As Topology)
Dim ImageRoot As String = String.Empty
Dim TmpImage As String = String.Empty
If Not File.Exists(Item.sImage) Then
ImageRoot = If(m_SelStrategyType.Id = BWType.BEAM, Map.refMainWindowVM.MainWindowM.sBeamRoot, Map.refMainWindowVM.MainWindowM.sWallRoot) & "\Images\"
TmpImage = ImageRoot & Item.sImage
Item.sImage = TmpImage
End If
m_SelTreeItem = Item
NotifyPropertyChanged(NameOf(SelTreeItem))
End Sub
' Utilizzato per indicare che viene effettuata una modifica
Private m_bIsModifyStrategy As Boolean = False
Public ReadOnly Property bIsModifyStrategy As Boolean
Get
Return m_bIsModifyStrategy
End Get
End Property
Friend Sub SetbIsModifyStrategy(value As Boolean)
m_bIsModifyStrategy = value
If m_bIsModifyStrategy Then
SetSaveImage(MODIFY_IMAGE)
Else
SetSaveImage(SAVE_IMAGE)
End If
NotifyPropertyChanged(NameOf(bIsModifyStrategy))
End Sub
' Immagine SaveCommand
Private m_SaveImage As String = SAVE_IMAGE
Public ReadOnly Property SaveImage As String
Get
Return m_SaveImage
End Get
End Property
Friend Sub SetSaveImage(value As String)
m_SaveImage = value
NotifyPropertyChanged(NameOf(SaveImage))
End Sub
' Lista che contiene le strategie filtrate
Private m_StrategyProductionList As New ObservableCollection(Of Strategy)
Public Property StrategyProductionList As ObservableCollection(Of Strategy)
Get
Return m_StrategyProductionList
End Get
Set(value As ObservableCollection(Of Strategy))
m_StrategyProductionList = value
NotifyPropertyChanged(NameOf(StrategyProductionList))
End Set
End Property
Private m_StrategyProductionPath As String = String.Empty
Public ReadOnly Property StrategyProductionPath As String
Get
Return m_StrategyProductionPath
End Get
End Property
Friend Sub SetStrategyProductionPath(value As String)
m_StrategyProductionPath = value
NotifyPropertyChanged(NameOf(StrategyProductionPath))
End Sub
Public ReadOnly Property StrategyType_Visibility As Visibility
Get
Return If(CurrentMachine.nType = MachineType.BOTH, Visibility.Visible, Visibility.Collapsed)
End Get
End Property
Private m_StrategyManager_Visibility As Visibility = Visibility.Collapsed
Public ReadOnly Property StrategyManager_Visibility As Visibility
Get
Return m_StrategyManager_Visibility
End Get
End Property
Friend Sub SetStrategyManager_Visibility(value As Visibility)
m_StrategyManager_Visibility = value
NotifyPropertyChanged(NameOf(StrategyManager_Visibility))
End Sub
Private m_bOK As Boolean = False
Public ReadOnly Property bOK As Boolean
Get
Return m_bOK
End Get
End Property
Friend Sub SetbOk(value As Boolean)
m_bOK = value
NotifyPropertyChanged(NameOf(bOK))
End Sub
Private m_bDefaultConfig_IsChecked As Boolean = False
Public Property DefaultConfig_IsChecked As Boolean
Get
Return m_bDefaultConfig_IsChecked
End Get
Set(value As Boolean)
m_bDefaultConfig_IsChecked = value
If m_bDefaultConfig_IsChecked Then
EgtUILib.WritePrivateProfileString(S_STRATEGY, K_DEFAULTCONFIG, m_SelStrategySetup.sName, Map.refMainWindowVM.MainWindowM.sDefaultConfig)
End If
SetSaveImage(MODIFY_IMAGE)
NotifyPropertyChanged(NameOf(DefaultConfig_IsChecked))
End Set
End Property
Friend Sub SetDefaultConfig_IsChecked(value As Boolean)
m_bDefaultConfig_IsChecked = value
NotifyPropertyChanged(NameOf(DefaultConfig_IsChecked))
End Sub
#Region "Messages"
Public ReadOnly Property SaveToolTip As String
Get
Return EgtMsg(62571)
End Get
End Property
Public ReadOnly Property SaveAsToolTip As String
Get
Return EgtMsg(62572)
End Get
End Property
Public ReadOnly Property NewToolTip As String
Get
Return EgtMsg(30501)
End Get
End Property
Public ReadOnly Property UserMsg As String
Get
Return EgtMsg(61748)
End Get
End Property
Public ReadOnly Property AdvanceMsg As String
Get
Return EgtMsg(61749)
End Get
End Property
#End Region ' Messages
' Definizione Comandi
Private m_AddSelectedStrategyCommand As ICommand
Private m_RemoveSelectedStrategyCommand As ICommand
Private m_NewCommand As ICommand
Private m_SaveCommand As ICommand
Private m_OpenFileNameCustomConfigCommand As ICommand
Private m_MoveUpSelectedStrategyCommand As ICommand
Private m_MoveDownSelectedStrategyCommand As ICommand
Private m_cmdOk As ICommand
Private m_cmdCancel As ICommand
Private m_cmdConfigurationParametersCommand As ICommand
#End Region ' Field & Properties
#Region "CONSTRUCTOR"
Sub New()
' Setto riferimento
Map.SetRefStrategyManagerVM(Me)
' Assegno riferimento funzione per aggiornare elemento selezionato dall'albero
Topology.refUpdateSelTreeItem = AddressOf UpdateSelTreeItem
End Sub
#End Region ' Constructor
#Region "METHODS"
'''
''' Funzione che salva il file customconfig se sono presenti modifiche
'''
Friend Sub SaveCustomConfigJson()
' Controlla se il file JSON è stato modificato
If Not m_bIsModifyStrategy Then Return
' Chiede conferma per il salvataggio
If EgtBEAMWALL.Core.EgtMessageBoxV.Show(Application.Current.MainWindow, EgtMsg(62580), EgtMsg(15003), MessageBoxButton.YesNo, MessageBoxImage.Information) = MessageBoxResult.Yes Then
m_SelStrategySetup.Write(Map.refGeneralParametersStrategyVM.GeneralParametersList, False)
End If
End Sub
Friend Sub Update()
m_StrategySetupList.Clear()
' imposto Type a primo della lista per default
Select Case Map.refMachinePanelVM.SelectedMachine.nType
Case MachineType.BEAM
m_SelStrategyType = m_StrategyTypeList.FirstOrDefault(Function(x) x.Id = BWType.BEAM)
Case MachineType.WALL
m_SelStrategyType = m_StrategyTypeList.FirstOrDefault(Function(x) x.Id = BWType.WALL)
Case MachineType.BOTH
If Not IsNothing(ProjectManagerVM.CurrProd) Then
m_SelStrategyType = m_StrategyTypeList.FirstOrDefault(Function(x) x.Id = ProjectManagerVM.CurrProd.nType)
Else
m_SelStrategyType = m_StrategyTypeList.FirstOrDefault(Function(x) x.Id = BWType.BEAM)
End If
End Select
NotifyPropertyChanged(NameOf(SelStrategyType))
NotifyPropertyChanged(NameOf(StrategyType_Visibility))
' leggo cartella dei setup delle strategie
Dim AISetupDirPath As String = Map.refMainWindowVM.MainWindowM.GetAISetupDirPath(SelStrategyType.Id, False)
Dim AISetupPaths As String() = Directory.GetFiles(AISetupDirPath).Where(Function(f) Path.GetExtension(f).ToLower() <> ".ini").ToArray()
Dim sDefaultConfigFile As String = String.Empty
Dim DefaultConfigFile As StrategySetup = Nothing
' leggo file default config
Map.refMainWindowVM.MainWindowM.GetDefaultConfigDirPath(SelStrategyType.Id, False)
For Each AiSetup In AISetupPaths
m_StrategySetupList.Add(New StrategySetup(Path.GetFileNameWithoutExtension(AiSetup)))
Next
If m_StrategySetupList.Count > 0 Then
' Controllo se presente file default config
If EgtUILib.GetPrivateProfileString(S_STRATEGY, K_DEFAULTCONFIG, "", sDefaultConfigFile, Map.refMainWindowVM.MainWindowM.sDefaultConfig) <> 0 Then
SetDefaultConfig_IsChecked(True)
DefaultConfigFile = m_StrategySetupList.FirstOrDefault(Function(x) x.sName = sDefaultConfigFile)
End If
If Not IsNothing(DefaultConfigFile) Then
SetSelStrategySetup(DefaultConfigFile)
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.sName & ".json")).
Select(Function(f) New FileInfo(AISetupDirPath & "\" & f.sName & ".json")).
OrderByDescending(Function(fi) fi.LastWriteTime).ToList()
' restituisce l'ultimo file modificato
If StrategySetupListFile.Any() Then
sDefaultConfigFile = Path.GetFileNameWithoutExtension(StrategySetupListFile.First().Name)
End If
DefaultConfigFile = m_StrategySetupList.FirstOrDefault(Function(x) x.sName = sDefaultConfigFile)
SetSelStrategySetup(DefaultConfigFile)
End If
SetDefaultConfig_IsChecked(True)
End If
End Sub
#End Region ' Methods
#Region "COMMANDS"
#Region "AddSelectedStrategyCommand"
Public ReadOnly Property AddSelectedStrategyCommand As ICommand
Get
If m_AddSelectedStrategyCommand Is Nothing Then
m_AddSelectedStrategyCommand = New Command(AddressOf AddSelectedStrategyToActiveStrategy)
End If
Return m_AddSelectedStrategyCommand
End Get
End Property
'''
''' Funzione che permette di aggiungere la strategia da StrategyList a ActiveStrategyList
'''
Public Sub AddSelectedStrategyToActiveStrategy()
' Controllo se SelectedStrategy se è nullo esco
If IsNothing(m_SelTreeItem.SelAvailableStrategy) Then Return
' Setto a true booleano per modifica
SetbIsModifyStrategy(True)
' Setto indice per capire che la strategia è stata spostata in ActiveStrategyList
m_SelTreeItem.SelAvailableStrategy.nIndexInList = 0
' Aggiorno le liste
m_SelTreeItem.AvailableStrategyList_View.Refresh()
m_SelTreeItem.ActiveStrategyList_View.Refresh()
End Sub
#End Region ' AddSelectedStrategyCommand
#Region "RemoveSelectedStrategyCommand"
Public ReadOnly Property RemoveSelectedStrategyCommand As ICommand
Get
If m_RemoveSelectedStrategyCommand Is Nothing Then
m_RemoveSelectedStrategyCommand = New Command(AddressOf RemoveSelectedStrategyToActiveStrategy)
End If
Return m_RemoveSelectedStrategyCommand
End Get
End Property
'''
''' Funzione che rimuove la strategia da ActiveStrategyList e la riaggiunge a StrategyList
'''
Public Sub RemoveSelectedStrategyToActiveStrategy()
' Controllo se SelectedActiveStrategy se è nullo esco
If IsNothing(m_SelTreeItem.SelActiveStrategy) Then Return
' Setto a true booleano per modifica
SetbIsModifyStrategy(True)
' Setto indice per capire che la strategia è stata spostata in StrategyList
m_SelTreeItem.SelActiveStrategy.nIndexInList = -1
' Aggiorno le liste
m_SelTreeItem.AvailableStrategyList_View.Refresh()
m_SelTreeItem.ActiveStrategyList_View.Refresh()
End Sub
#End Region ' RemoveSelectedStrategyCommand
#Region "OpenFileNameCustomConfigCommand"
Public ReadOnly Property OpenFileNameCustomConfigCommand As ICommand
Get
If m_OpenFileNameCustomConfigCommand Is Nothing Then
m_OpenFileNameCustomConfigCommand = New Command(AddressOf OpenFileNameCustomConfig)
End If
Return m_OpenFileNameCustomConfigCommand
End Get
End Property
'''
''' Funzione che visualizza la textbox
'''
Public Sub OpenFileNameCustomConfig()
Dim SaveAsStrategyVM As New SaveAsStrategyVM()
SaveAsStrategyVM.SetbSave_Visibility(True)
Dim SaveAsStrategyWnd As New SaveAsStrategyV With {
.DataContext = SaveAsStrategyVM,
.Owner = Application.Current.MainWindow
}
SaveAsStrategyWnd.ShowDialog()
End Sub
#End Region ' OpenFileNameCustomConfigCommand
#Region "New"
Public ReadOnly Property New_Command As ICommand
Get
If m_NewCommand Is Nothing Then
m_NewCommand = New Command(AddressOf NewAiSetup)
End If
Return m_NewCommand
End Get
End Property
'''
''' Funzione apre un nuovo il file json CustomerConfig
'''
Public Sub NewAiSetup()
SetDefaultConfig_IsChecked(False)
Dim NewStrategyVM As New SaveAsStrategyVM()
NewStrategyVM.SetbOpen_Visibility(True)
Dim NewStrategyWnd As New SaveAsStrategyV With {
.DataContext = NewStrategyVM,
.Owner = Application.Current.MainWindow
}
NewStrategyWnd.ShowDialog()
End Sub
#End Region ' New
#Region "SaveCommand"
Public ReadOnly Property SaveCommand As ICommand
Get
If m_SaveCommand Is Nothing Then
m_SaveCommand = New Command(AddressOf Save)
End If
Return m_SaveCommand
End Get
End Property
'''
''' Funzione che salva il file json CustomerConfig
'''
Public Sub Save(GeneralParametersList As ObservableCollection(Of ProjectParameters))
If IsNothing(m_SelStrategySetup) Then
OpenFileNameCustomConfig()
End If
If IsNothing(GeneralParametersList) Then
Dim GeneralParametersVM As New GeneralParametersStrategyVM()
GeneralParametersList = GeneralParametersVM.GeneralParametersList
End If
m_SelStrategySetup.Write(GeneralParametersList, False)
SetbIsModifyStrategy(False)
End Sub
#End Region ' SaveCommand
#Region "MoveUpSelectedStrategyCommand"
Public ReadOnly Property MoveUpSelectedStrategyCommand As ICommand
Get
If m_MoveUpSelectedStrategyCommand Is Nothing Then
m_MoveUpSelectedStrategyCommand = New Command(AddressOf MoveUpSelectedStrategy)
End If
Return m_MoveUpSelectedStrategyCommand
End Get
End Property
'''
''' Funzione che permette di spostare in alto la strategia selezionata
'''
Public Sub MoveUpSelectedStrategy()
' Controllo se SelectedActiveStrategy se è nullo esco
If IsNothing(m_SelTreeItem.SelActiveStrategy) Then Return
' Recupero indice elemento selezionato in lista
Dim IndexActiveStrategy As Integer = m_SelTreeItem.StrategyList.IndexOf(m_SelTreeItem.SelActiveStrategy)
' Recupero indice elemento selezionato in lista
Dim NewIndexActiveStrategy As Integer = IndexActiveStrategy - 1
' Se l'indice è maggiore di 0
If IndexActiveStrategy > 0 Then
' Muovo l'elemento selezionato sopra di 1
m_SelTreeItem.StrategyList.Move(IndexActiveStrategy, NewIndexActiveStrategy)
End If
' Setto a true booleano per modifica
SetbIsModifyStrategy(True)
' Aggiorno la lista
m_SelTreeItem.ActiveStrategyList_View.Refresh()
End Sub
#End Region ' MoveUpSelectedStrategyCommand
#Region "MoveDownSelectedStrategyCommand"
Public ReadOnly Property MoveDownSelectedStrategyCommand As ICommand
Get
If m_MoveDownSelectedStrategyCommand Is Nothing Then
m_MoveDownSelectedStrategyCommand = New Command(AddressOf MoveDownSelectedStrategy)
End If
Return m_MoveDownSelectedStrategyCommand
End Get
End Property
'''
''' Funzione che permette di spostare in basso la strategia selezionata
'''
Public Sub MoveDownSelectedStrategy()
If IsNothing(m_SelTreeItem.SelActiveStrategy) Then Return
' Recupero indice elemento selezionato in lista
Dim IndexActiveStrategy As Integer = m_SelTreeItem.StrategyList.IndexOf(m_SelTreeItem.SelActiveStrategy)
' Recupero indice elemento selezionato in lista
Dim NewIndexActiveStrategy As Integer = IndexActiveStrategy + 1
' Se l'indice è maggiore di 0
If IndexActiveStrategy >= 0 Then
' Muovo l'elemento selezionato sopra di 1
m_SelTreeItem.StrategyList.Move(IndexActiveStrategy, NewIndexActiveStrategy)
End If
' Setto a true booleano per modifica
SetbIsModifyStrategy(True)
' Aggiorno la lista
m_SelTreeItem.ActiveStrategyList_View.Refresh()
End Sub
#End Region ' MoveDownSelectedStrategyCommand
#Region "Ok_Command"
Public ReadOnly Property Ok_Command As ICommand
Get
If m_cmdOk Is Nothing Then
m_cmdOk = New Command(AddressOf Ok)
End If
Return m_cmdOk
End Get
End Property
Public Sub Ok()
Map.refProjectVM.SetSelManagerTab(ProjectVM.StrategyManagerTab.RAWPARTMANAGER)
' Abilito LeftPanel
Map.refProjectVM.SetLeftPanel_IsEnabled(True)
Map.refProjectVM.SetLeftPanel_Opacity(1)
End Sub
#End Region ' Ok_Command
#Region "Cancel_Command"
Public ReadOnly Property Cancel_Command As ICommand
Get
If m_cmdCancel Is Nothing Then
m_cmdCancel = New Command(AddressOf Cancel)
End If
Return m_cmdCancel
End Get
End Property
Public Sub Cancel()
Map.refProjectVM.SetSelManagerTab(ProjectVM.StrategyManagerTab.RAWPARTMANAGER)
' Abilito LeftPanel
Map.refProjectVM.SetLeftPanel_IsEnabled(True)
Map.refProjectVM.SetLeftPanel_Opacity(1)
End Sub
#End Region ' Cancel_Command
#Region "ConfigurationParametersCommand"
Public ReadOnly Property ConfigurationParametersCommand As ICommand
Get
If m_cmdConfigurationParametersCommand Is Nothing Then
m_cmdConfigurationParametersCommand = New Command(AddressOf ConfigurationParameters)
End If
Return m_cmdConfigurationParametersCommand
End Get
End Property
Public Sub ConfigurationParameters()
Map.refBTLDataWndVM.SetIsBTLDataWnd(False)
Dim GeneralParametersStrategyVM = New GeneralParametersStrategyVM()
Dim GeneralParametersStrategyWnd As New GeneralParametersStrategyV(Application.Current.MainWindow, GeneralParametersStrategyVM)
GeneralParametersStrategyWnd.ShowDialog()
End Sub
#End Region ' ConfigurationParametersCommand
#End Region ' Commands
End Class
'----------- Classe che rappresenta un file di setup delle strategie -----------
Public Class StrategySetup
Inherits VMBase
#Region "FIELDS & PROPERTIES"
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
End Set
End Property
Private m_StrategyFeatureList As New ObservableCollection(Of StrategyFeature)
Public Property StrategyFeatureList As ObservableCollection(Of StrategyFeature)
Get
Return m_StrategyFeatureList
End Get
Set(value As ObservableCollection(Of StrategyFeature))
m_StrategyFeatureList = value
End Set
End Property
Private m_SelStrategyFeature As StrategyFeature
Public Property SelStrategyFeature As StrategyFeature
Get
Return m_SelStrategyFeature
End Get
Set(value As StrategyFeature)
m_SelStrategyFeature = value
NotifyPropertyChanged(NameOf(SelStrategyFeature))
End Set
End Property
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New(sName As String)
m_sName = sName
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Sub Read()
' carico default
Dim sStrategiesDirPath As String = Map.refMainWindowVM.MainWindowM.GetStrategiesDirPath(Map.refStrategyManagerVM.SelStrategyType.Id)
Dim sAvailableStrategiesFilePath As String = sStrategiesDirPath & "\" & AVAILABLESTRATEGYLIST_FILE & ".json"
GetDefaultJsonStrategy(sAvailableStrategiesFilePath)
' carico custom
Dim sAISetupDirPath As String = Map.refMainWindowVM.MainWindowM.GetAISetupDirPath(Map.refStrategyManagerVM.SelStrategyType.Id, False)
Dim sStrategyConfigurationFilePath As String = sAISetupDirPath & "\" & sName & ".json"
If File.Exists(sStrategyConfigurationFilePath) Then
Dim sReadedFile As String = File.ReadAllText(sStrategyConfigurationFilePath)
Dim JsonRoot As CustomJsonRoot = Nothing
Try
JsonRoot = JsonConvert.DeserializeObject(Of CustomJsonRoot)(sReadedFile)
Catch ex As Exception
JsonRoot = Nothing
End Try
Dim JsonStrategyFeatureList As ObservableCollection(Of JsonStrategyFeature) = Nothing
If Not IsNothing(JsonRoot) Then
JsonStrategyFeatureList = JsonRoot.FEATURE
Else
If IsNothing(JsonRoot) Then
EgtOutLog("JSON ERRATO: Il file Json importato non è nel formato corretto")
GetDefaultJsonStrategy(sAvailableStrategiesFilePath)
Return
Else
JsonStrategyFeatureList = JsonConvert.DeserializeObject(Of ObservableCollection(Of JsonStrategyFeature))(sReadedFile)
End If
End If
For Each Feature As JsonStrategyFeature In JsonStrategyFeatureList
Dim DefaultFeature As StrategyFeature = m_StrategyFeatureList.FirstOrDefault(Function(x) x.nPrc = Feature.nPrc AndAlso x.nGrp = Feature.nGrp)
' gestire caso non venga trovata perchè non esiste più in default??'
If Not IsNothing(DefaultFeature) Then
For Each Topology In Feature.TopologyList
Dim DefaultTopology As Topology = DefaultFeature.TopologyList.FirstOrDefault(Function(x) x.sName = Topology.sName)
' gestire caso non venga trovata perchè non esiste più in default??'
If Not IsNothing(DefaultTopology) Then
For Each Strategy In Topology.StrategyList
Dim DefaultStrategy As Strategy = DefaultTopology.StrategyList.FirstOrDefault(Function(x) x.sStrategyId = Strategy.sStrategyId)
If IsNothing(DefaultStrategy) Then
' DefaultTopology.StrategyList.Add(New Strategy(DefaultTopology, Strategy))
' verifico indici!!
Else
DefaultStrategy.ReadConfiguration(Strategy)
End If
Next
End If
Next
End If
Next
End If
End Sub
Private Sub GetDefaultJsonStrategy(sAvailableStrategiesFilePath As String)
If File.Exists(sAvailableStrategiesFilePath) Then
Dim sReadedFile As String = File.ReadAllText(sAvailableStrategiesFilePath)
Dim JsonStrategyFeatureList As List(Of JsonAvailableStrategyFeature) = JsonConvert.DeserializeObject(Of List(Of JsonAvailableStrategyFeature))(sReadedFile)
m_StrategyFeatureList = New ObservableCollection(Of StrategyFeature)((From JsonStrategyFeature In JsonStrategyFeatureList
Select JsonStrategyFeature.Deserialize(Map.refStrategyManagerVM.SelStrategyType.Id)).ToList())
End If
End Sub
Friend Sub Write(GeneralParametersStrategyList As ObservableCollection(Of ProjectParameters), bProdPage As Boolean)
Dim JsonFromStrategyManager As New List(Of JsonStrategyFeature)
For Each StrategyFeature In m_StrategyFeatureList
JsonFromStrategyManager.Add(StrategyFeature.Serialize())
Next
Dim JsonProjectParameters As New List(Of JsonParametersHelper)
For Each ParamItem In GeneralParametersStrategyList
JsonProjectParameters.Add(ParamItem.Serialize())
Next
Dim CombinedJson = New With {.GENERAL = JsonProjectParameters,
.FEATURE = JsonFromStrategyManager}
Dim JsonFromGenericParameters As String = JsonConvert.SerializeObject(CombinedJson, Formatting.Indented)
Dim sAISetupDirPath As String = Map.refMainWindowVM.MainWindowM.GetAISetupDirPath(Map.refStrategyManagerVM.SelStrategyType.Id, bProdPage)
Dim sStrategyConfigurationFilePath As String = sAISetupDirPath & "\" & sName & ".json"
File.WriteAllText(sStrategyConfigurationFilePath, JsonFromGenericParameters)
End Sub
#End Region ' Methods
End Class
Public Class CustomJsonRoot
#Region "FIELDS & PROPETIES"
Private m_GENERAL As New ObservableCollection(Of JsonParameters)
Public Property GENERAL As ObservableCollection(Of JsonParameters)
Get
Return m_GENERAL
End Get
Set(value As ObservableCollection(Of JsonParameters))
m_GENERAL = value
End Set
End Property
Private m_FEATURE As New ObservableCollection(Of JsonStrategyFeature)
Public Property FEATURE As ObservableCollection(Of JsonStrategyFeature)
Get
Return m_FEATURE
End Get
Set(value As ObservableCollection(Of JsonStrategyFeature))
m_FEATURE = value
End Set
End Property
#End Region ' Fields & Propeties
End Class
'----------- Classe che fa riferimento alle Feature -----------
Public Class StrategyFeature
Inherits VMBase
#Region "FIELDS & PROPETIES"
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
NotifyPropertyChanged(NameOf(sName))
End Set
End Property
Private m_nPrc As Integer
Public Property nPrc As Integer
Get
Return m_nPrc
End Get
Set(value As Integer)
m_nPrc = value
NotifyPropertyChanged(NameOf(nPrc))
End Set
End Property
Public ReadOnly Property nPrcDesc As String
Get
Return m_nPrc.ToString("000")
End Get
End Property
Private m_nGrp As Integer
Public Property nGrp As Integer
Get
Return m_nGrp
End Get
Set(value As Integer)
m_nGrp = value
NotifyPropertyChanged(NameOf(nGrp))
End Set
End Property
Private m_TopologyList As New ObservableCollection(Of Topology)
Public Property TopologyList As ObservableCollection(Of Topology)
Get
Return m_TopologyList
End Get
Set(value As ObservableCollection(Of Topology))
m_TopologyList = value
NotifyPropertyChanged(NameOf(TopologyList))
End Set
End Property
Private m_bIsExpanded As Boolean
Public Property IsExpanded As Boolean
Get
Return m_bIsExpanded
End Get
Set(value As Boolean)
If Not value AndAlso m_TopologyList.Any(Function(x) x.IsSelected) Then
Else
m_bIsExpanded = value
End If
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonStrategyFeature As JsonAvailableStrategyFeature)
If IsNothing(JsonStrategyFeature) Then Return
m_sName = JsonStrategyFeature.sName
m_nPrc = JsonStrategyFeature.nPrc
m_nGrp = JsonStrategyFeature.nGrp
m_TopologyList = New ObservableCollection(Of Topology)(JsonStrategyFeature.TopologyList.Select(Function(jsonTopology) New Topology(jsonTopology)))
NotifyPropertyChanged(NameOf(TopologyList))
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Function Serialize() As JsonStrategyFeature
Dim JsonStrategyFeature As New JsonStrategyFeature(m_sName, m_nPrc, m_nGrp)
For Each Topology In m_TopologyList
JsonStrategyFeature.TopologyList.Add(Topology.Serialize())
Next
Return JsonStrategyFeature
End Function
#End Region ' Methods
End Class
'----------- Classe che fa riferimento alle Topologie delle Feature -----------
Public Class Topology
Inherits VMBase
#Region "FIELDS & PROPETIES"
Friend Shared refUpdateSelTreeItem As Action(Of Topology)
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
NotifyPropertyChanged(NameOf(sName))
End Set
End Property
Private m_sImage As String
Public Property sImage As String
Get
Return m_sImage
End Get
Set(value As String)
m_sImage = value
NotifyPropertyChanged(NameOf(sImage))
End Set
End Property
Private m_bIsSelected As Boolean
Public Property IsSelected As Boolean
Get
Return m_bIsSelected
End Get
Set(value As Boolean)
m_bIsSelected = value
If value Then
refUpdateSelTreeItem(Me)
Else
m_SelActiveStrategy = Nothing
m_SelAvailableStrategy = Nothing
End If
m_AvailableStrategyList_View.Refresh()
m_ActiveStrategyList_View.Refresh()
End Set
End Property
Private m_AvailableStrategyList_View As ICollectionView = Nothing
Public ReadOnly Property AvailableStrategyList_View As ICollectionView
Get
Return m_AvailableStrategyList_View
End Get
End Property
Private m_ActiveStrategyList_View As ICollectionView = Nothing
Public ReadOnly Property ActiveStrategyList_View As ICollectionView
Get
Return m_ActiveStrategyList_View
End Get
End Property
Private m_StrategyList As New ObservableCollection(Of Strategy)
Public Property StrategyList As ObservableCollection(Of Strategy)
Get
Return m_StrategyList
End Get
Set(value As ObservableCollection(Of Strategy))
m_StrategyList = value
NotifyPropertyChanged(NameOf(StrategyList))
End Set
End Property
Private m_SelActiveStrategy As Strategy
Public Property SelActiveStrategy As Strategy
Get
Return m_SelActiveStrategy
End Get
Set(value As Strategy)
m_SelActiveStrategy = value
SelParamStrategy = value
End Set
End Property
Private m_SelAvailableStrategy As Strategy
Public Property SelAvailableStrategy As Strategy
Get
Return m_SelAvailableStrategy
End Get
Set(value As Strategy)
m_SelAvailableStrategy = value
SelParamStrategy = value
End Set
End Property
Private m_SelParamStrategy As Strategy
Public Property SelParamStrategy As Strategy
Get
Return m_SelParamStrategy
End Get
Set(value As Strategy)
m_SelParamStrategy = value
NotifyPropertyChanged(NameOf(SelParamStrategy))
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonTopology As JsonAvailableTopology)
If IsNothing(JsonTopology) Then Return
m_sName = JsonTopology.sName
m_sImage = JsonTopology.sImage
m_StrategyList = New ObservableCollection(Of Strategy)(JsonTopology.StrategyList.Select(Function(jsonStrategy) New Strategy(jsonStrategy)))
m_AvailableStrategyList_View = New ListCollectionView(StrategyList)
m_AvailableStrategyList_View.Filter = AddressOf AvailableStrategyFilter
m_ActiveStrategyList_View = New ListCollectionView(StrategyList)
m_ActiveStrategyList_View.Filter = AddressOf ActiveStrategyFilter
NotifyPropertyChanged(NameOf(StrategyList))
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Function AvailableStrategyFilter(Strategy As Object) As Boolean
Return DirectCast(Strategy, Strategy).nIndexInList < 0
End Function
Friend Function ActiveStrategyFilter(Strategy As Object) As Boolean
Return DirectCast(Strategy, Strategy).nIndexInList >= 0
End Function
Friend Sub CreateStrategyViews()
m_AvailableStrategyList_View = New ListCollectionView(StrategyList)
m_AvailableStrategyList_View.Filter = AddressOf AvailableStrategyFilter
m_ActiveStrategyList_View = New ListCollectionView(StrategyList)
m_ActiveStrategyList_View.Filter = AddressOf ActiveStrategyFilter
End Sub
Friend Function Serialize() As JsonTopology
Dim JsonTopology As New JsonTopology(m_sName)
For Each Strategy In m_StrategyList
JsonTopology.StrategyList.Add(Strategy.Serialize())
Next
Return JsonTopology
End Function
#End Region ' Methods
End Class
'----------- Classe che fa alle Strategie delle Topologie delle Feature -----------
Public Class Strategy
Inherits VMBase
#Region "FIELDS & PROPETIES"
Private STRATEGY_IMAGE As String = "pack://application:,,,/Resources/NewPage/LogoProvaStrategy.png"
Private m_sStrategyId As String
Public Property sStrategyId As String
Get
Return m_sStrategyId
End Get
Set(value As String)
m_sStrategyId = value
NotifyPropertyChanged(NameOf(sStrategyId))
End Set
End Property
Private m_sStrategyName As String
Public Property sStrategyName As String
Get
Return m_sStrategyName
End Get
Set(value As String)
m_sStrategyName = value
NotifyPropertyChanged(NameOf(sStrategyName))
End Set
End Property
Private m_nIndexInList As Integer = -1
Public Property nIndexInList As Integer
Get
Return m_nIndexInList
End Get
Set(value As Integer)
m_nIndexInList = value
NotifyPropertyChanged(NameOf(nIndexInList))
End Set
End Property
Friend Sub SetIndexList(value As Integer)
m_nIndexInList = value
NotifyPropertyChanged(NameOf(nIndexInList))
End Sub
Private m_sStrategyImagePath As String = STRATEGY_IMAGE
Public Property sStrategyImagePath As String
Get
Return m_sStrategyImagePath
End Get
Set(value As String)
m_sStrategyImagePath = value
NotifyPropertyChanged(NameOf(sStrategyImagePath))
End Set
End Property
Private m_ParameterList As New ObservableCollection(Of StrategyParameter)
Public Property ParameterList As ObservableCollection(Of StrategyParameter)
Get
Return m_ParameterList
End Get
Set(value As ObservableCollection(Of StrategyParameter))
m_ParameterList = value
NotifyPropertyChanged(NameOf(ParameterList))
End Set
End Property
Private m_bIsStrategyModify As Boolean = False
Public ReadOnly Property bIsStrategyModify As Boolean
Get
Return m_bIsStrategyModify
End Get
End Property
Friend Sub SetbIsStrategyModify(value As Boolean)
m_bIsStrategyModify = value
NotifyPropertyChanged(NameOf(bIsStrategyModify))
End Sub
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonStrategy As JsonAvailableStrategy)
If IsNothing(JsonStrategy) Then Return
m_sStrategyId = JsonStrategy.sStrategyId
ReadConfigurationStrategyJson()
End Sub
#End Region ' Constructor
#Region "METHODS"
'''
''' Funzione che legge il file json delle strategie
'''
Friend Sub ReadConfigurationStrategyJson()
' Recupero file StrategyJson
Dim StrategyPath As String = Map.refMainWindowVM.MainWindowM.GetStandardDirPath(Map.refStrategyManagerVM.SelStrategyType.Id) & "\" & sStrategyId & "\" & sStrategyId & ".json"
' Controllo se il file esiste
If Not File.Exists(StrategyPath) Then Return
' Leggo il contenuto del file JSON e deserializzo
Dim StrategyJson As String = File.ReadAllText(StrategyPath)
Dim strategyConfig As JsonAvailableStrategy = JsonConvert.DeserializeObject(Of JsonAvailableStrategy)(StrategyJson)
End Sub
Friend Sub ReadConfiguration(ConfigurationStrategy As JsonStrategy)
m_nIndexInList = ConfigurationStrategy.nIndexInList
NotifyPropertyChanged(NameOf(nIndexInList))
For Each Parameter In ConfigurationStrategy.ParameterList
Dim DefaultParameter As StrategyParameter = m_ParameterList.FirstOrDefault(Function(x) x.sName = Parameter.sName)
If IsNothing(DefaultParameter) Then
' verifico indici!!
Else
Select Case DefaultParameter.GetType()
Case GetType(BooleanStrategyParameter)
DirectCast(DefaultParameter, BooleanStrategyParameter).SetValue(Parameter.sValue)
If Parameter.sMinUserLevel = 1 Then
DirectCast(DefaultParameter, BooleanStrategyParameter).SetbBooleanVisibility(True)
End If
Case GetType(DoubleStrategyParameter)
DirectCast(DefaultParameter, DoubleStrategyParameter).SetValue(Parameter.sValue)
If Parameter.sMinUserLevel = 1 Then
DirectCast(DefaultParameter, DoubleStrategyParameter).SetbDoubleVisibility(True)
End If
Case GetType(ComboStrategyParameter)
DirectCast(DefaultParameter, ComboStrategyParameter).SetSelValue(Parameter.sValue)
If Parameter.sMinUserLevel = 1 Then
DirectCast(DefaultParameter, ComboStrategyParameter).SetbComboBoxVisibility(True)
End If
Case GetType(StringStrategyParameter)
DirectCast(DefaultParameter, StringStrategyParameter).SetValue(Parameter.sValue)
If Parameter.sMinUserLevel = 1 Then
DirectCast(DefaultParameter, StringStrategyParameter).SetbStringVisibility(True)
End If
Case GetType(ListStrategyParameter)
DirectCast(DefaultParameter, ListStrategyParameter).SetSelValue(Parameter.sValue)
DirectCast(DefaultParameter, ListStrategyParameter).CreateToolsViews()
DirectCast(DefaultParameter, ListStrategyParameter).ToolView()
If Parameter.sMinUserLevel = 1 Then
DirectCast(DefaultParameter, ListStrategyParameter).SetbListBoxVisibility(True)
End If
End Select
End If
Next
End Sub
Friend Function Serialize() As JsonStrategy
Dim JsonStrategy As New JsonStrategy(m_sStrategyId, m_nIndexInList)
For Each Parameter In m_ParameterList
JsonStrategy.ParameterList.Add(Parameter.Serialize())
Next
Return JsonStrategy
End Function
#End Region ' Methods
End Class
'----------- Classe che fa riferimento ai parametri delle Strategie -----------
Public MustInherit Class StrategyParameter
Inherits VMBase
#Region "FIELDS & PROPETIES"
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
NotifyPropertyChanged(NameOf(sName))
End Set
End Property
Private m_sNameNge As String
Public Property sNameNge As String
Get
Return m_sNameNge
End Get
Set(value As String)
m_sNameNge = value
NotifyPropertyChanged(NameOf(sNameNge))
End Set
End Property
Private m_sSubType As String
Public Property sSubType As String
Get
Return m_sSubType
End Get
Set(value As String)
m_sSubType = value
NotifyPropertyChanged(NameOf(sSubType))
End Set
End Property
Private m_sSource As String
Public Property sSource As String
Get
Return m_sSource
End Get
Set(value As String)
m_sSource = value
NotifyPropertyChanged(NameOf(sSource))
End Set
End Property
Private m_sDescriptionShort As String
Public Property sDescriptionShort As String
Get
Return m_sDescriptionShort
End Get
Set(value As String)
m_sDescriptionShort = value
NotifyPropertyChanged(NameOf(sDescriptionShort))
End Set
End Property
Private m_sDescriptionLong As String
Public Property sDescriptionLong As String
Get
Return m_sDescriptionLong
End Get
Set(value As String)
m_sDescriptionLong = value
NotifyPropertyChanged(NameOf(sDescriptionLong))
End Set
End Property
Private m_sMessageId As String
Public Property sMessageId As String
Get
Return m_sMessageId
End Get
Set(value As String)
m_sMessageId = value
NotifyPropertyChanged(NameOf(sMessageId))
End Set
End Property
Private m_sMinUserLevel As Integer
Public Property sMinUserLevel As Integer
Get
Return m_sMinUserLevel
End Get
Set(value As Integer)
m_sMinUserLevel = value
NotifyPropertyChanged(NameOf(sMinUserLevel))
End Set
End Property
#End Region ' Fields & Propeties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonGenericParameter As JsonDefaultStrategyParameter)
If IsNothing(JsonGenericParameter) Then Return
m_sName = JsonGenericParameter.sName
m_sNameNge = JsonGenericParameter.sNameNge
m_sSource = JsonGenericParameter.sSource
m_sSubType = JsonGenericParameter.sSubType
m_sDescriptionShort = JsonGenericParameter.sDescriptionShort
m_sDescriptionLong = JsonGenericParameter.sDescriptionLong
m_sMessageId = JsonGenericParameter.sMessageId
m_sMinUserLevel = JsonGenericParameter.sMinUserLevel
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend MustOverride Function Serialize() As JsonStrategyParameter
#End Region ' Methods
End Class
Public Class BooleanStrategyParameter
Inherits StrategyParameter
#Region "FIELDS & PROPERTIES"
Friend m_bValue As Boolean = False
Public Property bValue As Boolean
Get
Return m_bValue
End Get
Set(value As Boolean)
If m_bValue <> value Then
Map.refStrategyManagerVM.SetbIsModifyStrategy(True)
SetbIsBooleanModify(True)
End If
m_bValue = value
End Set
End Property
Friend Sub SetValue(bValue As Boolean)
m_bValue = bValue
End Sub
Friend Sub SetValue(sValue As String)
m_bValue = sValue.ToLower() = "true"
End Sub
Private m_bBooleanVisibility As Visibility = Visibility.Collapsed
Public ReadOnly Property bBooleanVisibility As Visibility
Get
Return m_bBooleanVisibility
End Get
End Property
Friend Sub SetbBooleanVisibility(value As Boolean)
m_bBooleanVisibility = If(value, Visibility.Visible, Visibility.Collapsed)
NotifyPropertyChanged(NameOf(bBooleanVisibility))
End Sub
Private m_bIsBooleanModify As Boolean = False
Public ReadOnly Property bIsBooleanModify As Boolean
Get
Return m_bIsBooleanModify
End Get
End Property
Friend Sub SetbIsBooleanModify(value As Boolean)
m_bIsBooleanModify = value
If m_bIsBooleanModify Then
If Not IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM) Then
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM.SetbStrategy_Visibility(True)
ElseIf Not IsNothing(Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup.SelPart.SelFeatureVM) Then
Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup.SelPart.SelFeatureVM.SetbStrategy_Visibility(True)
End If
End If
NotifyPropertyChanged(NameOf(bIsBooleanModify))
End Sub
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonGenericParameter As JsonDefaultStrategyParameter)
MyBase.New(JsonGenericParameter)
If IsNothing(JsonGenericParameter) Then Return
m_bValue = JsonGenericParameter.sValue.ToLower() = "true"
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Overrides Function Serialize() As JsonStrategyParameter
Dim sValue As String = If(bValue, "true", "false")
Dim JsonStrategyParameter As New JsonStrategyParameter(sName, sNameNge, sValue, "b", If(Not String.IsNullOrEmpty(sSubType), sSubType, ""), sMinUserLevel)
Return JsonStrategyParameter
End Function
#End Region ' Methods
End Class
Public Class DoubleStrategyParameter
Inherits StrategyParameter
#Region "FIELDS & PROPERTIES"
Private m_dValue As Double? = Nothing
Public Property sValue As String
Get
Return If(Not IsNothing(m_dValue), DoubleToString(m_dValue, 2), "")
End Get
Set(value As String)
Dim dValue As Double
If String.IsNullOrWhiteSpace(value) Then
m_dValue = Nothing
ElseIf StringToDouble(value, dValue) Then
If m_dValue <> dValue Then
Map.refStrategyManagerVM.SetbIsModifyStrategy(True)
SetbIsDoubleModify(True)
End If
m_dValue = dValue
Else
NotifyPropertyChanged(NameOf(sValue))
End If
End Set
End Property
Friend Sub SetValue(dValue As Double)
m_dValue = dValue
End Sub
Friend Sub SetValue(sValue As String)
Dim dValue As Double
If String.IsNullOrWhiteSpace(sValue) Then
m_dValue = Nothing
ElseIf StringToDouble(sValue, dValue) Then
m_dValue = dValue
Else
NotifyPropertyChanged(NameOf(sValue))
EgtOutLog("Error reading DoubleStrategyParameter " & sValue)
End If
End Sub
Private m_bDoubleVisibility As Visibility = Visibility.Collapsed
Public ReadOnly Property bDoubleVisibility As Visibility
Get
Return m_bDoubleVisibility
End Get
End Property
Friend Sub SetbDoubleVisibility(value As Boolean)
m_bDoubleVisibility = If(value, Visibility.Visible, Visibility.Collapsed)
NotifyPropertyChanged(NameOf(bDoubleVisibility))
End Sub
Private m_bIsDoubleModify As Boolean = False
Public ReadOnly Property bIsDoubleModify As Boolean
Get
Return m_bIsDoubleModify
End Get
End Property
Friend Sub SetbIsDoubleModify(value As Boolean)
m_bIsDoubleModify = value
If m_bIsDoubleModify Then
If Not IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM) Then
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM.SetbStrategy_Visibility(True)
ElseIf Not IsNothing(Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup.SelPart.SelFeatureVM) Then
Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup.SelPart.SelFeatureVM.SetbStrategy_Visibility(True)
End If
End If
NotifyPropertyChanged(NameOf(bIsDoubleModify))
End Sub
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonGenericParameter As JsonDefaultStrategyParameter)
MyBase.New(JsonGenericParameter)
If IsNothing(JsonGenericParameter) Then Return
If Not StringToDouble(JsonGenericParameter.sValue, m_dValue) Then
EgtOutLog("Error reading DoubleStrategyParameter " & JsonGenericParameter.sValue)
End If
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Overrides Function Serialize() As JsonStrategyParameter
Dim JsonStrategyParameter As New JsonStrategyParameter(sName, sNameNge, sValue, "d", If(Not String.IsNullOrEmpty(sSubType), sSubType, ""), sMinUserLevel)
Return JsonStrategyParameter
End Function
#End Region ' Methods
End Class
Public Class StringStrategyParameter
Inherits StrategyParameter
#Region "FIELDS & PROPERTIES"
Private m_sValue As String = String.Empty
Public Property sValue As String
Get
Return m_sValue
End Get
Set(value As String)
If m_sValue <> value Then
Map.refStrategyManagerVM.SetbIsModifyStrategy(True)
SetbIsStringModify(True)
End If
m_sValue = value
End Set
End Property
Friend Sub SetValue(dValue As String)
m_sValue = dValue
End Sub
Private m_bStringVisibility As Visibility = Visibility.Collapsed
Public ReadOnly Property bStringVisibility As Visibility
Get
Return m_bStringVisibility
End Get
End Property
Friend Sub SetbStringVisibility(value As Boolean)
m_bStringVisibility = If(value, Visibility.Visible, Visibility.Collapsed)
NotifyPropertyChanged(NameOf(bStringVisibility))
End Sub
Private m_bIsStringModify As Boolean = False
Public ReadOnly Property bIsStringModify As Boolean
Get
Return m_bIsStringModify
End Get
End Property
Friend Sub SetbIsStringModify(value As Boolean)
m_bIsStringModify = value
If m_bIsStringModify Then
If Not IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM) Then
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM.SetbStrategy_Visibility(True)
ElseIf Not IsNothing(Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup.SelPart.SelFeatureVM) Then
Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup.SelPart.SelFeatureVM.SetbStrategy_Visibility(True)
End If
End If
NotifyPropertyChanged(NameOf(bIsStringModify))
End Sub
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonGenericParameter As JsonDefaultStrategyParameter)
MyBase.New(JsonGenericParameter)
If IsNothing(JsonGenericParameter) Then Return
If Not StringToDouble(JsonGenericParameter.sValue, m_sValue) Then
EgtOutLog("Error reading StringStrategyParameter " & JsonGenericParameter.sValue)
End If
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Overrides Function Serialize() As JsonStrategyParameter
Dim JsonStrategyParameter As New JsonStrategyParameter(sName, sNameNge, sValue, "s", If(Not String.IsNullOrEmpty(sSubType), sSubType, ""), sMinUserLevel)
Return JsonStrategyParameter
End Function
#End Region ' Methods
End Class
Public Class ComboStrategyParameter
Inherits StrategyParameter
#Region "FIELDS & PROPERTIES"
Private m_ComboList As New List(Of ComboParameter)
Public Property ComboList As List(Of ComboParameter)
Get
Return m_ComboList
End Get
Set(value As List(Of ComboParameter))
m_ComboList = value
End Set
End Property
' Seleziona elemento nella combobox Choices
Private m_SelValue As ComboParameter
Public Property SelValue As ComboParameter
Get
Return m_SelValue
End Get
Set(value As ComboParameter)
If Not IsNothing(value) AndAlso Not IsNothing(m_SelValue) Then
If m_SelValue.sValue <> value.sValue Then
Map.refStrategyManagerVM.SetbIsModifyStrategy(True)
SetbIsComboBoxModify(True)
End If
End If
m_SelValue = value
End Set
End Property
Friend Sub SetSelValue(sValue As String)
m_SelValue = m_ComboList.FirstOrDefault(Function(x) x.sValue = sValue)
End Sub
Private m_bComboBoxVisibility As Visibility = Visibility.Collapsed
Public ReadOnly Property bComboBoxVisibility As Visibility
Get
Return m_bComboBoxVisibility
End Get
End Property
Friend Sub SetbComboBoxVisibility(value As Boolean)
m_bComboBoxVisibility = If(value, Visibility.Visible, Visibility.Collapsed)
NotifyPropertyChanged(NameOf(bComboBoxVisibility))
End Sub
Private m_bIsComboBoxModify As Boolean = False
Public ReadOnly Property bIsComboBoxModify As Boolean
Get
Return m_bIsComboBoxModify
End Get
End Property
Friend Sub SetbIsComboBoxModify(value As Boolean)
m_bIsComboBoxModify = value
If m_bIsComboBoxModify Then
If Not IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM) Then
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM.SetbStrategy_Visibility(True)
ElseIf Not IsNothing(Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup.SelPart.SelFeatureVM) Then
Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup.SelPart.SelFeatureVM.SetbStrategy_Visibility(True)
End If
End If
NotifyPropertyChanged(NameOf(bIsComboBoxModify))
End Sub
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonGenericParameter As JsonDefaultStrategyParameter)
MyBase.New(JsonGenericParameter)
If IsNothing(JsonGenericParameter) Then Return
ComboList = JsonGenericParameter.Choices.Select(Function(jsonChoice) New ComboParameter(jsonChoice)).ToList()
m_SelValue = m_ComboList.FirstOrDefault(Function(x) x.sValue = JsonGenericParameter.sValue)
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Overrides Function Serialize() As JsonStrategyParameter
Dim JsonStrategyParameter As New JsonStrategyParameter(sName, sNameNge, m_SelValue.sValue, "combo", If(Not String.IsNullOrEmpty(sSubType), sSubType, ""), sMinUserLevel)
Return JsonStrategyParameter
End Function
#End Region ' Methods
End Class
Public Class ListStrategyParameter
Inherits StrategyParameter
#Region "FIELDS & PROPERTIES"
Private m_ListValue As New List(Of ToolParameter)
Public Property ListValue As List(Of ToolParameter)
Get
Return m_ListValue
End Get
Set(value As List(Of ToolParameter))
m_ListValue = value
End Set
End Property
Private m_SelValue As ToolParameter
Public Property SelValue As ToolParameter
Get
Return m_SelValue
End Get
Set(value As ToolParameter)
If Not IsNothing(value) AndAlso Not IsNothing(m_SelValue) Then
If m_SelValue.sUUID <> value.sUUID Then
Map.refStrategyManagerVM.SetbIsModifyStrategy(True)
SetbIsListModify(True)
End If
End If
m_SelValue = value
NotifyPropertyChanged(NameOf(SelValue))
End Set
End Property
Friend Sub SetSelValue(sValue As String)
Dim sTrimValue As String = sValue.TrimEnd(";"c)
Dim sTmpValue As String() = sTrimValue.Split(";"c)
Dim sSplitValue As String()
For Each ItemValue As String In sTmpValue
sSplitValue = ItemValue.Split(","c)
For Each ItemTool As ToolParameter In m_ListValue
If sSplitValue(0) = ItemTool.sUUID AndAlso sSplitValue(1) = ItemTool.sName Then
ItemTool.bIsActive = True
End If
Next
Next
End Sub
Private m_AvailableToolList_View As ICollectionView = Nothing
Public ReadOnly Property AvailableToolList_View As ICollectionView
Get
Return m_AvailableToolList_View
End Get
End Property
Private m_ActiveToolList_View As ICollectionView = Nothing
Public ReadOnly Property ActiveToolList_View As ICollectionView
Get
Return m_ActiveToolList_View
End Get
End Property
Private m_bAvailableToolListVisibility As Visibility = Visibility.Collapsed
Public ReadOnly Property AvailableToolListVisibility As Visibility
Get
Return m_bAvailableToolListVisibility
End Get
End Property
Friend Sub SetAvailableToolListVisibility(value As Boolean)
m_bAvailableToolListVisibility = If(value, Visibility.Visible, Visibility.Collapsed)
NotifyPropertyChanged(NameOf(AvailableToolListVisibility))
End Sub
Private m_bOpenToolListIsEnable As Boolean = True
Public ReadOnly Property OpenToolListIsEnable As Boolean
Get
Return m_bOpenToolListIsEnable
End Get
End Property
Friend Sub SetOpenToolListIsEnable(value As Boolean)
m_bOpenToolListIsEnable = value
NotifyPropertyChanged(NameOf(OpenToolListIsEnable))
End Sub
Private m_bActiveToolListIsEnable As Boolean
Public ReadOnly Property ActiveToolListIsEnable As Boolean
Get
Return m_bActiveToolListIsEnable
End Get
End Property
Friend Sub SetActiveToolListIsEnable(value As Boolean)
m_bActiveToolListIsEnable = value
NotifyPropertyChanged(NameOf(ActiveToolListIsEnable))
End Sub
Private m_bAvailableToolListIsEnable As Boolean
Public ReadOnly Property AvailableToolListIsEnable As Boolean
Get
Return m_bAvailableToolListIsEnable
End Get
End Property
Friend Sub SetAvailableToolListIsEnable(value As Boolean)
m_bAvailableToolListIsEnable = value
NotifyPropertyChanged(NameOf(AvailableToolListIsEnable))
End Sub
Private m_bListBoxVisibility As Visibility = Visibility.Collapsed
Public ReadOnly Property bListBoxVisibility As Visibility
Get
Return m_bListBoxVisibility
End Get
End Property
Friend Sub SetbListBoxVisibility(value As Boolean)
m_bListBoxVisibility = If(value, Visibility.Visible, Visibility.Collapsed)
NotifyPropertyChanged(NameOf(bListBoxVisibility))
End Sub
Private m_bIsListModify As Boolean = False
Public ReadOnly Property bIsListModify As Boolean
Get
Return m_bIsListModify
End Get
End Property
Friend Sub SetbIsListModify(value As Boolean)
m_bIsListModify = value
If m_bIsListModify Then
If Not IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM) Then
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM.SetbStrategy_Visibility(True)
ElseIf Not IsNothing(Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup.SelPart.SelFeatureVM) Then
Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup.SelPart.SelFeatureVM.SetbStrategy_Visibility(True)
End If
End If
NotifyPropertyChanged(NameOf(bIsListModify))
End Sub
#Region "Messages"
Public ReadOnly Property SelectAllToolTip As String
Get
Return EgtMsg(63034)
End Get
End Property
Public ReadOnly Property DeselectAllToolTip As String
Get
Return EgtMsg(63035)
End Get
End Property
Public ReadOnly Property OpenToolListToolTip As String
Get
Return EgtMsg(63036)
End Get
End Property
Public ReadOnly Property CloseToolListToolTip As String
Get
Return EgtMsg(63037)
End Get
End Property
#End Region ' Messages
' Definizione comandi
Private m_cmdDeselectAll As ICommand
Private m_cmdSelectAll As ICommand
Private m_cmdOpenToolList As ICommand
Private m_cmdCloseToolList As ICommand
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New(sSubType As String)
' Recupero lista utensili per sottotipo
Dim nSubType As Integer = 0
Dim nType As Integer = 0
Dim sName As String = String.Empty
Dim sUUID As String = String.Empty
Dim sInfo As String = String.Empty
StringToInt(sSubType, nSubType)
Dim bNext As Boolean = EgtTdbGetFirstTool(nSubType, sName, nType)
While bNext
EgtTdbSetCurrTool(sName)
EgtTdbGetCurrToolParam(MCH_TP.UUID, sUUID)
m_ListValue.Add(New ToolParameter(sUUID, sName, Me))
bNext = EgtTdbGetNextTool(nSubType, sName, nType)
End While
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Overrides Function Serialize() As JsonStrategyParameter
Dim sInfo As String = String.Empty
If Not IsNothing(sSubType) Then
For Each ItemTool As ToolParameter In m_ListValue
If ItemTool.bIsActive Then
sInfo &= ItemTool.sUUID & "," & ItemTool.sName & ";"
End If
Next
End If
Dim JsonStrategyParameter As New JsonStrategyParameter(sName, sNameNge, sInfo, "tool", If(Not String.IsNullOrEmpty(sSubType), sSubType, ""), sMinUserLevel)
Return JsonStrategyParameter
End Function
Friend Function AvailableToolFilter(Strategy As Object) As Boolean
Return DirectCast(Strategy, ToolParameter).bIsActive = False
End Function
Friend Function ActiveToolFilter(Strategy As Object) As Boolean
Return DirectCast(Strategy, ToolParameter).bIsActive = True
End Function
Friend Sub CreateToolsViews()
m_AvailableToolList_View = New ListCollectionView(m_ListValue)
m_AvailableToolList_View.Filter = AddressOf AvailableToolFilter
m_ActiveToolList_View = New ListCollectionView(m_ListValue)
m_ActiveToolList_View.Filter = AddressOf ActiveToolFilter
End Sub
'''
''' Funzione per visualizzare le liste available e active tool
'''
Friend Sub ToolView()
SetActiveToolListIsEnable(If(m_ActiveToolList_View.IsEmpty, False, True))
SetAvailableToolListIsEnable(If(m_AvailableToolList_View.IsEmpty, False, True))
End Sub
#End Region ' Methods
#Region "COMMANDS"
#Region "OpenToolListCommand"
Public ReadOnly Property OpenToolListCommand As ICommand
Get
If m_cmdOpenToolList Is Nothing Then
m_cmdOpenToolList = New Command(AddressOf OpenToolList)
End If
Return m_cmdOpenToolList
End Get
End Property
Friend Sub OpenToolList()
SetAvailableToolListVisibility(True)
SetOpenToolListIsEnable(False)
End Sub
#End Region ' OpenToolListCommand
#Region "CloseToolListCommand"
Public ReadOnly Property CloseToolListCommand As ICommand
Get
If m_cmdCloseToolList Is Nothing Then
m_cmdCloseToolList = New Command(AddressOf CloseToolList)
End If
Return m_cmdCloseToolList
End Get
End Property
Friend Sub CloseToolList()
SetAvailableToolListVisibility(True)
SetOpenToolListIsEnable(True)
End Sub
#End Region ' CloseToolListCommand
#Region "SelectAllCommand"
Public ReadOnly Property SelectAllCommand As ICommand
Get
If m_cmdSelectAll Is Nothing Then
m_cmdSelectAll = New Command(AddressOf SelectAll)
End If
Return m_cmdSelectAll
End Get
End Property
Friend Sub SelectAll()
If Not IsNothing(sSubType) Then
For Each ItemTool As ToolParameter In m_ListValue
ItemTool.bIsActive = True
Next
End If
SetAvailableToolListIsEnable(False)
Map.refStrategyManagerVM.SetbIsModifyStrategy(True)
End Sub
#End Region ' SelectAllCommand
#Region "DeselectAllCommand"
Public ReadOnly Property DeselectAllCommand As ICommand
Get
If m_cmdDeselectAll Is Nothing Then
m_cmdDeselectAll = New Command(AddressOf DeselectAll)
End If
Return m_cmdDeselectAll
End Get
End Property
Friend Sub DeselectAll()
If Not IsNothing(sSubType) Then
For Each ItemTool As ToolParameter In m_ListValue
ItemTool.bIsActive = False
Next
End If
SetActiveToolListIsEnable(False)
Map.refStrategyManagerVM.SetbIsModifyStrategy(True)
End Sub
#End Region ' DeselectAllCommand
#End Region ' Commands
End Class
'----------- Classe che fa riferimento ai parametri delle Scelte -----------
Public Class ComboParameter
Inherits VMBase
#Region "FIELD & PROPERTIES"
Private m_sValue As String
Public Property sValue As String
Get
Return m_sValue
End Get
Set(value As String)
m_sValue = value
NotifyPropertyChanged(NameOf(sValue))
End Set
End Property
Private m_sDescriptionShort As String
Public Property sDescriptionShort As String
Get
Return m_sDescriptionShort
End Get
Set(value As String)
m_sDescriptionShort = value
NotifyPropertyChanged(NameOf(sDescriptionShort))
End Set
End Property
Private m_sDescriptionLong As String
Public Property sDescriptionLong As String
Get
Return m_sDescriptionLong
End Get
Set(value As String)
m_sDescriptionLong = value
NotifyPropertyChanged(NameOf(sDescriptionLong))
End Set
End Property
Private m_sMessageId As String
Public Property sMessageId As String
Get
Return m_sMessageId
End Get
Set(value As String)
m_sMessageId = value
NotifyPropertyChanged(NameOf(sMessageId))
End Set
End Property
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
End Sub
Sub New(JsonChoiceParameter As JsonDefaultComboParameter)
If Not IsNothing(JsonChoiceParameter) Then
m_sValue = JsonChoiceParameter.sValue
m_sDescriptionShort = JsonChoiceParameter.sDescriptionShort
m_sDescriptionLong = JsonChoiceParameter.sDescriptionLong
m_sMessageId = JsonChoiceParameter.sMessageId
End If
End Sub
#End Region ' Constructor
End Class
Public Class ToolParameter
Inherits VMBase
#Region "FIELD & PROPERTIES"
Private m_ParentList As ListStrategyParameter
Private m_bIsActive As Boolean
Public Property bIsActive As Boolean
Get
Return m_bIsActive
End Get
Set(value As Boolean)
m_bIsActive = value
If Not IsNothing(m_ParentList.AvailableToolList_View) AndAlso Not IsNothing(m_ParentList.ActiveToolList_View) Then
m_ParentList.AvailableToolList_View.Refresh()
m_ParentList.ActiveToolList_View.Refresh()
m_ParentList.SetActiveToolListIsEnable(True)
m_ParentList.SetAvailableToolListIsEnable(True)
Map.refStrategyManagerVM.SetbIsModifyStrategy(True)
End If
NotifyPropertyChanged(NameOf(bIsActive))
End Set
End Property
Private m_sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
NotifyPropertyChanged(NameOf(sName))
End Set
End Property
Private m_sUUID As String
Public Property sUUID As String
Get
Return m_sUUID
End Get
Set(value As String)
m_sUUID = value
NotifyPropertyChanged(NameOf(sUUID))
End Set
End Property
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New(sUUID As String, sName As String, ParentList As ListStrategyParameter)
m_sUUID = sUUID
m_sName = sName
m_ParentList = ParentList
End Sub
#End Region ' Constructor
End Class
Public Class StrategyTypeToFocusableConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
If TypeOf value IsNot TreeViewItem Then Return True
Select Case DirectCast(value, TreeViewItem).DataContext.GetType()
Case GetType(Topology)
Return True
Case Else ' GetType(StrategyFeature)
Return False
End Select
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class