示例#1
0
		/// <summary>
		/// Метод, вызывающий событие NeedImageIndex.
		/// </summary>
		/// <param name="node">Узел, для которого определяется индекс изображения.</param>
		/// <param name="imageIndex">Предполагаемый индекс изображения.</param>
		/// <returns></returns>
		protected int OnNeedImageIndex(SimTreeNodeEx node, int imageIndex)
		{
			if(NeedImageIndex == null)
				return nodeItemsImageIndex;
			NeedImageIndexEventArgsEx args = new NeedImageIndexEventArgsEx(node.TreeItem, imageIndex);
			NeedImageIndex(this, args);
			return args.ImageIndex;
		}
示例#2
0
		//-------------------------------------------------------------------------------------
		#region << SimTree Handlers >>
		void _tree_ItemAdded(object sender, CollectionChangeNotifyEventArgs args)
		{
			//tree_ItemAdded(ITree sender, ITreeItem item)
			ITreeItem item = (ITreeItem)args.Item;
			try
			{
			 if(isUpdated)
				return;
			 if(item.IsRoot)
			 {
				SimTreeNodeEx node = new SimTreeNodeEx(item, NodeTextPropName);
				if(item.IsGroup)
				{
				 if(needImageIndexEventTarget == NeedImageIndexEventTarget.AllNodes)
					node.ImageIndex = OnNeedImageIndex(node, closedImageIndex);
				 else
					node.ImageIndex = node.SelectedImageIndex = closedImageIndex;
				}
				else
				 node.SelectedImageIndex = node.ImageIndex = OnNeedImageIndex(node);
				treeView.Nodes.Add(node);
			 }
			 else  //if(item.Parent.Props.ContainsParam("Node"))
			 {
				SimTreeNodeEx pNode = treeView.Nodes.Find(item.Parent);
				if(pNode != null)
				 if(pNode.Nodes.Count == 1 && pNode.Nodes[0].Name == "-1")
				 {
					pNode.Nodes.Clear();
					foreach(ITreeItem key in item.Parent.Children)
					{
					 SimTreeNodeEx node = new SimTreeNodeEx(key, NodeTextPropName);
					 if(key.HasChildren)
						node.Nodes.Add("-1", "hidden");
					 if(treeView.ImageList != null)
						if(key.IsGroup)
						{
						 if(needImageIndexEventTarget == NeedImageIndexEventTarget.AllNodes)
							node.ImageIndex = OnNeedImageIndex(node, closedImageIndex);
						 else
							node.ImageIndex = node.SelectedImageIndex = closedImageIndex;
						}
						else
						 node.SelectedImageIndex = node.ImageIndex = OnNeedImageIndex(node);
					 pNode.Nodes.Add(node);
					}
				 }
				 else
				 {
					SimTreeNodeEx node = new SimTreeNodeEx(item, NodeTextPropName);
					if(item.HasChildren)
					 node.Nodes.Add("-1", "hidden");
					if(treeView.ImageList != null)
					 if(item.IsGroup)
					 {
						if(needImageIndexEventTarget == NeedImageIndexEventTarget.AllNodes)
						 node.ImageIndex = OnNeedImageIndex(node, closedImageIndex);
						else
						 node.ImageIndex = node.SelectedImageIndex = closedImageIndex;
					 }
					 else
						node.SelectedImageIndex = node.ImageIndex = OnNeedImageIndex(node);
					pNode.Nodes.Add(node);
				 }
			 }
			}
			catch(Exception Err)
			{
			 ErrorBox.Show(Err);
			}

		}
示例#3
0
		/// <summary>
		/// Переустанавливает состояния для указанного элемента и всех его дочерних элементов.
		/// </summary>
		/// <param name="node"></param>
		public void ResetNodeState(SimTreeNodeEx node)
		{
			if(chType == CheckBoxesType.None && node.StateImageIndex == -1)
				return;
		
			for (int a = 0; a < node.Nodes.Count; a++)
				ResetNodeState(node.Nodes[a]);

			if(chType == CheckBoxesType.None)
				node.StateImageIndex = -1;
			else if(chType == CheckBoxesType.ThreeState)
			{
				if(node.TreeItem != null && node.TreeItem.IsGroup)
				{
					CheckState ii = node.Nodes[0].CheckState;
					foreach(SimTreeNodeEx n in node.Nodes)
						if(n.CheckState != ii)
						{
							ii = CheckState.Indeterminate;
							break;
						}
					node.CheckState = ii;
				} 
				node.StateImageIndex = (int)node.CheckState;
			}
			else
			{
				node.CheckState = (node.CheckState == CheckState.Checked ? CheckState.Checked : CheckState.Unchecked);
				node.StateImageIndex = (int)node.CheckState;
			}
		}
