diff --git a/Base/TreeView/TreeViewItemBase.vb b/Base/TreeView/TreeViewItemBase.vb index 8129309..8ace23e 100644 --- a/Base/TreeView/TreeViewItemBase.vb +++ b/Base/TreeView/TreeViewItemBase.vb @@ -1,5 +1,7 @@ Imports System.Collections.ObjectModel Imports System.ComponentModel +Imports EgtUILib +Imports EgtUILib.EgtInterface ' Classe che definisce un elemento di base del TreeView Public Class TreeViewItemBase @@ -31,7 +33,7 @@ Public Class TreeViewItemBase End Set End Property - Private m_isExpanded As Boolean + Friend m_isExpanded As Boolean Public Property IsExpanded As Boolean Get Return m_isExpanded @@ -39,6 +41,25 @@ Public Class TreeViewItemBase Set(value As Boolean) If (value <> m_isExpanded) Then m_isExpanded = value + If Not Map.refProjectVM.bSelObjOnScene Then + Dim m_onldObjTreeOldId As Integer = Map.refManageLayerExpanderVM.m_nObjTreeOldId + If Not m_isExpanded Then + Else + For Each Item As LayerTreeViewItem In Map.refManageLayerExpanderVM.LayerList + For Each LayerItem As LayerTreeViewItem In Item.Items + If m_isExpanded = LayerItem.m_isExpanded Then + If m_onldObjTreeOldId = LayerItem.Id Then + Map.refProjectVM.SetLastInteger(LayerItem.Id) + Map.refProjectVM.ExecuteCommand(Controller.CMD.DESELECTPARTLAYEROBJ) + Else + Map.refManageLayerExpanderVM.SelectIdInObjTree(LayerItem.Id) + 'Map.refProjectVM.ExecuteCommand(Controller.CMD.SETCURRPARTLAYER) + End If + End If + Next + Next + End If + End If NotifyPropertyChanged(NameOf(IsExpanded)) End If End Set @@ -92,6 +113,7 @@ Public Class InheritableTreeViewItem Implements INotifyPropertyChanged Friend m_Name As String + Public Property Name As String Get Return m_Name @@ -195,7 +217,6 @@ Public Class ParentItem Inherits TreeViewItemBase Private m_sPictureString As String - Private m_Items As ObservableCollection(Of ChildItem) Public Property PictureString As String Get @@ -209,6 +230,7 @@ Public Class ParentItem End Set End Property + Private m_Items As ObservableCollection(Of ChildItem) Public Property Items As ObservableCollection(Of ChildItem) Get Return m_Items @@ -255,4 +277,4 @@ Public Class ChildItem MyBase.New(Name, IsSelected, IsExpanded, IsActive) End Sub -End Class +End Class \ No newline at end of file diff --git a/Constants/ConstIni.vb b/Constants/ConstIni.vb index 7c0766c..0ca0448 100644 --- a/Constants/ConstIni.vb +++ b/Constants/ConstIni.vb @@ -105,11 +105,15 @@ Module ConstIni Public Const S_IMPORT As String = "Import" Public Const K_DXFSCALE As String = "DxfScale" Public Const K_STLSCALE As String = "StlScale" + Public Const K_OFFSCALE As String = "OffScale" + Public Const K_PLYSCALE As String = "PlyScale" Public Const K_IMGSCALE As String = "ImgScale" Public Const K_CNCFLAG As String = "CncFlag" Public Const K_BTLFLAG As String = "BtlFlag" Public Const K_BTLAUXDIR As String = "BtlAuxDir" + Public Const K_3MFFLAG As String = "3mfFlag" Public Const K_ADVFLAG As String = "AdvFlag" + Public Const K_ADVTOLER As String = "AdvToler" Public Const S_EXPORT As String = "Export" Public Const K_DXFFLAG As String = "DxfFlag" @@ -155,6 +159,7 @@ Module ConstIni Public Const K_TABLESDIR As String = "TablesDir" Public Const K_CURRMTABLE As String = "CurrMTable" Public Const K_MTABLEWINPLACE As String = "MTableWinPlace" + Public Const K_OPTIMIZEMACHFORLINE As String = "OptimizeMachForLine" Public Const S_GUNSTOCK As String = "GunStock" Public Const K_GUNSTOCKENABLE As String = "GsEnable" @@ -184,6 +189,7 @@ Module ConstIni Public Const K_SELGEOMSURFFINISHING As String = "SelGeomSurfFinishing" Public Const K_SELGEOMSURFROUGHING As String = "SelGeomSurfRoughing" Public Const K_SELGEOMFIVEAXMILLING As String = "SelGeomFiveAxMilling" + Public Const K_SELVMILLQUALITY As String = "VMillQuality" Public Const K_MACHININGGROUP As String = "MachiningGroup" Public Const K_SHOWONLYTABLE As String = "ShowOnlyTable" Public Const K_MOVETHROUGHDISPS As String = "MoveThroughDisps" diff --git a/DataGridMultiselectManaging/IListItemConverter.vb b/DataGridMultiselectManaging/IListItemConverter.vb new file mode 100644 index 0000000..6b19886 --- /dev/null +++ b/DataGridMultiselectManaging/IListItemConverter.vb @@ -0,0 +1,4 @@ +Public Interface IListItemConverter + Function Convert(ByVal masterListItem As Object) As Object + Function ConvertBack(ByVal targetListItem As Object) As Object +End Interface diff --git a/DataGridMultiselectManaging/MultiSelectorBehaviours.vb b/DataGridMultiselectManaging/MultiSelectorBehaviours.vb new file mode 100644 index 0000000..1b43aee --- /dev/null +++ b/DataGridMultiselectManaging/MultiSelectorBehaviours.vb @@ -0,0 +1,80 @@ +Imports System.Windows.Controls.Primitives +Imports System.ComponentModel + + +Public Class MultiSelectorBehaviours + + Public Shared ReadOnly SynchronizedSelectedItemsProperty As DependencyProperty = DependencyProperty.RegisterAttached("SynchronizedSelectedItems", GetType(IList), GetType(MultiSelectorBehaviours), New PropertyMetadata(Nothing, AddressOf OnSynchronizedSelectedItemsChanged)) + Public Shared ReadOnly SynchronizationManagerProperty As DependencyProperty = DependencyProperty.RegisterAttached("SynchronizationManager", GetType(SynchronizationManager), GetType(MultiSelectorBehaviours), New PropertyMetadata(Nothing)) + + + Public Shared Function GetSynchronizedSelectedItems(ByVal dependencyObject As DependencyObject) As IList + Return CType(dependencyObject.GetValue(SynchronizedSelectedItemsProperty), IList) + End Function + + Public Shared Sub SetSynchronizedSelectedItems(ByVal dependencyObject As DependencyObject, ByVal value As IList) + dependencyObject.SetValue(SynchronizedSelectedItemsProperty, value) + End Sub + + Private Shared Function GetSynchronizationManager(ByVal dependencyObject As DependencyObject) As SynchronizationManager + Return CType(dependencyObject.GetValue(SynchronizationManagerProperty), SynchronizationManager) + End Function + + Private Shared Sub SetSynchronizationManager(ByVal dependencyObject As DependencyObject, ByVal value As SynchronizationManager) + dependencyObject.SetValue(SynchronizationManagerProperty, value) + End Sub + + Private Shared Sub OnSynchronizedSelectedItemsChanged(ByVal dependencyObject As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs) + If e.OldValue IsNot Nothing Then + Dim synchronizer As SynchronizationManager = GetSynchronizationManager(dependencyObject) + synchronizer.StopSynchronizing() + SetSynchronizationManager(dependencyObject, Nothing) + End If + + Dim list As IList = TryCast(e.NewValue, IList) + Dim selector As Selector = TryCast(dependencyObject, Selector) + + If list IsNot Nothing AndAlso selector IsNot Nothing Then + Dim synchronizer As SynchronizationManager = GetSynchronizationManager(dependencyObject) + + If synchronizer Is Nothing Then + synchronizer = New SynchronizationManager(selector) + SetSynchronizationManager(dependencyObject, synchronizer) + End If + + synchronizer.StartSynchronizingList() + End If + End Sub + + Private Class SynchronizationManager + Private ReadOnly _multiSelector As Selector + Private _synchronizer As TwoListSynchronizer + + Friend Sub New(ByVal selector As Selector) + _multiSelector = selector + End Sub + + Public Sub StartSynchronizingList() + Dim list As IList = GetSynchronizedSelectedItems(_multiSelector) + + If list IsNot Nothing Then + _synchronizer = New TwoListSynchronizer(GetSelectedItemsCollection(_multiSelector), list) + _synchronizer.StartSynchronizing() + End If + End Sub + + Public Sub StopSynchronizing() + _synchronizer.StopSynchronizing() + End Sub + + Public Shared Function GetSelectedItemsCollection(ByVal selector As Selector) As IList + If TypeOf selector Is MultiSelector Then + Return (TryCast(selector, MultiSelector)).SelectedItems + ElseIf TypeOf selector Is ListBox Then + Return (TryCast(selector, ListBox)).SelectedItems + Else + Throw New InvalidOperationException("Target object has no SelectedItems property to bind.") + End If + End Function + End Class +End Class diff --git a/DataGridMultiselectManaging/TwoListSynchronizer.vb b/DataGridMultiselectManaging/TwoListSynchronizer.vb new file mode 100644 index 0000000..f443d53 --- /dev/null +++ b/DataGridMultiselectManaging/TwoListSynchronizer.vb @@ -0,0 +1,163 @@ +Imports System.Collections.Specialized + +Public Class TwoListSynchronizer + Implements IWeakEventListener + + Private Shared ReadOnly DefaultConverter As IListItemConverter = New DoNothingListItemConverter() + Private ReadOnly _masterList As IList + Private ReadOnly _masterTargetConverter As IListItemConverter + Private ReadOnly _targetList As IList + + Public Sub New(ByVal masterList As IList, ByVal targetList As IList, ByVal masterTargetConverter As IListItemConverter) + _masterList = masterList + _targetList = targetList + _masterTargetConverter = masterTargetConverter + End Sub + + Public Sub New(ByVal masterList As IList, ByVal targetList As IList) + Me.New(masterList, targetList, DefaultConverter) + End Sub + + Private Delegate Sub ChangeListAction(ByVal list As IList, ByVal e As NotifyCollectionChangedEventArgs, ByVal converter As Converter(Of Object, Object)) + + Public Sub StartSynchronizing() + ListenForChangeEvents(_masterList) + ListenForChangeEvents(_targetList) + SetListValuesFromSource(_masterList, _targetList, New Converter(Of Object, Object)(AddressOf ConvertFromMasterToTarget)) + + If Not TargetAndMasterCollectionsAreEqual() Then + SetListValuesFromSource(_targetList, _masterList, New Converter(Of Object, Object)(AddressOf ConvertFromTargetToMaster)) + End If + End Sub + + Public Sub StopSynchronizing() + StopListeningForChangeEvents(_masterList) + StopListeningForChangeEvents(_targetList) + End Sub + + Public Function ReceiveWeakEvent(ByVal managerType As Type, ByVal sender As Object, ByVal e As EventArgs) As Boolean Implements IWeakEventListener.ReceiveWeakEvent + HandleCollectionChanged(TryCast(sender, IList), TryCast(e, NotifyCollectionChangedEventArgs)) + Return True + End Function + + Protected Sub ListenForChangeEvents(ByVal list As IList) + If TypeOf list Is INotifyCollectionChanged Then + CollectionChangedEventManager.AddListener(TryCast(list, INotifyCollectionChanged), Me) + End If + End Sub + + Protected Sub StopListeningForChangeEvents(ByVal list As IList) + If TypeOf list Is INotifyCollectionChanged Then + CollectionChangedEventManager.RemoveListener(TryCast(list, INotifyCollectionChanged), Me) + End If + End Sub + + Private Sub AddItems(ByVal list As IList, ByVal e As NotifyCollectionChangedEventArgs, ByVal converter As Converter(Of Object, Object)) + Dim itemCount As Integer = e.NewItems.Count + + For i As Integer = 0 To itemCount - 1 + Dim insertionPoint As Integer = e.NewStartingIndex + i + + If insertionPoint > list.Count Then + list.Add(converter(e.NewItems(i))) + Else + list.Insert(insertionPoint, converter(e.NewItems(i))) + End If + Next + End Sub + + Private Function ConvertFromMasterToTarget(ByVal masterListItem As Object) As Object + Return If(_masterTargetConverter Is Nothing, masterListItem, _masterTargetConverter.Convert(masterListItem)) + End Function + + Private Function ConvertFromTargetToMaster(ByVal targetListItem As Object) As Object + Return If(_masterTargetConverter Is Nothing, targetListItem, _masterTargetConverter.ConvertBack(targetListItem)) + End Function + + Private Sub HandleCollectionChanged(ByVal sender As Object, ByVal e As NotifyCollectionChangedEventArgs) + Dim sourceList As IList = TryCast(sender, IList) + + Select Case e.Action + Case NotifyCollectionChangedAction.Add + PerformActionOnAllLists(AddressOf AddItems, sourceList, e) + Case NotifyCollectionChangedAction.Move + PerformActionOnAllLists(AddressOf MoveItems, sourceList, e) + Case NotifyCollectionChangedAction.Remove + PerformActionOnAllLists(AddressOf RemoveItems, sourceList, e) + Case NotifyCollectionChangedAction.Replace + PerformActionOnAllLists(AddressOf ReplaceItems, sourceList, e) + Case NotifyCollectionChangedAction.Reset + UpdateListsFromSource(TryCast(sender, IList)) + Case Else + End Select + End Sub + + Private Sub MoveItems(ByVal list As IList, ByVal e As NotifyCollectionChangedEventArgs, ByVal converter As Converter(Of Object, Object)) + RemoveItems(list, e, converter) + AddItems(list, e, converter) + End Sub + + Private Sub PerformActionOnAllLists(ByVal action As ChangeListAction, ByVal sourceList As IList, ByVal collectionChangedArgs As NotifyCollectionChangedEventArgs) + If sourceList Is _masterList Then + PerformActionOnList(_targetList, action, collectionChangedArgs, New Converter(Of Object, Object)(AddressOf ConvertFromMasterToTarget)) + Else + PerformActionOnList(_masterList, action, collectionChangedArgs, New Converter(Of Object, Object)(AddressOf ConvertFromTargetToMaster)) + End If + End Sub + + Private Sub PerformActionOnList(ByVal list As IList, ByVal action As ChangeListAction, ByVal collectionChangedArgs As NotifyCollectionChangedEventArgs, ByVal converter As Converter(Of Object, Object)) + StopListeningForChangeEvents(list) + action(list, collectionChangedArgs, converter) + ListenForChangeEvents(list) + End Sub + + Private Sub RemoveItems(ByVal list As IList, ByVal e As NotifyCollectionChangedEventArgs, ByVal converter As Converter(Of Object, Object)) + If e.OldItems.Count = 1 AndAlso e.OldStartingIndex <= list.Count - 1 Then + list.RemoveAt(e.OldStartingIndex) + Else + For Each Item In e.OldItems + list.Remove(Item) + Next + End If + End Sub + + Private Sub ReplaceItems(ByVal list As IList, ByVal e As NotifyCollectionChangedEventArgs, ByVal converter As Converter(Of Object, Object)) + RemoveItems(list, e, converter) + AddItems(list, e, converter) + End Sub + + Private Sub SetListValuesFromSource(ByVal sourceList As IList, ByVal targetList As IList, ByVal converter As Converter(Of Object, Object)) + StopListeningForChangeEvents(targetList) + targetList.Clear() + + For Each o As Object In sourceList + targetList.Add(converter(o)) + Next + + ListenForChangeEvents(targetList) + End Sub + + Private Function TargetAndMasterCollectionsAreEqual() As Boolean + Return _masterList.Cast(Of Object)().SequenceEqual(_targetList.Cast(Of Object)().[Select](Function(item) ConvertFromTargetToMaster(item))) + End Function + + Private Sub UpdateListsFromSource(ByVal sourceList As IList) + If sourceList Is _masterList Then + SetListValuesFromSource(_masterList, _targetList, New Converter(Of Object, Object)(AddressOf ConvertFromMasterToTarget)) + Else + SetListValuesFromSource(_targetList, _masterList, New Converter(Of Object, Object)(AddressOf ConvertFromTargetToMaster)) + End If + End Sub + + Friend Class DoNothingListItemConverter + Implements IListItemConverter + + Public Function Convert(ByVal masterListItem As Object) As Object Implements IListItemConverter.Convert + Return masterListItem + End Function + + Public Function ConvertBack(ByVal targetListItem As Object) As Object Implements IListItemConverter.ConvertBack + Return targetListItem + End Function + End Class +End Class diff --git a/EgtCAM5.vbproj b/EgtCAM5.vbproj index 4c78803..b0e2381 100644 --- a/EgtCAM5.vbproj +++ b/EgtCAM5.vbproj @@ -170,6 +170,9 @@ EgtMessageBoxV.xaml + + + LeftTrayV.xaml diff --git a/MachGroupPanel/MyMachGroupPanelVM.vb b/MachGroupPanel/MyMachGroupPanelVM.vb index 0b7b307..aced8f7 100644 --- a/MachGroupPanel/MyMachGroupPanelVM.vb +++ b/MachGroupPanel/MyMachGroupPanelVM.vb @@ -104,7 +104,10 @@ Public Class MyMachGroupPanelVM Else ' se ci sono gruppi di lavorazione If bMachGroup Then - nGroupId = EgtGetLastMachGroup() + nGroupId = EgtGetCurrMachGroup() + If nGroupId = GDB_ID.NULL Then + nGroupId = EgtGetFirstMachGroup() + End If Return If(EgtSetCurrMachGroup(nGroupId), 0, 1) ' se altrimenti ammessi gruppi di lavoro vuoti ElseIf bAllowEmpty Then diff --git a/MainWindow/MainWindowVM.vb b/MainWindow/MainWindowVM.vb index 5173569..d93c2cc 100644 --- a/MainWindow/MainWindowVM.vb +++ b/MainWindow/MainWindowVM.vb @@ -386,8 +386,8 @@ Public Class MainWindowVM EgtSetLockId(sLockId) End If ' Recupero livello e opzioni della chiave - Dim bKey As Boolean = EgtGetKeyLevel(3279, 2608, 1, IniFile.m_nKeyLevel) And - EgtGetKeyOptions(3279, 2608, 1, IniFile.m_nKeyOptions) + Dim bKey As Boolean = EgtGetKeyLevel(3279, 2703, 1, IniFile.m_nKeyLevel) And + EgtGetKeyOptions(3279, 2703, 1, IniFile.m_nKeyOptions) ' Leggo e imposto livello utilizzatore IniFile.m_nUserLevel = Math.Min(IniFile.m_nKeyLevel, GetPrivateProfileInt(S_GENERAL, K_USERLEVEL, 1)) ' Imposto abilitazione lavorazioni avanzate @@ -423,14 +423,6 @@ Public Class MainWindowVM GetPrivateProfileString(S_GEOMDB, K_NFEFONTDIR, "", sNfeDir) GetPrivateProfileString(S_GEOMDB, K_DEFAULTFONT, "", OptionModule.m_sFontText) EgtSetFont(sNfeDir, OptionModule.m_sFontText) - ' Imposto direttorio ausiliario per import/gestione BTL - Dim sBtlAuxDir As String = String.Empty - GetPrivateProfileString(S_IMPORT, K_BTLAUXDIR, "", sBtlAuxDir) - EgtSetBtlAuxDir(sBtlAuxDir) - ' Imposto direttorio libreria per export ThreeJs - Dim sThreeJSLibDir As String = String.Empty - GetPrivateProfileString(S_EXPORT, K_THREEJSLIBDIR, "", sThreeJSLibDir) - EgtSetThreeJSLibDir(sThreeJSLibDir) ' Imposto dir di default per libreria Lua e lancio libreria di base Dim sLuaLibsDir As String = String.Empty GetPrivateProfileString(S_LUA, K_LIBSDIR, "", sLuaLibsDir) @@ -438,6 +430,14 @@ Public Class MainWindowVM Dim sLuaBaseLib As String = String.Empty GetPrivateProfileString(S_LUA, K_BASELIB, "EgtBase", sLuaBaseLib) EgtLuaRequire(sLuaBaseLib) + ' Imposto direttorio ausiliario per import/gestione BTL (sempre dopo impostazioni lua) + Dim sBtlAuxDir As String = String.Empty + GetPrivateProfileString(S_IMPORT, K_BTLAUXDIR, "", sBtlAuxDir) + EgtSetBtlAuxDir(sBtlAuxDir) + ' Imposto direttorio libreria per export ThreeJs + Dim sThreeJSLibDir As String = String.Empty + GetPrivateProfileString(S_EXPORT, K_THREEJSLIBDIR, "", sThreeJSLibDir) + EgtSetThreeJSLibDir(sThreeJSLibDir) ' Imposto direttorio temporaneo a EgtInterface EgtSetTempDir(m_sTempDir) ' Imposto IniFile a EgtInterface @@ -598,9 +598,17 @@ Public Class MainWindowVM ' pulisco output Map.refStatusBarVM.NotifyStatusOutput("") Map.refInputExpanderVM.ResetInputBox() - ElseIf e.Key = Key.Left OrElse e.Key = Key.Right OrElse e.Key = Key.Up OrElse e.Key = Key.Down AndAlso Map.refTopCommandBarVM.MachiningIsChecked AndAlso Map.refOperationParametersExpanderVM.OperationParameters.IsEnabled Then + If not IsNothing( Map.refMachiningParameterExpanderVM) Then + ' Nascondo la combobox delle usernotes + Map.refMachiningParameterExpanderVM.CurrOperation.SetComboAddVisibility(Visibility.Collapsed) + 'riattivo il pulsante per visualizzare la combobox delle note + Map.refMachiningParameterExpanderVM.CurrOperation.SetShowNoteListCombo_IsEnable(True) + End If + ElseIf e.Key = Key.Left OrElse e.Key = Key.Right OrElse e.Key = Key.Up OrElse e.Key = Key.Down AndAlso + Map.refTopCommandBarVM.MachiningIsChecked AndAlso Map.refOperationParametersExpanderVM.OperationParameters.IsEnabled Then Map.refMachiningParameterExpanderVM.FocusSlider() - Map.refMachiningParameterExpanderVM.SetSliderValue(1) + Dim nStep As Integer = If(e.Key = Key.Right OrElse e.Key = Key.Up, 1, -1) + Map.refMachiningParameterExpanderVM.SetSliderValue(nStep) e.Handled = True End If End Sub diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb index 81f3937..86dd809 100644 --- a/My Project/AssemblyInfo.vb +++ b/My Project/AssemblyInfo.vb @@ -30,7 +30,7 @@ Imports System.Windows #End If - + @@ -70,6 +70,6 @@ Imports System.Windows ' by using the '*' as shown below: ' - - + + diff --git a/OptionPanel/DrawOptionPanel/InputExpander/InputExpanderV.xaml b/OptionPanel/DrawOptionPanel/InputExpander/InputExpanderV.xaml index 8a7bc32..66842fe 100644 --- a/OptionPanel/DrawOptionPanel/InputExpander/InputExpanderV.xaml +++ b/OptionPanel/DrawOptionPanel/InputExpander/InputExpanderV.xaml @@ -1,6 +1,6 @@  + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> @@ -16,17 +16,66 @@ --> - - - - - - + + + + + + + + + + + +