first commit
This commit is contained in:
257
LibreHardwareMonitor-0.9.4/Aga.Controls/Tree/Node.cs
Normal file
257
LibreHardwareMonitor-0.9.4/Aga.Controls/Tree/Node.cs
Normal file
@@ -0,0 +1,257 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
|
||||
namespace Aga.Controls.Tree
|
||||
{
|
||||
public class Node
|
||||
{
|
||||
#region NodeCollection
|
||||
|
||||
private class NodeCollection : Collection<Node>
|
||||
{
|
||||
private Node _owner;
|
||||
|
||||
public NodeCollection(Node owner)
|
||||
{
|
||||
_owner = owner;
|
||||
}
|
||||
|
||||
protected override void ClearItems()
|
||||
{
|
||||
while (this.Count != 0)
|
||||
this.RemoveAt(this.Count - 1);
|
||||
}
|
||||
|
||||
protected override void InsertItem(int index, Node item)
|
||||
{
|
||||
if (item == null)
|
||||
throw new ArgumentNullException("item");
|
||||
|
||||
if (item.Parent != _owner)
|
||||
{
|
||||
if (item.Parent != null)
|
||||
item.Parent.Nodes.Remove(item);
|
||||
item._parent = _owner;
|
||||
item._index = index;
|
||||
for (int i = index; i < Count; i++)
|
||||
this[i]._index++;
|
||||
base.InsertItem(index, item);
|
||||
|
||||
TreeModel model = _owner.FindModel();
|
||||
if (model != null)
|
||||
model.OnNodeInserted(_owner, index, item);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void RemoveItem(int index)
|
||||
{
|
||||
Node item = this[index];
|
||||
item._parent = null;
|
||||
item._index = -1;
|
||||
for (int i = index + 1; i < Count; i++)
|
||||
this[i]._index--;
|
||||
base.RemoveItem(index);
|
||||
|
||||
TreeModel model = _owner.FindModel();
|
||||
if (model != null)
|
||||
model.OnNodeRemoved(_owner, index, item);
|
||||
}
|
||||
|
||||
protected override void SetItem(int index, Node item)
|
||||
{
|
||||
if (item == null)
|
||||
throw new ArgumentNullException("item");
|
||||
|
||||
RemoveAt(index);
|
||||
InsertItem(index, item);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
private TreeModel _model;
|
||||
internal TreeModel Model
|
||||
{
|
||||
get { return _model; }
|
||||
set { _model = value; }
|
||||
}
|
||||
|
||||
private NodeCollection _nodes;
|
||||
public Collection<Node> Nodes
|
||||
{
|
||||
get { return _nodes; }
|
||||
}
|
||||
|
||||
private Node _parent;
|
||||
public Node Parent
|
||||
{
|
||||
get { return _parent; }
|
||||
set
|
||||
{
|
||||
if (value != _parent)
|
||||
{
|
||||
if (_parent != null)
|
||||
_parent.Nodes.Remove(this);
|
||||
|
||||
if (value != null)
|
||||
value.Nodes.Add(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int _index = -1;
|
||||
public int Index
|
||||
{
|
||||
get
|
||||
{
|
||||
return _index;
|
||||
}
|
||||
}
|
||||
|
||||
public Node PreviousNode
|
||||
{
|
||||
get
|
||||
{
|
||||
int index = Index;
|
||||
if (index > 0)
|
||||
return _parent.Nodes[index - 1];
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Node NextNode
|
||||
{
|
||||
get
|
||||
{
|
||||
int index = Index;
|
||||
if (index >= 0 && index < _parent.Nodes.Count - 1)
|
||||
return _parent.Nodes[index + 1];
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private string _text;
|
||||
public virtual string Text
|
||||
{
|
||||
get { return _text; }
|
||||
set
|
||||
{
|
||||
if (_text != value)
|
||||
{
|
||||
_text = value;
|
||||
NotifyModel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private CheckState _checkState;
|
||||
public virtual CheckState CheckState
|
||||
{
|
||||
get { return _checkState; }
|
||||
set
|
||||
{
|
||||
if (_checkState != value)
|
||||
{
|
||||
_checkState = value;
|
||||
NotifyModel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Image _image;
|
||||
public Image Image
|
||||
{
|
||||
get { return _image; }
|
||||
set
|
||||
{
|
||||
if (_image != value)
|
||||
{
|
||||
_image = value;
|
||||
NotifyModel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private object _tag;
|
||||
public object Tag
|
||||
{
|
||||
get { return _tag; }
|
||||
set { _tag = value; }
|
||||
}
|
||||
|
||||
public bool IsChecked
|
||||
{
|
||||
get
|
||||
{
|
||||
return CheckState != CheckState.Unchecked;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value)
|
||||
CheckState = CheckState.Checked;
|
||||
else
|
||||
CheckState = CheckState.Unchecked;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool IsLeaf
|
||||
{
|
||||
get
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public Node()
|
||||
: this(string.Empty)
|
||||
{
|
||||
}
|
||||
|
||||
public Node(string text)
|
||||
{
|
||||
_text = text;
|
||||
_nodes = new NodeCollection(this);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Text;
|
||||
}
|
||||
|
||||
private TreeModel FindModel()
|
||||
{
|
||||
Node node = this;
|
||||
while (node != null)
|
||||
{
|
||||
if (node.Model != null)
|
||||
return node.Model;
|
||||
node = node.Parent;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void NotifyModel()
|
||||
{
|
||||
TreeModel model = FindModel();
|
||||
if (model != null && Parent != null)
|
||||
{
|
||||
TreePath path = model.GetPath(Parent);
|
||||
if (path != null)
|
||||
{
|
||||
TreeModelEventArgs args = new TreeModelEventArgs(path, new int[] { Index }, new object[] { this });
|
||||
model.OnNodesChanged(args);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user