Files
egtbeamwall/EgtBEAMWALL.ViewerOptimizer/AddRawPartWnd/AddRawPartWndVM.vb
T
2022-01-03 10:27:23 +01:00

294 lines
9.6 KiB
VB.net

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