//-------------------------------------------------------------------------------------
  /// <summary>
  /// Рисует элементы дерева
  /// </summary>
  /// <param name="g"></param>
  /// <param name="treeView"></param>
  /// <param name="item"></param>
  /// <param name="r">Ссылка на прямоугольник ячейки. После рисования, он будет изменен!!!!</param>
  ///// <param name="indentWithoutButton">Определяет, будет ли отступ вместо кнопки, если кнопки нет.</param>
  public void DrawTreeElements(Graphics g, SimTreeGridView treeView, ITreeItem item, ref Rectangle r/*,
                                bool indentWithoutButton = true*/)
  {
   Rectangle cellBounds = r;
   r.X +=2;
   r.Width -= 2;
   r.X += (int)(treeView.Indent * item.Level);
   r.Width -= (int)(treeView.Indent * item.Level);
   SimTreeGridView.NodeInfo ci = treeView.view[item];
   if(treeView.DrawPlusMinus && ci.hasButton && ci.btnRect == Rectangle.Empty)
    ci.btnRect = new Rectangle(r.X - cellBounds.X, r.Y + (r.Height - 9)/2 - cellBounds.Y, 9, 9);

   if(treeView.DrawTreeLines)
   {
    if(item.IsRoot == false)
    {
     int shift = cellBounds.X + 6;
     foreach(ITreeItem i in treeView.Tree.GetParentsItemsList(item))
     {
      if(i.IsRoot)
       continue;
      if(i.Level < item.Level)
       if(treeView.view[i].IsEndItem == false)
        g.DrawLine(SystemPens.ControlDark, shift, r.Y, shift, r.Y + r.Height-1);
      shift = shift + treeView.Indent; // cellBounds.X + 6 + treeView.Indent * i.Level;
     }
     shift = r.X - treeView.Indent + 4;
     if(ci.IsEndItem)
      g.DrawLine(SystemPens.ControlDark, shift, r.Y, shift, r.Y+r.Height/2-1);
     else
      g.DrawLine(SystemPens.ControlDark, shift, r.Y, shift, r.Y + r.Height-1);
     g.DrawLine(SystemPens.ControlDark, shift, r.Y+r.Height/2-1, shift + 9, r.Y+r.Height/2-1);
    }
    if(ci.hasButton && ci.btnClose == false)
    {
     g.DrawLine(SystemPens.ControlDark, r.X + 4, r.Y + r.Height/2, r.X + 4, r.Y + r.Height-1);
    }
   }
   if(treeView.DrawPlusMinus && ci.hasButton)
   {
    if(ci.btnClose)
     g.DrawImage(global::Sim.Controls.Properties.Resources.TreeBtn_Plus, r.X, r.Y + (r.Height - 9)/2);
    else
     g.DrawImage(global::Sim.Controls.Properties.Resources.TreeBtn_Minus, r.X, r.Y + (r.Height - 9)/2);
   }
   if((treeView.DrawPlusMinus && ci.hasButton) || 
       (((SimTreeGridViewMainColumn)base.OwningColumn).IndentWithoutButton && item.Level == 0))
   {
    r.X += 11;
    r.Width -= 11;
   }
  }
Exemple #2
0
		//-------------------------------------------------------------------------------------
		private void ftgvView_NeedChildItems(object sender, SimTreeGridView.SimTreeGridItemEventArgs args)
		{
			try
			{
				object obj = ((ViewItem)args.Item.Object).Value;
				Type t = obj.GetType();
				
				if(obj is IEnumerable == false || showIEnumProps == true)
				{
					BindingFlags fl = BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetField | BindingFlags.GetProperty;
					if(showNonPublic)
						fl |= BindingFlags.NonPublic;
					foreach(MemberInfo mi in t.GetMembers(fl))
					{
						ViewItem i = new ViewItem();
						i.Name = mi.Name;
						switch(mi.MemberType)
						{
							case MemberTypes.Field:
								i.mi = mi;
								i.parObj = obj;
							break;
							case MemberTypes.Property:
								if(((PropertyInfo)mi).GetIndexParameters().Length > 0 )//I i.Name == "Item" || i.Name.EndsWith(".Item"))
									continue;
								goto case MemberTypes.Field;
							default: continue;
						}
						args.Tree.Add(i, args.Item);
					}
				}
				if(obj is IEnumerable)
				{
					int c = 0;
					foreach(object i in (IEnumerable)obj)
					{
						ViewItem vi = new ViewItem();
						vi.Name = String.Format("[{0}]", c++);
						vi.obj = i;
						args.Tree.Add(vi, args.Item);
					}
				}
			}
			catch(Exception Err)
			{
				//ModalErrorBox.Show(Err, PanelBack);
				ViewItem vi = new ViewItem();
				vi.Name = "ERROR";
				vi.obj = Err;
				args.Tree.Add(vi, args.Item);

			}

		}
			//-------------------------------------------------------------------------------------
			/// <summary>
			/// Инициализирующий конструктор.
			/// </summary>
			/// <param name="treeGridView"></param>
			public View(SimTreeGridView treeGridView)
				: this()
			{
				treeView = treeGridView;
			}
Exemple #4
0
		//-------------------------------------------------------------------------------------
		private void ftgvView_HasChildItems(object sender, SimTreeGridView.SimTreeGridItemEventArgs args)
		{
			try
			{
				Type t = ((ViewItem)args.Item.Object).Type;
				if(t != null)
					args.HasChildren = !(t.IsPrimitive || t.IsAssignableFrom(typeof(string)) || t.FullName == "System.RuntimeType");
			}
			catch(Exception Err)
			{
				ModalErrorBox.Show(Err, PanelBack);
			}
		}