'Imports System.Collections.ObjectModel
'Imports System.ComponentModel
'Imports EgtUILib
'Imports EgtWPFLib

'Public Class WaterJetPageVM
'   Private m_refWaterPageV As WaterJetPageUC

'   ' lista dei materiali
'   Private m_ListMaterial As New ObservableCollection(Of MaterialWJ)
'   Public ReadOnly Property ListMaterial As ObservableCollection(Of MaterialWJ)
'      Get
'         Return m_ListMaterial
'      End Get
'   End Property
'   ' materiale selezionato
'   Private m_SelectedMaterial As MaterialWJ
'   Public Property SelectedMaterial As MaterialWJ
'      Get
'         Return m_SelectedMaterial
'      End Get
'      Set(value As MaterialWJ)
'         m_SelectedMaterial = value
'      End Set
'   End Property
'   ' submateriale selezionato
'   Private m_SelectedSubMaterial As SubMaterialWJ
'   Public Property SelectedSubMaterial As SubMaterialWJ
'      Get
'         Return m_SelectedSubMaterial
'      End Get
'      Set(value As SubMaterialWJ)
'         m_SelectedSubMaterial = value
'      End Set
'   End Property
'   ' lista parametri selezionata
'   Private m_SelectedParam As ParamWJ
'   Public Property SelectedParam As ParamWJ
'      Get
'         Return m_SelectedParam
'      End Get
'      Set(value As ParamWJ)
'         m_SelectedParam = value
'      End Set
'   End Property

'   Private m_sNewMaterial As MaterialWJ
'   Public Property sNewMaterial As String
'      Get
'         Return m_sNewMaterial.sMaterial
'      End Get
'      Set(value As String)
'         m_sNewMaterial = New MaterialWJ(value)
'      End Set
'   End Property

'   Private m_NewMaterialVisibility As Visibility = Visibility.Hidden
'   Public Property NewMaterialVisibility As Visibility
'      Get
'         Return m_NewMaterialVisibility
'      End Get
'      Set(value As Visibility)
'         m_NewMaterialVisibility = value
'      End Set
'   End Property

'   Sub New(WaterJetPageV As WaterJetPageUC)
'      m_refWaterPageV = WaterJetPageV
'      ' Creo una lista di materiali come esempio
'      ListMaterial.Add(New MaterialWJ("Marmo"))
'      ListMaterial.Last.ListOfSubMaterial.Add(New SubMaterialWJ("Binaco"))
'      ListMaterial.Last.ListOfSubMaterial.Last.ListOfParam.Add(New ParamWJ("10", "Bq1", "Bq2", "Bq3", "Bq4", "Bq5"))
'      ListMaterial.Last.ListOfSubMaterial.Add(New SubMaterialWJ("Nero"))
'      ListMaterial.Last.ListOfSubMaterial.Last.ListOfParam.Add(New ParamWJ("20", "Nq1", "Nq2", "Nq3", "Nq4", "Nq5"))
'      ListMaterial.Add(New MaterialWJ("Granito"))
'      ListMaterial.Last.ListOfSubMaterial.Add(New SubMaterialWJ("GR_Binaco"))
'      ListMaterial.Last.ListOfSubMaterial.Last.ListOfParam.Add(New ParamWJ("15", "gBq1", "gBq2", "Bq3", "gBq4", "gBq5"))
'      ListMaterial.Last.ListOfSubMaterial.Last.ListOfParam.Add(New ParamWJ("15.5", "g_Bq1", "g_Bq2", "g_Bq3", "g_Bq4", "g_Bq5"))
'      ListMaterial.Last.ListOfSubMaterial.Last.ListOfParam.Add(New ParamWJ("15.8", "G_Bq1", "G_Bq2", "G_Bq3", "G_Bq4", "G_Bq5"))
'      ListMaterial.Last.ListOfSubMaterial.Add(New SubMaterialWJ("GR_Nero"))
'      ListMaterial.Last.ListOfSubMaterial.Last.ListOfParam.Add(New ParamWJ("18", "gNq1", "gNq2", "gNq3", "gNq4", "gNq5"))

