Browse Source

Fixed issues with property/field selection in some refactoring snippet dialogs.

pull/45/merge
Andreas Weizel 12 years ago
parent
commit
034cf176b3
  1. 13
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertCtorDialog.xaml
  2. 27
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertCtorDialog.xaml.cs
  3. 15
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml
  4. 35
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml.cs
  5. 15
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/PropertyOrFieldWrapper.cs

13
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertCtorDialog.xaml

@ -18,14 +18,21 @@
Text="{sd:Localize AddIns.SharpRefactoring.InsertCtor.Description}" Text="{sd:Localize AddIns.SharpRefactoring.InsertCtor.Description}"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
<ListView x:Name="varList" Grid.Row="1" <ListView x:Name="varList" Grid.Row="1"
SelectionMode="Multiple" KeyboardNavigation.TabNavigation="Cycle" KeyboardNavigation.TabNavigation="Cycle"
ItemContainerStyle="{x:Static sd:GlobalStyles.ListViewItemFocusHighlightStyle}" MaxHeight="300"> MaxHeight="300">
<ListView.View> <ListView.View>
<GridView> <GridView>
<GridViewColumn Header="{sd:Localize AddIns.SharpRefactoring.InsertCtor.VariableLabel}"> <GridViewColumn Header="{sd:Localize AddIns.SharpRefactoring.InsertCtor.VariableLabel}">
<GridViewColumn.CellTemplate> <GridViewColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<CheckBox Content="{Binding Text}" IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" /> <Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" IsChecked="{Binding IsIncluded}" VerticalAlignment="Center" Margin="0,0,3,0" />
<TextBlock Grid.Column="1" Text="{Binding Text}" />
</Grid>
</DataTemplate> </DataTemplate>
</GridViewColumn.CellTemplate> </GridViewColumn.CellTemplate>
</GridViewColumn> </GridViewColumn>

27
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertCtorDialog.xaml.cs

@ -80,7 +80,8 @@ namespace CSharpBinding.Refactoring
protected override string GenerateCode(ITypeDefinition currentClass) protected override string GenerateCode(ITypeDefinition currentClass)
{ {
List<PropertyOrFieldWrapper> filtered = this.varList.SelectedItems.OfType<PropertyOrFieldWrapper>() List<PropertyOrFieldWrapper> filtered = parameterList
.Where(p => p.IsIncluded)
.OrderBy(p => p.Index) .OrderBy(p => p.Index)
.ToList(); .ToList();
@ -209,9 +210,9 @@ namespace CSharpBinding.Refactoring
if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && allAccessKey == e.SystemKey) { if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && allAccessKey == e.SystemKey) {
if (AllSelected) if (AllSelected)
varList.UnselectAll(); SelectAllUnchecked();
else else
varList.SelectAll(); SelectAllChecked();
e.Handled = true; e.Handled = true;
} }
if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && upAccessKey == e.SystemKey) { if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && upAccessKey == e.SystemKey) {
@ -266,18 +267,32 @@ namespace CSharpBinding.Refactoring
); );
} }
void SelectAllChecked()
{
foreach (var param in parameterList) {
param.IsIncluded = true;
}
}
void SelectAllChecked(object sender, System.Windows.RoutedEventArgs e) void SelectAllChecked(object sender, System.Windows.RoutedEventArgs e)
{ {
this.varList.SelectAll(); SelectAllChecked();
}
void SelectAllUnchecked()
{
foreach (var param in parameterList) {
param.IsIncluded = false;
}
} }
void SelectAllUnchecked(object sender, System.Windows.RoutedEventArgs e) void SelectAllUnchecked(object sender, System.Windows.RoutedEventArgs e)
{ {
this.varList.UnselectAll(); SelectAllUnchecked();
} }
bool AllSelected { bool AllSelected {
get { return varList.SelectedItems.Count == varList.Items.Count; } get { return parameterList.Count(p => p.IsIncluded) == parameterList.Count; }
} }
protected override void CancelButtonClick(object sender, System.Windows.RoutedEventArgs e) protected override void CancelButtonClick(object sender, System.Windows.RoutedEventArgs e)

15
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml

@ -14,14 +14,17 @@
<TextBlock Margin="3" <TextBlock Margin="3"
Text="{sd:Localize AddIns.SharpRefactoring.OverrideToStringMethod.Description}" Text="{sd:Localize AddIns.SharpRefactoring.OverrideToStringMethod.Description}"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
<ListBox x:Name="listBox" Grid.Row="1" Margin="4" SelectionMode="Multiple" <ListBox x:Name="listBox" Grid.Row="1" Margin="4" SelectionMode="Multiple">
ItemContainerStyle="{x:Static sd:GlobalStyles.ListBoxItemFocusHighlightStyle}">
<ListBox.ItemTemplate> <ListBox.ItemTemplate>
<DataTemplate> <DataTemplate>
<!-- The checkbox is toggling the actual IsSelected property on the container (ListBoxItem), so it'll update ListBox.SelectedItems --> <Grid>
<!-- Focusable=false because the ListViewItem is already focusable --> <Grid.ColumnDefinitions>
<CheckBox Content="{Binding Text}" <ColumnDefinition Width="Auto" />
IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" /> <ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" IsChecked="{Binding IsIncluded}" VerticalAlignment="Center" Margin="0,0,3,0" />
<TextBlock Grid.Column="1" Text="{Binding Text}" />
</Grid>
</DataTemplate> </DataTemplate>
</ListBox.ItemTemplate> </ListBox.ItemTemplate>
</ListBox> </ListBox>

35
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml.cs

