diff --git a/HardwarePart/HardwarePartV.xaml b/HardwarePart/HardwarePartV.xaml
new file mode 100644
index 0000000..df49c40
--- /dev/null
+++ b/HardwarePart/HardwarePartV.xaml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/HardwarePart/HardwarePartV.xaml.vb b/HardwarePart/HardwarePartV.xaml.vb
new file mode 100644
index 0000000..33de47e
--- /dev/null
+++ b/HardwarePart/HardwarePartV.xaml.vb
@@ -0,0 +1,12 @@
+Public Class HardwarePartV
+ Private m_HardwarePartVM As HardwarePartVM
+
+ Sub New(Owner As Window, HardwarePart As HardwarePartVM)
+ MyBase.New(Owner)
+ ' This call is required by the designer.
+ InitializeComponent()
+ ' Add any initialization after the InitializeComponent() call.
+ Me.DataContext = HardwarePart
+ m_HardwarePartVM = HardwarePart
+ End Sub
+End Class
diff --git a/HardwarePart/HardwarePartVM.vb b/HardwarePart/HardwarePartVM.vb
new file mode 100644
index 0000000..e96ecfd
--- /dev/null
+++ b/HardwarePart/HardwarePartVM.vb
@@ -0,0 +1,302 @@
+Imports System.Collections.ObjectModel
+Imports System.IO
+Imports EgtUILib
+Imports EgtWPFLib5
+
+Public Class HardwarePartVM
+ Inherits VMBase
+
+ Dim m_HardwareTemp As Hardware
+
+#Region "MESSAGES"
+
+ Public ReadOnly Property Title As String
+ Get
+ Return "Part Dimension"
+ End Get
+ End Property
+ Public ReadOnly Property HeightMsg As String
+ Get
+ Return EgtMsg(50002)
+ End Get
+ End Property
+ Public ReadOnly Property WidthMsg As String
+ Get
+ Return EgtMsg(50001)
+ End Get
+ End Property
+ Public ReadOnly Property ThicknessMsg As String
+ Get
+ Return EgtMsg(50003)
+ End Get
+ End Property
+ Public ReadOnly Property SwingMsg As String
+ Get
+ Return EgtMsg(50004)
+ End Get
+ End Property
+
+ Public ReadOnly Property LockedgeMsg As String
+ Get
+ Return EgtMsg(50005)
+ End Get
+ End Property
+ Public ReadOnly Property HingeedgeMsg As String
+ Get
+ Return EgtMsg(50006)
+ End Get
+ End Property
+ Public ReadOnly Property TopedgeMsg As String
+ Get
+ Return EgtMsg(50007)
+ End Get
+ End Property
+ Public ReadOnly Property BottomedgeMsg As String
+ Get
+ Return EgtMsg(50008)
+ End Get
+ End Property
+
+ Public ReadOnly Property CloseMsg As String
+ Get
+ Return "Close"
+ End Get
+ End Property
+
+#End Region ' Messages
+
+#Region "Property"
+
+ Private m_Height As String
+ Public Property Height As String
+ Get
+ Return m_Height
+ End Get
+ Set(value As String)
+ m_Height = value
+ End Set
+ End Property
+
+ Private m_Width As String
+ Public Property Width As String
+ Get
+ Return m_Width
+ End Get
+ Set(value As String)
+ m_Width = value
+ End Set
+ End Property
+
+ Private m_Thickness As String
+ Public Property Thickness As String
+ Get
+ Return m_Thickness
+ End Get
+ Set(value As String)
+ m_Thickness = value
+ End Set
+ End Property
+
+ Private m_SwingList As List(Of String)
+ Public Property SwingList As List(Of String)
+ Get
+ Return m_SwingList
+ End Get
+ Set(value As List(Of String))
+ m_SwingList = value
+ End Set
+ End Property
+
+ Private m_SelectedItem As String
+ Public Property SelectedItem As String
+ Get
+ Return m_SelectedItem
+ End Get
+ Set(value As String)
+ m_SelectedItem = value
+ End Set
+ End Property
+
+ Private m_LockEdgeProfile As ObservableCollection(Of EdgeType)
+ Public Property LockEdgeProfile As ObservableCollection(Of EdgeType)
+ Get
+ Return m_LockEdgeProfile
+ End Get
+ Set(value As ObservableCollection(Of EdgeType))
+ m_LockEdgeProfile = value
+ End Set
+ End Property
+ Private m_SelectedLockEdgeProfile As EdgeType
+ Public Property SelectedLockEdgeProfile As EdgeType
+ Get
+ Return m_SelectedLockEdgeProfile
+ End Get
+ Set(value As EdgeType)
+ m_SelectedLockEdgeProfile = value
+ End Set
+ End Property
+
+ Private m_HingeEdgeProfile As ObservableCollection(Of EdgeType)
+ Public Property HingeEdgeProfile As ObservableCollection(Of EdgeType)
+ Get
+ Return m_HingeEdgeProfile
+ End Get
+ Set(value As ObservableCollection(Of EdgeType))
+ m_HingeEdgeProfile = value
+ End Set
+ End Property
+ Private m_SelectedHingeEdgeProfile As EdgeType
+ Public Property SelectedHingeEdgeProfile As EdgeType
+ Get
+ Return m_SelectedHingeEdgeProfile
+ End Get
+ Set(value As EdgeType)
+ m_SelectedHingeEdgeProfile = value
+ End Set
+ End Property
+
+ Private m_TopEdgeProfile As ObservableCollection(Of EdgeType)
+ Public Property TopEdgeProfile As ObservableCollection(Of EdgeType)
+ Get
+ Return m_TopEdgeProfile
+ End Get
+ Set(value As ObservableCollection(Of EdgeType))
+ m_TopEdgeProfile = value
+ End Set
+ End Property
+ Private m_SelectedTopEdgeProfile As EdgeType
+ Public Property SelectedTopEdgeProfile As EdgeType
+ Get
+ Return m_SelectedTopEdgeProfile
+ End Get
+ Set(value As EdgeType)
+ m_SelectedTopEdgeProfile = value
+ End Set
+ End Property
+
+ Private m_BottomEdgeProfile As ObservableCollection(Of EdgeType)
+ Public Property BottomEdgeProfile As ObservableCollection(Of EdgeType)
+ Get
+ Return m_BottomEdgeProfile
+ End Get
+ Set(value As ObservableCollection(Of EdgeType))
+ m_BottomEdgeProfile = value
+ End Set
+ End Property
+ Private m_SelectedBottomEdgeProfile As EdgeType
+ Public Property SelectedBottomEdgeProfile As EdgeType
+ Get
+ Return m_SelectedBottomEdgeProfile
+ End Get
+ Set(value As EdgeType)
+ m_SelectedBottomEdgeProfile = value
+ End Set
+ End Property
+
+#End Region ' Property
+
+ Private m_CmdApply As ICommand
+ Private m_cmdClose As ICommand
+
+#Region "APPLY"
+
+ Public ReadOnly Property ApplyCommand As ICommand
+ Get
+ If m_CmdApply Is Nothing Then
+ m_CmdApply = New Command(AddressOf Apply)
+ End If
+ Return m_CmdApply
+ End Get
+ End Property
+
+ Public Sub Apply()
+ If Not IsNothing(Map.refHardwarePageVM) AndAlso
+ Not IsNothing(Map.refHardwarePageVM.GenericPart) Then
+ Map.refHardwarePageVM.GenericPart.Height = m_Height
+ Map.refHardwarePageVM.GenericPart.Width = m_Width
+ Map.refHardwarePageVM.GenericPart.Thickness = m_Thickness
+ Map.refHardwarePageVM.GenericPart.SwingTypeList = m_SwingList
+ Map.refHardwarePageVM.GenericPart.Swing = m_SelectedItem
+ Map.refHardwarePageVM.GenericPart.LockEdgeType = m_SelectedLockEdgeProfile
+ Map.refHardwarePageVM.GenericPart.HingeEdgeType = m_SelectedHingeEdgeProfile
+ Map.refHardwarePageVM.GenericPart.TopType = m_SelectedTopEdgeProfile
+ Map.refHardwarePageVM.GenericPart.BottomType = m_SelectedBottomEdgeProfile
+ Map.refHardwarePageVM.GenericPart.NotifyPropertyChanged("GenericPart")
+ End If
+ End Sub
+
+#End Region ' Apply
+
+#Region "CloseWnd"
+
+ Public ReadOnly Property CloseCommand() As ICommand
+ Get
+ If m_cmdClose Is Nothing Then
+ m_cmdClose = New Command(AddressOf Close)
+ End If
+ Return m_cmdClose
+ End Get
+ End Property
+
+ Public Sub Close()
+ Apply()
+ ' Chiusura finestra
+ For Each Window In Application.Current.Windows
+ If TypeOf Window Is HardwarePartV Then
+ Dim HardwarePartWindow As HardwarePartV = DirectCast(Window, HardwarePartV)
+ HardwarePartWindow.Close()
+ End If
+ Next
+ End Sub
+
+#End Region
+
+ Public Sub New()
+ If Not IsNothing(Map.refHardwarePageVM) AndAlso
+ Not IsNothing(Map.refHardwarePageVM.GenericPart) Then
+ m_Height = Map.refHardwarePageVM.GenericPart.Height
+ m_Width = Map.refHardwarePageVM.GenericPart.Width
+ m_Thickness = Map.refHardwarePageVM.GenericPart.Thickness
+ m_SwingList = OptionModule.m_SwingTypeList
+ For Each Item In m_SwingList
+ If Trim(Item) = Trim(Map.refHardwarePageVM.GenericPart.Swing) Then
+ m_SelectedItem = Item
+ Exit For
+ End If
+ Next
+ m_LockEdgeProfile = Map.refHardwarePageVM.GenericPart.LockEdgeTypeList
+ m_HingeEdgeProfile = Map.refHardwarePageVM.GenericPart.HingeEdgeTypeList
+ m_TopEdgeProfile = Map.refHardwarePageVM.GenericPart.TopEdgeTypeList
+ m_BottomEdgeProfile = Map.refHardwarePageVM.GenericPart.BottomEdgeTypeList
+ For Index = 0 To m_LockEdgeProfile.Count - 1
+ If Trim(m_LockEdgeProfile(Index).Name) = Trim(Map.refHardwarePageVM.GenericPart.LockEdgeType.Name) Then
+ SelectedLockEdgeProfile = (m_LockEdgeProfile(Index))
+ Exit For
+ End If
+ Next
+ For Index = 0 To m_HingeEdgeProfile.Count - 1
+ If Trim(m_LockEdgeProfile(Index).Name) = Trim(Map.refHardwarePageVM.GenericPart.HingeEdgeType.Name) Then
+ SelectedHingeEdgeProfile = (m_HingeEdgeProfile(Index))
+ Exit For
+ End If
+ Next
+ For Index = 0 To m_TopEdgeProfile.Count - 1
+ If Trim(m_LockEdgeProfile(Index).Name) = Trim(Map.refHardwarePageVM.GenericPart.TopType.Name) Then
+ SelectedTopEdgeProfile = (m_TopEdgeProfile(Index))
+ Exit For
+ End If
+ Next
+ For Index = 0 To m_BottomEdgeProfile.Count - 1
+ If Trim(m_BottomEdgeProfile(Index).Name) = Trim(Map.refHardwarePageVM.GenericPart.BottomType.Name) Then
+ SelectedBottomEdgeProfile = (m_BottomEdgeProfile(Index))
+ Exit For
+ End If
+ Next
+ Else
+ MessageBox.Show("The current part has not been generated correctly.", EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
+ Close()
+ End If
+
+ End Sub
+
+End Class
diff --git a/OperationExpanderV.xaml b/OperationExpanderV.xaml
new file mode 100644
index 0000000..bbce4ca
--- /dev/null
+++ b/OperationExpanderV.xaml
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Resources/TopCommandBar/Create Assembly.png b/Resources/TopCommandBar/Create Assembly.png
new file mode 100644
index 0000000..655582f
Binary files /dev/null and b/Resources/TopCommandBar/Create Assembly.png differ
diff --git a/Resources/TopCommandBar/HPart.png b/Resources/TopCommandBar/HPart.png
new file mode 100644
index 0000000..094b9f8
Binary files /dev/null and b/Resources/TopCommandBar/HPart.png differ
diff --git a/Resources/TopCommandBar/IsModify.png b/Resources/TopCommandBar/IsModify.png
new file mode 100644
index 0000000..74c51cf
Binary files /dev/null and b/Resources/TopCommandBar/IsModify.png differ