Skip to content

Commit 720ca92

Browse files
committed
Add context menus for data grids (Delete, Enable, Disable)
1 parent 324139e commit 720ca92

File tree

7 files changed

+93
-0
lines changed

7 files changed

+93
-0
lines changed

solution/GraphicalDebugging/GeometryWatchControl.xaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@
6060
BeginningEdit="dataGrid_BeginningEdit"
6161
CellEditEnding="dataGrid_CellEditEnding"
6262
PreviewMouseLeftButtonDown="dataGrid_PreviewMouseLeftButtonDown">
63+
<DataGrid.ContextMenu>
64+
<ContextMenu x:Name="dataGridContextMenu">
65+
<MenuItem x:Name="dataGridContextMenuEnable" Header="Enable" Click="dataGridContextMenuEnable_Click" />
66+
<MenuItem x:Name="dataGridContextMenuDisable" Header="Disable" Click="dataGridContextMenuDisable_Click" />
67+
<Separator />
68+
<MenuItem x:Name="dataGridContextMenuDelete" Header="Delete" Click="dataGridContextMenuDelete_Click" />
69+
</ContextMenu>
70+
</DataGrid.ContextMenu>
6371
<DataGrid.ColumnHeaderStyle>
6472
<Style TargetType="{x:Type DataGridColumnHeader}">
6573
<Setter Property="Background" Value="{DynamicResource VsBrush.GridHeadingBackground}" />

solution/GraphicalDebugging/GeometryWatchControl.xaml.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,5 +546,25 @@ private void colorTextBlock_MouseDown(object sender, System.Windows.Input.MouseB
546546
}
547547
}
548548
}
549+
550+
private void dataGridContextMenuDelete_Click(object sender, RoutedEventArgs e)
551+
{
552+
Util.RemoveDataGridItems(dataGrid, Geometries,
553+
(int selectIndex) => ResetAt(new GeometryItem(), selectIndex),
554+
(GeometryItem geometry) => m_colorIds.Push(geometry.ColorId),
555+
() => UpdateItems(false));
556+
}
557+
558+
private void dataGridContextMenuEnable_Click(object sender, RoutedEventArgs e)
559+
{
560+
Util.EnableDataGridItems(dataGrid, Geometries,
561+
(GeometryItem geometry) => geometry.IsEnabled = true);
562+
}
563+
564+
private void dataGridContextMenuDisable_Click(object sender, RoutedEventArgs e)
565+
{
566+
Util.EnableDataGridItems(dataGrid, Geometries,
567+
(GeometryItem geometry) => geometry.IsEnabled = false);
568+
}
549569
}
550570
}

solution/GraphicalDebugging/GraphicalWatchControl.xaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
BeginningEdit="dataGrid_BeginningEdit"
3030
CellEditEnding="dataGrid_CellEditEnding"
3131
PreviewMouseLeftButtonDown="dataGrid_PreviewMouseLeftButtonDown">
32+
<DataGrid.ContextMenu>
33+
<ContextMenu x:Name="dataGridContextMenu">
34+
<MenuItem x:Name="dataGridContextMenuDelete" Header="Delete" Click="dataGridContextMenuDelete_Click" />
35+
</ContextMenu>
36+
</DataGrid.ContextMenu>
3237
<DataGrid.ColumnHeaderStyle>
3338
<Style TargetType="{x:Type DataGridColumnHeader}">
3439
<Setter Property="Background" Value="{DynamicResource VsBrush.GridHeadingBackground}" />

solution/GraphicalDebugging/GraphicalWatchControl.xaml.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,5 +271,13 @@ private void imageItem_Reset(object sender, RoutedEventArgs e)
271271
UpdateItem(false, i);
272272
}
273273
}
274+
275+
private void dataGridContextMenuDelete_Click(object sender, RoutedEventArgs e)
276+
{
277+
Util.RemoveDataGridItems(dataGrid, Variables,
278+
(int selectIndex) => ResetAt(new GraphicalItem(), selectIndex),
279+
(GraphicalItem variable) => { },
280+
() => { });
281+
}
274282
}
275283
}

