提交 67556304 编写于 作者: C chandera

Make the Rename Dashboard more closely match Find:

     * Gray background
     * No border
     * No padding on top or right
     * Colored bar at bottom of dashboard

     This requires us to set UseLayoutRounding=True, since we're trying to draw straight lines (https://msdn.microsoft.com/en-us/library/system.windows.uielement.uselayoutrounding%28v=vs.95%29.aspx). (changeset 1411219)
上级 a16eff0b
......@@ -7,6 +7,7 @@
<SolidColorBrush x:Key="CheckBoxTextBrush" Color="Black"/>
<SolidColorBrush x:Key="RenameResolvableConflictTextBrush" Color="Green"/>
<SolidColorBrush x:Key="RenameErrorTextBrush">Red</SolidColorBrush>
<SolidColorBrush x:Key="BackgroundBrush">White</SolidColorBrush>
<SolidColorBrush x:Key="BackgroundBrush">LightGray</SolidColorBrush>
<SolidColorBrush x:Key="AccentBarBrush">Blue</SolidColorBrush>
<Style TargetType="Button" x:Key="ButtonStyle" BasedOn="{StaticResource {x:Type Button}}"/>
</ResourceDictionary>
\ No newline at end of file
......@@ -13,7 +13,8 @@
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"
MinWidth="180"
Focusable="True"
AutomationProperties.AutomationId="Rename">
AutomationProperties.AutomationId="Rename"
UseLayoutRounding="True">
<UserControl.Resources>
<ResourceDictionary>
......@@ -37,63 +38,69 @@
</ResourceDictionary>
</UserControl.Resources>
<Border BorderBrush="{DynamicResource {x:Static SystemColors.ActiveBorderBrushKey}}"
Background="{DynamicResource {x:Static utilities:CodeAnalysisColors.BackgroundBrushKey}}"
BorderThickness="1"
Padding="4">
<StackPanel>
<Grid Height="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- error or info icon -->
<imaging:CrispImage Grid.Column="0" Height="16" Width="16" Margin="0,0,4,0" VerticalAlignment="Center">
<!-- determine the image visibility and icon from the severity -->
<imaging:CrispImage.Style>
<Style TargetType="imaging:CrispImage">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Severity}" Value="Error">
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Moniker" Value="{x:Static imagecatalog:KnownMonikers.StatusError}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Severity}" Value="Info">
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Moniker" Value="{x:Static imagecatalog:KnownMonikers.StatusInformation}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</imaging:CrispImage.Style>
</imaging:CrispImage>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<!-- description text -->
<TextBlock Grid.Column="1" Text="{Binding Path=Description}" FontWeight="Bold" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Stretch">
<Border Grid.Row="0" BorderBrush="Transparent"
Background="{DynamicResource {x:Static utilities:CodeAnalysisColors.BackgroundBrushKey}}"
BorderThickness="0"
Padding="7">
<StackPanel>
<Grid Height="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- error or info icon -->
<imaging:CrispImage Grid.Column="0" Height="16" Width="16" Margin="0,0,4,0" VerticalAlignment="Center">
<!-- determine the image visibility and icon from the severity -->
<imaging:CrispImage.Style>
<Style TargetType="imaging:CrispImage">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Severity}" Value="Error">
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Moniker" Value="{x:Static imagecatalog:KnownMonikers.StatusError}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Severity}" Value="Info">
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Moniker" Value="{x:Static imagecatalog:KnownMonikers.StatusInformation}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</imaging:CrispImage.Style>
</imaging:CrispImage>
<!-- description text -->
<TextBlock Grid.Column="1" Text="{Binding Path=Description}" FontWeight="Bold" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Stretch">
<!-- if severity is error, make the description text red -->
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="{StaticResource ForegroundText}"/>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="{StaticResource ForegroundText}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Severity}" Value="Error">
<Setter Property="Foreground" Value="{DynamicResource {x:Static utilities:CodeAnalysisColors.RenameErrorTextBrushKey}}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Severity}" Value="Error">
<Setter Property="Foreground" Value="{DynamicResource {x:Static utilities:CodeAnalysisColors.RenameErrorTextBrushKey}}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</TextBlock>
<Button
<Button
Name="CloseButton"
Grid.Column="2"
Width="18" Height="18"
......@@ -107,87 +114,87 @@
Click="CloseButton_Click"
ToolTip="{Binding ElementName=dashboard, Path=CancelToolTip}"/>
</Grid>
</Grid>
<TextBlock Text="{Binding Path=SearchText}" Margin="0,4,0,8" Foreground="{StaticResource ForegroundText}"/>
<TextBlock Text="{Binding Path=SearchText}" Margin="0,4,0,8" Foreground="{StaticResource ForegroundText}"/>
<!-- conflicts and errors -->
<StackPanel Margin="0,0,0,8">
<!-- conflicts and errors -->
<StackPanel Margin="0,0,0,8">
<StackPanel.Style>
<Style TargetType="StackPanel">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Severity}" Value="Error">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Severity}" Value="Info">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Text="{Binding Path=ResolvableConflictText}" Foreground="{DynamicResource {x:Static utilities:CodeAnalysisColors.RenameResolvableConflictTextBrushKey}}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<StackPanel.Style>
<Style TargetType="StackPanel">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=HasResolvableConflicts}" Value="True">
<DataTrigger Binding="{Binding Path=Severity}" Value="Error">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Text="{Binding Path=UnresolvableConflictText}" Foreground="{DynamicResource {x:Static utilities:CodeAnalysisColors.RenameErrorTextBrushKey}}" FontWeight="Bold">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=HasUnresolvableConflicts}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Text="{Binding Path=ErrorText}" Foreground="{DynamicResource {x:Static utilities:CodeAnalysisColors.RenameErrorTextBrushKey}}" FontWeight="Bold">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=HasError}" Value="True">
<DataTrigger Binding="{Binding Path=Severity}" Value="Info">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
<CheckBox Content="{Binding ElementName=dashboard, Path=RenameOverloads}" Margin="0,0,0,0" IsChecked="{Binding Path=DefaultRenameOverloadFlag, Mode=TwoWay}" Cursor="Arrow"
</StackPanel.Style>
<TextBlock Text="{Binding Path=ResolvableConflictText}" Foreground="{DynamicResource {x:Static utilities:CodeAnalysisColors.RenameResolvableConflictTextBrushKey}}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=HasResolvableConflicts}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Text="{Binding Path=UnresolvableConflictText}" Foreground="{DynamicResource {x:Static utilities:CodeAnalysisColors.RenameErrorTextBrushKey}}" FontWeight="Bold">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=HasUnresolvableConflicts}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Text="{Binding Path=ErrorText}" Foreground="{DynamicResource {x:Static utilities:CodeAnalysisColors.RenameErrorTextBrushKey}}" FontWeight="Bold">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=HasError}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
<CheckBox Content="{Binding ElementName=dashboard, Path=RenameOverloads}" Margin="0,0,0,0" IsChecked="{Binding Path=DefaultRenameOverloadFlag, Mode=TwoWay}" Cursor="Arrow"
Name="OverloadsCheckbox" Visibility="{Binding ElementName=dashboard, Path=RenameOverloadsVisibility}"/>
<CheckBox Name="CommentsCheckbox" Content="{Binding ElementName=dashboard, Path=SearchInComments}" Margin="0,0,0,0" IsChecked="{Binding Path=DefaultRenameInCommentsFlag, Mode=TwoWay}" Cursor="Arrow" />
<CheckBox Name="StringsCheckbox" Content="{Binding ElementName=dashboard, Path=SearchInStrings}" Margin="0,0,0,0" IsChecked="{Binding Path=DefaultRenameInStringsFlag, Mode=TwoWay}" Cursor="Arrow" />
<CheckBox Name="CommentsCheckbox" Content="{Binding ElementName=dashboard, Path=SearchInComments}" Margin="0,0,0,0" IsChecked="{Binding Path=DefaultRenameInCommentsFlag, Mode=TwoWay}" Cursor="Arrow" />
<CheckBox Name="StringsCheckbox" Content="{Binding ElementName=dashboard, Path=SearchInStrings}" Margin="0,0,0,0" IsChecked="{Binding Path=DefaultRenameInStringsFlag, Mode=TwoWay}" Cursor="Arrow" />
<CheckBox Name="PreviewChangesCheckbox" Content="{Binding ElementName=dashboard, Path=PreviewChanges}" Margin="0,8,0,0" IsChecked="{Binding Path=DefaultPreviewChangesFlag, Mode=TwoWay}" Cursor="Arrow"/>
<CheckBox Name="PreviewChangesCheckbox" Content="{Binding ElementName=dashboard, Path=PreviewChanges}" Margin="0,8,0,0" IsChecked="{Binding Path=DefaultPreviewChangesFlag, Mode=TwoWay}" Cursor="Arrow"/>
<Button Name="ApplyButton" Click="Apply_Click" IsDefault="True" MinWidth="75" MinHeight="23" Padding="10,1,10,1" Margin="0,8,0,0" HorizontalAlignment="Right"
<Button Name="ApplyButton" Click="Apply_Click" IsDefault="True" MinWidth="75" MinHeight="23" Padding="10,1,10,1" Margin="0,8,0,0" HorizontalAlignment="Right"
ToolTip="{Binding ElementName=dashboard, Path=ApplyToolTip}"
Style="{DynamicResource {x:Static utilities:CodeAnalysisColors.ButtonStyleKey}}" >
<AccessText Text="{Binding ElementName=dashboard, Path=ApplyRename}" />
</Button>
<AccessText Text="{Binding ElementName=dashboard, Path=ApplyRename}" />
</Button>
</StackPanel>
</Border>
</StackPanel>
</Border>
<Rectangle Name="DashboardAccentBar" Grid.Row="1" Height="4" Fill="{DynamicResource {x:Static utilities:CodeAnalysisColors.AccentBarColorKey}}" />
</Grid>
</UserControl>
......@@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
......@@ -229,7 +230,6 @@ private void OnElementSizeChanged(object sender, SizeChangedEventArgs e)
private void PositionDashboard()
{
const int Padding = 10;
var top = _textView.ViewportTop;
if (_findAdornmentLayer != null && _findAdornmentLayer.Elements.Count != 0)
{
......@@ -237,8 +237,8 @@ private void PositionDashboard()
top += adornment.RenderSize.Height;
}
Canvas.SetTop(this, top + Padding);
Canvas.SetLeft(this, _textView.ViewportLeft + _textView.VisualElement.RenderSize.Width - this.RenderSize.Width - Padding);
Canvas.SetTop(this, top);
Canvas.SetLeft(this, _textView.ViewportLeft + _textView.VisualElement.RenderSize.Width - this.RenderSize.Width);
}
private void OnTextViewGotAggregateFocus(object sender, EventArgs e)
......
......@@ -29,7 +29,17 @@ internal class ModelComputation<TModel> : ForegroundThreadAffinitizedObject
#region Fields that can only be accessed from the foreground thread
private readonly IController<TModel> _controller;
private readonly TaskScheduler _taskScheduler;
private readonly TaskScheduler __taskScheduler;
private TaskScheduler _taskScheduler
{
get
{
AssertIsForeground();
return __taskScheduler;
}
}
private readonly CancellationTokenSource _stopTokenSource;
// There may be multiple compute tasks chained together. When a compute task finishes it
......@@ -45,7 +55,7 @@ internal class ModelComputation<TModel> : ForegroundThreadAffinitizedObject
public ModelComputation(IController<TModel> controller, TaskScheduler computationTaskScheduler)
{
_controller = controller;
_taskScheduler = computationTaskScheduler;
__taskScheduler = computationTaskScheduler;
_stopTokenSource = new CancellationTokenSource();
_stopCancellationToken = _stopTokenSource.Token;
......
......@@ -11,6 +11,7 @@ internal static class CodeAnalysisColors
private static object s_systemCaptionTextBrushKey = "SystemCaptionTextBrush";
private static object s_backgroundBrushKey = "BackgroundBrush";
private static object s_buttonStyleKey = "ButtonStyle";
private static object s_accentBarColorKey = "AccentBarBrush";
public static object SystemCaptionTextColorKey
{
......@@ -102,5 +103,18 @@ public static object ButtonStyleKey
s_buttonStyleKey = value;
}
}
public static object AccentBarColorKey
{
get
{
return s_accentBarColorKey;
}
set
{
s_accentBarColorKey = value;
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册