123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490 |
- using System;
- using System.Collections.Generic;
- namespace FairyGUI
- {
-
-
-
- [Obsolete("Use GTree and GTreeNode instead")]
- public class TreeView : EventDispatcher
- {
-
-
-
- public GList list { get; private set; }
-
-
-
- public TreeNode root { get; private set; }
-
-
-
- public int indent;
- public delegate GComponent TreeNodeCreateCellDelegate(TreeNode node);
- public delegate void TreeNodeRenderDelegate(TreeNode node);
- public delegate void TreeNodeWillExpandDelegate(TreeNode node, bool expand);
-
-
-
- public TreeNodeCreateCellDelegate treeNodeCreateCell;
-
-
-
- public TreeNodeRenderDelegate treeNodeRender;
-
-
-
- public TreeNodeWillExpandDelegate treeNodeWillExpand;
-
-
-
- public EventListener onClickNode { get; private set; }
-
-
-
- public EventListener onRightClickNode { get; private set; }
-
-
-
-
- public TreeView(GList list)
- {
- this.list = list;
- list.onClickItem.Add(__clickItem);
- list.onRightClickItem.Add(__clickItem);
- list.RemoveChildrenToPool();
- root = new TreeNode(true);
- root.SetTree(this);
- root.cell = list;
- root.expanded = true;
- indent = 30;
- onClickNode = new EventListener(this, "onClickNode");
- onRightClickNode = new EventListener(this, "onRightClickNode");
- }
-
-
-
-
- public TreeNode GetSelectedNode()
- {
- if (list.selectedIndex != -1)
- return (TreeNode)list.GetChildAt(list.selectedIndex).data;
- else
- return null;
- }
-
-
-
-
- public List<TreeNode> GetSelection()
- {
- List<int> sels = list.GetSelection();
- int cnt = sels.Count;
- List<TreeNode> ret = new List<TreeNode>();
- for (int i = 0; i < cnt; i++)
- {
- TreeNode node = (TreeNode)list.GetChildAt(sels[i]).data;
- ret.Add(node);
- }
- return ret;
- }
-
-
-
-
-
- public void AddSelection(TreeNode node, bool scrollItToView = false)
- {
- TreeNode parentNode = node.parent;
- while (parentNode != null && parentNode != root)
- {
- parentNode.expanded = true;
- parentNode = parentNode.parent;
- }
- list.AddSelection(list.GetChildIndex(node.cell), scrollItToView);
- }
-
-
-
-
- public void RemoveSelection(TreeNode node)
- {
- list.RemoveSelection(list.GetChildIndex(node.cell));
- }
-
-
-
- public void ClearSelection()
- {
- list.ClearSelection();
- }
-
-
-
-
-
- public int GetNodeIndex(TreeNode node)
- {
- return list.GetChildIndex(node.cell);
- }
-
-
-
-
- public void UpdateNode(TreeNode node)
- {
- if (node.cell == null)
- return;
- if (treeNodeRender != null)
- treeNodeRender(node);
- }
-
-
-
-
- public void UpdateNodes(List<TreeNode> nodes)
- {
- int cnt = nodes.Count;
- for (int i = 0; i < cnt; i++)
- {
- TreeNode node = nodes[i];
- if (node.cell == null)
- return;
- if (treeNodeRender != null)
- treeNodeRender(node);
- }
- }
-
-
-
-
- public void ExpandAll(TreeNode folderNode)
- {
- folderNode.expanded = true;
- int cnt = folderNode.numChildren;
- for (int i = 0; i < cnt; i++)
- {
- TreeNode node = folderNode.GetChildAt(i);
- if (node.isFolder)
- ExpandAll(node);
- }
- }
-
-
-
-
- public void CollapseAll(TreeNode folderNode)
- {
- if (folderNode != root)
- folderNode.expanded = false;
- int cnt = folderNode.numChildren;
- for (int i = 0; i < cnt; i++)
- {
- TreeNode node = folderNode.GetChildAt(i);
- if (node.isFolder)
- CollapseAll(node);
- }
- }
-
-
-
-
- void CreateCell(TreeNode node)
- {
- if (treeNodeCreateCell != null)
- node.cell = treeNodeCreateCell(node);
- else
- node.cell = list.itemPool.GetObject(list.defaultItem) as GComponent;
- if (node.cell == null)
- throw new Exception("Unable to create tree cell");
- node.cell.data = node;
- GObject indentObj = node.cell.GetChild("indent");
- if (indentObj != null)
- indentObj.width = (node.level - 1) * indent;
- GButton expandButton = (GButton)node.cell.GetChild("expandButton");
- if (expandButton != null)
- {
- if (node.isFolder)
- {
- expandButton.visible = true;
- expandButton.onClick.Add(__clickExpandButton);
- expandButton.data = node;
- expandButton.selected = node.expanded;
- }
- else
- expandButton.visible = false;
- }
- if (treeNodeRender != null)
- treeNodeRender(node);
- }
-
-
-
-
- internal void AfterInserted(TreeNode node)
- {
- CreateCell(node);
- int index = GetInsertIndexForNode(node);
- list.AddChildAt(node.cell, index);
- if (treeNodeRender != null)
- treeNodeRender(node);
- if (node.isFolder && node.expanded)
- CheckChildren(node, index);
- }
-
-
-
-
-
- int GetInsertIndexForNode(TreeNode node)
- {
- TreeNode prevNode = node.GetPrevSibling();
- if (prevNode == null)
- prevNode = node.parent;
- int insertIndex = list.GetChildIndex(prevNode.cell) + 1;
- int myLevel = node.level;
- int cnt = list.numChildren;
- for (int i = insertIndex; i < cnt; i++)
- {
- TreeNode testNode = (TreeNode)list.GetChildAt(i).data;
- if (testNode.level <= myLevel)
- break;
- insertIndex++;
- }
- return insertIndex;
- }
-
-
-
-
- internal void AfterRemoved(TreeNode node)
- {
- RemoveNode(node);
- }
-
-
-
-
- internal void AfterExpanded(TreeNode node)
- {
- if (node != root && treeNodeWillExpand != null)
- treeNodeWillExpand(node, true);
- if (node.cell == null)
- return;
- if (node != root)
- {
- if (treeNodeRender != null)
- treeNodeRender(node);
- GButton expandButton = (GButton)node.cell.GetChild("expandButton");
- if (expandButton != null)
- expandButton.selected = true;
- }
- if (node.cell.parent != null)
- CheckChildren(node, list.GetChildIndex(node.cell));
- }
-
-
-
-
- internal void AfterCollapsed(TreeNode node)
- {
- if (node != root && treeNodeWillExpand != null)
- treeNodeWillExpand(node, false);
- if (node.cell == null)
- return;
- if (node != root)
- {
- if (treeNodeRender != null)
- treeNodeRender(node);
- GButton expandButton = (GButton)node.cell.GetChild("expandButton");
- if (expandButton != null)
- expandButton.selected = false;
- }
- if (node.cell.parent != null)
- HideFolderNode(node);
- }
-
-
-
-
- internal void AfterMoved(TreeNode node)
- {
- if (!node.isFolder)
- list.RemoveChild(node.cell);
- else
- HideFolderNode(node);
- int index = GetInsertIndexForNode(node);
- list.AddChildAt(node.cell, index);
- if (node.isFolder && node.expanded)
- CheckChildren(node, index);
- }
-
-
-
-
-
-
- int CheckChildren(TreeNode folderNode, int index)
- {
- int cnt = folderNode.numChildren;
- for (int i = 0; i < cnt; i++)
- {
- index++;
- TreeNode node = folderNode.GetChildAt(i);
- if (node.cell == null)
- CreateCell(node);
- if (node.cell.parent == null)
- list.AddChildAt(node.cell, index);
- if (node.isFolder && node.expanded)
- index = CheckChildren(node, index);
- }
- return index;
- }
-
-
-
-
- void HideFolderNode(TreeNode folderNode)
- {
- int cnt = folderNode.numChildren;
- for (int i = 0; i < cnt; i++)
- {
- TreeNode node = folderNode.GetChildAt(i);
- if (node.cell != null)
- {
- if (node.cell.parent != null)
- list.RemoveChild(node.cell);
- list.itemPool.ReturnObject(node.cell);
- node.cell.data = null;
- node.cell = null;
- }
- if (node.isFolder && node.expanded)
- HideFolderNode(node);
- }
- }
-
-
-
-
- void RemoveNode(TreeNode node)
- {
- if (node.cell != null)
- {
- if (node.cell.parent != null)
- list.RemoveChild(node.cell);
- list.itemPool.ReturnObject(node.cell);
- node.cell.data = null;
- node.cell = null;
- }
- if (node.isFolder)
- {
- int cnt = node.numChildren;
- for (int i = 0; i < cnt; i++)
- {
- TreeNode node2 = node.GetChildAt(i);
- RemoveNode(node2);
- }
- }
- }
- void __clickExpandButton(EventContext context)
- {
- context.StopPropagation();
- GButton expandButton = (GButton)context.sender;
- TreeNode node = (TreeNode)expandButton.parent.data;
- if (list.scrollPane != null)
- {
- float posY = list.scrollPane.posY;
- if (expandButton.selected)
- node.expanded = true;
- else
- node.expanded = false;
- list.scrollPane.posY = posY;
- list.scrollPane.ScrollToView(node.cell);
- }
- else
- {
- if (expandButton.selected)
- node.expanded = true;
- else
- node.expanded = false;
- }
- }
- void __clickItem(EventContext context)
- {
- float posY = 0;
- if (list.scrollPane != null)
- posY = list.scrollPane.posY;
- TreeNode node = (TreeNode)((GObject)context.data).data;
- if (context.type == list.onRightClickItem.type)
- onRightClickNode.Call(node);
- else
- onClickNode.Call(node);
- if (list.scrollPane != null)
- {
- list.scrollPane.posY = posY;
- list.scrollPane.ScrollToView(node.cell);
- }
- }
- }
- }
|