예제 #1
0
		/// <summary>
		/// Вызывает событие ItemAdding.
		/// </summary>
		protected virtual void OnItemAdding(CollectionChangeNotifyEventArgs args)
		{
			if(IsChangeEventsOff)
			 return;
			if(args == null)
				throw new ArgumentNullException("args");
			if(args.Sender == null)
				args.Sender = this;
			lock(SyncRoot)
			{
				if(itemAdding != null)
					itemAdding.Raise(this, args);
		 	OnObjectChanging(new ObjectChangeNotifyEventArgs(this, args.Action, args.SourceArgs ?? args));
			}
		}
예제 #2
0
		//-------------------------------------------------------------------------------------
		#region << SimTree Handlers >>
		void tree_ItemAdded(object sender, CollectionChangeNotifyEventArgs args)
		{
			try
			{
				ITreeItem item = (ITreeItem)args.Item;
				if(isUpdated)
					return;
				if(item.Parent == null)
				{
					SimTreeNode node = new SimTreeNode(item, NodeTextPropName);
					if(item.HasChildren)
					{
						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"))
				{
					SimTreeNode 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)
							{
								SimTreeNode node = new SimTreeNode(key, NodeTextPropName);
								if(key.HasChildren)
									node.Nodes.Add("-1", "hidden");
								if(treeView.ImageList != null)
									if(key.HasChildren)
									{
										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
						{ 
							SimTreeNode node = new SimTreeNode(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);
			}
			//throw new Exception("The method or operation is not implemented.");
		}
예제 #3
0
		//-------------------------------------------------------------------------------------
		void tree_ItemChanged(object sender, CollectionChangeNotifyEventArgs args)
		{
			SimTreeNode node = treeView.Nodes.Find((ITreeItem)args.Item);
			if(isUpdated == false && node != null)
				node.Text = ((ITreeItem)args.Item).ItemText;
		}
예제 #4
0
		//-------------------------------------------------------------------------------------
		void tree_ItemRemoving(object sender, CollectionChangeNotifyEventArgs args)
		{
			try
			{
				SimTreeNode node = treeView.Nodes.Find((ITreeItem)args.Item);
				if(isUpdated == false && node != null)
					node.Remove();
			}
			catch(Exception Err)
			{
				ErrorBox.Show(Err);
			}
		}
예제 #5
0
		void _tree_ItemChanged(object sender, CollectionChangeNotifyEventArgs args)
		{
			//tree_ItemChanged(ITree sender, ITreeItem item)
			ITreeItem item	= (ITreeItem)args.Item;
			SimTreeNodeEx node = treeView.Nodes.Find(item);
			if(isUpdated == false && node != null)
				node.Text = item.ItemText;
		}
예제 #6
0
		void _tree_ItemDeleted(object sender, CollectionChangeNotifyEventArgs args)
		{
			//tree_ItemRemoving(object sender, object item)
			try
			{
				ITreeItem	item	= (ITreeItem)args.Item;
				SimTreeNodeEx node = treeView.Nodes.Find(item);
				if(isUpdated == false && node != null)
				{
					node.Remove();
					SelectNodeWithItem(treeView.SelectedNode.TreeItem);
				}
			}
			catch(Exception Err)
			{
				ErrorBox.Show(Err);
			}
		}
예제 #7
0
		/// <summary>
		/// Вызывает событие ItemDeleted.
		/// </summary>
		protected virtual void OnItemDeleted(CollectionChangeNotifyEventArgs args)
		{
			if(IsChangeEventsOff)
			 return;
			if(args == null)
				throw new ArgumentNullException("args");
			if(args.Sender == null)
				args.Sender = this;
			if(IsChangeEventsOff == false)
			{
				if(itemDeleted != null)
					itemDeleted.Raise(this, args);
				OnObjectChanged(new ObjectChangeNotifyEventArgs(this, args.Action, args.SourceArgs ?? args));
			}
		}
예제 #8
0
		void Binder_ItemChanged(object sender, CollectionChangeNotifyEventArgs args)
		{
			if(IsBindOff)
				return;
			if(args.Action == ChangeNotifyAction.ObjectReset)
			{
			 Refresh();
				return;
			}

			int pos = _index.IndexOf(args.Item);
			if( pos > -1 && _filterMethod != null && _filterMethod(args.Item) == false)
			{
				this._index.RemoveAt(pos);
				OnListChanged(new ListChangedEventArgs(ListChangedType.ItemDeleted, pos));
				return;
			}
			if(IsSorted && pos > -1)
			{
				int p = pos;
				_index.RemoveAt(pos);
				pos = FindSortPosition(args.Item);
				_index.Insert(pos, args.Item);
				OnListChanged(new ListChangedEventArgs(ListChangedType.ItemMoved, pos, p));
			}
			else if(pos != -1)
				OnListChanged(new ListChangedEventArgs(ListChangedType.ItemChanged, pos));
		}
예제 #9
0
		void Binder_ItemAdded(object sender, CollectionChangeNotifyEventArgs args)
		{
			if(IsBindOff)
				return;
			int pos = -1;
			if(_filterMethod == null || _filterMethod(args.Item))
			{
				if(_index.Contains(args.Item))
					_index.Remove(args.Item);
				if(IsSorted == false)
				{
					_index.Add(args.Item ?? args);
					pos = _index.Count-1;
				}
				else
				{
					pos = FindSortPosition(args.Item);
					_index.Insert(pos, args.Item);
				}
			}
			if(pos == -1 && _index.Contains(args.Item))
				Refresh();
			if(pos == -1)
				return;
			else
				OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, pos));
		}
예제 #10
0
		//-------------------------------------------------------------------------------------
		void Binder_ItemChanged(object sender, CollectionChangeNotifyEventArgs args)
		{
			if(isBindOff)
				return;
			if(args.ItemIndex == -1)
			{
				OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, 0));
				return;
			} 
			if(index == null)
				OnListChanged(new ListChangedEventArgs(ListChangedType.ItemChanged, args.ItemIndex));
			else
			{
				int pos = index.IndexOf(args.ItemIndex);
				if(IsFiltered)
				{
					bool pass = PassFilterCheck(_list[args.ItemIndex]);
					if(pass == false && pos > -1)
					{
						this.index.RemoveAt(pos);
						OnListChanged(new ListChangedEventArgs(ListChangedType.ItemDeleted, pos));
						return;
					}
					if(pass && pos == -1)
					{
						this.index.Add(args.ItemIndex);
						pos = index.IndexOf(args.ItemIndex);
						OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, pos));
					}
				}
				if(IsSorted && pos > -1 )
				{
					int p = pos;
					index.RemoveAt(pos);
					pos = FindSortPosition(args.ItemIndex);
					index.Insert(pos, args.ItemIndex);
					OnListChanged(new ListChangedEventArgs(ListChangedType.ItemMoved, pos, p));
				}
				else
					OnListChanged(new ListChangedEventArgs(ListChangedType.ItemChanged, pos));
			}
		}
