77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Drawing;
 | 
						|
 | 
						|
namespace DevComponents.Tree
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Class that is used to layout column header.
 | 
						|
	/// </summary>
 | 
						|
	internal class ColumnHeaderLayout
 | 
						|
	{
 | 
						|
		public ColumnHeaderLayout()
 | 
						|
		{
 | 
						|
		}
 | 
						|
 | 
						|
		// Assumes that layoutInfo is up-to-date and that Node that is connected with
 | 
						|
		// columns is already processed and it's size and location calculated.
 | 
						|
		// layoutInfo.Top member reflects the next position below the node
 | 
						|
		// layoutInfo.LevelOffset should reflect the X offset for the child nodes.
 | 
						|
		public static int LayoutColumnHeader(NodeLayoutContextInfo layoutInfo,int x, int y, int clientWidth, int cellHorizontalSpacing)
 | 
						|
		{
 | 
						|
			Node node=layoutInfo.ContextNode;
 | 
						|
            int height=0;
 | 
						|
			
 | 
						|
			foreach(ColumnHeader col in node.NodesColumns)
 | 
						|
			{
 | 
						|
				if(!col.Visible)
 | 
						|
					continue;
 | 
						|
 | 
						|
				if(col.SizeChanged)
 | 
						|
				{
 | 
						|
					// Column for child nodes is always placed below the current node and
 | 
						|
					// is not included in the node's rectangle
 | 
						|
					Rectangle bounds=Rectangle.Empty;
 | 
						|
					bounds.X=x;
 | 
						|
					bounds.Y=y;
 | 
						|
					if(col.Width.Relative>0)
 | 
						|
						bounds.Width=(clientWidth*col.Width.Relative)/100-1;
 | 
						|
					else
 | 
						|
						bounds.Width=col.Width.Absolute;
 | 
						|
 | 
						|
					if(col.StyleNormal=="" && col.StyleMouseDown=="" && col.StyleMouseOver=="")
 | 
						|
					{
 | 
						|
						bounds.Height=layoutInfo.DefaultHeaderSize.Height;
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						Size sz=Size.Empty;
 | 
						|
						if(col.StyleNormal!="")
 | 
						|
						{
 | 
						|
							ElementStyleLayout.CalculateStyleSize(layoutInfo.Styles[col.StyleNormal],layoutInfo.DefaultFont);
 | 
						|
							sz=layoutInfo.Styles[col.StyleNormal].Size;
 | 
						|
						}
 | 
						|
												
 | 
						|
						if(sz.Height==0)
 | 
						|
							bounds.Height=layoutInfo.DefaultHeaderSize.Height;
 | 
						|
						else
 | 
						|
							bounds.Height=sz.Height;
 | 
						|
					}
 | 
						|
 | 
						|
					col.SetBounds(bounds);
 | 
						|
					col.SizeChanged=false;
 | 
						|
					
 | 
						|
					x+=(bounds.Width+cellHorizontalSpacing);
 | 
						|
 | 
						|
					if(bounds.Height>height)
 | 
						|
						height=bounds.Height;
 | 
						|
				}
 | 
						|
				else if(col.Bounds.Height>height)
 | 
						|
					height=col.Bounds.Height;
 | 
						|
			}
 | 
						|
 | 
						|
			return height;
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
}
 |