[corlib] Update ValueTuple implementation
[mono.git] / mcs / class / referencesource / System.Activities.Presentation / System.Activities.Presentation / System / Activities / Presentation / ContextMenuUtilities.cs
1 //----------------------------------------------------------------
2 // <copyright company="Microsoft Corporation">
3 //     Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 //----------------------------------------------------------------
6
7 namespace System.Activities.Presentation
8 {
9     using System.Activities.Presentation.Annotations;
10     using System.Activities.Presentation.Model;
11     using System.Activities.Presentation.View;
12     using System.Windows;
13     using System.Windows.Controls;
14     using System.Windows.Data;
15     using System.Windows.Input;
16
17     internal static class ContextMenuUtilities
18     {
19         public static void OnAddAnnotationCommandCanExecute(CanExecuteRoutedEventArgs e, EditingContext editingContext)
20         {
21             OnAddAnnotationCommandCanExecute(e, editingContext, EditingContextUtilities.GetSingleSelectedModelItem(editingContext));
22         }
23
24         public static void OnAddAnnotationCommandCanExecute(CanExecuteRoutedEventArgs e, EditingContext editingContext, DataGrid dataGrid)
25         {
26             OnAddAnnotationCommandCanExecute(e, editingContext, DataGridHelper.GetSingleSelectedObject(dataGrid));
27         }
28
29         public static void OnAddAnnotationCommandCanExecute(CanExecuteRoutedEventArgs e, EditingContext editingContext, ModelItem modelItem)
30         {
31             e.Handled = true;
32
33             if (modelItem == null || !DesignerConfigurationServiceUtilities.IsAnnotationEnabled(editingContext) || EditingContextUtilities.IsReadOnly(editingContext))
34             {
35                 e.CanExecute = false;
36                 return;
37             }
38
39             e.CanExecute = !modelItem.HasAnnotation();
40         }
41
42         public static void OnDeleteAnnotationCommandCanExecute(CanExecuteRoutedEventArgs e, EditingContext editingContext)
43         {
44             OnDeleteAnnotationCommandCanExecute(e, editingContext, EditingContextUtilities.GetSingleSelectedModelItem(editingContext));
45         }
46
47         public static void OnDeleteAnnotationCommandCanExecute(CanExecuteRoutedEventArgs e, EditingContext editingContext, DataGrid dataGrid)
48         {
49             OnDeleteAnnotationCommandCanExecute(e, editingContext, DataGridHelper.GetSingleSelectedObject(dataGrid));
50         }
51
52         public static void OnDeleteAnnotationCommandCanExecute(CanExecuteRoutedEventArgs e, EditingContext editingContext, ModelItem modelItem)
53         {
54             e.Handled = true;
55
56             if (modelItem == null || !DesignerConfigurationServiceUtilities.IsAnnotationEnabled(editingContext) || EditingContextUtilities.IsReadOnly(editingContext))
57             {
58                 e.CanExecute = false;
59                 return;
60             }
61
62             e.CanExecute = modelItem.HasAnnotation();
63         }
64
65         public static void OnDeleteAllAnnotationCommandCanExecute(CanExecuteRoutedEventArgs e, EditingContext editingContext)
66         {
67             e.Handled = true;
68
69             if (!DesignerConfigurationServiceUtilities.IsAnnotationEnabled(editingContext) || EditingContextUtilities.IsReadOnly(editingContext))
70             {
71                 e.CanExecute = false;
72             }
73             else
74             {
75                 e.CanExecute = true;
76             }
77         }
78         
79         // var/arg designer
80         public static void OnDeleteCommandCanExecute(CanExecuteRoutedEventArgs e, DataGrid dataGrid)
81         {
82             e.Handled = true;
83
84             if (dataGrid == null || dataGrid.SelectedItems == null || dataGrid.SelectedItems.Count == 0)
85             {
86                 e.CanExecute = false;
87             }
88
89             if (dataGrid.SelectedItems.Count == 1 && dataGrid.SelectedItems[0] == CollectionView.NewItemPlaceholder)
90             {
91                 e.CanExecute = false;
92             }
93
94             e.CanExecute = true;
95         }
96
97         public static void OnAddAnnotationCommandExecuted(ExecutedRoutedEventArgs e, ModelItem modelItem)
98         {
99             ModelProperty property = modelItem.Properties.Find(Annotation.AnnotationTextPropertyName);
100             if (property != null)
101             {
102                 using (ModelEditingScope editingScope = modelItem.BeginEdit(SR.AddAnnotationDescription))
103                 {
104                     property.SetValue(string.Empty);
105                     ViewStateService viewStateService = modelItem.GetEditingContext().Services.GetService<ViewStateService>();
106                     viewStateService.StoreViewStateWithUndo(modelItem, Annotation.IsAnnotationDockedViewStateName, false);
107                     editingScope.Complete();
108                 }
109
110                 if (modelItem.View != null)
111                 {
112                     WorkflowViewElement element = modelItem.View as WorkflowViewElement;
113                     if (element != null)
114                     {
115                         element.OnEditAnnotation();
116                     }
117                 }
118             }
119
120             e.Handled = true;
121         }
122
123         public static void OnEditAnnotationCommandExecuted(ExecutedRoutedEventArgs e, ModelItem modelItem)
124         {
125             WorkflowViewElement element = modelItem.View as WorkflowViewElement;
126             if (element != null)
127             {
128                 element.OnEditAnnotation();
129             }
130
131             e.Handled = true;
132         }
133
134         public static void OnDeleteAnnotationCommandExecuted(ExecutedRoutedEventArgs e, ModelItem modelItem)
135         {
136             using (ModelEditingScope editingScope = modelItem.BeginEdit(SR.DeleteAnnotationDescription))
137             {
138                 modelItem.Properties[Annotation.AnnotationTextPropertyName].SetValue(null);
139                 ViewStateService viewStateService = modelItem.GetEditingContext().Services.GetService<ViewStateService>();
140                 viewStateService.StoreViewStateWithUndo(modelItem, Annotation.IsAnnotationDockedViewStateName, null);
141                 editingScope.Complete();
142             }
143
144             e.Handled = true;
145         }
146
147         public static void OnAnnotationMenuLoaded(EditingContext editingContext, Control control, RoutedEventArgs e)
148         {
149             if (DesignerConfigurationServiceUtilities.IsAnnotationEnabled(editingContext))
150             {
151                 control.Visibility = Visibility.Visible;
152             }
153             else
154             {
155                 control.Visibility = Visibility.Collapsed;
156             }
157
158             e.Handled = true;
159         }
160     }
161 }