@ -24,6 +24,7 @@ namespace CSharpBinding.Refactoring
public partial class OverrideToStringMethodDialog : AbstractInlineRefactorDialog public partial class OverrideToStringMethodDialog : AbstractInlineRefactorDialog
{ {
AstNode baseCallNode; AstNode baseCallNode;
IList<PropertyOrFieldWrapper> parameterList;
public OverrideToStringMethodDialog(InsertionContext context, ITextEditor editor, ITextAnchor anchor, IList<PropertyOrFieldWrapper> fields, AstNode baseCallNode) public OverrideToStringMethodDialog(InsertionContext context, ITextEditor editor, ITextAnchor anchor, IList<PropertyOrFieldWrapper> fields, AstNode baseCallNode)
: base(context, editor, anchor) : base(context, editor, anchor)
@ -31,14 +32,17 @@ namespace CSharpBinding.Refactoring
InitializeComponent(); InitializeComponent();
this.baseCallNode = baseCallNode; this.baseCallNode = baseCallNode;
parameterList = fields;
this.listBox.ItemsSource = fields; this.listBox.ItemsSource = fields;
listBox.SelectAll(); SelectAllChecked();
} }
protected override string GenerateCode(ITypeDefinition currentClass) protected override string GenerateCode(ITypeDefinition currentClass)
{ {
string[] fields = listBox.SelectedItems.OfType<PropertyOrFieldWrapper>().Select(f2 => f2.MemberName).ToArray(); // string[] fields = listBox.SelectedItems.OfType<PropertyOrFieldWrapper>().Select(f2 => f2.MemberName).ToArray();
string[] fields = parameterList.Where(f => f.IsIncluded).Select(f2 => f2.MemberName).ToArray();
PrimitiveExpression formatString = new PrimitiveExpression(GenerateFormatString(currentClass, editor.Language.CodeGenerator, fields)); PrimitiveExpression formatString = new PrimitiveExpression(GenerateFormatString(currentClass, editor.Language.CodeGenerator, fields));
List<Expression> param = new List<Expression>() { formatString }; List<Expression> param = new List<Expression>() { formatString };
ReturnStatement ret = new ReturnStatement(new InvocationExpression( ReturnStatement ret = new ReturnStatement(new InvocationExpression(
@ -48,8 +52,7 @@ namespace CSharpBinding.Refactoring
if (baseCallNode != null) { if (baseCallNode != null) {
MethodDeclaration insertedOverrideMethod = refactoringContext.GetNode().PrevSibling as MethodDeclaration; MethodDeclaration insertedOverrideMethod = refactoringContext.GetNode().PrevSibling as MethodDeclaration;
if (insertedOverrideMethod == null) if (insertedOverrideMethod == null) {
{
// We are not inside of a method declaration // We are not inside of a method declaration
return null; return null;
} }
@ -85,18 +88,32 @@ namespace CSharpBinding.Refactoring
return "[" + currentClass.Name + fieldsString + "]"; return "[" + currentClass.Name + fieldsString + "]";
} }
void SelectAllChecked()
{
foreach (var param in parameterList) {
param.IsIncluded = true;
}
}
void SelectAllChecked(object sender, System.Windows.RoutedEventArgs e) void SelectAllChecked(object sender, System.Windows.RoutedEventArgs e)
{ {
listBox.SelectAll(); SelectAllChecked();
}
void SelectAllUnchecked()
{
foreach (var param in parameterList) {
param.IsIncluded = false;
}
} }
void SelectAllUnchecked(object sender, System.Windows.RoutedEventArgs e) void SelectAllUnchecked(object sender, System.Windows.RoutedEventArgs e)
{ {
listBox.UnselectAll(); SelectAllUnchecked();
} }
bool AllSelected { bool AllSelected {
get { return listBox.SelectedItems.Count == listBox.Items.Count; } get { return parameterList.Count(p => p.IsIncluded) == parameterList.Count; }
} }
protected override void OnKeyDown(KeyEventArgs e) protected override void OnKeyDown(KeyEventArgs e)
@ -105,9 +122,9 @@ namespace CSharpBinding.Refactoring
if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && allAccessKey == e.SystemKey) { if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && allAccessKey == e.SystemKey) {
if (AllSelected) if (AllSelected)
listBox.UnselectAll(); SelectAllUnchecked();
else else
listBox.SelectAll(); SelectAllChecked();
e.Handled = true; e.Handled = true;
} }

15
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/PropertyOrFieldWrapper.cs

@ -12,6 +12,8 @@ namespace CSharpBinding.Refactoring
{ {
public class PropertyOrFieldWrapper : INotifyPropertyChanged public class PropertyOrFieldWrapper : INotifyPropertyChanged
{ {
bool isIncluded;
/// <summary> /// <summary>
/// Underlying member. Always IField or IProperty. /// Underlying member. Always IField or IProperty.
/// </summary> /// </summary>
@ -20,6 +22,8 @@ namespace CSharpBinding.Refactoring
public PropertyOrFieldWrapper(IMember member) public PropertyOrFieldWrapper(IMember member)
{ {
isIncluded = false;
if (member == null) if (member == null)
throw new ArgumentNullException("member"); throw new ArgumentNullException("member");
if (!(member is IField || member is IProperty)) if (!(member is IField || member is IProperty))
@ -34,6 +38,17 @@ namespace CSharpBinding.Refactoring
this.text = ambience.ConvertEntity(member); this.text = ambience.ConvertEntity(member);
} }
public bool IsIncluded
{
get {
return isIncluded;
}
set {
isIncluded = value;
OnPropertyChanged("IsIncluded");
}
}
public string MemberName { public string MemberName {
get { return Member.Name; } get { return Member.Name; }
} }

Loading…
Cancel
Save