External/Aga.Controls/Tree/NodeControls/NodeIcon.cs
author StephaneLenclud
Thu, 18 Apr 2013 23:25:10 +0200
branchMiniDisplay
changeset 444 9b09e2ee0968
permissions -rw-r--r--
Front View plug-in does not init if no sensor added.
Fixing some format to make strings shorter.
Now trying to start SoundGraphAccess.exe process from same directory.
Packed mode now can display three sensors along with the current time.
moel@345
     1
using System;
moel@345
     2
using System.Collections.Generic;
moel@345
     3
using System.Text;
moel@345
     4
using System.Drawing;
moel@345
     5
using System.Windows.Forms;
moel@345
     6
using Aga.Controls.Properties;
moel@345
     7
using System.ComponentModel;
moel@345
     8
moel@345
     9
namespace Aga.Controls.Tree.NodeControls
moel@345
    10
{
moel@345
    11
	public class NodeIcon : BindableControl
moel@345
    12
	{
moel@345
    13
		public NodeIcon()
moel@345
    14
		{
moel@345
    15
			LeftMargin = 1;
moel@345
    16
		}
moel@345
    17
moel@345
    18
		public override Size MeasureSize(TreeNodeAdv node, DrawContext context)
moel@345
    19
		{
moel@345
    20
			Image image = GetIcon(node);
moel@345
    21
			if (image != null)
moel@345
    22
				return image.Size;
moel@345
    23
			else
moel@345
    24
				return Size.Empty;
moel@345
    25
		}
moel@345
    26
moel@345
    27
moel@345
    28
		public override void Draw(TreeNodeAdv node, DrawContext context)
moel@345
    29
		{
moel@345
    30
			Image image = GetIcon(node);
moel@345
    31
			if (image != null)
moel@345
    32
			{
moel@345
    33
				Rectangle r = GetBounds(node, context);
moel@345
    34
				if ( image.Width > 0 && image.Height > 0 )
moel@345
    35
				{
moel@345
    36
					switch (_scaleMode)
moel@345
    37
					{
moel@345
    38
						case ImageScaleMode.Fit:
moel@345
    39
							context.Graphics.DrawImage(image, r);
moel@345
    40
							break;
moel@345
    41
						case ImageScaleMode.ScaleDown:
moel@345
    42
							{
moel@345
    43
								float factor = Math.Min((float)r.Width / (float)image.Width, (float)r.Height / (float)image.Height);
moel@345
    44
								if (factor < 1)
moel@345
    45
									context.Graphics.DrawImage(image, r.X, r.Y, image.Width * factor, image.Height * factor);
moel@345
    46
								else
moel@345
    47
									context.Graphics.DrawImage(image, r.X, r.Y, image.Width, image.Height);
moel@345
    48
							} break;
moel@345
    49
						case ImageScaleMode.ScaleUp:
moel@345
    50
							{
moel@345
    51
								float factor = Math.Max((float)r.Width / (float)image.Width, (float)r.Height / (float)image.Height);
moel@345
    52
								if (factor > 1)
moel@345
    53
									context.Graphics.DrawImage(image, r.X, r.Y, image.Width * factor, image.Height * factor);
moel@345
    54
								else
moel@345
    55
									context.Graphics.DrawImage(image, r.X, r.Y, image.Width, image.Height);
moel@345
    56
							} break;
moel@345
    57
						case ImageScaleMode.AlwaysScale:
moel@345
    58
							{
moel@345
    59
								float fx = (float)r.Width / (float)image.Width;
moel@345
    60
								float fy = (float)r.Height / (float)image.Height;
moel@345
    61
								if (Math.Min(fx, fy) < 1)
moel@345
    62
								{ //scale down
moel@345
    63
									float factor = Math.Min(fx, fy);
moel@345
    64
									context.Graphics.DrawImage(image, r.X, r.Y, image.Width * factor, image.Height * factor);
moel@345
    65
								}
moel@345
    66
								else if (Math.Max(fx, fy) > 1)
moel@345
    67
								{
moel@345
    68
									float factor = Math.Max(fx, fy);
moel@345
    69
									context.Graphics.DrawImage(image, r.X, r.Y, image.Width * factor, image.Height * factor);
moel@345
    70
								}
moel@345
    71
								else
moel@345
    72
									context.Graphics.DrawImage(image, r.X, r.Y, image.Width, image.Height);
moel@345
    73
							} break;
moel@345
    74
						case ImageScaleMode.Clip:
moel@345
    75
						default: 
moel@345
    76
							context.Graphics.DrawImage(image, r.X, r.Y, image.Width, image.Height);
moel@345
    77
							break;
moel@345
    78
					}
moel@345
    79
				}
moel@345
    80
moel@345
    81
			}
moel@345
    82
		}
moel@345
    83
moel@345
    84
		protected virtual Image GetIcon(TreeNodeAdv node)
moel@345
    85
		{
moel@345
    86
			return GetValue(node) as Image;
moel@345
    87
		}
moel@345
    88
moel@345
    89
        private ImageScaleMode _scaleMode = ImageScaleMode.Clip;
moel@345
    90
        [DefaultValue("Clip"), Category("Appearance")]
moel@345
    91
        public ImageScaleMode ScaleMode
moel@345
    92
        {
moel@345
    93
            get { return _scaleMode; }
moel@345
    94
            set { _scaleMode = value; }
moel@345
    95
        }
moel@345
    96
moel@345
    97
moel@345
    98
	}
moel@345
    99
}