'      SelectedMaterial = m_ListMaterial(0)
'      SelectedSubMaterial = m_SelectedMaterial.ListOfSubMaterial(0)
'      SelectedParam = SelectedSubMaterial.ListOfParam(0)
'   End Sub

'   Private m_cmdOk As ICommand
'   Public ReadOnly Property OkCommand() As ICommand
'      Get
'         If m_cmdOk Is Nothing Then
'            m_cmdOk = New Command(AddressOf Ok)
'         End If
'         Return m_cmdOk
'      End Get
'   End Property

'   Private Sub Ok()
'      ' Mostro textbox per il nome
'      m_refWaterPageV.KitNameTxBx.Text = String.Empty
'      m_refWaterPageV.KitNameTxBx.Visibility = Windows.Visibility.Visible
'      m_refWaterPageV.KitsLstBx.SetValue(Grid.RowSpanProperty, 1)
'      MessageBox.Show("Prova di Binding", "Prova di Binding", MessageBoxButton.OK, MessageBoxImage.Asterisk, MessageBoxResult.OK)
'      m_refWaterPageV.KitNameTxBx.Visibility = Windows.Visibility.Hidden
'      m_refWaterPageV.KitsLstBx.SetValue(Grid.RowSpanProperty, 2)
'   End Sub

'End Class


'Public Class MaterialWJ

'   Private m_sMaterial As String = String.Empty
'   Public ReadOnly Property sMaterial As String
'      Get
'         Return m_sMaterial
'      End Get
'   End Property

'   Private m_ListOfSubMaterial As New ObservableCollection(Of SubMaterialWJ)
'   Public Property ListOfSubMaterial As ObservableCollection(Of SubMaterialWJ)
'      Get
'         Return m_ListOfSubMaterial
'      End Get
'      Set(value As ObservableCollection(Of SubMaterialWJ))
'         m_ListOfSubMaterial = value
'      End Set
'   End Property

'   Sub New(sMat As String)
'      m_sMaterial = sMat
'   End Sub

'End Class

'Public Class SubMaterialWJ

'   Dim m_sSubMaterial As String
'   Public Property sSubMaterial As String
'      Get
'         Return m_sSubMaterial
'      End Get
'      Set(value As String)
'         m_sSubMaterial = value
'      End Set
'   End Property

'   Private m_ListOfParam As New ObservableCollection(Of ParamWJ)
'   Public Property ListOfParam As ObservableCollection(Of ParamWJ)
'      Get
'         Return m_ListOfParam
'      End Get
'      Set(value As ObservableCollection(Of ParamWJ))
'         m_ListOfParam = value
'      End Set
'   End Property

'   Sub New(sName As String)
'      m_sSubMaterial = sName
'   End Sub
'End Class

'Public Class ParamWJ

'   Private m_Thickness As String
'   Private m_Q1 As String
'   Private m_Q2 As String
'   Private m_Q3 As String
'   Private m_Q4 As String
'   Private m_Q5 As String

'   Public Property Q1 As String
'      Get
'         Return m_Q1
'      End Get
'      Set(value As String)
'         m_Q1 = value
'      End Set
'   End Property

'   Public Property Thickness As String
'      Get
'         Return m_Thickness
'      End Get
'      Set(value As String)
'         m_Thickness = value
'      End Set
'   End Property

'   Public Property Q2 As String
'      Get
'         Return m_Q2
'      End Get
'      Set(value As String)
'         m_Q2 = value
'      End Set
'   End Property

'   Public Property Q3 As String
'      Get
'         Return m_Q3
'      End Get
'      Set(value As String)
'         m_Q3 = value
'      End Set
'   End Property

