88 public partial class ScreenGridWindow : Window
99 {
1010 // TODO: Better separation of concerns (MVVM pattern)
11-
12- // TODO: Fix 'Golden Spiral' grid
13- // TODO: Disable rotate/flip buttons depends on grid type
14-
15- // TODO: Find corners by colors change in uniform color
16- // TODO: 'Auto-snap' option on/off
11+ // TODO: Disable rotate/flip buttons depending on grid type
1712 // TODO: Move window by cursor keys
1813 // TODO: Remove image files from resources
19-
20- // TODO: show checkboxes in menu items
14+ // TODO: Resize window using sides handles
2115
2216 public ScreenGridWindow ( )
2317 {
@@ -32,20 +26,20 @@ public ScreenGridWindow()
3226 this . DataContext = this . vm ;
3327 }
3428
35- private ContextMenu cntxMenu ;
29+ private ContextMenu mainMenu ;
3630
3731 private ViewModels . ScreenGridViewModel vm ;
3832
3933 private void Window_Loaded ( object sender , RoutedEventArgs e )
4034 {
41- this . cntxMenu = CreateContextMenu ( ) ;
35+ this . CreateContextMenu ( ) ;
4236 }
4337
4438 private void Window_MouseDown ( object sender , MouseButtonEventArgs e )
4539 {
4640 if ( e . ChangedButton == MouseButton . Right )
4741 {
48- this . cntxMenu . IsOpen = true ;
42+ this . mainMenu . IsOpen = true ;
4943 }
5044 else if ( e . ChangedButton == MouseButton . Left )
5145 {
@@ -54,32 +48,47 @@ private void Window_MouseDown(object sender, MouseButtonEventArgs e)
5448 }
5549 }
5650
57- private ContextMenu CreateContextMenu ( )
51+ private void CreateContextMenu ( )
5852 {
59- var cntMenu = new ContextMenu ( ) ;
53+ // TODO: use bindings to command with parameter
54+ this . mainMenu = new ContextMenu ( ) ;
6055
6156 foreach ( var gr in Models . Grids . GridModeItem . List )
6257 {
63- var menuItem = new MenuItem ( ) { Header = gr . Title , Tag = gr . GridMode , } ;
58+ var menuItem = new MenuItem
59+ {
60+ Header = gr . Title ,
61+ Tag = gr . GridMode ,
62+ } ;
63+
6464 menuItem . Click += ( s , e ) =>
6565 {
66+ // Uncheck all others
67+ foreach ( var item in this . mainMenu . Items )
68+ {
69+ var mi = item as MenuItem ;
70+ if ( ( mi != null ) && ( mi . Tag != null ) )
71+ {
72+ mi . IsChecked = false ;
73+ }
74+ }
75+
76+ menuItem . IsChecked = true ;
6677 this . vm . GridMode = ( Models . Grids . GridType ) ( ( s as MenuItem ) . Tag ) ;
6778 } ;
6879
69- cntMenu . Items . Add ( menuItem ) ;
80+ this . mainMenu . Items . Add ( menuItem ) ;
7081 }
7182
72- cntMenu . Items . Add ( new Separator ( ) ) ;
83+ this . mainMenu . Items . Add ( new Separator ( ) ) ;
7384
7485 var itMinimize = new MenuItem { Header = "Minimize" } ;
7586 itMinimize . Click += this . btnMinimize_Click ;
76- cntMenu . Items . Add ( itMinimize ) ;
87+ this . mainMenu . Items . Add ( itMinimize ) ;
7788
7889 var itClose = new MenuItem { Header = "Close" } ;
7990 itClose . Click += this . btnClose_Click ;
80- cntMenu . Items . Add ( itClose ) ;
81-
82- return cntMenu ;
91+ this . mainMenu . Items . Add ( itClose ) ;
8392 }
8493
8594 private void btnClose_Click ( object sender , RoutedEventArgs e )
@@ -94,7 +103,7 @@ private void btnMinimize_Click(object sender, RoutedEventArgs e)
94103
95104 private void btnMenu_Click ( object sender , RoutedEventArgs e )
96105 {
97- this . cntxMenu . IsOpen = true ;
106+ this . mainMenu . IsOpen = true ;
98107 }
99108
100109 // TODO: public method
0 commit comments