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 @@ -23,16 +23,26 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
/// <summary>
/// A code snippet.
/// </summary>
public class CodeSnippet : INotifyPropertyChanged
public class CodeSnippet : INotifyPropertyChanged, IEquatable<CodeSnippet>
{
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 {
get { return name; }
set {
if (name != value) {
isUserModified = true;
name = value;
OnPropertyChanged("Name");
}
@ -43,7 +53,6 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -43,7 +53,6 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
get { return text; }
set {
if (text != value) {
isUserModified = true;
text = value;
OnPropertyChanged("Text");
}
@ -54,7 +63,6 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -54,7 +63,6 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
get { return description; }
set {
if (description != value) {
isUserModified = true;
description = value;
OnPropertyChanged("Description");
}
@ -73,23 +81,12 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -73,23 +81,12 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
get { return keyword; }
set {
if (keyword != value) {
isUserModified = true;
keyword = value;
OnPropertyChanged("Keyword");
}
}
}
public bool IsUserModified {
get { return isUserModified; }
set {
if (isUserModified != value) {
isUserModified = value;
OnPropertyChanged("IsUserModified");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
@ -241,12 +238,42 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -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>
/// Reports the snippet usage to UDC
/// </summary>
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 @@ -22,7 +22,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
public sealed class SnippetManager
{
readonly object lockObj = new object();
static readonly List<CodeSnippetGroup> defaultSnippets = new List<CodeSnippetGroup> {
internal static readonly List<CodeSnippetGroup> defaultSnippets = new List<CodeSnippetGroup> {
new CodeSnippetGroup {
Extensions = ".cs",
Snippets = {
@ -272,7 +272,6 @@ End Property${Caret}" @@ -272,7 +272,6 @@ End Property${Caret}"
private SnippetManager()
{
snippetElementProviders = AddInTree.BuildItems<ISnippetElementProvider>("/SharpDevelop/ViewContent/AvalonEdit/SnippetElementProviders", null, false);
defaultSnippets.ForEach(x => x.Snippets.ForEach(s => s.IsUserModified = false));
}
/// <summary>
@ -289,7 +288,7 @@ End Property${Caret}" @@ -289,7 +288,7 @@ End Property${Caret}"
defaultGroup.Snippets.Except(
group.Snippets,
new PredicateComparer<CodeSnippet>((x, y) => x.Name == y.Name, x => x.Name.GetHashCode())
)
).Select(s => new CodeSnippet(s))
).OrderBy(s => s.Name).ToList();
group.Snippets.Clear();
group.Snippets.AddRange(merged);
@ -338,11 +337,19 @@ End Property${Caret}" @@ -338,11 +337,19 @@ End Property${Caret}"
List<CodeSnippetGroup> modifiedGroups = new List<CodeSnippetGroup>();
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
var copy = new CodeSnippetGroup() {
Extensions = group.Extensions
};
copy.Snippets.AddRange(group.Snippets.Where(s => s.IsUserModified));
copy.Snippets.AddRange(saveSnippets);
modifiedGroups.Add(copy);
}

Loading…
Cancel
Save