'   Public Property Q4 As String
'      Get
'         Return m_Q4
'      End Get
'      Set(value As String)
'         m_Q4 = value
'      End Set
'   End Property

'   Public Property Q5 As String
'      Get
'         Return m_Q5
'      End Get
'      Set(value As String)
'         m_Q5 = value
'      End Set
'   End Property

'   Sub New(sT As String, sQ1 As String, sQ2 As String, sQ3 As String, sQ4 As String, sQ5 As String)
'      m_Thickness = sT
'      m_Q1 = sQ1
'      m_Q2 = sQ2
'      m_Q3 = sQ3
'      m_Q4 = sQ4
'      m_Q5 = sQ5
'   End Sub

'End Class

Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5

Public Class WaterjetDbWindowVM
   Inherits VMBase
   ' Riferimento alla MainWindow
   Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow)
   Private m_refWaterPageV As WaterJetPageUC

#Region "FIELDS & PROPERTIES"


#Region "Materiali"
   Private Property m_MaterialList As ObservableCollection(Of WjMaterial)
   Public Property MaterialList As ObservableCollection(Of WjMaterial)
      Get
         Return m_MaterialList
      End Get
      Set(value As ObservableCollection(Of WjMaterial))
         m_MaterialList = value
      End Set
   End Property

   Private Property m_SelMaterial As WjMaterial
   Public Property SelMaterial As WjMaterial
      Get
         Return m_SelMaterial
      End Get
      Set(value As WjMaterial)
         m_SelMaterial = value
      End Set
   End Property

   Private Property m_sNewMaterial As String
   Public Property sNewMaterial As String
      Get
         Return m_sNewMaterial
      End Get
      Set(value As String)
         m_sNewMaterial = value
      End Set
   End Property

   Private Property m_NewMaterial_Visibility As Visibility = Visibility.Collapsed
   Public Property NewMaterial_Visibility As Visibility
      Get
         Return m_NewMaterial_Visibility
      End Get
      Set(value As Visibility)
         m_NewMaterial_Visibility = value
         NotifyPropertyChanged(NameOf(NewMaterial_Visibility))
      End Set
   End Property

#End Region

#Region "SubMateriali"
   Private Property m_SubMaterialList As New ObservableCollection(Of WjSubMaterial)
   Public Property SubMaterialList As ObservableCollection(Of WjSubMaterial)
      Get
         Return m_SubMaterialList
      End Get
      Set(value As ObservableCollection(Of WjSubMaterial))
         m_SubMaterialList = value
      End Set
   End Property

   'Private Property m_SelSubMaterial As WjSubMaterial
   'Public Property SelSubMaterial As WjSubMaterial
   '   Get
   '      Return m_SelSubMaterial
   '   End Get
   '   Set(value As WjSubMaterial)
   '      m_SelSubMaterial = value
   '   End Set
   'End Property

   Private Property m_sNewSubMaterial As String
   Public Property sNewSubMaterial As String
      Get
         Return m_sNewSubMaterial
      End Get
      Set(value As String)
         m_sNewSubMaterial = value
      End Set
   End Property

   Private Property m_NewSubMaterial_Visibility As Visibility = Visibility.Collapsed
   Public Property NewSubMaterial_Visibility As Visibility
      Get
         Return m_NewSubMaterial_Visibility
      End Get
      Set(value As Visibility)
         m_NewSubMaterial_Visibility = value
         NotifyPropertyChanged(NameOf(NewSubMaterial_Visibility))
      End Set
   End Property

#End Region

