
#region ================== Copyright (c) 2007 Pascal vd Heiden

/*
 * Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
 * This program is released under GNU General Public License
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 */

#endregion

#region ================== Namespaces

using System;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Rendering;

#endregion

namespace CodeImp.DoomBuilder.Controls
{
	public partial class ColorControl : UserControl
	{
		public event EventHandler ColorChanged;
		
		// Constructor
		public ColorControl()
		{
			// Initialize
			InitializeComponent();
		}

		// Properties
		public string Label { get { return label.Text; } set { label.Text = value; } }
		public PixelColor Color { get { return PixelColor.FromColor(panel.BackColor); } set { panel.BackColor = System.Drawing.Color.FromArgb(value.ToInt()); } }

		// Button clicked
		private void button_Click(object sender, EventArgs e)
		{
			// Mouse up first
			button_MouseUp(sender, new MouseEventArgs(MouseButtons.Left, 1, 0, 0, 0));
			
			// Show color dialog
			dialog.Color = panel.BackColor;
			if(dialog.ShowDialog(this.ParentForm) == DialogResult.OK)
			{
				// Apply new color
				panel.BackColor = dialog.Color;
				
				//mxd. Dispatch Event
				if(ColorChanged != null) ColorChanged(this, EventArgs.Empty); 
			}
		}

		// Resized
		private void ColorControl_Resize(object sender, EventArgs e)
		{
			button.Left = ClientSize.Width - button.Width;
			panel.Left = ClientSize.Width - button.Width - panel.Width - 3;
			label.Left = 0;
			label.Width = panel.Left;
		}

		// Mouse pressed on button
		private void button_MouseDown(object sender, MouseEventArgs e)
		{
			// This moves the image 1 pixel to right-bottom
			if(e.Button == MouseButtons.Left)
				button.Padding = new Padding(1, 0, 1, 1);
		}

		// Mouse released on button
		private void button_MouseUp(object sender, MouseEventArgs e)
		{
			// This moves the image 1 pixel to normal position
			if(e.Button == MouseButtons.Left)
				button.Padding = new Padding(0, 0, 2, 3);
			
			// Lose focus
			panel.Focus();
		}

		// Mouse moves over button
		private void button_MouseMove(object sender, MouseEventArgs e)
		{
			// Outside button rect?
			if((e.X < 0) || (e.X >= button.Width) || (e.Y < 0) || (e.Y >= button.Height))
				button.Padding = new Padding(0, 0, 2, 3);
		}
	}
}
