Browse Source

fix TreeNode implementation

addin-manager-package-subdirectories
Siegfried Pammer 12 years ago
parent
commit
085615181a
  1. 30
      src/Main/Base/Project/Dom/ClassBrowser/WorkspaceTreeNode.cs
  2. 7
      src/Main/Base/Project/Dom/KeyedModelCollection.cs
  3. 29
      src/Main/SharpDevelop/Dom/ProjectAssemblyModel.cs

30
src/Main/Base/Project/Dom/ClassBrowser/WorkspaceTreeNode.cs

@ -24,6 +24,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -24,6 +24,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
this.workspace = workspace;
}
protected override object GetModel()
{
return workspace;
}
protected override IModelCollection<object> ModelChildren {
get { return workspace.LoadedAssemblies; }
}
@ -62,6 +67,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -62,6 +67,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
this.solution = solution;
}
protected override object GetModel()
{
return solution;
}
public override object Text {
get { return "Solution " + solution.Name; }
}
@ -90,6 +100,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -90,6 +100,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
this.project = project;
}
protected override object GetModel()
{
return project;
}
public override object Text {
get { return project.Name; }
}
@ -118,6 +133,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -118,6 +133,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
this.model = model;
}
protected override object GetModel()
{
return model;
}
protected override IComparer<SharpTreeNode> NodeComparer {
get { return NodeTextComparer; }
}
@ -138,6 +158,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -138,6 +158,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
this.model = model;
}
protected override object GetModel()
{
return model;
}
protected override IComparer<SharpTreeNode> NodeComparer {
get { return NodeTextComparer; }
}
@ -166,6 +191,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -166,6 +191,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
this.definition = definition;
}
protected override object GetModel()
{
return definition;
}
public override object Icon {
// TODO why do I have to resolve this?
get { return ClassBrowserIconService.GetIcon(definition.Resolve()).ImageSource; }

7
src/Main/Base/Project/Dom/KeyedModelCollection.cs

@ -32,6 +32,13 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -32,6 +32,13 @@ namespace ICSharpCode.SharpDevelop.Dom
dict.Remove(getKeyForValue(item));
}
protected override void ValidateItem(TValue item)
{
base.ValidateItem(item);
if (dict.ContainsKey(getKeyForValue(item)))
throw new ArgumentException("An item with the same key has already been added to the collection.");
}
public TValue this[TKey key] {
get { return dict[key]; }
}

29
src/Main/SharpDevelop/Dom/ProjectAssemblyModel.cs

@ -61,16 +61,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -61,16 +61,6 @@ namespace ICSharpCode.SharpDevelop.Dom
void TypeDeclarationsCollectionChanged(IReadOnlyCollection<ITypeDefinitionModel> removedItems, IReadOnlyCollection<ITypeDefinitionModel> addedItems)
{
NamespaceModel ns;
foreach (ITypeDefinitionModel removedItem in removedItems) {
if (namespaces.TryGetValue(removedItem.Namespace, out ns)) {
ns.Types.Remove(removedItem);
while (ns.ParentNamespace != null && ns.Types.Count == 0 && ns.ChildNamespaces.Count == 0) {
((NamespaceModel)ns.ParentNamespace).ChildNamespaces.Remove(ns);
namespaces.Remove(ns);
ns = (NamespaceModel)ns.ParentNamespace;
}
}
}
foreach (ITypeDefinitionModel addedItem in addedItems) {
if (!namespaces.TryGetValue(addedItem.Namespace, out ns)) {
string[] parts = addedItem.Namespace.Split('.');
@ -84,13 +74,28 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -84,13 +74,28 @@ namespace ICSharpCode.SharpDevelop.Dom
level++;
}
while (level < parts.Length) {
ns = new NamespaceModel(context, ns, parts[level]);
namespaces.Add(ns);
var child = new NamespaceModel(context, ns, parts[level]);
ns.ChildNamespaces.Add(child);
ns = child;
level++;
}
if (!namespaces.Contains(ns))
namespaces.Add(ns);
ns.Types.Add(addedItem);
}
}
foreach (ITypeDefinitionModel removedItem in removedItems) {
if (namespaces.TryGetValue(removedItem.Namespace, out ns)) {
ns.Types.Remove(removedItem);
if (ns.Types.Count == 0)
namespaces.Remove(ns);
while (ns.ParentNamespace != null) {
if (ns.ChildNamespaces.Count == 0 && ns.Types.Count == 0)
((NamespaceModel)ns.ParentNamespace).ChildNamespaces.Remove(ns);
ns = (NamespaceModel)ns.ParentNamespace;
}
}
}
}
}
}

Loading…
Cancel
Save