#Region "Parametri"
   Private Property m_ParamList As ObservableCollection(Of WjParam)
   Public Property ParamList As ObservableCollection(Of WjParam)
      Get
         Return m_ParamList
      End Get
      Set(value As ObservableCollection(Of WjParam))
         m_ParamList = value
      End Set
   End Property

   'Private Property m_SelParam As WjParam
   'Public Property SelParam As WjParam
   '   Get
   '      Return m_SelParam
   '   End Get
   '   Set(value As WjParam)
   '      m_SelParam = value
   '   End Set
   'End Property

   Private m_HeadParamLstBx_Width As Double
   Public ReadOnly Property HeadParamLstBx_Width As Double
      Get
         If m_HeadParamLstBx_Width < 10 Then
            Return 700
         End If
         Return m_HeadParamLstBx_Width
      End Get
   End Property

#End Region

   Const S_MATERIALS As String = "Materials"

   ' Definizione comandi
   Private m_cmdNewMaterial As ICommand
   Private m_cmdDeleteMaterial As ICommand
   Private m_cmdNewSubMaterial As ICommand
   Private m_cmdDeleteSubMaterial As ICommand
   Private m_cmdNewWjParam As ICommand
   Private m_cmdDeleteWjParam As ICommand
   Private m_cmdSave As ICommand
   Private m_cmdDone As ICommand

#End Region

#Region "MESSAGES"

   Public ReadOnly Property Material_Msg As String
      Get
         Return "Materiale"
      End Get
   End Property

   Public ReadOnly Property SubMaterial_Msg As String
      Get
         Return "SubMateriale"
      End Get
   End Property

   Public ReadOnly Property Id_Msg As String
      Get
         Return "Id"
      End Get
   End Property

   Public ReadOnly Property Thickness_Msg As String
      Get
         Return "Spessore"
      End Get
   End Property

   Public ReadOnly Property Q1_Msg As String
      Get
         Return "Q1"
      End Get
   End Property

   Public ReadOnly Property Q2_Msg As String
      Get
         Return "Q2"
      End Get
   End Property

   Public ReadOnly Property Q3_Msg As String
      Get
         Return "Q3"
      End Get
   End Property

   Public ReadOnly Property Q4_Msg As String
      Get
         Return "Q4"
      End Get
   End Property

   Public ReadOnly Property Q5_Msg As String
      Get
         Return "Q5"
      End Get
   End Property

   Public ReadOnly Property QExtra_Msg As String
      Get
         Return "QExtra"
      End Get
   End Property

   Public ReadOnly Property New_Msg As String
      Get
         Return "Nuovo"
      End Get
   End Property

   Public ReadOnly Property Delete_Msg As String
      Get
         Return "Elimina"
      End Get
   End Property

   Public ReadOnly Property Save_Msg As String
      Get
         Return "Salva"
      End Get
   End Property

   Public ReadOnly Property Modify_Msg As String
      Get
         Return "Modifica"
      End Get
   End Property

#End Region

