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 @@ @@ -18,14 +18,21 @@
Text="{sd:Localize AddIns.SharpRefactoring.InsertCtor.Description}"
TextWrapping="Wrap" />
<ListView x:Name="varList" Grid.Row="1"
SelectionMode="Multiple" KeyboardNavigation.TabNavigation="Cycle"
ItemContainerStyle="{x:Static sd:GlobalStyles.ListViewItemFocusHighlightStyle}" MaxHeight="300">
KeyboardNavigation.TabNavigation="Cycle"
MaxHeight="300">
<ListView.View>
<GridView>
<GridViewColumn Header="{sd:Localize AddIns.SharpRefactoring.InsertCtor.VariableLabel}">
<GridViewColumn.CellTemplate>
<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>
</GridViewColumn.CellTemplate>
</GridViewColumn>

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

@ -80,7 +80,8 @@ namespace CSharpBinding.Refactoring @@ -80,7 +80,8 @@ namespace CSharpBinding.Refactoring
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)
.ToList();
@ -209,9 +210,9 @@ namespace CSharpBinding.Refactoring @@ -209,9 +210,9 @@ namespace CSharpBinding.Refactoring
if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && allAccessKey == e.SystemKey) {
if (AllSelected)
varList.UnselectAll();
SelectAllUnchecked();
else
varList.SelectAll();
SelectAllChecked();
e.Handled = true;
}
if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && upAccessKey == e.SystemKey) {
@ -266,18 +267,32 @@ namespace CSharpBinding.Refactoring @@ -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)
{
this.varList.SelectAll();
SelectAllChecked();
}
void SelectAllUnchecked()
{
foreach (var param in parameterList) {
param.IsIncluded = false;
}
}
void SelectAllUnchecked(object sender, System.Windows.RoutedEventArgs e)
{
this.varList.UnselectAll();
SelectAllUnchecked();
}
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)

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

@ -14,14 +14,17 @@ @@ -14,14 +14,17 @@
<TextBlock Margin="3"
Text="{sd:Localize AddIns.SharpRefactoring.OverrideToStringMethod.Description}"
TextWrapping="Wrap" />
<ListBox x:Name="listBox" Grid.Row="1" Margin="4" SelectionMode="Multiple"
ItemContainerStyle="{x:Static sd:GlobalStyles.ListBoxItemFocusHighlightStyle}">
<ListBox x:Name="listBox" Grid.Row="1" Margin="4" SelectionMode="Multiple">
<ListBox.ItemTemplate>
<DataTemplate>
<!-- The checkbox is toggling the actual IsSelected property on the container (ListBoxItem), so it'll update ListBox.SelectedItems -->
<!-- Focusable=false because the ListViewItem is already focusable -->
<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>
</ListBox.ItemTemplate>
</ListBox>

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

@ -24,6 +24,7 @@ namespace CSharpBinding.Refactoring @@ -24,6 +24,7 @@ namespace CSharpBinding.Refactoring
public partial class OverrideToStringMethodDialog : AbstractInlineRefactorDialog
{
AstNode baseCallNode;
IList<PropertyOrFieldWrapper> parameterList;
public OverrideToStringMethodDialog(InsertionContext context, ITextEditor editor, ITextAnchor anchor, IList<PropertyOrFieldWrapper> fields, AstNode baseCallNode)
: base(context, editor, anchor)
@ -31,14 +32,17 @@ namespace CSharpBinding.Refactoring @@ -31,14 +32,17 @@ namespace CSharpBinding.Refactoring
InitializeComponent();
this.baseCallNode = baseCallNode;
parameterList = fields;
this.listBox.ItemsSource = fields;
listBox.SelectAll();
SelectAllChecked();
}
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));
List<Expression> param = new List<Expression>() { formatString };
ReturnStatement ret = new ReturnStatement(new InvocationExpression(
@ -48,8 +52,7 @@ namespace CSharpBinding.Refactoring @@ -48,8 +52,7 @@ namespace CSharpBinding.Refactoring
if (baseCallNode != null) {
MethodDeclaration insertedOverrideMethod = refactoringContext.GetNode().PrevSibling as MethodDeclaration;
if (insertedOverrideMethod == null)
{
if (insertedOverrideMethod == null) {
// We are not inside of a method declaration
return null;
}
@ -85,18 +88,32 @@ namespace CSharpBinding.Refactoring @@ -85,18 +88,32 @@ namespace CSharpBinding.Refactoring
return "[" + currentClass.Name + fieldsString + "]";
}
void SelectAllChecked()
{
foreach (var param in parameterList) {
param.IsIncluded = true;
}
}
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)
{
listBox.UnselectAll();
SelectAllUnchecked();
}
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)
@ -105,9 +122,9 @@ namespace CSharpBinding.Refactoring @@ -105,9 +122,9 @@ namespace CSharpBinding.Refactoring
if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && allAccessKey == e.SystemKey) {
if (AllSelected)
listBox.UnselectAll();
SelectAllUnchecked();
else
listBox.SelectAll();
SelectAllChecked();
e.Handled = true;
}

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

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

Loading…
Cancel
Save