From abf561acc0d2d239ef7853cc00e2490f233c7aa5 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Wed, 22 Jul 2009 12:44:48 +0000 Subject: [PATCH] XamlBinding: - improved code completion - added drag and drop functionality to EditGridColumnsAndRowsDialog git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4508 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../XamlBinding/CompletionDataHelper.cs | 17 +- .../XamlBinding/XamlBinding/Extensions.cs | 11 +- .../Commands/CreateBusinessFormCommand.cs | 29 ++ .../CreateBusinessFormFromClassCommand.cs | 10 +- .../Dialogs/EditGridColumnsAndRowsDialog.xaml | 37 ++- .../EditGridColumnsAndRowsDialog.xaml.cs | 272 +++++++----------- .../Dialogs/SelectSourceClassDialog.xaml | 8 +- .../Dialogs/SelectSourceClassDialog.xaml.cs | 30 +- .../Dialogs/SourceClassFormEditor.xaml | 52 ++++ .../Dialogs/SourceClassFormEditor.xaml.cs | 58 ++++ .../XamlBinding/XamlBinding.csproj | 6 + .../XamlBinding/XamlCodeCompletionBinding.cs | 35 ++- .../XamlBinding/XamlBinding/XamlColorizer.cs | 20 +- src/AddIns/Misc/Profiler/Profiler.sln | 78 +++-- 14 files changed, 444 insertions(+), 219 deletions(-) create mode 100644 src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Commands/CreateBusinessFormCommand.cs create mode 100644 src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/SourceClassFormEditor.xaml create mode 100644 src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/SourceClassFormEditor.xaml.cs diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs index 225cdc2acb..961fce8a5d 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs @@ -505,7 +505,11 @@ namespace ICSharpCode.XamlBinding { var list = new XamlCompletionItemList(); string visibleValue = context.RawAttributeValue.Substring(0, context.ValueStartOffset + 1); - var markup = Utils.GetInnermostMarkupExtensionInfo(MarkupExtensionParser.Parse(visibleValue)); + if (context.PressedKey == '=') + visibleValue += "="; + context.RawAttributeValue = visibleValue; + context.AttributeValue = MarkupExtensionParser.ParseValue(visibleValue); + var markup = Utils.GetInnermostMarkupExtensionInfo(context.AttributeValue.ExtensionValue); var type = ResolveType(markup.ExtensionType, context) ?? ResolveType(markup.ExtensionType + "Extension", context); if (type == null) { @@ -530,7 +534,7 @@ namespace ICSharpCode.XamlBinding int lastStart = markup.NamedArguments.Max(i => i.Value.StartOffset); var item = markup.NamedArguments.First(p => p.Value.StartOffset == lastStart); - if (context.Editor.Document.GetCharAt(context.Editor.Caret.Offset - 1) == '=' || + if (context.RawAttributeValue.EndsWith("=") || (item.Value.IsString && item.Value.StringValue.EndsWith(context.Editor.GetWordBeforeCaretExtended()))) { MemberResolveResult mrr = XamlResolver.ResolveMember(item.Key, context) as MemberResolveResult; if (mrr != null && mrr.ResolvedMember != null && mrr.ResolvedMember.ReturnType != null) { @@ -604,9 +608,16 @@ namespace ICSharpCode.XamlBinding { if (type == null || type.GetUnderlyingClass() == null) yield break; - + var c = type.GetUnderlyingClass(); + if (type is ConstructedReturnType && type.TypeArgumentCount > 0 && c.FullyQualifiedName == "System.Nullable") { + ConstructedReturnType rt = type as ConstructedReturnType; + c = rt.TypeArguments.First().GetUnderlyingClass(); + if (c == null) + yield break; + } + switch (c.ClassType) { case ClassType.Class: switch (c.FullyQualifiedName) { diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/Extensions.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/Extensions.cs index 265c9d6631..e97e0de672 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/Extensions.cs +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/Extensions.cs @@ -5,12 +5,15 @@ // $Revision$ // -using ICSharpCode.AvalonEdit.Document; using System; using System.Collections.Generic; using System.Linq; +using System.Windows; +using System.Windows.Controls; using System.Xml; using System.Xml.Linq; + +using ICSharpCode.AvalonEdit.Document; using ICSharpCode.NRefactory; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Dom; @@ -30,6 +33,12 @@ namespace ICSharpCode.XamlBinding return element; } + public static void AddRange(this UIElementCollection coll, IEnumerable items) + { + foreach (var item in items) + coll.Add(item); + } + public static string[] Split(this string thisValue, StringSplitOptions options, params char[] delimiters) { if (thisValue == null) diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Commands/CreateBusinessFormCommand.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Commands/CreateBusinessFormCommand.cs new file mode 100644 index 0000000000..982a016b89 --- /dev/null +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Commands/CreateBusinessFormCommand.cs @@ -0,0 +1,29 @@ +// +// +// +// +// $Revision$ +// + +using System; +using System.Windows.Forms; + +using ICSharpCode.Core; +using ICSharpCode.SharpDevelop; + +namespace ICSharpCode.XamlBinding.PowerToys.Commands +{ + /// + /// Description of CreateBusinessFormCommand + /// + public class CreateBusinessFormCommand : AbstractMenuCommand + { + /// + /// Starts the command + /// + public override void Run() + { + // TODO: Add your code here !!! + } + } +} diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Commands/CreateBusinessFormFromClassCommand.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Commands/CreateBusinessFormFromClassCommand.cs index 8043296119..207f26913b 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Commands/CreateBusinessFormFromClassCommand.cs +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Commands/CreateBusinessFormFromClassCommand.cs @@ -21,7 +21,15 @@ namespace ICSharpCode.XamlBinding.PowerToys.Commands /// public override void Run() { - new SelectSourceClassDialog().ShowDialog(); + SelectSourceClassDialog selectSourceClass = new SelectSourceClassDialog(); + + if (selectSourceClass.ShowDialog() ?? false) { + SourceClassFormEditor editor = new SourceClassFormEditor(selectSourceClass.SelectedClass); + + if (editor.ShowDialog() ?? false) { + return; + } + } } } } diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/EditGridColumnsAndRowsDialog.xaml b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/EditGridColumnsAndRowsDialog.xaml index 3441e442b7..46196f028b 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/EditGridColumnsAndRowsDialog.xaml +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/PowerToys/Dialogs/EditGridColumnsAndRowsDialog.xaml @@ -9,14 +9,39 @@ + + + + + + + + + + + + + + + + + + + +