#Region "CONSTRUCTOR"

   Sub New(refContext As WaterJetPageUC)
      ' definisco il riferiento con la pagina xaml
      m_refWaterPageV = refContext
      ' Leggo valori da file Data e li carico nelle proprietà
      Dim sFilePath As String = m_MainWindow.m_CurrentMachine.sMachDir & "\" &  MACHININGS_DIR & "\" & WATERJETDB_FILE
      MaterialList = New ObservableCollection(Of WjMaterial)

      If File.Exists(sFilePath) Then
         Dim sMaterial As String = String.Empty

         If EgtUILib.GetPrivateProfileString(S_MATERIALS, "1", "", sMaterial, sFilePath) > 0 Then
            Dim sMaterials() As String = sMaterial.Split(","c)
            Dim ind As Integer = 0
            For ind = 0 To sMaterials.Length() - 1

               'recupero i sottomateriali
               Dim Index As Integer = 1
               Dim sSubMat As String = String.Empty
               Dim SubMatList As New ObservableCollection(Of WjSubMaterial)
               While EgtUILib.GetPrivateProfileString(sMaterials(ind), Index.ToString(), "", sSubMat, sFilePath) > 0


                  ' recupero la lista dei Q
                  Dim QInd As Integer = 1
                  Dim sParam As String = String.Empty
                  Dim QParamList As New ObservableCollection(Of WjParam)
                  While EgtUILib.GetPrivateProfileString(sMaterials(ind) & "." & sSubMat, QInd.ToString(), "", sParam, sFilePath) > 0
                     Dim sParams() As String = sParam.Split(","c)
                     If sParams.Length() >= 7 Then
                        Dim dThickness As Double
                        Dim dQ1 As Double
                        Dim dQ2 As Double
                        Dim dQ3 As Double
                        Dim dQ4 As Double
                        Dim dQ5 As Double
                        Dim dQExtra As Double
                        StringToDouble(sParams(0), dThickness)
                        StringToDouble(sParams(1), dQ1)
                        StringToDouble(sParams(2), dQ2)
                        StringToDouble(sParams(3), dQ3)
                        StringToDouble(sParams(4), dQ4)
                        StringToDouble(sParams(5), dQ5)
                        StringToDouble(sParams(6), dQExtra)
                        QParamList.Add(New WjParam(QInd, dThickness, dQ1, dQ2, dQ3, dQ4, dQ5, dQExtra, m_refWaterPageV))
                     End If
                     QInd += 1
                  End While

                  SubMatList.Add(New WjSubMaterial(sSubMat, QParamList))
                  Index += 1
               End While

               MaterialList.Add(New WjMaterial(sMaterials(ind), SubMatList))
            Next

         End If

      End If

   End Sub

   Public Sub RefreshDImensionPage()
      m_HeadParamLstBx_Width = m_refWaterPageV.ParamsGpBx.ActualWidth - 20
      NotifyPropertyChanged(NameOf(HeadParamLstBx_Width))
   End Sub

#End Region    ' Constructor

#Region "COMMANDS"

#Region "NewMaterialCommand"

   Public ReadOnly Property NewMaterialCommand As ICommand
      Get
         If m_cmdNewMaterial Is Nothing Then
            m_cmdNewMaterial = New Command(AddressOf NewMaterial)
         End If
         Return m_cmdNewMaterial
      End Get
   End Property

   Public Sub NewMaterial(ByVal param As Object)
      NewSubMaterial_Visibility = Visibility.Collapsed
      NewMaterial_Visibility = Visibility.Visible
   End Sub

#End Region ' NewMaterial

#Region "DeleteMaterialCommand"

   Public ReadOnly Property DeleteMaterialCommand As ICommand
      Get
         If m_cmdDeleteMaterial Is Nothing Then
            m_cmdDeleteMaterial = New Command(AddressOf DeleteMaterial)
         End If
         Return m_cmdDeleteMaterial
      End Get
   End Property

   Public Sub DeleteMaterial(ByVal param As Object)
      If Not IsNothing(SelMaterial) Then
         MaterialList.Remove(SelMaterial)
         'SelMaterial.NotifyPropertyChanged(NameOf(MaterialList))
      End If
   End Sub

#End Region ' DeleteMaterial

#Region "NewSubMaterialCommand"

   Public ReadOnly Property NewSubMaterialCommand As ICommand
      Get
         If m_cmdNewSubMaterial Is Nothing Then
            m_cmdNewSubMaterial = New Command(AddressOf NewSubMaterial)
         End If
         Return m_cmdNewSubMaterial
      End Get
   End Property

   Public Sub NewSubMaterial(ByVal param As Object)
      If Not IsNothing(SelMaterial) Then
         NewMaterial_Visibility = Visibility.Collapsed
         NewSubMaterial_Visibility = Visibility.Visible

      End If
   End Sub

#End Region ' NewSubMaterial