solution/GraphicalDebugging/PlotWatchControl.xaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@
5656
BeginningEdit="dataGrid_BeginningEdit"
5757
CellEditEnding="dataGrid_CellEditEnding"
5858
PreviewMouseLeftButtonDown="dataGrid_PreviewMouseLeftButtonDown">
59+
<DataGrid.ContextMenu>
60+
<ContextMenu x:Name="dataGridContextMenu">
61+
<MenuItem x:Name="dataGridContextMenuEnable" Header="Enable" Click="dataGridContextMenuEnable_Click" />
62+
<MenuItem x:Name="dataGridContextMenuDisable" Header="Disable" Click="dataGridContextMenuDisable_Click" />
63+
<Separator />
64+
<MenuItem x:Name="dataGridContextMenuDelete" Header="Delete" Click="dataGridContextMenuDelete_Click" />
65+
</ContextMenu>
66+
</DataGrid.ContextMenu>
5967
<DataGrid.ColumnHeaderStyle>
6068
<Style TargetType="{x:Type DataGridColumnHeader}">
6169
<Setter Property="Background" Value="{DynamicResource VsBrush.GridHeadingBackground}" />

solution/GraphicalDebugging/PlotWatchControl.xaml.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ namespace GraphicalDebugging
99
using System;
1010
using System.Collections.ObjectModel;
1111
using System.Drawing;
12+
using System.Reflection;
1213
using System.Windows;
1314
using System.Windows.Controls;
1415
using System.Windows.Media.Imaging;
@@ -553,5 +554,25 @@ private void colorTextBlock_MouseDown(object sender, System.Windows.Input.MouseB
553554
}
554555
}
555556
}
557+
558+
private void dataGridContextMenuDelete_Click(object sender, RoutedEventArgs e)
559+
{
560+
Util.RemoveDataGridItems(dataGrid, Plots,
561+
(int selectIndex) => ResetAt(new PlotItem(), selectIndex),
562+
(PlotItem plot) => m_colorIds.Push(plot.ColorId),
563+
() => UpdateItems(false));
564+
}
565+
566+
private void dataGridContextMenuEnable_Click(object sender, RoutedEventArgs e)
567+
{
568+
Util.EnableDataGridItems(dataGrid, Plots,
569+
(PlotItem plot) => plot.IsEnabled = true);
570+
}
571+
572+
private void dataGridContextMenuDisable_Click(object sender, RoutedEventArgs e)
573+
{
574+
Util.EnableDataGridItems(dataGrid, Plots,
575+
(PlotItem plot) => plot.IsEnabled = false);
576+
}
556577
}
557578
}

solution/GraphicalDebugging/Util.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,29 @@ public static void DataGridItemPropertyChanged<Item>(System.Windows.Controls.Dat
466466
delegate (int index) { } );
467467
}
468468

469+
public delegate void ItemEnablePredicate<Item>(Item item);
470+
public static void EnableDataGridItems<Item>(System.Windows.Controls.DataGrid dataGrid,
471+
System.Collections.ObjectModel.ObservableCollection<Item> itemsCollection,
472+
ItemEnablePredicate<Item> enablePredicate)
473+
{
474+
if (dataGrid.SelectedItems.Count < 1)
475+
return;
476+
477+
int[] indexes = new int[dataGrid.SelectedItems.Count];
478+
int i = 0;
479+
foreach (var item in dataGrid.SelectedItems)
480+
{
481+
indexes[i] = dataGrid.Items.IndexOf(item);
482+
++i;
483+
}
484+
485+
foreach (int index in indexes)
486+
{
487+
Item item = itemsCollection[index];
488+
enablePredicate(item);
489+
}
490+
}
491+
469492
// https://softwaremechanik.wordpress.com/2013/10/02/how-to-make-all-wpf-datagrid-cells-have-a-single-click-to-edit/
470493
public static void DataGridSingleClickHack(DependencyObject originalSource)
471494
{

0 commit comments

Comments
 (0)