From 85fdfb1065d03fbe594b54f917610e353dc12080 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Tue, 7 Feb 2017 15:26:07 +0000 Subject: [PATCH] EgtCAM5 : - Migliorato Db Utensili. - Migliorato SetUp. - Migliorato Db Lavorazioni. --- Application.xaml.vb | 4 - Constants/ConstMachIni.vb | 2 + MachiningsDbWindow/MachiningTreeView.vb | 16 +- MachiningsDbWindow/MachiningsDbView.xaml | 13 - MachiningsDbWindow/MachiningsDbViewModel.vb | 15 +- My Project/AssemblyInfo.vb | 4 +- ProjectPage/DbPanel/DbPanelViewModel.vb | 2 +- .../MachiningParameterExpanderViewModel.vb | 14 +- SetUpWindow/SetUpViewModel.vb | 3 +- ToolsDbWindow/ToolTreeView.vb | 1031 ++++++++++++----- ToolsDbWindow/ToolsDbView.xaml | 174 +-- ToolsDbWindow/ToolsDbViewModel.vb | 187 +-- 12 files changed, 944 insertions(+), 521 deletions(-) diff --git a/Application.xaml.vb b/Application.xaml.vb index ea74b1e..bd3067b 100644 --- a/Application.xaml.vb +++ b/Application.xaml.vb @@ -195,10 +195,6 @@ Class Application ' ToolsDbPage messages Friend Const REMOVETOOL As String = "RemoveTool" - Friend Const ERRORONTOOL As String = "ErrorOnTool" - - ' MachiningsDbPage messages - Friend Const ERRORONMACHINING As String = "ErrorOnMachining" ' TopCommandBar Friend Const NEWPROJECT As String = "NewProject" diff --git a/Constants/ConstMachIni.vb b/Constants/ConstMachIni.vb index 376716f..d37201c 100644 --- a/Constants/ConstMachIni.vb +++ b/Constants/ConstMachIni.vb @@ -49,6 +49,8 @@ Public Const S_FIXTURES As String = "Fixtures" + Public Const S_HEADS As String = "Heads" + Public Const S_SETUP As String = "SetUp" Public Const K_DEFAULT As String = "Default" diff --git a/MachiningsDbWindow/MachiningTreeView.vb b/MachiningsDbWindow/MachiningTreeView.vb index 9d92c5a..d5efaac 100644 --- a/MachiningsDbWindow/MachiningTreeView.vb +++ b/MachiningsDbWindow/MachiningTreeView.vb @@ -1685,6 +1685,10 @@ Public Class MachiningTreeViewItem EgtMdbGetCurrMachiningParam(MCH_MP.USERNOTES, UserNotes) End Sub + Friend Sub ReadMachiningName() + EgtMdbGetCurrMachiningParam(MCH_MP.NAME, NamePar) + End Sub + Private Sub ReadSelectedTool() ReadTool = True Dim sValue As String = String.Empty @@ -1849,13 +1853,23 @@ Public Class MachiningTreeViewItem Return bOk End Function + Private Function GetErrorString(propertyName As String) As String + Select Case propertyName + Case "NamePar" + Return m_NameError + Case "Speed" + Return m_SpeedError + End Select + Return String.Empty + End Function + ''' ''' Returns true if this object has no validation errors. ''' Public ReadOnly Property IsValid() As Boolean Get For Each [property] As String In ValidatedProperties - If Not GetValidationError([property]) Then + If Not String.IsNullOrEmpty(GetErrorString([property])) Then Return False End If Next [property] diff --git a/MachiningsDbWindow/MachiningsDbView.xaml b/MachiningsDbWindow/MachiningsDbView.xaml index 1a5ce09..6efade0 100644 --- a/MachiningsDbWindow/MachiningsDbView.xaml +++ b/MachiningsDbWindow/MachiningsDbView.xaml @@ -154,19 +154,6 @@ - - diff --git a/MachiningsDbWindow/MachiningsDbViewModel.vb b/MachiningsDbWindow/MachiningsDbViewModel.vb index 653c3d8..019b64c 100644 --- a/MachiningsDbWindow/MachiningsDbViewModel.vb +++ b/MachiningsDbWindow/MachiningsDbViewModel.vb @@ -376,6 +376,8 @@ Namespace EgtCAM5 #End Region ' Constructor +#Region "METHODS" + Private Sub IsEnabledBtns(bIsEnabledNewBtn As Boolean, bIsEnabledSaveBtn As Boolean, bIsEnabledDeleteBtn As Boolean) m_IsEnabledNewBtn = bIsEnabledNewBtn m_IsEnabledSaveBtn = bIsEnabledSaveBtn @@ -392,7 +394,6 @@ Namespace EgtCAM5 Next End Sub - ''' ''' Method that search the machines in the correct folder and add to the MachinesList those valid. ''' @@ -416,6 +417,9 @@ Namespace EgtCAM5 End If End Sub +#End Region ' Methods + +#Region "COMMANDS" #Region "NewCommand" @@ -464,7 +468,7 @@ Namespace EgtCAM5 MachiningFamily.Items.Add(NewMachiningItem) EgtMdbSaveCurrMachining() NewMachiningItem.NewMachining = True - ' Reimposto ll lavorazione vecchia nel Db per deselezionarla e fare le verifiche correttamente + ' Reimposto la lavorazione vecchia nel Db per deselezionarla e fare le verifiche correttamente EgtMdbSetCurrMachining(MachiningCopied.Name) MachiningCopied.IsSelected = False MachiningCopied.NotifyPropertyChanged("IsSelected") @@ -504,8 +508,7 @@ Namespace EgtCAM5 EgtMdbSaveCurrMachining() CurrMachining.NewMachining = False CurrMachining.IsModifiedReset() - m_IsEnabledSaveBtn = False - OnPropertyChanged("IsEnabledSaveBtn") + IsEnabledBtns(CurrMachining.IsValid And Not CurrMachining.IsModified, False, True) End Sub #End Region ' SaveCommand @@ -580,6 +583,7 @@ Namespace EgtCAM5 Dim MachiningToReload As MachiningTreeViewItem = DirectCast(param, MachiningTreeViewItem) EgtSetCurrentContext(IniFile.m_ProjectSceneContext) MachiningToReload.ReadMachiningParam() + MachiningToReload.ReadMachiningName() MachiningToReload.IsModifiedReset() End If End Sub @@ -628,6 +632,7 @@ Namespace EgtCAM5 End Select End If Else + MessageBox.Show("Utensile non valido, correggerlo o cancellarlo prima di uscire.", "ERRORE") Return End If End If @@ -650,6 +655,8 @@ Namespace EgtCAM5 #End Region ' CloseMachiningDbCommand +#End Region ' Commands + End Class End Namespace \ No newline at end of file diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb index 90ebcb9..4a8eef9 100644 --- a/My Project/AssemblyInfo.vb +++ b/My Project/AssemblyInfo.vb @@ -70,5 +70,5 @@ Imports System.Windows ' by using the '*' as shown below: ' - - + + diff --git a/ProjectPage/DbPanel/DbPanelViewModel.vb b/ProjectPage/DbPanel/DbPanelViewModel.vb index 9c0ae01..5e1ae88 100644 --- a/ProjectPage/DbPanel/DbPanelViewModel.vb +++ b/ProjectPage/DbPanel/DbPanelViewModel.vb @@ -65,7 +65,7 @@ Namespace EgtCAM5 ''' Public Sub ToolDb(ByVal param As Object) Dim ToolDbWindow As New ToolsDbView - ToolDbWindow.Height = 614 + ToolDbWindow.Height = 640 ToolDbWindow.Width = 1024 ToolDbWindow.DataContext = New ToolsDbViewModel ToolDbWindow.Owner = Application.Current.MainWindow diff --git a/ProjectPage/OptionPanel/MachiningOptionPanel/OperationExpander/MachiningParameterExpander/MachiningParameterExpanderViewModel.vb b/ProjectPage/OptionPanel/MachiningOptionPanel/OperationExpander/MachiningParameterExpander/MachiningParameterExpanderViewModel.vb index 28c1b77..3c0be9e 100644 --- a/ProjectPage/OptionPanel/MachiningOptionPanel/OperationExpander/MachiningParameterExpander/MachiningParameterExpanderViewModel.vb +++ b/ProjectPage/OptionPanel/MachiningOptionPanel/OperationExpander/MachiningParameterExpander/MachiningParameterExpanderViewModel.vb @@ -2211,6 +2211,8 @@ Namespace EgtCAM5 #End Region ' Messages +#Region "METHODS" + Private Sub ReadMachiningParam() Dim nValue As Integer = 0 Dim dValue As Double = 0 @@ -2700,13 +2702,21 @@ Namespace EgtCAM5 End If End Sub +#End Region ' Commands + ' Definizione comando Private m_cmdUpdateMachining As ICommand +#Region "CONSTRUCTOR" + Sub New(ByRef m_UpdateParamValues As Action) m_UpdateParamValues = AddressOf ReadMachiningParam End Sub +#End Region ' Constructor + +#Region "COMMANDS" + #Region "UpdateMachiningCommand" ''' @@ -2751,7 +2761,7 @@ Namespace EgtCAM5 ModifiedGeometry = True EgtSetMachiningGeometry(SelectedGeometry.ToArray, SubEntityArray) End If - ' Gestione standard per curve + ' Gestione standard per curve Else ' Verifico se la geometria è cambiata, confrontando selezione attuale con geometria di lavorazione Dim CountIndex As Integer = 0 @@ -2786,6 +2796,8 @@ Namespace EgtCAM5 #End Region ' UpdateMachiningCommand +#End Region ' Commands + Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Public Sub NotifyPropertyChanged(propName As String) diff --git a/SetUpWindow/SetUpViewModel.vb b/SetUpWindow/SetUpViewModel.vb index ec33d51..abb8bdd 100644 --- a/SetUpWindow/SetUpViewModel.vb +++ b/SetUpWindow/SetUpViewModel.vb @@ -310,7 +310,6 @@ Namespace EgtCAM5 ' se ci sono almeno due elementi sono sicuro che ci sia la H If sItems.Count >= 2 Then sHead = sItems(1) - ''m_PositionGroupList(nGroup - 1).PositionList.Add(New Position(sTcPos, sHead, EgtGetHeadExitCount(sHead))) ' se ci sono almeno tre elementi sono sicuro che ci sia almeno un'uscita attrezzata If sItems.Count >= 3 Then ' separo le uscite divise dalla , @@ -663,7 +662,7 @@ Namespace EgtCAM5 OpenFileDialogView.Filter = "*.stu" OpenFileDialogView.Directory = sDir OpenFileDialogView.FileName = String.Empty - If Not OpenFileDialogView.ShowDialog Then + If Not OpenFileDialogView.EgtShowDialog Then Return End If sPath = OpenFileDialogView.FileName diff --git a/ToolsDbWindow/ToolTreeView.vb b/ToolsDbWindow/ToolTreeView.vb index 9a92705..f8f2f6d 100644 --- a/ToolsDbWindow/ToolTreeView.vb +++ b/ToolsDbWindow/ToolTreeView.vb @@ -1,11 +1,15 @@ Imports System.ComponentModel Imports System.IO +Imports System.Collections.ObjectModel Imports System.Text.RegularExpressions Imports EgtUILib Public Class FamilyToolTreeViewItem Inherits InheritableTreeViewItem + ' Actions + Friend Shared m_delIsEnabledBtns As Action(Of Boolean, Boolean, Boolean) + Public Overrides Property IsSelected As Boolean Get Return m_IsSelected @@ -21,6 +25,9 @@ Public Class FamilyToolTreeViewItem EgtZoom(ZM.ALL) EgtSetCurrentContext(IniFile.m_ProjectSceneContext) End If + If value Then + m_delIsEnabledBtns(True, False, False) + End If End If NotifyPropertyChanged("IsSelected") End If @@ -57,7 +64,11 @@ End Class Public Class ToolTreeViewItem Inherits InheritableTreeViewItem - Implements IDataErrorInfo + + ' Actions + Friend Shared m_delRemoveTool As Action(Of ToolTreeViewItem) + Friend Shared m_delErrorOnTool As Action(Of Boolean) + Friend Shared m_delIsEnabledBtns As Action(Of Boolean, Boolean, Boolean) #Region "Tool Property" @@ -65,22 +76,6 @@ Public Class ToolTreeViewItem ' (utile per evitare di rifare il disegno più volte quando vengono caricati i parametri alla selezione di un utensile) Private m_SuspendToolDrawUpdate As Boolean = False - Private m_ErrorOnTool As Boolean - Public Property ErrorOnTool As Boolean - Get - Return m_ErrorOnTool - End Get - Set(value As Boolean) - If IsValid Then - m_ErrorOnTool = False - Application.Msn.NotifyColleagues(Application.ERRORONTOOL, Nothing) - Else - m_ErrorOnTool = True - Application.Msn.NotifyColleagues(Application.ERRORONTOOL, Me) - End If - End Set - End Property - ' Variabile che indica se l'utensile è appena stato creato Dim m_NewTool As Boolean = False Public Property NewTool As Boolean @@ -108,6 +103,7 @@ Public Class ToolTreeViewItem ReadToolParam() IsModifiedReset() NotifyPropertyChanged("Type") + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) Else WriteToolParam() If EgtTdbIsCurrToolModified() Or m_IsModifiedName Or Me.NewTool Then @@ -120,10 +116,9 @@ Public Class ToolTreeViewItem SaveToolDraw() End If EgtTdbSaveCurrTool() - EgtTdbSave() Case MsgBoxResult.No If m_NewTool Then - Application.Msn.NotifyColleagues(Application.REMOVETOOL, Me) + m_delRemoveTool(Me) ElseIf m_IsModifiedName Then Dim DbName As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) @@ -156,33 +151,48 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.CORR, DbCorr) Int32.TryParse(value, nValue) m_IsModifiedCorr = If(nValue <> DbCorr, True, False) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("Corr") End If End Set End Property - Private m_IsModifiedExit As Boolean = False - Private m_Exit As String + Friend m_ExitList As New ObservableCollection(Of String) + Public ReadOnly Property ExitList As ObservableCollection(Of String) + Get + Return m_ExitList + End Get + End Property + + Private m_IsModifiedSelectedExit As Boolean = False + Private m_SelectedExit As String ''' ''' Property that read and write to the tool's database the Exit ''' - Public Property ExitPar As String + Public Property SelectedExit As String Get - Return m_Exit + Return m_SelectedExit End Get Set(value As String) - If value <> m_Exit Then - m_Exit = value + If value <> m_SelectedExit Then + m_SelectedExit = value Dim DbExit As Integer = 0 Dim nValue As Integer = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.EXIT_, DbExit) Int32.TryParse(value, nValue) - m_IsModifiedExit = If(nValue <> DbExit, True, False) - If Not m_SuspendToolDrawUpdate Then - UpdateSceneToolDraw(DrawUpdateSource.EXIT_) + m_IsModifiedSelectedExit = If(nValue <> DbExit, True, False) + If Not GetValidationError("SelectedExit") Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) End If - NotifyPropertyChanged("ExitPar") + If Not m_SuspendToolDrawUpdate Then + UpdateSceneToolDraw() + End If + NotifyPropertyChanged("SelectedExit") End If End Set End Property @@ -220,6 +230,7 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.COOLANT, DbCoolant) Int32.TryParse(value, nValue) m_IsModifiedCoolant = If(nValue <> DbCoolant, True, False) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("Coolant") End If End Set @@ -243,6 +254,7 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.CORNRAD, DbCornRad) StringToLen(value, dValue) m_IsModifiedCornRad = Math.Abs(dValue - DbCornRad) > 10 * EPS_ANG_SMALL + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("CornRad") End If End Set @@ -266,8 +278,15 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.DIAM, DbDiam) StringToLen(value, dValue) m_IsModifiedDiam = Math.Abs(dValue - DbDiam) > 10 * EPS_ANG_SMALL + If Not GetValidationError("Diam") Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) + End If If Not m_SuspendToolDrawUpdate Then - UpdateSceneToolDraw(DrawUpdateSource.DIAM) + UpdateSceneToolDraw() End If NotifyPropertyChanged("Diam") End If @@ -292,6 +311,13 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.TOTDIAM, DbTotDiam) StringToLen(value, dValue) m_IsModifiedTotDiam = Math.Abs(dValue - DbTotDiam) > 10 * EPS_SMALL + If Not GetValidationError("Diam") Or GetValidationError("TotDiam") Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) + End If NotifyPropertyChanged("TotDiam") End If End Set @@ -315,6 +341,7 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.FEED, DbFeed) StringToLen(value, dValue) m_IsModifiedFeed = Math.Abs(dValue - DbFeed) > 10 * EPS_SMALL + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("Feed") End If End Set @@ -338,6 +365,7 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.ENDFEED, DbEndFeed) StringToLen(value, dValue) m_IsModifiedEndFeed = Math.Abs(dValue - DbEndFeed) > 10 * EPS_SMALL + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("EndFeed") End If End Set @@ -361,6 +389,7 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.STARTFEED, DbStartFeed) StringToLen(value, dValue) m_IsModifiedStartFeed = Math.Abs(dValue - DbStartFeed) > 10 * EPS_SMALL + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("StartFeed") End If End Set @@ -384,6 +413,7 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.TIPFEED, DbTipFeed) StringToLen(value, dValue) m_IsModifiedTipFeed = Math.Abs(dValue - DbTipFeed) > 10 * EPS_SMALL + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("TipFeed") ' Se fresa e 0 non può lavorare di testa If (Type And MCH_TF.MILL) <> 0 Then @@ -416,7 +446,14 @@ Public Class ToolTreeViewItem StringToLen(value, dValue) m_IsModifiedLen = Math.Abs(dValue - DbLen) > 10 * EPS_SMALL If Not m_SuspendToolDrawUpdate Then - UpdateSceneToolDraw(DrawUpdateSource.LEN) + UpdateSceneToolDraw() + End If + If Not GetValidationError("Len") Or Not GetValidationError("MaxMat") Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) End If NotifyPropertyChanged("Len") ' Se lama @@ -455,7 +492,14 @@ Public Class ToolTreeViewItem StringToLen(value, dValue) m_IsModifiedTotLen = Math.Abs(dValue - DbTotLen) > 10 * EPS_SMALL If Not m_SuspendToolDrawUpdate Then - UpdateSceneToolDraw(DrawUpdateSource.TOTLEN) + UpdateSceneToolDraw() + End If + If Not GetValidationError("TotLen") Or Not GetValidationError("Len") Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) End If NotifyPropertyChanged("TotLen") ' Se lama e len e totlen coincidono tipo piatto @@ -493,7 +537,14 @@ Public Class ToolTreeViewItem StringToLen(value, dValue) m_IsModifiedMaxMat = Math.Abs(dValue - DbMaxMat) > 10 * EPS_SMALL If Not m_SuspendToolDrawUpdate Then - UpdateSceneToolDraw(DrawUpdateSource.MAXMAT) + UpdateSceneToolDraw() + End If + If Not GetValidationError("MaxMat") Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) End If NotifyPropertyChanged("MaxMat") End If @@ -518,6 +569,7 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.LONOFFSET, DbLonOffset) StringToLen(value, dValue) m_IsModifiedLonOffset = Math.Abs(dValue - DbLonOffset) > 10 * EPS_SMALL + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("LonOffset") End If End Set @@ -541,6 +593,7 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.RADOFFSET, DbRadOffset) StringToLen(value, dValue) m_IsModifiedRadOffset = Math.Abs(dValue - DbRadOffset) > 10 * EPS_SMALL + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("RadOffset") End If End Set @@ -564,8 +617,14 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.SPEED, DbSpeed) StringToDouble(value, dValue) m_IsModifiedSpeed = Math.Abs(dValue - DbSpeed) > 10 * EPS_ANG_SMALL + If Not GetValidationError("Speed") Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) + End If NotifyPropertyChanged("Speed") - NotifyPropertyChanged("MaxSpeed") End If End Set End Property @@ -588,6 +647,7 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.SIDEANG, DbSideAng) StringToLen(value, dValue) m_IsModifiedSideAng = Math.Abs(dValue - DbSideAng) > 10 * EPS_ANG_SMALL + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("SideAng") End If End Set @@ -611,7 +671,13 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.MAXSPEED, DbMaxSpeed) StringToLen(value, dValue) m_IsModifiedMaxSpeed = Math.Abs(dValue - DbMaxSpeed) > 10 * EPS_ANG_SMALL - NotifyPropertyChanged("Speed") + If Not GetValidationError("Speed") Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) + End If NotifyPropertyChanged("MaxSpeed") End If End Set @@ -636,7 +702,14 @@ Public Class ToolTreeViewItem StringToLen(value, dValue) m_IsModifiedThick = Math.Abs(dValue - DbThick) > 10 * EPS_SMALL If Not m_SuspendToolDrawUpdate Then - UpdateSceneToolDraw(DrawUpdateSource.THICK) + UpdateSceneToolDraw() + End If + If Not GetValidationError("Thick") Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) End If NotifyPropertyChanged("Thick") End If @@ -661,6 +734,7 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.MAXABSORPTION, DbMaxAbsorption) StringToLen(value, dValue) m_IsModifiedMaxAbsorption = Math.Abs(dValue - DbMaxAbsorption) > 10 * EPS_SMALL + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("MaxAbsorption") End If End Set @@ -684,6 +758,7 @@ Public Class ToolTreeViewItem EgtTdbGetCurrToolParam(MCH_TP.MINFEED, DbMinFeed) StringToLen(value, dValue) m_IsModifiedMinFeed = Math.Abs(dValue - DbMinFeed) > 10 * EPS_SMALL + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("MinFeed") End If End Set @@ -701,51 +776,95 @@ Public Class ToolTreeViewItem Set(value As String) If value = String.Empty Or value <> m_Draw Then EgtSetCurrentContext(IniFile.m_ProjectSceneContext) - If value = ToolDrawUUIDName Then - value = m_Draw - ElseIf value = ToolDrawUUIDName.Substring(0, ToolDrawUUIDName.Length - 1) Then - value = String.Empty - End If m_Draw = value Dim DbDraw As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.DRAW, DbDraw) m_IsModifiedDraw = If(value <> DbDraw, True, False) - If Not m_SuspendToolDrawUpdate Then - UpdateSceneToolDraw(DrawUpdateSource.DRAW) - End If NotifyPropertyChanged("Draw") End If End Set End Property - Friend Shared m_HeadList As New List(Of String) - Public ReadOnly Property HeadList As List(Of String) + Friend Shared m_HeadList As New List(Of HeadItem) + Public ReadOnly Property HeadList As List(Of HeadItem) Get Return m_HeadList End Get End Property Private m_IsModifiedSelectedHead As Boolean = False - Private m_SelectedHead As String + Private m_SelectedHead As HeadItem ''' ''' Property that read and write to the tool's database the Head ''' - Public Property SelectedHead As String + Public Property SelectedHead As HeadItem Get Return m_SelectedHead End Get - Set(value As String) - If value = String.Empty Or value <> m_SelectedHead Then + Set(value As HeadItem) + If value IsNot m_SelectedHead Then m_SelectedHead = value Dim DbHead As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.HEAD, DbHead) - m_IsModifiedSelectedHead = If(value <> DbHead, True, False) + m_IsModifiedSelectedHead = If(value.HName <> DbHead, True, False) If Not m_SuspendToolDrawUpdate Then - UpdateSceneToolDraw(DrawUpdateSource.HEAD) + UpdateSceneToolDraw() + End If + If Not GetValidationError("SelectedHead") Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) End If NotifyPropertyChanged("SelectedHead") + ' verifico se le uscite sono cambiate + EgtSetCurrentContext(IniFile.m_ProjectSceneContext) + Dim nExitNum As Integer = EgtGetHeadExitCount(m_SelectedHead.HName) + ' ricalcolo la lista uscite + If nExitNum > m_ExitList.Count Then + For ExitIndex = m_ExitList.Count To nExitNum - 1 + m_ExitList.Add((ExitIndex + 1).ToString) + Next + ElseIf nExitNum < m_ExitList.Count Then + For Index = m_ExitList.Count - 1 To nExitNum Step -1 + m_ExitList.RemoveAt(Index) + Next + End If + ' verifico se l'uscita selezionata è nella lista + If Not m_ExitList.Contains(m_SelectedExit) AndAlso m_ExitList.Count > 0 Then + SelectedExit = m_ExitList(0) + End If + ' ricalcolo la lista di posizioni valide + Dim nErr As Integer = 0 + Dim bIsValid As Boolean = False + Dim TcPosIndex As Integer = 0 + For OrigTcPosIndex = 0 To m_OrigTcPosList.Count - 1 + Dim CurrTcPos As String = m_OrigTcPosList(OrigTcPosIndex) + bIsValid = False + EgtLuaSetGlobStringVar("STU.TCPOS", CurrTcPos) + EgtLuaSetGlobStringVar("STU.HEAD", m_SelectedHead.HName) + If Not EgtLuaCallFunction("STU.IsValidTcPosFromHead") Then nErr = 999 + ' Leggo variabili + EgtLuaGetGlobBoolVar("STU.ISVALID", bIsValid) + If Not EgtLuaGetGlobIntVar("STU.ERR", nErr) Then nErr = 999 + If nErr = 0 AndAlso bIsValid Then + If m_TcPosList.Count - 1 >= TcPosIndex AndAlso m_TcPosList(TcPosIndex) = CurrTcPos Then + TcPosIndex += 1 + Else + m_TcPosList.Insert(TcPosIndex, CurrTcPos) + TcPosIndex += 1 + End If + Else + If m_TcPosList.Count - 1 >= TcPosIndex AndAlso m_TcPosList(TcPosIndex) = CurrTcPos Then + m_TcPosList.RemoveAt(TcPosIndex) + End If + End If + Next + NotifyPropertyChanged("ExitList") + NotifyPropertyChanged("TcPosList") End If End Set End Property @@ -785,6 +904,13 @@ Public Class ToolTreeViewItem If m_IsModifiedName And Not value = sTempName Then nErrorToolName = 1 End If + If Not GetValidationError("NamePar") Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) + End If NotifyPropertyChanged("NamePar") End If End Set @@ -801,18 +927,26 @@ Public Class ToolTreeViewItem End Get Set(value As String) If value = String.Empty Or value <> m_UserNotes Then + m_UserNotes = value Dim DbUserNotes As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.USERNOTES, DbUserNotes) m_IsModifiedUserNotes = If(value <> DbUserNotes, True, False) - m_UserNotes = value + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("UserNotes") End If End Set End Property - Friend Shared m_TcPosList As New List(Of String) - Public ReadOnly Property TcPosList As List(Of String) + Friend Shared m_OrigTcPosList As New List(Of String) + Public ReadOnly Property OrigTcPosList As List(Of String) + Get + Return m_OrigTcPosList + End Get + End Property + + Friend m_TcPosList As New ObservableCollection(Of String) + Public ReadOnly Property TcPosList As ObservableCollection(Of String) Get Return m_TcPosList End Get @@ -829,11 +963,12 @@ Public Class ToolTreeViewItem End Get Set(value As String) If value = String.Empty Or value <> m_SelectedTcPos Then + m_SelectedTcPos = value Dim DbTcPos As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.TCPOS, DbTcPos) m_IsModifiedSelectedTcPos = If(value <> DbTcPos, True, False) - m_SelectedTcPos = value + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) NotifyPropertyChanged("SelectedTcPos") End If End Set @@ -853,6 +988,7 @@ Public Class ToolTreeViewItem ' Definizione comandi Private m_cmdOpenDrawFile As ICommand + Private m_cmdAutoDraw As ICommand #Region "Constructors" @@ -872,70 +1008,122 @@ Public Class ToolTreeViewItem Dim dValue As Double = 0 Dim sValue As String = String.Empty EgtTdbGetCurrToolParam(MCH_TP.CORR, nValue) - Corr = nValue.ToString() - EgtTdbGetCurrToolParam(MCH_TP.EXIT_, nValue) - ExitPar = nValue.ToString() + m_Corr = nValue.ToString() + NotifyPropertyChanged("Corr") + m_IsModifiedCorr = False EgtTdbGetCurrToolParam(MCH_TP.TYPE, nValue) - Type = nValue + m_Type = nValue + NotifyPropertyChanged("Type") EgtTdbGetCurrToolParam(MCH_TP.COOLANT, nValue) - Coolant = nValue.ToString() + m_Coolant = nValue.ToString() + NotifyPropertyChanged("Coolant") + m_IsModifiedCoolant = False EgtTdbGetCurrToolParam(MCH_TP.CORNRAD, dValue) - CornRad = LenToString(dValue, 4) + m_CornRad = LenToString(dValue, 4) + NotifyPropertyChanged("CornRad") + m_IsModifiedCornRad = False EgtTdbGetCurrToolParam(MCH_TP.DIAM, dValue) - Diam = LenToString(dValue, 4) + m_Diam = LenToString(dValue, 4) + m_IsModifiedDiam = False EgtTdbGetCurrToolParam(MCH_TP.TOTDIAM, dValue) - TotDiam = LenToString(dValue, 4) + m_TotDiam = LenToString(dValue, 4) + m_IsModifiedTotDiam = False + ValidateProperty("TotDiam") + ValidateProperty("Diam") EgtTdbGetCurrToolParam(MCH_TP.FEED, dValue) - Feed = LenToString(dValue, 4) + m_Feed = LenToString(dValue, 4) + NotifyPropertyChanged("Feed") + m_IsModifiedFeed = False EgtTdbGetCurrToolParam(MCH_TP.ENDFEED, dValue) - EndFeed = LenToString(dValue, 4) + m_EndFeed = LenToString(dValue, 4) + NotifyPropertyChanged("EndFeed") + m_IsModifiedEndFeed = False EgtTdbGetCurrToolParam(MCH_TP.STARTFEED, dValue) - StartFeed = LenToString(dValue, 4) + m_StartFeed = LenToString(dValue, 4) + NotifyPropertyChanged("StartFeed") + m_IsModifiedStartFeed = False EgtTdbGetCurrToolParam(MCH_TP.TIPFEED, dValue) - TipFeed = LenToString(dValue, 4) + m_TipFeed = LenToString(dValue, 4) + NotifyPropertyChanged("TipFeed") + m_IsModifiedTipFeed = False EgtTdbGetCurrToolParam(MCH_TP.LEN, dValue) - Len = LenToString(dValue, 4) + m_Len = LenToString(dValue, 4) + m_IsModifiedLen = False EgtTdbGetCurrToolParam(MCH_TP.TOTLEN, dValue) - TotLen = LenToString(dValue, 4) + m_TotLen = LenToString(dValue, 4) + m_IsModifiedTotLen = False EgtTdbGetCurrToolParam(MCH_TP.MAXMAT, dValue) - MaxMat = LenToString(dValue, 4) + m_MaxMat = LenToString(dValue, 4) + m_IsModifiedMaxMat = False + ValidateProperty("TotLen") + ValidateProperty("Len") + ValidateProperty("MaxMat") EgtTdbGetCurrToolParam(MCH_TP.LONOFFSET, dValue) - LonOffset = LenToString(dValue, 4) + m_LonOffset = LenToString(dValue, 4) + NotifyPropertyChanged("LonOffset") + m_IsModifiedLonOffset = False EgtTdbGetCurrToolParam(MCH_TP.RADOFFSET, dValue) - RadOffset = LenToString(dValue, 4) + m_RadOffset = LenToString(dValue, 4) + NotifyPropertyChanged("RadOffset") + m_IsModifiedRadOffset = False EgtTdbGetCurrToolParam(MCH_TP.SPEED, dValue) - Speed = DoubleToString(dValue, 4) - EgtTdbGetCurrToolParam(MCH_TP.SIDEANG, dValue) - SideAng = LenToString(dValue, 4) + m_Speed = DoubleToString(dValue, 4) + m_IsModifiedSpeed = False EgtTdbGetCurrToolParam(MCH_TP.MAXSPEED, dValue) - MaxSpeed = DoubleToString(dValue, 4) + m_MaxSpeed = DoubleToString(dValue, 4) + m_IsModifiedMaxSpeed = False + ValidateProperty("Speed") + NotifyPropertyChanged("MaxSpeed") + EgtTdbGetCurrToolParam(MCH_TP.SIDEANG, dValue) + m_SideAng = LenToString(dValue, 4) + NotifyPropertyChanged("SideAng") + m_IsModifiedSideAng = False EgtTdbGetCurrToolParam(MCH_TP.THICK, dValue) - Thick = LenToString(dValue, 4) + m_Thick = LenToString(dValue, 4) + m_IsModifiedThick = False + ValidateProperty("Thick") EgtTdbGetCurrToolParam(MCH_TP.MAXABSORPTION, dValue) - MaxAbsorption = DoubleToString(dValue, 4) + m_MaxAbsorption = DoubleToString(dValue, 4) + NotifyPropertyChanged("MaxAbsorption") + m_IsModifiedMaxAbsorption = False EgtTdbGetCurrToolParam(MCH_TP.MINFEED, dValue) - MinFeed = LenToString(dValue, 4) + m_MinFeed = LenToString(dValue, 4) + NotifyPropertyChanged("MinFeed") + m_IsModifiedMinFeed = False EgtTdbGetCurrToolParam(MCH_TP.DRAW, sValue) - Draw = sValue + m_Draw = sValue + m_IsModifiedDraw = False + ValidateProperty("Draw") EgtTdbGetCurrToolParam(MCH_TP.HEAD, sValue) - SelectedHead = sValue - EgtTdbGetCurrToolParam(MCH_TP.NAME, sValue) - NamePar = sValue + For HeadIndex = 0 To m_HeadList.Count - 1 + If sValue = m_HeadList(HeadIndex).HName Then + SelectedHead = m_HeadList(HeadIndex) + Exit For + End If + Next + ValidateProperty("SelectedHead") + EgtTdbGetCurrToolParam(MCH_TP.EXIT_, nValue) + m_SelectedExit = nValue.ToString() + m_IsModifiedSelectedExit = False + ValidateProperty("SelectedExit") EgtTdbGetCurrToolParam(MCH_TP.USERNOTES, sValue) - UserNotes = sValue + m_UserNotes = sValue + NotifyPropertyChanged("UserNotes") + m_IsModifiedUserNotes = False EgtTdbGetCurrToolParam(MCH_TP.TCPOS, sValue) - SelectedTcPos = sValue + m_SelectedTcPos = sValue + NotifyPropertyChanged("SelectedTcPos") + m_IsModifiedSelectedTcPos = False EgtTdbGetCurrToolParam(MCH_TP.UUID, sValue) m_Uuid = sValue ' Ora che tutti i parametri sono aggiornati, aggiorno il disegno m_SuspendToolDrawUpdate = False - UpdateSceneToolDraw(DrawUpdateSource.LEN) - NotifyPropertyChanged("Draw") - NotifyPropertyChanged("MaxMat") - NotifyPropertyChanged("Thick") - NotifyPropertyChanged("Diam") - NotifyPropertyChanged("Len") - NotifyPropertyChanged("TotLen") + UpdateSceneToolDraw() + End Sub + + Friend Sub ReadToolName() + EgtSetCurrentContext(IniFile.m_ProjectSceneContext) + EgtTdbGetCurrToolParam(MCH_TP.NAME, NamePar) End Sub Friend Sub WriteToolParam() @@ -944,7 +1132,7 @@ Public Class ToolTreeViewItem Dim dValue As Double = 0 Int32.TryParse(Corr, nValue) EgtTdbSetCurrToolParam(MCH_TP.CORR, nValue) - Int32.TryParse(ExitPar, nValue) + Int32.TryParse(SelectedExit, nValue) EgtTdbSetCurrToolParam(MCH_TP.EXIT_, nValue) EgtTdbSetCurrToolParam(MCH_TP.TYPE, Type) Int32.TryParse(Coolant, nValue) @@ -986,9 +1174,10 @@ Public Class ToolTreeViewItem StringToLen(MinFeed, dValue) EgtTdbSetCurrToolParam(MCH_TP.MINFEED, dValue) EgtTdbSetCurrToolParam(MCH_TP.DRAW, Draw) - EgtTdbSetCurrToolParam(MCH_TP.HEAD, SelectedHead) + EgtTdbSetCurrToolParam(MCH_TP.HEAD, SelectedHead.HName) EgtTdbSetCurrToolParam(MCH_TP.USERNOTES, UserNotes) - EgtTdbSetCurrToolParam(MCH_TP.TCPOS, SelectedTcPos) + If String.IsNullOrEmpty(SelectedTcPos) Then m_SelectedTcPos = String.Empty + EgtTdbSetCurrToolParam(MCH_TP.TCPOS, m_SelectedTcPos) End Sub Public Sub WriteToolName() @@ -999,25 +1188,13 @@ Public Class ToolTreeViewItem #Region "ToolSceneUpdate" - ' Enum che indica le proprietà di disegno dell'utensile - Friend Enum DrawUpdateSource - DIAM = 0 - LEN = 1 - MAXMAT = 2 - THICK = 3 - DRAW = 4 - TOTLEN = 5 - HEAD = 6 - EXIT_ = 7 - End Enum - ' Variabili che segnalano errori nel disegno dell'utensile Dim m_bToolMakerError As Boolean = False Dim m_bDrawNameExistError As Boolean = False Dim m_bDrawNameError As Boolean = False Dim m_nDrawingError As Integer = 0 - Private Sub UpdateSceneToolDraw(UpdateSource As DrawUpdateSource) + Private Sub UpdateSceneToolDraw() ' Azzero errori m_bToolMakerError = False m_bDrawNameError = False @@ -1026,10 +1203,10 @@ Public Class ToolTreeViewItem ' Verifico proprietà draw If String.IsNullOrEmpty(m_Draw) OrElse IsUUID(Path.GetFileNameWithoutExtension(m_Draw)) Then - CreateToolDraw(UpdateSource) + CreateToolDraw() Else EgtSetCurrentContext(IniFile.m_ToolsDbSceneContext) - If IsNgeFile(m_Draw) Then + If Path.GetExtension(m_Draw).ToLower = ".nge" Then If EgtOpenFile(IniFile.m_sCurrMachToolsDirPath & "\" & m_Draw) Then EgtSetView(VT.TOP, False) EgtZoom(ZM.ALL) @@ -1049,19 +1226,22 @@ Public Class ToolTreeViewItem End If End If NotifyPropertyChanged("Draw") - If UpdateSource = DrawUpdateSource.TOTLEN Or UpdateSource = DrawUpdateSource.LEN Or UpdateSource = DrawUpdateSource.MAXMAT Then - NotifyPropertyChanged("TotLen") - NotifyPropertyChanged("Len") - NotifyPropertyChanged("MaxMat") + + If Not GetValidationError("Draw") Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) End If End Sub - Private Sub CreateToolDraw(UpdateSource As DrawUpdateSource) + Private Sub CreateToolDraw() ' Carico il relativo ToolHolder Dim ToolHolder As String = String.Empty ToolHolder = LoadToolHolder() - If Not LoadToolMaker() OrElse Not CreateToolDraw(ToolHolder, UpdateSource) Then + If Not LoadToolMaker() OrElse Not CreateToolDraw(ToolHolder) Then EgtSetCurrentContext(IniFile.m_ToolsDbSceneContext) EgtNewFile() End If @@ -1076,13 +1256,21 @@ Public Class ToolTreeViewItem ''' Private Function LoadToolHolder() As String Dim sHolder As String = String.Empty - If Type = MCH_TY.SAW_STD Then - EgtUILib.GetPrivateProfileString(S_TOOLHOLDER, SelectedHead & "." & ExitPar.ToString() & ":SAW_STD", "", sHolder, IniFile.m_sCurrMachIniFilePath) - ElseIf Type = MCH_TY.SAW_FLAT Then - EgtUILib.GetPrivateProfileString(S_TOOLHOLDER, SelectedHead & "." & ExitPar.ToString() & ":SAW_FLAT", "", sHolder, IniFile.m_sCurrMachIniFilePath) - End If - If String.IsNullOrEmpty(sHolder) Then - EgtUILib.GetPrivateProfileString(S_TOOLHOLDER, SelectedHead & "." & ExitPar.ToString(), "", sHolder, IniFile.m_sCurrMachIniFilePath) + If Not IsNothing(m_SelectedHead) Then + Dim TempExit As String = String.Empty + If CInt(m_SelectedExit) > 0 Then + TempExit = m_SelectedExit + Else + TempExit = "1" + End If + If Type = MCH_TY.SAW_STD Then + EgtUILib.GetPrivateProfileString(S_TOOLHOLDER, SelectedHead.HName & "." & TempExit & ":SAW_STD", "", sHolder, IniFile.m_sCurrMachIniFilePath) + ElseIf Type = MCH_TY.SAW_FLAT Then + EgtUILib.GetPrivateProfileString(S_TOOLHOLDER, SelectedHead.HName & "." & TempExit & ":SAW_FLAT", "", sHolder, IniFile.m_sCurrMachIniFilePath) + End If + If String.IsNullOrEmpty(sHolder) Then + EgtUILib.GetPrivateProfileString(S_TOOLHOLDER, SelectedHead.HName & "." & TempExit, "", sHolder, IniFile.m_sCurrMachIniFilePath) + End If End If If String.IsNullOrWhiteSpace(sHolder) Then Return String.Empty @@ -1122,7 +1310,7 @@ Public Class ToolTreeViewItem Return Nothing End Function - Private Function CreateToolDraw(ToolHolder As String, UpdateSource As DrawUpdateSource) As Boolean + Private Function CreateToolDraw(ToolHolder As String) As Boolean Dim dTotLen As Double = 0 Dim dLen As Double = 0 Dim dDiam As Double = 0 @@ -1169,7 +1357,7 @@ Public Class ToolTreeViewItem Dim nErr As Integer = 999 EgtLuaGetGlobIntVar("TOOL.ERR", nErr) m_nDrawingError = nErr - If m_nDrawingError <> 0 And UpdateSource <> DrawUpdateSource.DRAW Then Draw = String.Empty + If m_nDrawingError <> 0 Then m_Draw = String.Empty If m_nDrawingError = 0 Then m_Draw = m_Uuid & ".nge" Return (nErr = 0) End Function @@ -1217,43 +1405,171 @@ Public Class ToolTreeViewItem #End Region ' ToolSceneUpdate -#Region "IDataErrorInfo Members" - - Private ReadOnly Property IDataErrorInfo_Error() As String Implements IDataErrorInfo.Error - Get - Return Nothing - End Get - End Property - - Public ReadOnly Property IDataErrorInfo_Item(ByVal propertyName As String) As String Implements IDataErrorInfo.Item - Get - ErrorOnTool = True - Return Me.GetValidationError(propertyName) - End Get - End Property - -#End Region ' IDataErrorInfo Members - #Region "Validation" + Private m_NameError As String + Public ReadOnly Property NameErrorMsg As String + Get + Return m_NameError + End Get + End Property + + Private m_SpeedError As String + Public ReadOnly Property SpeedErrorMsg As String + Get + Return m_SpeedError + End Get + End Property + + Private m_TotDiamError As String + Public ReadOnly Property TotDiamErrorMsg As String + Get + Return m_TotDiamError + End Get + End Property + + Private m_DiamError As String + Public ReadOnly Property DiamErrorMsg As String + Get + Return m_DiamError + End Get + End Property + + Private m_TotLenError As String + Public ReadOnly Property TotLenErrorMsg As String + Get + Return m_TotLenError + End Get + End Property + + Private m_LenError As String + Public ReadOnly Property LenErrorMsg As String + Get + Return m_LenError + End Get + End Property + + Private m_MaxMatError As String + Public ReadOnly Property MaxMatErrorMsg As String + Get + Return m_MaxMatError + End Get + End Property + + Private m_ThickError As String + Public ReadOnly Property ThickErrorMsg As String + Get + Return m_ThickError + End Get + End Property + + Private m_DrawError As String + Public ReadOnly Property DrawErrorMsg As String + Get + Return m_DrawError + End Get + End Property + + Private m_SelectedHeadError As String + Public ReadOnly Property SelectedHeadErrorMsg As String + Get + Return m_SelectedHeadError + End Get + End Property + + Private m_SelectedExitError As String + Public ReadOnly Property SelectedExitErrorMsg As String + Get + Return m_SelectedExitError + End Get + End Property + + ' Funzione che verifica se una proprietà è valida e attiva/disattiva di conseguenza lista e bottoni + Private Sub ValidateProperty(propertyName As String) + If Not GetValidationError(propertyName) Then + m_delErrorOnTool(True) + m_delIsEnabledBtns(False, False, True) + Else + m_delErrorOnTool(Not IsValid) + m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) + End If + NotifyPropertyChanged(propertyName) + End Sub + + Private Function GetValidationError(propertyName As String) As Boolean + Dim bOk As Boolean = True + Select Case propertyName + Case "NamePar" + bOk = Me.ValidateName() + Case "Speed" + bOk = Me.ValidateSpeed() + Case "TotDiam" + bOk = Me.ValidateTotDiam() + Case "Diam" + bOk = Me.ValidateDiam() + Case "TotLen" + bOk = Me.ValidateTotLen() + Case "Len" + bOk = Me.ValidateLen() + Case "MaxMat" + bOk = Me.ValidateMaxMat() + Case "Thick" + bOk = Me.ValidateThick() + Case "Draw" + bOk = Me.ValidateDraw() + Case "SelectedHead" + bOk = Me.ValidateSelectedHead() + Case "SelectedExit" + bOk = Me.ValidateSelectedExit() + End Select + Return bOk + End Function + + Private Function GetErrorString(propertyName As String) As String + Select Case propertyName + Case "NamePar" + Return m_NameError + Case "Speed" + Return m_SpeedError + Case "TotDiam" + Return m_TotDiamError + Case "Diam" + Return m_DiamError + Case "TotLen" + Return m_TotLenError + Case "Len" + Return m_LenError + Case "MaxMat" + Return m_MaxMatError + Case "Thick" + Return m_ThickError + Case "Draw" + Return m_DrawError + Case "SelectedHead" + Return m_SelectedHeadError + Case "SelectedExit" + Return m_SelectedExitError + End Select + Return String.Empty + End Function + ''' ''' Returns true if this object has no validation errors. ''' Public ReadOnly Property IsValid() As Boolean Get For Each [property] As String In ValidatedProperties - If GetValidationError([property]) IsNot Nothing Then + If Not String.IsNullOrEmpty(GetErrorString([property])) Then Return False End If Next [property] - Return True End Get End Property Public ReadOnly Property IsModified() As Boolean Get - Return m_IsModifiedCorr OrElse m_IsModifiedExit OrElse m_IsModifiedCornRad OrElse m_IsModifiedDiam OrElse m_IsModifiedTotDiam OrElse m_IsModifiedFeed OrElse m_IsModifiedEndFeed _ + Return m_IsModifiedCorr OrElse m_IsModifiedSelectedExit OrElse m_IsModifiedCornRad OrElse m_IsModifiedDiam OrElse m_IsModifiedTotDiam OrElse m_IsModifiedFeed OrElse m_IsModifiedEndFeed _ OrElse m_IsModifiedStartFeed OrElse m_IsModifiedTipFeed OrElse m_IsModifiedLen OrElse m_IsModifiedTotLen OrElse m_IsModifiedMaxMat OrElse m_IsModifiedLonOffset _ OrElse m_IsModifiedRadOffset OrElse m_IsModifiedSpeed OrElse m_IsModifiedSideAng OrElse m_IsModifiedMaxSpeed OrElse m_IsModifiedThick OrElse m_IsModifiedMaxAbsorption _ OrElse m_IsModifiedMinFeed OrElse m_IsModifiedDraw OrElse m_IsModifiedSelectedHead OrElse m_IsModifiedName OrElse m_IsModifiedUserNotes OrElse m_IsModifiedSelectedTcPos @@ -1262,7 +1578,7 @@ Public Class ToolTreeViewItem Public Sub IsModifiedReset() m_IsModifiedCorr = False - m_IsModifiedExit = False + m_IsModifiedSelectedExit = False m_IsModifiedCornRad = False m_IsModifiedDiam = False m_IsModifiedTotDiam = False @@ -1288,74 +1604,139 @@ Public Class ToolTreeViewItem m_IsModifiedSelectedTcPos = False End Sub - Private Shared ReadOnly ValidatedProperties() As String = {"Draw", "MaxMat", "Thick", "Diam", "Len", "TotLen", "Speed", "NamePar"} + Private Shared ReadOnly ValidatedProperties() As String = {"Draw", "TotDiam", "Diam", "TotLen", "Len", "MaxMat", "Thick", "Speed", "NamePar", "SelectedHead", "SelectedExit"} - Private Function GetValidationError(ByVal propertyName As String) As String - - If Not EgtCAM5.ToolsDbViewModel.m_bActive Then - Return Nothing - End If - If Array.IndexOf(ValidatedProperties, propertyName) < 0 Then - Return Nothing - End If - - Dim [error] As String = Nothing - - Select Case propertyName - Case "Draw" - [error] = Me.ValidateDraw() - Case "MaxMat" - [error] = Me.ValidateMaxMat() - Case "Diam" - [error] = Me.ValidateDiam() - Case "Thick" - [error] = Me.ValidateThick() - Case "Len" - [error] = Me.ValidateLen() - Case "TotLen" - [error] = Me.ValidateTotLen() - Case "Speed" - [error] = Me.ValidateSpeed() - Case "NamePar" - [error] = Me.ValidateName() - - Case Else - 'Debug.Fail("Unexpected property being validated on Tool: " & propertyName) + Private Function ValidateName() As Boolean + m_NameError = String.Empty + Select Case nErrorToolName + Case 1 + m_NameError = EgtMsg(MSG_MACHININGSERRORS + 2) + Case 2 + m_NameError = EgtMsg(MSG_MACHININGSERRORS + 3) End Select - Return [error] + NotifyPropertyChanged("NameErrorMsg") + If String.IsNullOrEmpty(m_NameError) Then + Return True + Else + Return False + End If End Function - Private Function ValidateDraw() As String - If m_bDrawNameError Then - Return EgtMsg(MSG_TOOLSERRORS + 2) + Private Function ValidateSpeed() As Boolean + m_SpeedError = String.Empty + If Not IsNothing(m_Speed) And Not IsNothing(m_MaxSpeed) Then + Dim dSpeed As Double = 0 + StringToDouble(m_Speed, dSpeed) + Dim dMaxSpeed As Double = 0 + StringToDouble(m_MaxSpeed, dMaxSpeed) + If Math.Abs(dSpeed) > dMaxSpeed + EPS_ZERO Then + m_SpeedError = EgtMsg(MSG_TOOLSERRORS + 11) + End If End If - If m_bDrawNameExistError Then - Return EgtMsg(MSG_TOOLSERRORS + 3) + NotifyPropertyChanged("SpeedErrorMsg") + If String.IsNullOrEmpty(m_SpeedError) Then + Return True + Else + Return False End If - If m_bToolMakerError Then - Return EgtMsg(MSG_TOOLSERRORS + 4) - End If - If m_nDrawingError = 12 Then - Return EgtMsg(MSG_TOOLSERRORS + 21) ' Utensile troppo corto con il portautensile - ElseIf m_nDrawingError <> 0 Then - Return EgtMsg(MSG_TOOLSERRORS + 5) - End If - Return Nothing End Function - Private Function ValidateMaxMat() As String + Private Function ValidateTotDiam() As Boolean + m_TotDiamError = String.Empty + If Not IsNothing(m_TotDiam) Then + Dim dTotDiam As Double = 0 + StringToLen(m_TotDiam, dTotDiam) + If dTotDiam < EPS_SMALL Then + m_TotDiamError = EgtMsg(MSG_TOOLSERRORS + 20) + End If + End If + NotifyPropertyChanged("TotDiamErrorMsg") + If String.IsNullOrEmpty(m_TotDiamError) Then + Return True + Else + Return False + End If + End Function + + Private Function ValidateDiam() As Boolean + m_DiamError = String.Empty + If Not IsNothing(m_Diam) Then + Dim dDiam As Double = 0 + StringToLen(m_Diam, dDiam) + If dDiam < EPS_SMALL Then + m_DiamError = EgtMsg(MSG_TOOLSERRORS + 9) + End If + If Not IsNothing(m_TotDiam) Then + Dim dTotDiam As Double = 0 + StringToLen(m_TotDiam, dTotDiam) + If dDiam > dTotDiam + EPS_SMALL Then + m_DiamError = EgtMsg(MSG_TOOLSERRORS + 18) + End If + End If + End If + NotifyPropertyChanged("DiamErrorMsg") + If String.IsNullOrEmpty(m_DiamError) Then + Return True + Else + Return False + End If + End Function + + Private Function ValidateTotLen() As Boolean + m_TotLenError = String.Empty + If Not IsNothing(m_TotLen) Then + Dim dTotLen As Double = 0 + StringToLen(m_TotLen, dTotLen) + If dTotLen < EPS_SMALL Then + m_TotLenError = EgtMsg(MSG_TOOLSERRORS + 15) + End If + End If + NotifyPropertyChanged("TotLenErrorMsg") + If String.IsNullOrEmpty(m_TotLenError) Then + Return True + Else + Return False + End If + End Function + + Private Function ValidateLen() As Boolean + m_LenError = String.Empty + If Not IsNothing(m_Len) Then + Dim dLen As Double = 0 + StringToLen(m_Len, dLen) + If dLen < EPS_SMALL Then + m_LenError = EgtMsg(MSG_TOOLSERRORS + 10) + End If + If Not IsNothing(m_TotLen) Then + Dim dTotLen As Double = 0 + StringToLen(m_TotLen, dTotLen) + If dLen > dTotLen + EPS_SMALL Then + m_LenError = EgtMsg(MSG_TOOLSERRORS + 13) + End If + End If + End If + NotifyPropertyChanged("LenErrorMsg") + If String.IsNullOrEmpty(m_LenError) Then + Return True + Else + Return False + End If + End Function + + Private Function ValidateMaxMat() As Boolean + m_MaxMatError = String.Empty If Not IsNothing(m_MaxMat) Then Dim dMaxMat As Double = 0 StringToLen(m_MaxMat, dMaxMat) If dMaxMat < EPS_SMALL Then - Return EgtMsg(MSG_TOOLSERRORS + 6) + m_MaxMatError = EgtMsg(MSG_TOOLSERRORS + 6) End If If (Type And MCH_TF.SAWBLADE) = 0 Then If Not IsNothing(m_Len) Then Dim dLen As Double = 0 StringToLen(m_Len, dLen) If dMaxMat > dLen + EPS_SMALL Then - Return EgtMsg(MSG_TOOLSERRORS + 7) + m_MaxMatError = EgtMsg(MSG_TOOLSERRORS + 7) End If End If Else @@ -1363,143 +1744,96 @@ Public Class ToolTreeViewItem Dim dDiam As Double = 0 StringToLen(m_Diam, dDiam) If dMaxMat > (dDiam / 3) + EPS_SMALL Then - Return EgtMsg(MSG_TOOLSERRORS + 17) + m_MaxMatError = EgtMsg(MSG_TOOLSERRORS + 17) End If End If End If End If - Return Nothing + NotifyPropertyChanged("MaxMatErrorMsg") + If String.IsNullOrEmpty(m_MaxMatError) Then + Return True + Else + Return False + End If End Function - Private Function ValidateThick() As String + Private Function ValidateThick() As Boolean + m_ThickError = String.Empty If Not IsNothing(m_Thick) Then Dim dThick As Double = 0 StringToLen(m_Thick, dThick) If (m_Type = MCH_TY.SAW_FLAT Or m_Type = MCH_TY.SAW_STD Or m_Type = MCH_TY.MORTISE_STD) And dThick < EPS_SMALL Then - Return EgtMsg(MSG_TOOLSERRORS + 8) + m_ThickError = EgtMsg(MSG_TOOLSERRORS + 8) End If End If - Return Nothing - End Function - - Private Function ValidateDiam() As String - If Not IsNothing(m_Diam) Then - Dim dDiam As Double = 0 - StringToLen(m_Diam, dDiam) - If dDiam < EPS_SMALL Then - Return EgtMsg(MSG_TOOLSERRORS + 9) - End If - If Not IsNothing(m_TotDiam) Then - Dim dTotDiam As Double = 0 - StringToLen(m_TotDiam, dTotDiam) - If dDiam > dTotDiam + EPS_SMALL Then - Return EgtMsg(MSG_TOOLSERRORS + 18) - End If - End If - If (Type And MCH_TF.SAWBLADE) <> 0 Then - If Not IsNothing(m_MaxMat) Then - Dim dMaxMat As Double = 0 - StringToLen(m_MaxMat, dMaxMat) - If (dDiam / 3) + EPS_SMALL < dMaxMat Then - Return EgtMsg(MSG_TOOLSERRORS + 19) - End If - End If - End If - End If - Return Nothing - End Function - - Private Function ValidateTotDiam() As String - If Not IsNothing(m_TotDiam) Then - Dim dTotDiam As Double = 0 - StringToLen(m_TotDiam, dTotDiam) - If dTotDiam < EPS_SMALL Then - Return EgtMsg(MSG_TOOLSERRORS + 20) - End If - End If - Return Nothing - End Function - - Private Function ValidateLen() As String - If Not IsNothing(m_Len) Then - Dim dLen As Double = 0 - StringToLen(m_Len, dLen) - If dLen < EPS_SMALL Then - Return EgtMsg(MSG_TOOLSERRORS + 10) - End If - If Not IsNothing(m_TotLen) Then - Dim dTotLen As Double = 0 - StringToLen(m_TotLen, dTotLen) - If dLen > dTotLen + EPS_SMALL Then - Return EgtMsg(MSG_TOOLSERRORS + 13) - End If - End If - If (Type And MCH_TF.SAWBLADE) = 0 Then - If Not IsNothing(m_MaxMat) Then - Dim dMaxMat As Double = 0 - StringToLen(m_MaxMat, dMaxMat) - If dLen < dMaxMat Then - Return EgtMsg(MSG_TOOLSERRORS + 14) - End If - End If - End If - End If - Return Nothing - End Function - - Private Function ValidateTotLen() As String - If Not IsNothing(m_TotLen) Then - Dim dTotLen As Double = 0 - StringToLen(m_TotLen, dTotLen) - If dTotLen < EPS_SMALL Then - Return EgtMsg(MSG_TOOLSERRORS + 15) - End If - If Not IsNothing(m_Len) Then - Dim dLen As Double = 0 - StringToLen(m_Len, dLen) - If dTotLen < dLen - EPS_SMALL Then - Return EgtMsg(MSG_TOOLSERRORS + 16) - End If - End If - End If - Return Nothing - End Function - - Private Function ValidateSpeed() As String - If Not IsNothing(m_Speed) And Not IsNothing(m_MaxSpeed) Then - Dim dSpeed As Double = 0 - StringToDouble(m_Speed, dSpeed) - Dim dMaxSpeed As Double = 0 - StringToDouble(m_MaxSpeed, dMaxSpeed) - If Math.Abs(dSpeed) > dMaxSpeed + EPS_ZERO Then - Return EgtMsg(MSG_TOOLSERRORS + 11) - End If - End If - Return Nothing - End Function - - Private Function ValidateName() As String - Select Case nErrorToolName - Case 1 - Return EgtMsg(MSG_TOOLSERRORS + 12) - Case 2 - Return EgtMsg(MSG_MACHININGSERRORS + 3) - End Select - Return Nothing - End Function - - Private Shared Function IsStringMissing(ByVal value As String) As Boolean - Return String.IsNullOrEmpty(value) OrElse value.Trim() = String.Empty - End Function - - Private Shared Function IsNgeFile(FileName As String) As Boolean - If IsStringMissing(FileName) Then + NotifyPropertyChanged("ThickErrorMsg") + If String.IsNullOrEmpty(m_ThickError) Then + Return True + Else Return False End If + End Function - Dim pattern As String = "^.+\.(?:[nN][gG][eE])$" + Private Function ValidateDraw() As Boolean + m_DrawError = String.Empty + If m_bDrawNameError Then + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 2) + End If + If m_bDrawNameExistError Then + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 3) + End If + If m_bToolMakerError Then + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 4) + End If + If m_nDrawingError = 12 Then + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 21) ' Utensile troppo corto con il portautensile + ElseIf m_nDrawingError <> 0 Then + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 5) + End If + NotifyPropertyChanged("DrawErrorMsg") + If String.IsNullOrEmpty(m_DrawError) Then + Return True + Else + Return False + End If + End Function - Return Regex.IsMatch(FileName, pattern, RegexOptions.IgnoreCase) + Private Function ValidateSelectedHead() As Boolean + m_SelectedHeadError = String.Empty + If IsNothing(m_SelectedHead) Then + m_SelectedHeadError = EgtMsg(MSG_TOOLSERRORS + 27) + Else + If Not IsNothing(m_HeadList) Then + If Not m_HeadList.Contains(m_SelectedHead) Then + m_SelectedHeadError = EgtMsg(MSG_TOOLSERRORS + 27) + End If + End If + End If + NotifyPropertyChanged("SelectedHeadErrorMsg") + If String.IsNullOrEmpty(m_SelectedHeadError) Then + Return True + Else + Return False + End If + End Function + + Private Function ValidateSelectedExit() As Boolean + m_SelectedExitError = String.Empty + If IsNothing(m_SelectedExit) Then + m_SelectedExitError = EgtMsg(MSG_TOOLSERRORS + 28) + Else + If Not IsNothing(m_ExitList) Then + If Not m_ExitList.Contains(m_SelectedExit) Then + m_SelectedExitError = EgtMsg(MSG_TOOLSERRORS + 28) + End If + End If + End If + NotifyPropertyChanged("SelectedExitErrorMsg") + If String.IsNullOrEmpty(m_SelectedExitError) Then + Return True + Else + Return False + End If End Function #End Region ' Validation @@ -1527,20 +1861,77 @@ Public Class ToolTreeViewItem Dim OpenFileDialog As New EgtWPFLib5.EgtOpenFileDialog OpenFileDialog.Title = "Open draw file" OpenFileDialog.Filter = "*.nge" + OpenFileDialog.FileNameFilter = AddressOf FilterFileName OpenFileDialog.Directory = IniFile.m_sCurrMachToolsDirPath OpenFileDialog.FileName = m_Draw - If OpenFileDialog.ShowDialog <> True Then + If OpenFileDialog.EgtShowDialog <> True Then Return End If - Draw = Path.GetFileName(OpenFileDialog.FileName) + m_Draw = Path.GetFileName(OpenFileDialog.FileName) + UpdateSceneToolDraw() End Sub + Private Function FilterFileName(sPath As String) As Boolean + Dim FileName As String = Path.GetFileNameWithoutExtension(sPath) + If Not IsUUID(FileName) Then + Return True + End If + Return False + End Function + #End Region ' OpenDrawFileCommand +#Region "AutoDrawCommand" + + ''' + ''' Returns a command that create a new tool. + ''' + Public ReadOnly Property AutoDrawCommand As ICommand + Get + If m_cmdAutoDraw Is Nothing Then + m_cmdAutoDraw = New Command(AddressOf AutoDraw) + End If + Return m_cmdAutoDraw + End Get + End Property + + ''' + ''' Creata the new tool. This method is invoked by the NewCommand. + ''' + Public Sub AutoDraw(ByVal param As Object) + m_Draw = m_Uuid & ".nge" + UpdateSceneToolDraw() + End Sub + +#End Region ' AutoDrawCommand + #End Region ' Commands End Class +Public Class HeadItem + + Private m_HName As String + Public ReadOnly Property HName As String + Get + Return m_HName + End Get + End Property + + Private m_HText As String + Public ReadOnly Property HText As String + Get + Return m_HText + End Get + End Property + + Sub New(sHName As String, sHText As String) + m_HName = sHName + m_HText = sHText + End Sub + +End Class + ''' ''' Class that represent a Converter that use tool type and param type, to set the visibility state of the param type. ''' diff --git a/ToolsDbWindow/ToolsDbView.xaml b/ToolsDbWindow/ToolsDbView.xaml index 2dcad95..ea79f10 100644 --- a/ToolsDbWindow/ToolsDbView.xaml +++ b/ToolsDbWindow/ToolsDbView.xaml @@ -19,6 +19,7 @@ + 0 1 2 @@ -62,11 +63,14 @@