#Region "DeleteSubMaterialCommand"

   Public ReadOnly Property DeleteSubMaterialCommand As ICommand
      Get
         If m_cmdDeleteSubMaterial Is Nothing Then
            m_cmdDeleteSubMaterial = New Command(AddressOf DeleteSubMaterial)
         End If
         Return m_cmdDeleteSubMaterial
      End Get
   End Property

   Public Sub DeleteSubMaterial(ByVal param As Object)
      If Not IsNothing(SelMaterial.SelSubMaterial) Then
         SelMaterial.SubMaterialList.Remove(SelMaterial.SelSubMaterial)
         SelMaterial.NotifyPropertyChanged(NameOf(SubMaterialList))
      End If
   End Sub

#End Region ' DeleteSubMaterial

#Region "NewWjParamCommand"

   Public ReadOnly Property NewWjParamCommand As ICommand
      Get
         If m_cmdNewWjParam Is Nothing Then
            m_cmdNewWjParam = New Command(AddressOf NewWjParam)
         End If
         Return m_cmdNewWjParam
      End Get
   End Property

   Public Sub NewWjParam(ByVal param As Object)
      If Not IsNothing(SelMaterial.SelSubMaterial) Then
         Dim nId As Integer = 0
         If IsNothing(SelMaterial.SelSubMaterial.ParamList) Then
            nId = 1
            SelMaterial.SelSubMaterial.ParamList = New ObservableCollection(Of WjParam)
         Else
            nId = SelMaterial.SelSubMaterial.ParamList.Count + 1
         End If
         SelMaterial.SelSubMaterial.ParamList.Add(New WjParam(nId, 0, 0, 0, 0, 0, 0, 0, m_refWaterPageV))
         SelMaterial.SelSubMaterial.NotifyPropertyChanged(NameOf(ParamList))
      End If
   End Sub

#End Region ' NewWjParam

#Region "DeleteWjParamCommand"

   Public ReadOnly Property DeleteWjParamCommand As ICommand
      Get
         If m_cmdDeleteWjParam Is Nothing Then
            m_cmdDeleteWjParam = New Command(AddressOf DeleteWjParam)
         End If
         Return m_cmdDeleteWjParam
      End Get
   End Property

   Public Sub DeleteWjParam(ByVal param As Object)
      If Not IsNothing(SelMaterial.SelSubMaterial.SelWjParam) Then
         SelMaterial.SelSubMaterial.ParamList.Remove(SelMaterial.SelSubMaterial.SelWjParam)
         SelMaterial.SelSubMaterial.NotifyPropertyChanged(NameOf(ParamList))
      End If
   End Sub

#End Region ' DeleteWjParam

#Region "DoneCommand"

   Public ReadOnly Property DoneCommand As ICommand
      Get
         If m_cmdDone Is Nothing Then
            m_cmdDone = New Command(AddressOf Done)
         End If
         Return m_cmdDone
      End Get
   End Property

   Public Sub Done(ByVal param As Object)
      If NewMaterial_Visibility = Visibility.Visible Then
         MaterialList.Add(New WjMaterial(sNewMaterial))
         NotifyPropertyChanged(NameOf(MaterialList))
         NewMaterial_Visibility = Visibility.Collapsed
      ElseIf NewSubMaterial_Visibility = Visibility.Visible Then
         SelMaterial.SubMaterialList.Add(New WjSubMaterial(sNewSubMaterial))
         NotifyPropertyChanged(NameOf(SubMaterialList))
         NewSubMaterial_Visibility = Visibility.Collapsed
      End If
   End Sub

#End Region ' Done

#End Region    ' Commands

End Class