示例#4
0
		private void RecursSetNodesChecked(SimTreeNodeEx node, CheckState check)
		{
			foreach (SimTreeNodeEx n in node.Nodes)
				RecursSetNodesChecked(n, check);

			if (check == CheckState.Checked)
			{
				foreach (SimTreeNodeEx n in node.Nodes)
					if (n.CheckState != CheckState.Checked)
					{
						check = CheckState.Indeterminate;
						break;
					}
			}
			if(node.Name == "-1" && node.Text == "hidden" && check == CheckState.Checked)
				check = CheckState.Unchecked;
			if (!OnBeforeCheck(node))
			{
				node.CheckState = check;
				node.StateImageIndex = (int) check;
				OnAfterCheck(node);
			}
		}
示例#5
0
		protected bool OnBeforeCheck(SimTreeNodeEx node)
		{
			if (BeforeCheck != null)
			{
				TreeViewCancelEventArgs args = new TreeViewCancelEventArgs(node, false, TreeViewAction.Unknown);
				BeforeCheck(node, args);
				return args.Cancel;
			}

			return false;
		}
示例#6
0
		protected void OnAfterCheck(SimTreeNodeEx node)
		{
			if (AfterCheck != null)
				AfterCheck(node, new TreeViewEventArgs(node));
		}
示例#7
0
		//-------------------------------------------------------------------------------------
		void tree_BeforeExpand(object sender, TreeViewCancelEventArgs e)
		{
			try
			{
				SimTreeNodeEx node = (SimTreeNodeEx)e.Node;

				if(node.TreeItem.HasChildren && node.Nodes[0].Name != "-1")
				{
					treeView.ResetNodeState(node);
					if(treeView.ImageList != null && node.TreeItem.IsGroup)
					{
						if(needImageIndexEventTarget == NeedImageIndexEventTarget.AllNodes)
							node.ImageIndex = OnNeedImageIndex(node, openedImageIndex);
						else
							node.ImageIndex = node.SelectedImageIndex = openedImageIndex;
					}
					return;
				}
				node.Nodes.Clear();
				ITreeItem item = (ITreeItem)node.TreeItem;
				List<SimTreeNodeEx> nodes = new List<SimTreeNodeEx>(item.Children.Count());
				foreach(ITreeItem key in item.Children)
				{
					SimTreeNodeEx n = new SimTreeNodeEx(key, NodeTextPropName);
					if(key.HasChildren)
						n.Nodes.Add("-1", "hidden");
					if(treeView.ImageList != null)
						if(key.IsGroup)
						{
							if(needImageIndexEventTarget == NeedImageIndexEventTarget.AllNodes)
								n.ImageIndex = OnNeedImageIndex(n, closedImageIndex);
							else
								n.ImageIndex = n.SelectedImageIndex = closedImageIndex;
						} 
						else
							n.SelectedImageIndex = n.ImageIndex = OnNeedImageIndex(n);
					nodes.Add(n);
				}
				node.Nodes.AddRange(nodes);
				if(treeView.ImageList != null && node.TreeItem.IsGroup)
					if(needImageIndexEventTarget == NeedImageIndexEventTarget.AllNodes)
						node.ImageIndex = OnNeedImageIndex(node, openedImageIndex);
					else
						node.ImageIndex = node.SelectedImageIndex = openedImageIndex;
				treeView.ResetNodeState(node);
			}
			catch(Exception Err)
			{
				ErrorBox.Show(Err);
			}
		}
示例#8
0
		//-------------------------------------------------------------------------------------
		#region Tree Methods
		/// <summary>
		/// Строит начальное дерево.
		/// </summary>
		private void BuildTree()
		{
			try
			{
				List<SimTreeNodeEx> nodes = new List<SimTreeNodeEx>();
				foreach(ITreeItem pid in _tree.GetRootItems())
				{
					SimTreeNodeEx node = new SimTreeNodeEx(pid, NodeTextPropName);
					if(pid.HasChildren)
						node.Nodes.Add("-1", "hidden");
					if(treeView.ImageList != null)
						if(pid.IsGroup)
						{
							if(needImageIndexEventTarget == NeedImageIndexEventTarget.AllNodes)
								node.ImageIndex = OnNeedImageIndex(node, closedImageIndex);
							else
								node.ImageIndex = node.SelectedImageIndex = closedImageIndex;
						}
						else
							node.SelectedImageIndex = node.ImageIndex = OnNeedImageIndex(node);
					nodes.Add(node);
				}
				treeView.BeginUpdate();
				treeView.Nodes.Clear();
				treeView.Nodes.AddRange(nodes);

				if(treeView.Nodes.Count > 0)
					treeView.Nodes[0].Expand();

				btnFind.Enabled = true;
				treeView.ResetStates();
				treeView.EndUpdate();
			}
			catch(Exception Err)
			{
				ErrorBox.Show(Err);
			}
		}
示例#9
0
		private void ChoicedItemsAll(SimTreeNodeEx node)
		{
			foreach (var n in node.Nodes)
			{
				if (n.CheckState != CheckState.Unchecked && n.TreeItem != null)
					_choisedItems.Add(n.TreeItem);
				ChoicedItemsAll(n);
			}
		}