Browse Source

Merge branch 'master' of github.com:icsharpcode/SharpDevelop

pull/1/head
mrward 15 years ago
parent
commit
2cc2dcffaf
  1. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin
  2. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
  3. 30
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/AnchorSnippetElementProvider.cs
  4. 10
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/CodeSnippet.cs
  5. 3
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/DefaultSnippetElementProvider.cs
  6. 23
      src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/AbstractInlineRefactorDialog.cs
  7. 18
      src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/InsertCtorDialog.xaml
  8. 100
      src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/InsertCtorDialog.xaml.cs
  9. 21
      src/AddIns/Misc/SharpRefactoring/Project/Src/InsertCtorSnippetRefactoring.cs
  10. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetCaretElement.cs

1
src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin

@ -175,5 +175,6 @@ @@ -175,5 +175,6 @@
<Path name = "/SharpDevelop/ViewContent/AvalonEdit/SnippetElementProviders">
<Class id="default" class="ICSharpCode.AvalonEdit.AddIn.Snippets.DefaultSnippetElementProvider" />
<Class id="anchor" class="ICSharpCode.AvalonEdit.AddIn.Snippets.AnchorSnippetElementProvider" />
</Path>
</AddIn>

1
src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj

@ -134,6 +134,7 @@ @@ -134,6 +134,7 @@
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\PrintPreviewViewContent.cs" />
<Compile Include="Src\Snippets\AnchorSnippetElementProvider.cs" />
<Compile Include="Src\Snippets\CodeSnippet.cs" />
<Compile Include="Src\Snippets\CodeSnippetCompletionWindow.cs" />
<Compile Include="Src\Snippets\CodeSnippetGroup.cs" />

30
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/AnchorSnippetElementProvider.cs

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Siegfried Pammer" email="siegfriedpammer@gmail.com" />
// <version>$Revision$</version>
// </file>
using System;
using ICSharpCode.AvalonEdit.Snippets;
using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
namespace ICSharpCode.AvalonEdit.AddIn.Snippets
{
public class AnchorSnippetElementProvider : ISnippetElementProvider
{
public SnippetElement GetElement(SnippetInfo snippetInfo)
{
int typeSeparator = snippetInfo.Tag.IndexOf(':');
if (typeSeparator > 0) {
string type = snippetInfo.Tag.Substring(0, typeSeparator);
string name = snippetInfo.Tag.Substring(typeSeparator + 1);
if ("anchor".Equals(type, StringComparison.OrdinalIgnoreCase))
return new SnippetAnchorElement(name);
}
return null;
}
}
}

10
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/CodeSnippet.cs

