提交 4fe3dab7 编写于 作者: D David Poeschl 提交者: Ivan Basov

Change Signature - Add readonly Parameter Details dialog

上级 87df86eb
......@@ -130,7 +130,14 @@ private void Edit_Click(object sender, RoutedEventArgs e)
{
if (_viewModel.CanEdit)
{
// TODO
var parameterViewModel = new ParameterDetailsDialogViewModel(null, _viewModel.AllParameters[Members.SelectedIndex].ParameterSymbol);
var dialog = new ParameterDetailsDialog(parameterViewModel);
var result = dialog.ShowModal();
if (result == true)
{
// TODO
}
}
SetFocusToSelectedRow();
......
<vs:DialogWindow
x:Uid="ParameterDetailsDialog"
x:Name="dialog"
x:Class="Microsoft.VisualStudio.LanguageServices.Implementation.ChangeSignature.ParameterDetailsDialog"
x:ClassModifier="internal"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vs="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.15.0"
Height="200" Width="300"
MinHeight="200" MinWidth="300"
Title="{Binding ElementName=dialog, Path=ParameterDetailsDialogTitle}"
HasHelpButton="False"
ResizeMode="CanResizeWithGrip"
ShowInTaskbar="False"
HasDialogFrame="True"
WindowStartupLocation="CenterOwner">
<Window.Resources>
<Thickness x:Key="labelPadding">0, 5, 0, 2</Thickness>
<Thickness x:Key="okCancelButtonPadding">9,2,9,2</Thickness>
<Thickness x:Key="selectDeselectButtonPadding">9,2,9,2</Thickness>
<Thickness x:Key="cellPadding">4 0 8 0</Thickness>
<Thickness x:Key="textboxPadding">2</Thickness>
</Window.Resources>
<Grid Name="ContentGrid" Margin="11,6,11,11">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Height="Auto" Width="Auto" Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<Label>Modifier:</Label>
<Label Content="{Binding Modifier}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label>Type:</Label>
<Label Content="{Binding Type}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label>Name:</Label>
<Label Content="{Binding Name}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label>Default:</Label>
<Label Content="{Binding Default}"/>
</StackPanel>
</StackPanel>
<StackPanel Grid.Row="1"
HorizontalAlignment="Right"
Margin="0, 11, 0, 0"
Orientation="Horizontal" Width="153">
<vs:DialogButton x:Uid="OKButton"
Content="{Binding ElementName=dialog, Path=OK}"
Margin="0, 0, 0, 0"
Padding="{StaticResource ResourceKey=okCancelButtonPadding}"
Click="OK_Click"
IsEnabled="{Binding IsOkButtonEnabled, Mode=OneWay}"
IsDefault="True"
MinWidth="73"
MinHeight="21"/>
<vs:DialogButton x:Uid="CancelButton"
Content="{Binding ElementName=dialog, Path=Cancel}"
Margin="7, 0, 0, 0"
Padding="{StaticResource ResourceKey=okCancelButtonPadding}"
Click="Cancel_Click"
IsCancel="True"
MinWidth="73"
MinHeight="21"/>
</StackPanel>
</Grid>
</vs:DialogWindow>
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using Microsoft.VisualStudio.PlatformUI;
namespace Microsoft.VisualStudio.LanguageServices.Implementation.ChangeSignature
{
/// <summary>
/// Interaction logic for ParameterDetailsDialog.xaml
/// </summary>
internal partial class ParameterDetailsDialog : DialogWindow
{
private readonly ParameterDetailsDialogViewModel _viewModel;
// Expose localized strings for binding
public string ParameterDetailsDialogTitle { get { return ServicesVSResources.Parameter_Details; } }
public string OK { get { return ServicesVSResources.OK; } }
public string Cancel { get { return ServicesVSResources.Cancel; } }
// Nested dialog, so don't specify a helpTopic
internal ParameterDetailsDialog(ParameterDetailsDialogViewModel viewModel)
{
_viewModel = viewModel;
InitializeComponent();
DataContext = viewModel;
}
private void OK_Click(object sender, RoutedEventArgs e)
{
if (_viewModel.TrySubmit())
{
DialogResult = true;
}
}
private void Cancel_Click(object sender, RoutedEventArgs e)
{
DialogResult = false;
}
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.Linq;
using System.Windows.Controls;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.ChangeSignature;
using Microsoft.CodeAnalysis.Editor.Shared.Extensions;
using Microsoft.CodeAnalysis.Editor.Shared.Utilities;
using Microsoft.CodeAnalysis.Notification;
using Microsoft.VisualStudio.LanguageServices.Implementation.Utilities;
using Microsoft.VisualStudio.Text.Classification;
using Roslyn.Utilities;
namespace Microsoft.VisualStudio.LanguageServices.Implementation.ChangeSignature
{
// TODO: Dedupe against ParameterViewModel
internal class ParameterDetailsDialogViewModel : AbstractNotifyPropertyChanged
{
private readonly INotificationService _notificationService;
private readonly IParameterSymbol _parameterSymbol;
private RefKind _refKind;
internal ParameterDetailsDialogViewModel(INotificationService notificationService, IParameterSymbol parameterSymbol)
{
_notificationService = notificationService;
_parameterSymbol = parameterSymbol;
_refKind = parameterSymbol.RefKind;
}
public string Modifier
{
get
{
switch (_parameterSymbol.Language)
{
case LanguageNames.CSharp:
return ModifierText("out", "ref", "in", "params", "this");
case LanguageNames.VisualBasic:
return ModifierText(@ref: "ByRef", @params: "ParamArray", @this: "Me");
default:
return string.Empty;
}
string ModifierText(string @out = default, string @ref = default, string @in = default, string @params = default, string @this = default)
{
switch (_refKind)
{
case RefKind.Out:
return @out ?? string.Empty;
case RefKind.Ref:
return @ref ?? string.Empty;
case RefKind.In:
return @in ?? string.Empty;
}
return string.Empty;
}
}
}
public string Type => _parameterSymbol.Type.ToDisplayString(s_parameterDisplayFormat);
public string Name => _parameterSymbol.Name;
public string Default
{
get
{
if (!_parameterSymbol.HasExplicitDefaultValue)
{
return string.Empty;
}
switch (_parameterSymbol.Language)
{
case LanguageNames.CSharp:
return NullText("null");
case LanguageNames.VisualBasic:
return NullText("Nothing");
}
return string.Empty;
string NullText(string @null)
{
return _parameterSymbol.ExplicitDefaultValue == null ? @null :
_parameterSymbol.ExplicitDefaultValue is string ? "\"" + _parameterSymbol.ExplicitDefaultValue.ToString() + "\"" :
_parameterSymbol.ExplicitDefaultValue.ToString();
}
}
}
internal bool TrySubmit()
{
return IsOkButtonEnabled;
}
public bool IsOkButtonEnabled
{
get
{
// TODO
return true;
}
}
private static SymbolDisplayFormat s_parameterDisplayFormat = new SymbolDisplayFormat(
genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters,
miscellaneousOptions: SymbolDisplayMiscellaneousOptions.EscapeKeywordIdentifiers | SymbolDisplayMiscellaneousOptions.UseSpecialTypes,
parameterOptions:
SymbolDisplayParameterOptions.IncludeType |
SymbolDisplayParameterOptions.IncludeParamsRefOut |
SymbolDisplayParameterOptions.IncludeDefaultValue |
SymbolDisplayParameterOptions.IncludeExtensionThis |
SymbolDisplayParameterOptions.IncludeName);
}
}
......@@ -53,6 +53,9 @@
<Compile Update="Implementation\MoveToNamespace\MoveToNamespaceDialog.xaml.cs">
<DependentUpon>MoveToNamespaceDialog.xaml</DependentUpon>
</Compile>
<Compile Update="Implementation\ChangeSignature\ParameterDetailsDialog.xaml.cs">
<SubType>Code</SubType>
</Compile>
<Compile Update="Implementation\PickMembers\PickMembersDialog.xaml.cs">
<DependentUpon>PickMembersDialog.xaml</DependentUpon>
</Compile>
......@@ -223,6 +226,7 @@
<SubType>Designer</SubType>
</Page>
<Page Include="Implementation\MoveToNamespace\MoveToNamespaceDialog.xaml">
<Page Include="Implementation\ChangeSignature\ParameterDetailsDialog.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Implementation\PickMembers\PickMembersDialog.xaml">
......
......@@ -2208,6 +2208,15 @@ internal class ServicesVSResources {
}
}
/// <summary>
/// Looks up a localized string similar to Parameter Details.
/// </summary>
internal static string Parameter_Details {
get {
return ResourceManager.GetString("Parameter_Details", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Parameter preferences:.
/// </summary>
......
......@@ -1363,4 +1363,7 @@ I agree to all of the foregoing:</value>
<value>Edit {0}</value>
<comment>{0} is a parameter description</comment>
</data>
<data name="Parameter_Details" xml:space="preserve">
<value>Parameter Details</value>
</data>
</root>
\ No newline at end of file
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">Předvolby parametrů:</target>
......
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">Parametereinstellungen:</target>
......
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">Preferencias de parámetros:</target>
......
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">Préférences relatives aux paramètres :</target>
......
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">Preferenze per parametri:</target>
......
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">パラメーターの優先順位:</target>
......
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">매개 변수 기본 설정:</target>
......
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">Preferencje dotyczące parametrów:</target>
......
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">Preferências de parâmetro:</target>
......
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">Предпочтения для параметров:</target>
......
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">Parametre tercihleri:</target>
......
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">参数首选项:</target>
......
......@@ -382,6 +382,11 @@
<target state="new">Open Documents and Projects</target>
<note />
</trans-unit>
<trans-unit id="Parameter_Details">
<source>Parameter Details</source>
<target state="new">Parameter Details</target>
<note />
</trans-unit>
<trans-unit id="Parameter_preferences_colon">
<source>Parameter preferences:</source>
<target state="translated">參數喜好設定:</target>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册