Public Class WjMaterial
   Inherits VMBase

   Private m_Name As String
   Public Property Name As String
      Get
         Return m_Name
      End Get
      Set(value As String)
         m_Name = value
      End Set
   End Property

   Private m_SubMaterialList As ObservableCollection(Of WjSubMaterial)
   Public Property SubMaterialList As ObservableCollection(Of WjSubMaterial)
      Get
         Return m_SubMaterialList
      End Get
      Set(value As ObservableCollection(Of WjSubMaterial))
         m_SubMaterialList = value
      End Set
   End Property

   Private Property m_SelSubMaterial As WjSubMaterial
   Public Property SelSubMaterial As WjSubMaterial
      Get
         Return m_SelSubMaterial
      End Get
      Set(value As WjSubMaterial)
         m_SelSubMaterial = value
      End Set
   End Property

   Sub New(sName As String, SubMatList As ObservableCollection(Of WjSubMaterial))
      m_Name = sName
      m_SubMaterialList = SubMatList
   End Sub

   Sub New(sName As String)
      m_Name = sName
   End Sub

End Class

Public Class WjSubMaterial
   Inherits VMBase

   Private m_Name As String
   Public Property Name As String
      Get
         Return m_Name
      End Get
      Set(value As String)
         m_Name = value
      End Set
   End Property

   Private m_ParamList As ObservableCollection(Of WjParam)
   Public Property ParamList As ObservableCollection(Of WjParam)
      Get
         Return m_ParamList
      End Get
      Set(value As ObservableCollection(Of WjParam))
         m_ParamList = value
      End Set
   End Property

   Private Property m_SelWjParam As WjParam
   Public Property SelWjParam As WjParam
      Get
         Return m_SelWjParam
      End Get
      Set(value As WjParam)
         m_SelWjParam = value
      End Set
   End Property

   Sub New(sName As String, ParamList As ObservableCollection(Of WjParam))
      m_Name = sName
      m_ParamList = ParamList
   End Sub

   Sub New(sName As String)
      m_Name = sName
   End Sub

End Class

Public Class WjParam

   Private m_Id As Integer
   Public Property Id As Integer
      Get
         Return m_Id
      End Get
      Set(value As Integer)
         m_Id = value
      End Set
   End Property

   Private m_Thickness As Double
   Public Property Thickness As Double
      Get
         Return m_Thickness
      End Get
      Set(value As Double)
         m_Thickness = value
      End Set
   End Property

   Private m_Q1 As Double
   Public Property Q1 As Double
      Get
         Return m_Q1
      End Get
      Set(value As Double)
         m_Q1 = value
      End Set
   End Property

   Private m_Q2 As Double
   Public Property Q2 As Double
      Get
         Return m_Q2
      End Get
      Set(value As Double)
         m_Q2 = value
      End Set
   End Property

   Private m_Q3 As Double
   Public Property Q3 As Double
      Get
         Return m_Q3
      End Get
      Set(value As Double)
         m_Q3 = value
      End Set
   End Property

   Private m_Q4 As Double
   Public Property Q4 As Double
      Get
         Return m_Q4
      End Get
      Set(value As Double)
         m_Q4 = value
      End Set
   End Property

   Private m_Q5 As Double
   Public Property Q5 As Double
      Get
         Return m_Q5
      End Get
      Set(value As Double)
         m_Q5 = value
      End Set
   End Property

   Private m_QExtra As Double
   Public Property QExtra As Double
      Get
         Return m_QExtra
      End Get
      Set(value As Double)
         m_QExtra = value
      End Set
   End Property

   Public ReadOnly Property ParamLstBx_Width As Double
      Get
         Return m_refWaterPageV.ParamsGpBx.ActualWidth - 20
      End Get
   End Property

   Private m_refWaterPageV As WaterJetPageUC

   Sub New(nId As Integer, dThickness As Double, dQ1 As Double, dQ2 As Double, dQ3 As Double, dQ4 As Double, dQ5 As Double, dQExtra As Double, ByRef refWJPage As WaterJetPageUC)
      m_Id = nId
      m_Thickness = dThickness
      m_Q1 = dQ1
      m_Q2 = dQ2
      m_Q3 = dQ3
      m_Q4 = dQ4
      m_Q5 = dQ5
      m_QExtra = dQExtra
      m_refWaterPageV = refWJPage
   End Sub

End Class