예제 #11
0
		//-------------------------------------------------------------------------------------
		void Binder_ItemDeleted(object sender, CollectionChangeNotifyEventArgs args)
		{
			if(IsBindOff)
				return;
			int pos = _index.IndexOf(args.Item);
			if(pos == -1)
				return;
			_index.RemoveAt(pos);
			OnListChanged(new ListChangedEventArgs(ListChangedType.ItemDeleted, pos));
		}
예제 #12
0
		//-------------------------------------------------------------------------------------
		void Binder_ItemDeleted(object sender, CollectionChangeNotifyEventArgs args)
		{
			if(isBindOff)
				return;
			if(args.ItemIndex == -1)
			{
				OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, 0));
				return;
			} 
			if(index == null)
				OnListChanged(new ListChangedEventArgs(ListChangedType.ItemDeleted, args.ItemIndex));
			else
			{
				int pos = index.IndexOf(args.ItemIndex);
				if(pos == -1)
					return;
				index.RemoveAt(pos);
				for(int i = 0; i < index.Count; i++)
					if(index[i] > args.ItemIndex)
						index[i]--;
				OnListChanged(new ListChangedEventArgs(ListChangedType.ItemDeleted, pos));   
			} 
		}
예제 #13
0
		//-------------------------------------------------------------------------------------
		void Binder_ItemAdded(object sender, CollectionChangeNotifyEventArgs args)
		{
			if(isBindOff)
				return;
			if(args.ItemIndex == -1)
			{
				OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, 0));
				return;
			} 
			if(index == null)
				OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, args.ItemIndex));
			else
			{  
				int pos = -1;
				if(IsFiltered && PassFilterCheck(_list[args.ItemIndex]) == false)
					pos = -1;
				else
				{
					for(int a = 0; a < index.Count; a++)
						if(index[a] >= args.ItemIndex)
							index[a]++;
					if(IsSorted == false)
					{
						index.Add(args.ItemIndex);
						pos = index.Count-1;
					}
					else
					{
						pos = FindSortPosition(args.ItemIndex);
						index.Insert(pos, args.ItemIndex);
					}
				}
				if(pos == -1 && index.Contains(args.ItemIndex))
					RefreshInternal();
				if(pos != -1)
					OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, pos)); 
			}
		}
예제 #14
0
		void tree_ItemAdded(object sender, CollectionChangeNotifyEventArgs args)
		{
			// ?????
			if(IsIncrementalTree == false)
				view.Add((ITreeItem)args.Item);
			Invalidate();
		}
예제 #15
0
		void tree_ItemRemoved(object sender, CollectionChangeNotifyEventArgs args)
		{
			ITreeItem item = (ITreeItem)args.Item;
			if(view.Contains(item))
			{
				HideChildren(item);
				view.Remove(item);
			}
			if(item.Parent != null && (item.Parent.HasChildren == false
																|| (item.Parent.Children.Count() == 1 && item.Parent.Children.Contains(item))))
			{
				if(view.Contains(item.Parent))
				{
					view[item.Parent].hasButton = false;
					view[item.Parent].btnClose = true;
					view[item.Parent].btnRect = new Rectangle();
				}
			}
			Invalidate();
		}
예제 #16
0
		//-------------------------------------------------------------------------------------
		#region << SimTree Handlers >>
		void tree_ItemChanged(object sender, CollectionChangeNotifyEventArgs args)
		{
			ITreeItem item = (ITreeItem)args.Item;
			if(view.Contains(item))
			{
				if(!this.tree.AllowMultiObject)
				{
					view.OnListChanged(new ListChangedEventArgs(ListChangedType.ItemChanged, view.IndexOf(item)));
					Invalidate();
				}
				else
				{
					if(item.Object != null)
					{
						int[] indexAllObject = this.tree.IndexOfAll(item.Object);
						for(int i = 0; i < indexAllObject.Length; i++)
						{
							view.OnListChanged(new ListChangedEventArgs(ListChangedType.ItemChanged,
											view.IndexOf((ITreeItem)tree.GetItemWithIndex(indexAllObject[i]))));
							Invalidate();
						}
					}
				}
			}

		}