Browse Source

fixed isUserModified detection in CodeSnippet

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@6301 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Siegfried Pammer 16 years ago
parent
commit
21511453dd
  1. 61
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/CodeSnippet.cs
  2. 15
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/SnippetManager.cs

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

@ -23,16 +23,26 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
/// <summary> /// <summary>
/// A code snippet. /// A code snippet.
/// </summary> /// </summary>
public class CodeSnippet : INotifyPropertyChanged public class CodeSnippet : INotifyPropertyChanged, IEquatable<CodeSnippet>
{ {
string name, description, text, keyword; string name, description, text, keyword;
bool isUserModified;
public CodeSnippet()
{
}
public CodeSnippet(CodeSnippet copy)
{
this.name = copy.name;
this.description = copy.description;
this.text = copy.text;
this.keyword = copy.keyword;
}
public string Name { public string Name {
get { return name; } get { return name; }
set { set {
if (name != value) { if (name != value) {
isUserModified = true;
name = value; name = value;
OnPropertyChanged("Name"); OnPropertyChanged("Name");
} }
@ -43,7 +53,6 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
get { return text; } get { return text; }
set { set {
if (text != value) { if (text != value) {
isUserModified = true;
text = value; text = value;
OnPropertyChanged("Text"); OnPropertyChanged("Text");
} }
@ -54,7 +63,6 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
get { return description; } get { return description; }
set { set {
if (description != value) { if (description != value) {
isUserModified = true;
description = value; description = value;
OnPropertyChanged("Description"); OnPropertyChanged("Description");
} }
@ -73,23 +81,12 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
get { return keyword; } get { return keyword; }
set { set {
if (keyword != value) { if (keyword != value) {
isUserModified = true;
keyword = value; keyword = value;
OnPropertyChanged("Keyword"); OnPropertyChanged("Keyword");
} }
} }
} }
public bool IsUserModified {
get { return isUserModified; }
set {
if (isUserModified != value) {
isUserModified = value;
OnPropertyChanged("IsUserModified");
}
}
}
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName) protected virtual void OnPropertyChanged(string propertyName)
@ -241,12 +238,42 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
} }
} }
public override int GetHashCode()
{
int hashCode = 0;
unchecked {
if (name != null)
hashCode += 1000000007 * name.GetHashCode();
if (description != null)
hashCode += 1000000009 * description.GetHashCode();
if (text != null)
hashCode += 1000000021 * text.GetHashCode();
if (keyword != null)
hashCode += 1000000033 * keyword.GetHashCode();
}
return hashCode;
}
public override bool Equals(object obj)
{
CodeSnippet other = obj as CodeSnippet;
return Equals(other);
}
public bool Equals(CodeSnippet other)
{
if (other == null)
return false;
return this.name == other.name && this.description == other.description && this.text == other.text && this.keyword == other.keyword;
}
/// <summary> /// <summary>
/// Reports the snippet usage to UDC /// Reports the snippet usage to UDC
/// </summary> /// </summary>
internal void TrackUsage(string activationMethod) internal void TrackUsage(string activationMethod)
{ {
Core.AnalyticsMonitorService.TrackFeature(typeof(CodeSnippet), IsUserModified ? "usersnippet" : Name, activationMethod); bool isUserModified = !SnippetManager.defaultSnippets.Any(g => g.Snippets.Contains(this));
Core.AnalyticsMonitorService.TrackFeature(typeof(CodeSnippet), isUserModified ? "usersnippet" : Name, activationMethod);
} }
} }
} }

15
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/SnippetManager.cs

@ -22,7 +22,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
public sealed class SnippetManager public sealed class SnippetManager
{ {
readonly object lockObj = new object(); readonly object lockObj = new object();
static readonly List<CodeSnippetGroup> defaultSnippets = new List<CodeSnippetGroup> { internal static readonly List<CodeSnippetGroup> defaultSnippets = new List<CodeSnippetGroup> {
new CodeSnippetGroup { new CodeSnippetGroup {
Extensions = ".cs", Extensions = ".cs",
Snippets = { Snippets = {
@ -272,7 +272,6 @@ End Property${Caret}"
private SnippetManager() private SnippetManager()
{ {
snippetElementProviders = AddInTree.BuildItems<ISnippetElementProvider>("/SharpDevelop/ViewContent/AvalonEdit/SnippetElementProviders", null, false); snippetElementProviders = AddInTree.BuildItems<ISnippetElementProvider>("/SharpDevelop/ViewContent/AvalonEdit/SnippetElementProviders", null, false);
defaultSnippets.ForEach(x => x.Snippets.ForEach(s => s.IsUserModified = false));
} }
/// <summary> /// <summary>
@ -289,7 +288,7 @@ End Property${Caret}"
defaultGroup.Snippets.Except( defaultGroup.Snippets.Except(
group.Snippets, group.Snippets,
new PredicateComparer<CodeSnippet>((x, y) => x.Name == y.Name, x => x.Name.GetHashCode()) new PredicateComparer<CodeSnippet>((x, y) => x.Name == y.Name, x => x.Name.GetHashCode())
) ).Select(s => new CodeSnippet(s))
).OrderBy(s => s.Name).ToList(); ).OrderBy(s => s.Name).ToList();
group.Snippets.Clear(); group.Snippets.Clear();
group.Snippets.AddRange(merged); group.Snippets.AddRange(merged);
@ -338,11 +337,19 @@ End Property${Caret}"
List<CodeSnippetGroup> modifiedGroups = new List<CodeSnippetGroup>(); List<CodeSnippetGroup> modifiedGroups = new List<CodeSnippetGroup>();
foreach (var group in groups) { foreach (var group in groups) {
var defaultGroup = defaultSnippets.FirstOrDefault(i => i.Extensions == group.Extensions);
IEnumerable<CodeSnippet> saveSnippets = group.Snippets;
if (defaultGroup != null) {
saveSnippets = group.Snippets.Except(defaultGroup.Snippets);
}
// save all groups, even if they're empty // save all groups, even if they're empty
var copy = new CodeSnippetGroup() { var copy = new CodeSnippetGroup() {
Extensions = group.Extensions Extensions = group.Extensions
}; };
copy.Snippets.AddRange(group.Snippets.Where(s => s.IsUserModified)); copy.Snippets.AddRange(saveSnippets);
modifiedGroups.Add(copy); modifiedGroups.Add(copy);
} }

Loading…
Cancel
Save