@ -157,16 +157,6 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -157,16 +157,6 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
}
}
int typeSeparator = val.IndexOf(':');
if (typeSeparator > 0) {
string type = val.Substring(0, typeSeparator);
string name = val.Substring(typeSeparator + 1);
switch (type.ToLowerInvariant()) {
case "anchor":
return new SnippetAnchorElement(name);
}
}
foreach (ISnippetElementProvider provider in SnippetManager.Instance.SnippetElementProviders) {
SnippetElement element = provider.GetElement(new SnippetInfo(val, snippetText, offset));
if (element != null)

3
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/DefaultSnippetElementProvider.cs

@ -10,9 +10,6 @@ using ICSharpCode.SharpDevelop.Editor.AvalonEdit; @@ -10,9 +10,6 @@ using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
namespace ICSharpCode.AvalonEdit.AddIn.Snippets
{
/// <summary>
/// Description of DefaultSnippetElementProvider.
/// </summary>
public class DefaultSnippetElementProvider : ISnippetElementProvider
{
public SnippetElement GetElement(SnippetInfo snippetInfo)

23
src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/AbstractInlineRefactorDialog.cs

@ -9,9 +9,10 @@ using System; @@ -9,9 +9,10 @@ using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Threading;
using ICSharpCode.AvalonEdit.Snippets;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
using ICSharpCode.NRefactory.Ast;
using ICSharpCode.SharpDevelop;
@ -24,6 +25,7 @@ namespace SharpRefactoring.Gui @@ -24,6 +25,7 @@ namespace SharpRefactoring.Gui
public abstract class AbstractInlineRefactorDialog : GroupBox, IOptionBindingContainer, IActiveElement
{
protected ITextAnchor anchor;
protected ITextAnchor insertionEndAnchor;
protected ITextEditor editor;
ClassFinder classFinderContext;
@ -33,15 +35,20 @@ namespace SharpRefactoring.Gui @@ -33,15 +35,20 @@ namespace SharpRefactoring.Gui
protected AbstractInlineRefactorDialog(InsertionContext context, ITextEditor editor, ITextAnchor anchor)
{
this.anchor = anchor;
this.anchor = insertionEndAnchor = anchor;
this.editor = editor;
this.context = context;
this.classFinderContext = new ClassFinder(ParserService.ParseCurrentViewContent(), editor.Document.Text, editor.Caret.Offset);
this.classFinderContext = new ClassFinder(ParserService.ParseCurrentViewContent(), editor.Document.Text, anchor.Offset);
this.Background = SystemColors.ControlBrush;
}
protected virtual void FocusFirstElement()
{
Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(delegate { this.MoveFocus(new TraversalRequest(FocusNavigationDirection.First)); }));
}
protected abstract string GenerateCode(LanguageProperties language, IClass currentClass);
protected void OKButtonClick(object sender, RoutedEventArgs e)
@ -55,7 +62,7 @@ namespace SharpRefactoring.Gui @@ -55,7 +62,7 @@ namespace SharpRefactoring.Gui
if (parseInfo != null) {
LanguageProperties language = parseInfo.CompilationUnit.Language;
IClass current = parseInfo.CompilationUnit.GetInnermostClass(editor.Caret.Line, editor.Caret.Column);
IClass current = parseInfo.CompilationUnit.GetInnermostClass(anchor.Line, anchor.Column);
// Generate code could modify the document.
// So read anchor.Offset after code generation.
@ -96,6 +103,12 @@ namespace SharpRefactoring.Gui @@ -96,6 +103,12 @@ namespace SharpRefactoring.Gui
void IActiveElement.OnInsertionCompleted()
{
OnInsertionCompleted();
}
protected virtual void OnInsertionCompleted()
{
FocusFirstElement();
}
void IActiveElement.Deactivate(SnippetEventArgs e)
@ -103,6 +116,8 @@ namespace SharpRefactoring.Gui @@ -103,6 +116,8 @@ namespace SharpRefactoring.Gui
if (e.Reason == DeactivateReason.ReturnPressed)
OKButtonClick(null, null);
context.TextArea.Caret.Offset = insertionEndAnchor.Offset;
Deactivate();
}

18
src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/InsertCtorDialog.xaml

@ -9,17 +9,11 @@ @@ -9,17 +9,11 @@
<gui:IntToBoolConverter x:Key="intToBoolConverter" />
<Style TargetType="Button" BasedOn="{x:Static sd:GlobalStyles.ButtonStyle}"/>
</gui:AbstractInlineRefactorDialog.Resources>
<DockPanel Cursor="Arrow">
<StackPanel Cursor="Arrow">
<TextBlock DockPanel.Dock="Top" Margin="3"
Text="{sd:Localize AddIns.SharpRefactoring.InsertCtor.Description}"
TextWrapping="Wrap" />
<DockPanel DockPanel.Dock="Bottom" LastChildFill="False">
<Button DockPanel.Dock="Left" Content="{sd:Localize Global.OKButtonText}" Margin="3" Click="OKButtonClick" />
<Button DockPanel.Dock="Left" Content="{sd:Localize Global.CancelButtonText}" Margin="3" Click="CancelButtonClick" />
<Button DockPanel.Dock="Right" Content="Down" Margin="3" IsEnabled="{Binding SelectedIndex, ElementName=varList, Converter={StaticResource intToBoolConverter}}" Click="DownClick" />
<Button DockPanel.Dock="Right" Content="Up" Margin="3" IsEnabled="{Binding SelectedIndex, ElementName=varList, Converter={StaticResource intToBoolConverter}}" Click="UpClick" />
</DockPanel>
<ListView x:Name="varList">
<ListView x:Name="varList" MaxHeight="300">
<ListView.View>
<GridView>
<GridViewColumn Header="{sd:Localize AddIns.SharpRefactoring.InsertCtor.VariableLabel}">
@ -46,5 +40,11 @@ @@ -46,5 +40,11 @@
</GridView>
</ListView.View>
</ListView>
</DockPanel>
<DockPanel LastChildFill="False">
<Button DockPanel.Dock="Left" Content="{sd:Localize Global.OKButtonText}" Margin="3" Click="OKButtonClick" />
<Button DockPanel.Dock="Left" Content="{sd:Localize Global.CancelButtonText}" Margin="3" Click="CancelButtonClick" />
<Button DockPanel.Dock="Right" Content="Down" Margin="3" IsEnabled="{Binding SelectedIndex, ElementName=varList, Converter={StaticResource intToBoolConverter}}" Click="DownClick" />
<Button DockPanel.Dock="Right" Content="Up" Margin="3" IsEnabled="{Binding SelectedIndex, ElementName=varList, Converter={StaticResource intToBoolConverter}}" Click="UpClick" />
</DockPanel>
</StackPanel>
</gui:AbstractInlineRefactorDialog>

100
src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/InsertCtorDialog.xaml.cs

@ -11,7 +11,10 @@ using System.ComponentModel; @@ -11,7 +11,10 @@ using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Threading;
using ICSharpCode.AvalonEdit.Snippets;
using ICSharpCode.NRefactory.Ast;
@ -26,41 +29,26 @@ namespace SharpRefactoring.Gui @@ -26,41 +29,26 @@ namespace SharpRefactoring.Gui
/// </summary>
public partial class InsertCtorDialog : AbstractInlineRefactorDialog
{
protected IList<CtorParamWrapper> paramList;
IList<CtorParamWrapper> parameterList;
public InsertCtorDialog(InsertionContext context, ITextEditor editor, ITextAnchor anchor, IClass current)
public InsertCtorDialog(InsertionContext context, ITextEditor editor, ITextAnchor anchor, IClass current, IList<CtorParamWrapper> possibleParameters)
: base(context, editor, anchor)
{
InitializeComponent();
this.varList.ItemsSource = paramList = CreateCtorParams(current.Fields, current.Properties)
// "Add check for null" is checked for every item by default
//Select(w => { if(w.IsNullable) w.AddCheckForNull = true; return w; }).
.ToList();
}
IEnumerable<CtorParamWrapper> CreateCtorParams(IEnumerable<IField> fields, IEnumerable<IProperty> properties)
{
int i = 0;
foreach (var f in fields) {
yield return new CtorParamWrapper(f) { Index = i, IsSelected = !f.IsReadonly };
i++;
}
this.varList.ItemsSource = parameterList = possibleParameters;
foreach (var p in properties.Where(prop => prop.CanSet && !prop.IsIndexer)) {
yield return new CtorParamWrapper(p) { Index = i, IsSelected = !p.IsReadonly };
i++;
}
if (!parameterList.Any())
Visibility = System.Windows.Visibility.Collapsed;
}
protected override string GenerateCode(LanguageProperties language, IClass currentClass)
{
var line = editor.Document.GetLineForOffset(editor.Caret.Offset);
var line = editor.Document.GetLineForOffset(anchor.Offset);
string indent = DocumentUtilitites.GetWhitespaceAfter(editor.Document, line.Offset) + "\t";
string indent = DocumentUtilitites.GetWhitespaceAfter(editor.Document, line.Offset);
var filtered = paramList.Where(p => p.IsSelected).OrderBy(p => p.Index).ToList();
var filtered = parameterList.Where(p => p.IsSelected).OrderBy(p => p.Index).ToList();
BlockStatement block = new BlockStatement();
@ -103,13 +91,11 @@ namespace SharpRefactoring.Gui @@ -103,13 +91,11 @@ namespace SharpRefactoring.Gui
foreach (CtorParamWrapper w in filtered)
block.AddChild(new ExpressionStatement(new AssignmentExpression(new MemberReferenceExpression(new ThisReferenceExpression(), w.MemberName), AssignmentOperatorType.Assign, new IdentifierExpression(w.ParameterName))));
AnchorElement parameterList = context.ActiveElements
.FirstOrDefault(
item => item is AnchorElement &&
(item as AnchorElement).Name.Equals("parameterList", StringComparison.OrdinalIgnoreCase)
) as AnchorElement;
AnchorElement parameterListElement = context.ActiveElements
.OfType<AnchorElement>()
.FirstOrDefault(item => item.Name.Equals("parameterList", StringComparison.OrdinalIgnoreCase));
if (parameterList != null) {
if (parameterListElement != null) {
StringBuilder pList = new StringBuilder();
var parameters = filtered
@ -122,7 +108,7 @@ namespace SharpRefactoring.Gui @@ -122,7 +108,7 @@ namespace SharpRefactoring.Gui
pList.Append(language.CodeGenerator.GenerateCode(parameters[i], ""));
}
parameterList.Text = pList.ToString();
parameterListElement.Text = pList.ToString();
}
StringBuilder builder = new StringBuilder();
@ -141,13 +127,13 @@ namespace SharpRefactoring.Gui @@ -141,13 +127,13 @@ namespace SharpRefactoring.Gui
if (selection <= 0)
return;
var curItem = paramList.First(p => p.Index == selection);
var exchangeItem = paramList.First(p => p.Index == selection - 1);
var curItem = parameterList.First(p => p.Index == selection);
var exchangeItem = parameterList.First(p => p.Index == selection - 1);
curItem.Index = selection - 1;
exchangeItem.Index = selection;
varList.ItemsSource = paramList.OrderBy(p => p.Index);
varList.ItemsSource = parameterList.OrderBy(p => p.Index);
varList.SelectedIndex = selection - 1;
}
@ -155,18 +141,58 @@ namespace SharpRefactoring.Gui @@ -155,18 +141,58 @@ namespace SharpRefactoring.Gui
{
int selection = varList.SelectedIndex;
if (selection < 0 || selection >= paramList.Count - 1)
if (selection < 0 || selection >= parameterList.Count - 1)
return;
var curItem = paramList.First(p => p.Index == selection);
var exchangeItem = paramList.First(p => p.Index == selection + 1);
var curItem = parameterList.First(p => p.Index == selection);
var exchangeItem = parameterList.First(p => p.Index == selection + 1);
curItem.Index = selection + 1;
exchangeItem.Index = selection;
varList.ItemsSource = paramList.OrderBy(p => p.Index);
varList.ItemsSource = parameterList.OrderBy(p => p.Index);
varList.SelectedIndex = selection + 1;
}
protected override void FocusFirstElement()
{
Dispatcher.BeginInvoke((Action)TryFocusAndSelectItem, DispatcherPriority.Background);
}
void TryFocusAndSelectItem()
{
if (!parameterList.Any())
return;
object ctorParamWrapper = varList.Items.GetItemAt(0);
if (ctorParamWrapper != null) {
ListBoxItem item = (ListBoxItem)varList.ItemContainerGenerator.ContainerFromItem(ctorParamWrapper);
item.Focus();
varList.ScrollIntoView(item);
varList.SelectedItem = item;
Keyboard.Focus(item);
}
}
protected override void OnInsertionCompleted()
{
base.OnInsertionCompleted();
Dispatcher.BeginInvoke(
DispatcherPriority.Background,
(Action)(
() => {
if (!parameterList.Any())
context.Deactivate(null);
else {
insertionEndAnchor = editor.Document.CreateAnchor(anchor.Offset);
insertionEndAnchor.MovementType = AnchorMovementType.AfterInsertion;
}
}
)
);
}
}
[ValueConversion(typeof(int), typeof(bool))]

21
src/AddIns/Misc/SharpRefactoring/Project/Src/InsertCtorSnippetRefactoring.cs

@ -6,6 +6,8 @@ @@ -6,6 +6,8 @@
// </file>
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.AvalonEdit.Snippets;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
@ -55,14 +57,31 @@ namespace SharpRefactoring @@ -55,14 +57,31 @@ namespace SharpRefactoring
if (current == null)
return null;
List<CtorParamWrapper> parameters = CreateCtorParams(current).ToList();
ITextAnchor anchor = textEditor.Document.CreateAnchor(context.InsertionPosition);
anchor.MovementType = AnchorMovementType.BeforeInsertion;
InsertCtorDialog dialog = new InsertCtorDialog(context, textEditor, anchor, current);
InsertCtorDialog dialog = new InsertCtorDialog(context, textEditor, anchor, current, parameters);
dialog.Element = uiService.CreateInlineUIElement(anchor, dialog);
return dialog;
}
IEnumerable<CtorParamWrapper> CreateCtorParams(IClass sourceClass)
{
int i = 0;
foreach (var f in sourceClass.Fields) {
yield return new CtorParamWrapper(f) { Index = i, IsSelected = !f.IsReadonly };
i++;
}
foreach (var p in sourceClass.Properties.Where(prop => prop.CanSet && !prop.IsIndexer)) {
yield return new CtorParamWrapper(p) { Index = i, IsSelected = !p.IsReadonly };
i++;
}
}
}
}

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetCaretElement.cs

@ -24,7 +24,7 @@ namespace ICSharpCode.AvalonEdit.Snippets @@ -24,7 +24,7 @@ namespace ICSharpCode.AvalonEdit.Snippets
SetCaret(context);
}
internal static void SetCaret(InsertionContext context)
public static void SetCaret(InsertionContext context)
{
TextAnchor pos = context.Document.CreateAnchor(context.InsertionPosition);
pos.SurviveDeletion = true;

Loading…
Cancel
Save