Imports System.Collections.ObjectModel Imports EgtWPFLib5 Imports EgtUILib Imports EgtBEAMWALL.Core Public Class AddRawPartWndVM Inherits VMBase #Region "FIELDS & PROPERTIES" Public Enum EditTypes As Integer ONLY_TEXT = 1 ONLY_COMBO = 2 TEXT_AND_COMBO = 3 End Enum Friend Event m_CloseWindow(bDialogResult As Boolean) ' flag che indica se trave o parete Private m_nProjectType As BWType = BWType.BEAM Private m_EditType As EditTypes = EditTypes.ONLY_TEXT ' lista delle variabili da mostrare Private m_VariableList_View As CollectionView = Nothing Private m_VariableList As ObservableCollection(Of Variable) Public ReadOnly Property VariableList As ObservableCollection(Of Variable) Get Return m_VariableList End Get End Property Private m_DimensionsList As List(Of SParam) Public Property DimensionsList As List(Of SParam) Get Return m_DimensionsList End Get Set(value As List(Of SParam)) m_DimensionsList = value End Set End Property Private m_SelDimension As SParam Public Property SelDimension As SParam Get Return m_SelDimension End Get Set(value As SParam) m_SelDimension = value If m_EditType = EditTypes.ONLY_COMBO OrElse m_EditType = EditTypes.TEXT_AND_COMBO Then ' aggiorno textbox Select Case m_nProjectType Case BWType.BEAM m_VariableList(0).SetValue(value.dL) Case BWType.WALL m_VariableList(0).SetValue(value.dW) m_VariableList(1).SetValue(value.dL) End Select End If End Set End Property Private m_DimensionsList_Visibility As Visibility Public ReadOnly Property DimensionsList_Visibility As Visibility Get Return If(m_EditType = EditTypes.ONLY_COMBO OrElse m_EditType = EditTypes.TEXT_AND_COMBO, Visibility.Visible, Visibility.Collapsed) End Get End Property 'Private m_dL As Double 'Public ReadOnly Property dL As Double ' Get ' Return m_dL ' End Get 'End Property 'Public Property sL As String ' Get ' Return LenToString(m_dL, 3) ' End Get ' Set(value As String) ' Dim dTempL As Double ' If StringToLen(value, dTempL) AndAlso dTempL > 0 Then ' m_dL = dTempL ' Else ' NotifyPropertyChanged("sL") ' End If ' End Set 'End Property 'Private m_dPOSX As Double 'Public Property dPOSX As Double ' Get ' Return m_dPOSX ' End Get ' Set(value As Double) ' m_dPOSX = value ' End Set 'End Property 'Public Property sPOSX As String ' Get ' Return LenToString(m_dPOSX, 3) ' End Get ' Set(value As String) ' Dim dTempPOSX As Double ' If StringToLen(value, dTempPOSX) AndAlso dTempPOSX > 0 Then ' m_dPOSX = dTempPOSX ' Else ' NotifyPropertyChanged("sPOSX") ' End If ' End Set 'End Property ' Definizione comandi Private m_cmdOk As ICommand #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTOR" Sub New(MachineType As Integer, dL As Double, dW As Double, dPosx As Double) m_nProjectType = MachineType m_EditType = EditTypes.ONLY_TEXT Select Case m_nProjectType Case ConstBeam.MachineType.BEAM m_VariableList = New ObservableCollection(Of Variable)({New Variable(Variable.VariableType.LENGTH, "Lunghezza", dL), New Variable(Variable.VariableType.LENGTH, "Ritaglio iniziale", dPosx)}) Case ConstBeam.MachineType.WALL m_VariableList = New ObservableCollection(Of Variable)({New Variable(Variable.VariableType.LENGTH, "Lunghezza", dL), New Variable(Variable.VariableType.LENGTH, "Larghezza", dW)}) End Select End Sub Sub New(EditType As EditTypes, ProjectType As BWType, DimensionsList As List(Of SParam), dL As Double, dW As Double, dPosx As Double, dOffset As Double, dKerf As Double) m_EditType = EditType m_nProjectType = ProjectType Select Case ProjectType Case BWType.BEAM m_VariableList = New ObservableCollection(Of Variable)({New Variable(Variable.VariableType.LENGTH, "Lunghezza", dL), New Variable(Variable.VariableType.LENGTH, "Ritaglio iniziale", dPosx), New Variable(Variable.VariableType.LENGTH, "Offset", dOffset)}) Case BWType.WALL m_VariableList = New ObservableCollection(Of Variable)({New Variable(Variable.VariableType.LENGTH, "Larghezza", dW), New Variable(Variable.VariableType.LENGTH, "Lunghezza", dL), New Variable(Variable.VariableType.LENGTH, "Offset", dOffset), New Variable(Variable.VariableType.LENGTH, "Kerf", dKerf)}) End Select m_DimensionsList = DimensionsList If m_DimensionsList.Count > 0 Then SelDimension = m_DimensionsList(0) End If ' riduco lista parametri a solo quelli che utilizzati m_VariableList_View = CollectionViewSource.GetDefaultView(m_VariableList) m_VariableList_View.Filter = AddressOf VariableListFilter NotifyPropertyChanged(NameOf(DimensionsList_Visibility)) End Sub Private Function VariableListFilter(Variable As Object) As Boolean Dim CurrVariable As Variable = DirectCast(Variable, Variable) Dim nVariableIndex As Integer = m_VariableList.IndexOf(Variable) Select Case m_nProjectType Case BWType.BEAM If m_EditType = EditTypes.ONLY_TEXT OrElse m_EditType = EditTypes.TEXT_AND_COMBO Then Return True Else Return nVariableIndex = 1 OrElse nVariableIndex = 2 End If Case BWType.WALL If m_EditType = EditTypes.ONLY_TEXT OrElse m_EditType = EditTypes.TEXT_AND_COMBO Then Return True Else Return nVariableIndex = 2 OrElse nVariableIndex = 3 End If End Select End Function #End Region ' CONSTRUCTOR #Region "COMMANDS" #Region "Ok" 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() 'verifico che tutti i campi contengano un valore valido For Each Variable In m_VariableList If (Variable.nType = Variable.VariableType.STRING_ AndAlso IsNothing(Variable.sValue)) OrElse ((Variable.nType = Variable.VariableType.DOUBLE_ OrElse Variable.nType = Variable.VariableType.LENGTH) AndAlso IsNothing(Variable.dValue)) Then MessageBox.Show(If(m_nProjectType = MachineType.BEAM, EgtMsg(61854), EgtMsg(61855)), EgtMsg(30007)) Return End If Next ' se non ci sono problemi esco restituendo vero RaiseEvent m_CloseWindow(True) 'If Not IsNothing(m_dL) AndAlso m_dL > 0 AndAlso ' Not IsNothing(m_dPOSX) AndAlso m_dPOSX >= 0 Then ' RaiseEvent m_CloseWindow(True) 'Else ' MessageBox.Show("Errore! Impossibile creare una barra con questi parametri", "Errore") 'End If End Sub #End Region ' Ok #End Region ' COMMANDS End Class Public Class Variable Inherits VMBase Public Enum VariableType As Integer DOUBLE_ = 1 STRING_ = 2 COMBO = 3 LENGTH = 4 End Enum Private m_nType As VariableType Public ReadOnly Property nType As VariableType Get Return m_nType End Get End Property Private m_sMsg As String Public Property sMsg As String Get Return m_sMsg End Get Set(value As String) m_sMsg = value End Set End Property Private m_dValue As Double = 0 Friend ReadOnly Property dValue As Double Get Return m_dValue End Get End Property Private m_sValue As String = "" Public Property sValue As String Get Select Case m_nType Case VariableType.STRING_ Return m_sValue Case VariableType.LENGTH Return LenToString(m_dValue, 3) Case Else ' VariableType.DOUBLE_ Return DoubleToString(m_dValue, 3) End Select End Get Set(value As String) Select Case m_nType Case VariableType.STRING_ m_sValue = value Case VariableType.LENGTH Dim dTempValue As Double If StringToLen(value, dTempValue) Then m_dValue = dTempValue Else NotifyPropertyChanged("sValue") End If Case Else ' VariableType.DOUBLE_ Dim dTempValue As Double If StringToDouble(value, dTempValue) Then m_dValue = dTempValue Else NotifyPropertyChanged("sValue") End If End Select End Set End Property Sub New(Type As VariableType, Msg As String, Value As String) m_nType = Type m_sMsg = Msg sValue = Value End Sub Friend Sub SetValue(dValue As Double) m_dValue = dValue NotifyPropertyChanged(NameOf(sValue)) End Sub End Class