Files
EgtCAM5/Special-Doors/MTableDbV.xaml.vb
Dario Sassi bba92a4980 EgtCAM5 :
- modifiche per impostazione qualità di visualizzazione superfici (con eliminazione SmoothTriMesh/ShowTriaAdv).
2025-08-24 19:18:58 +02:00

187 lines
7.9 KiB
VB.net

Imports System.Windows
Imports System.Windows.Controls.Primitives
Imports EgtWPFLib5
Imports EgtUILib
Public Class MTableDbV
Private m_MTableDbVM As MTableDbVM
Private m_EditCell As DataGridCell
Sub New(Owner As Window, MTableDbVM As MTableDbVM)
MyBase.New(Owner)
' This call is required by the designer.
InitializeComponent()
Me.DataContext = MTableDbVM
' Assegno al riferimento locale al VM il VM preso dal DataContext
m_MTableDbVM = MTableDbVM
End Sub
Private Sub LeftTableMouseDown(sender As Object, e As MouseButtonEventArgs)
m_MTableDbVM.FocusedTable = MTableDbVM.Tables.LEFTTABLE
m_MTableDbVM.ResetRightTableSelection()
End Sub
Private Sub RowMouseDown(sender As Object, e As MouseButtonEventArgs)
m_MTableDbVM.FocusedTable = MTableDbVM.Tables.RIGHTTABLE
m_MTableDbVM.ResetLeftTableSelection()
End Sub
Private Sub RowRightClick(sender As Object, e As MouseButtonEventArgs)
m_MTableDbVM.FocusedTable = MTableDbVM.Tables.RIGHTTABLE
m_MTableDbVM.ResetLeftTableSelection()
e.Handled = True
End Sub
Private Sub CellLeftClick(sender As Object, e As MouseButtonEventArgs)
Dim CurrCell As DataGridCell = Nothing
If TypeOf sender Is DataGridCell Then
CurrCell = DirectCast(sender, DataGridCell)
End If
Dim SelectedRow As MTableMachiningGridBoxItem = DirectCast(CurrCell.DataContext, MTableMachiningGridBoxItem)
Dim bFirstInGroup As Boolean = True
For TableIndex = 0 To MTableDbVM.refMTableDbVM.TablesList.Count - 1
Dim CurrTable As MTableListBoxItem = MTableDbVM.refMTableDbVM.TablesList(TableIndex)
If CurrTable.IsSelected Then
Dim CurrMachiningIndex As Integer = CurrTable.SelMachine.MachiningList.IndexOf(SelectedRow)
If CurrMachiningIndex > 0 AndAlso CurrTable.SelMachine.MachiningList(CurrMachiningIndex - 1).GroupId = SelectedRow.GroupId Then
bFirstInGroup = False
End If
End If
Next
Dim bSelCell As Boolean = False
If Not IsNothing(CurrCell) AndAlso TypeOf CurrCell.DataContext Is MTableMachiningGridBoxItem Then
If CurrCell.IsSelected And SelectedRow.GroupId <> 0 Then
If (bFirstInGroup And (CurrCell.Column Is MachiningDataGrid.Columns(1))) Then
CurrCell.IsEditing = True
If Not IsNothing(m_EditCell) AndAlso m_EditCell IsNot CurrCell Then m_EditCell.IsEditing = False
m_EditCell = CurrCell
bSelCell = True
ElseIf Not CurrCell.IsEditing And CurrCell.Column Is MachiningDataGrid.Columns(4) Then
SelectedRow.Join = Not SelectedRow.Join
SelectedRow.NotifyPropertyChanged("grh_Join")
End If
End If
If Not CurrCell.IsSelected Or ((Not bFirstInGroup Or CurrCell.Column IsNot MachiningDataGrid.Columns(1)) And CurrCell.Column IsNot MachiningDataGrid.Columns(4)) Or SelectedRow.GroupId = 0 Then
If Not IsNothing(m_EditCell) AndAlso m_EditCell.IsEditing Then
m_EditCell.IsEditing = False
Else
m_MTableDbVM.LeftSelect(SelectedRow)
End If
End If
End If
If Not bSelCell And Not CurrCell.IsEditing Or CurrCell.Column Is MachiningDataGrid.Columns(4) Then
If Not IsNothing(m_EditCell) Then m_EditCell.IsEditing = False
Keyboard.ClearFocus()
MachiningDataGrid.Focus()
e.Handled = True
End If
End Sub
Private Sub CellRightClick(sender As Object, e As MouseButtonEventArgs)
Dim CurrCell As DataGridCell = Nothing
If TypeOf sender Is DataGridCell Then
CurrCell = DirectCast(sender, DataGridCell)
End If
If Not IsNothing(CurrCell) AndAlso TypeOf CurrCell.DataContext Is MTableMachiningGridBoxItem Then
Dim SelectedRow As MTableMachiningGridBoxItem = DirectCast(CurrCell.DataContext, MTableMachiningGridBoxItem)
m_MTableDbVM.RightSelect(SelectedRow)
End If
If Not IsNothing(m_EditCell) Then m_EditCell.IsEditing = False
CurrCell.IsEditing = False
Keyboard.ClearFocus()
MachiningDataGrid.Focus()
e.Handled = True
End Sub
Private Sub RowMouseUp(sender As Object, e As MouseButtonEventArgs)
'e.Handled = True
End Sub
Private Sub CellRightUp(sender As Object, e As MouseButtonEventArgs)
e.Handled = True
End Sub
Private Sub CellMouseUp(sender As Object, e As MouseButtonEventArgs)
'e.Handled = True
End Sub
Private Sub TabControl_SelectionChanged()
End Sub
Public Function GetCell(row As Integer, column As Integer) As DataGridCell
Dim rowContainer As DataGridRow = GetRow(row)
If rowContainer IsNot Nothing Then
Dim presenter As DataGridCellsPresenter = FindChild(Of DataGridCellsPresenter)(rowContainer)
' try to get the cell but it may possibly be virtualized
Dim cell As DataGridCell = DirectCast(presenter.ItemContainerGenerator.ContainerFromIndex(column), DataGridCell)
If cell Is Nothing Then
' now try to bring into view and retreive the cell
MachiningDataGrid.ScrollIntoView(rowContainer, MachiningDataGrid.Columns(column))
cell = DirectCast(presenter.ItemContainerGenerator.ContainerFromIndex(column), DataGridCell)
End If
Return cell
End If
Return Nothing
End Function
Public Function GetRow(index As Integer) As DataGridRow
Dim row As DataGridRow = DirectCast(MachiningDataGrid.ItemContainerGenerator.ContainerFromIndex(index), DataGridRow)
If row Is Nothing Then
' may be virtualized, bring into view and try again
MachiningDataGrid.ScrollIntoView(MachiningDataGrid.Items(index))
row = DirectCast(MachiningDataGrid.ItemContainerGenerator.ContainerFromIndex(index), DataGridRow)
End If
Return row
End Function
Public Function FindChild(Of T As Class)(dependencyObject As DependencyObject) As T
Dim target As DependencyObject = dependencyObject
Do
target = DirectCast(VisualTreeHelper.GetChild(target, 0), DependencyObject)
Loop While target IsNot Nothing AndAlso Not (TypeOf target Is T)
Return TryCast(target, T)
End Function
Private Sub CsvWindowV_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
' Carico e imposto posizione finestra
WinPosFromIniToWindow(S_DOORS, K_MTABLEWINPLACE, Me)
End Sub
Private Sub CsvWindowV_Unloaded(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles Me.Closing
' Salvo posizione finestra
WinPosFromWindowToIni(Me, S_DOORS, K_MTABLEWINPLACE)
End Sub
Public Sub DataGrid_PreviewMouseDown(sender As Object, e As MouseButtonEventArgs)
If e.ChangedButton = MouseButton.Left Then
If (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then
e.Handled = True
End If
If (Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control AndAlso TypeOf sender Is DataGrid AndAlso DirectCast(sender, DataGrid).SelectedItems.Count >= 2 Then
e.Handled = True
End If
End If
End Sub
Public Sub DataGrid_PreviewMouseUp(sender As Object, e As MouseButtonEventArgs)
End Sub
Public Sub DataGrid_PreviewMouseMove(sender As Object, e As MouseEventArgs)
Dim Element As Object = e.OriginalSource
While Not IsNothing(Element) AndAlso Not TypeOf Element Is ScrollBar
Element = VisualTreeHelper.GetParent(CType(Element, DependencyObject))
End While
' verifico che non sia ScrollBar, di modo che questa continui a funzionare, ma non possa selezionare piu' righe trascinando
If IsNothing(Element) OrElse Not TypeOf Element Is ScrollBar Then
e.Handled = True
End If
End Sub
End Class