172 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Drawing;
 | |
| using System.Drawing.Drawing2D;
 | |
| 
 | |
| namespace DevComponents.Tree.Display
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// Represents cell display class.
 | |
| 	/// </summary>
 | |
| 	internal class CellDisplay
 | |
| 	{
 | |
| 		public CellDisplay()
 | |
| 		{
 | |
| 		}
 | |
| 
 | |
| 		public static void PaintCell(NodeCellRendererEventArgs ci)
 | |
| 		{
 | |
| 			if(ci.Cell.CheckBoxVisible)
 | |
| 				CellDisplay.PaintCellCheckBox(ci);
 | |
| 			if(!ci.Cell.Images.LargestImageSize.IsEmpty)
 | |
| 				CellDisplay.PaintCellImage(ci);
 | |
| 			CellDisplay.PaintText(ci);
 | |
| 		}
 | |
| 
 | |
| 		public static void PaintCellCheckBox(NodeCellRendererEventArgs ci)
 | |
| 		{
 | |
| 			if(!ci.Cell.CheckBoxVisible)
 | |
| 				return;
 | |
| 			Rectangle r=ci.Cell.CheckBoxBoundsRelative;
 | |
| 			r.Offset(ci.CellOffset);
 | |
| 			System.Windows.Forms.ButtonState state=System.Windows.Forms.ButtonState.Normal;
 | |
| 			if(ci.Cell.Checked)
 | |
| 				state=System.Windows.Forms.ButtonState.Checked;
 | |
|             System.Windows.Forms.ControlPaint.DrawCheckBox(ci.Graphics,r,state);
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		public static void PaintCellImage(NodeCellRendererEventArgs ci)
 | |
| 		{
 | |
| 			if(ci.Cell.Images.LargestImageSize.IsEmpty)
 | |
| 				return;
 | |
| 			Rectangle r=ci.Cell.ImageBoundsRelative;
 | |
| 			r.Offset(ci.CellOffset);
 | |
| 			
 | |
| 			Image image = CellDisplay.GetCellImage(ci.Cell);
 | |
| 			
 | |
| 			if(image!=null)
 | |
| 			{
 | |
|                 Size imageSize = Dpi.Size(image.Size);
 | |
| 				ci.Graphics.DrawImage(image,r.X+(r.Width-imageSize.Width)/2,
 | |
| 				                      r.Y+(r.Height-imageSize.Height)/2, imageSize.Width, imageSize.Height);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public static void PaintText(NodeCellRendererEventArgs ci)
 | |
| 		{
 | |
| 			Cell cell=ci.Cell;
 | |
| 			if(cell.HostedControl==null && (cell.Text=="" || ci.Style.TextColor.IsEmpty) || cell.TextContentBounds.IsEmpty )
 | |
| 				return;
 | |
| 			Rectangle bounds=ci.Cell.TextContentBounds;
 | |
| 			bounds.Offset(ci.CellOffset);
 | |
| 			
 | |
| 			if(cell.HostedControl!=null)
 | |
| 			{
 | |
| //				if(ci.Graphics.Transform!=null)
 | |
| //				{
 | |
| //					Point[] p=new Point[] {new Point(bounds.X, bounds.Y), new Point(bounds.Right, bounds.Bottom)};
 | |
| //					ci.Graphics.Transform.TransformPoints(p);
 | |
| //					bounds = new Rectangle(p[0].X, p[0].Y, p[1].X-p[0].X, p[1].Y-p[0].Y);
 | |
| //				}
 | |
| //				if(cell.HostedControl.Bounds!=bounds)
 | |
| //				{
 | |
| //					cell.IgnoreHostedControlSizeChange = true;
 | |
| //					cell.HostedControl.Bounds=bounds;
 | |
| //					cell.IgnoreHostedControlSizeChange = false;
 | |
| //				}
 | |
| 				if(!cell.HostedControl.Visible)
 | |
| 					cell.HostedControl.Visible = true;
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			Font font=ci.Style.Font;
 | |
| 			bounds.Inflate(1,1);
 | |
| 			if (cell.TextMarkupBody == null)
 | |
| 				TextDrawing.DrawString(ci.Graphics , cell.Text, font, ci.Style.TextColor, bounds, ci.Style.TextFormat);
 | |
| 			else
 | |
| 			{
 | |
| 				TextMarkup.MarkupDrawContext d = new TextMarkup.MarkupDrawContext(ci.Graphics, font, ci.Style.TextColor, false);
 | |
| 				d.HotKeyPrefixVisible = !((ci.Style.TextFormat & eTextFormat.HidePrefix) == eTextFormat.HidePrefix);
 | |
| 				Rectangle mr = new Rectangle(bounds.X, bounds.Y + (bounds.Height - cell.TextMarkupBody.Bounds.Height) / 2, cell.TextMarkupBody.Bounds.Width, cell.TextMarkupBody.Bounds.Height);
 | |
| 				mr.Offset((bounds.Width - mr.Width) / 2, 0);
 | |
| 				cell.TextMarkupBody.Bounds = mr;
 | |
| 				cell.TextMarkupBody.Render(d);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		private static Image GetCellImage(Cell cell)
 | |
| 		{
 | |
| 			Image img=cell.Images.Image;
 | |
| 			if(img==null && cell.Images.ImageIndex>=0)
 | |
| 				img=cell.Images.GetImageByIndex(cell.Images.ImageIndex);
 | |
| 			
 | |
| 			if(cell.IsMouseOver && (cell.Images.ImageMouseOver!=null || cell.Images.ImageMouseOverIndex>=0))
 | |
| 			{
 | |
| 				if(cell.Images.ImageMouseOver!=null)
 | |
| 					img=cell.Images.ImageMouseOver;
 | |
| 				else
 | |
| 					img=cell.Images.GetImageByIndex(cell.Images.ImageMouseOverIndex);
 | |
| 			}
 | |
| 			else if(cell.Parent.Expanded && (cell.Images.ImageExpanded!=null || cell.Images.ImageExpandedIndex>=0))
 | |
| 			{
 | |
| 				if(cell.Images.ImageExpanded!=null)
 | |
| 					img=cell.Images.ImageExpanded;
 | |
| 				else
 | |
| 					img=cell.Images.GetImageByIndex(cell.Images.ImageExpandedIndex);
 | |
| 			}
 | |
| 			return img;
 | |
| 		}
 | |
| 
 | |
| 		public static Font GetCellFont(TreeGX tree, Cell cell)
 | |
| 		{
 | |
| 			Font font=tree.Font;
 | |
| 			ElementStyle style=null;
 | |
| 			
 | |
| 			if(cell.StyleNormal!=null)
 | |
| 			{
 | |
| 				style=cell.StyleNormal;
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				if(tree.NodeStyle!=null)
 | |
| 					style=tree.NodeStyle;
 | |
| 				else
 | |
| 					style=new ElementStyle();
 | |
| 
 | |
| 				if(tree.CellStyleDefault!=null)
 | |
| 					style=tree.CellStyleDefault;
 | |
| 				else
 | |
| 					style=ElementStyle.GetDefaultCellStyle(style);
 | |
| 			}
 | |
| 
 | |
| 			if(style!=null && style.Font!=null)
 | |
| 				font=style.Font;
 | |
| 
 | |
| 			return font;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/// <summary>
 | |
| 	/// Represents information neccessary to paint the cell on canvas.
 | |
| 	/// </summary>
 | |
| 	internal class CellDisplayInfo
 | |
| 	{
 | |
| 		public ElementStyle Style=null;
 | |
| 		public System.Drawing.Graphics Graphics=null;
 | |
| 		public Cell ContextCell=null;
 | |
| 		public Point CellOffset=Point.Empty;
 | |
| 
 | |
| 		public CellDisplayInfo()
 | |
| 		{
 | |
| 		}
 | |
| 
 | |
| 		public CellDisplayInfo(ElementStyle style, System.Drawing.Graphics g, Cell cell, Point cellOffset)
 | |
| 		{
 | |
| 			this.Style=style;
 | |
| 			this.Graphics=g;
 | |
| 			this.ContextCell=cell;
 | |
| 			this.CellOffset=cellOffset;
 | |
| 		}
 | |
| 	}
 | |
| }
 |