using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing.Drawing2D;

namespace Canvas_Transform
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		private System.Windows.Forms.Label label1;
		private System.Windows.Forms.Button button1;
		private C1.C1Flash.C1FlashCanvas c1FlashCanvas1;
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			this.label1 = new System.Windows.Forms.Label();
			this.button1 = new System.Windows.Forms.Button();
			this.c1FlashCanvas1 = new C1.C1Flash.C1FlashCanvas();
			this.SuspendLayout();
			// 
			// label1
			// 
			this.label1.Location = new System.Drawing.Point(16, 16);
			this.label1.Name = "label1";
			this.label1.Size = new System.Drawing.Size(336, 48);
			this.label1.TabIndex = 0;
			this.label1.Text = "This sample demonstrates the trasnformation of drawing using the C1FlashCanvas cl" +
				"ass.";
			// 
			// button1
			// 
			this.button1.Location = new System.Drawing.Point(104, 117);
			this.button1.Name = "button1";
			this.button1.Size = new System.Drawing.Size(168, 32);
			this.button1.TabIndex = 2;
			this.button1.Text = "Click here";
			this.button1.Click += new System.EventHandler(this.button1_Click);
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(376, 182);
			this.Controls.AddRange(new System.Windows.Forms.Control[] {
																		  this.button1,
																		  this.label1});
			this.Name = "Form1";
			this.Text = "ComponentOne C1Flash Sample - Transform";
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private string tempdir = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

		private void LaunchViewer(string filename)
		{
			try
			{
				System.Diagnostics.Process.Start(filename);
			}
			catch (Exception e)
			{
				System.Diagnostics.Process.Start("IEXPLORE.EXE", filename);
			}
		}

		private void button1_Click(object sender, System.EventArgs e)
		{
			this.c1FlashCanvas1.Clear(Color.White);

			// Resets the cordinate transform
			this.c1FlashCanvas1.ResetTransform(); 
			Point ptCenter = new Point(this.c1FlashCanvas1.Width/2, this.c1FlashCanvas1.Height/2);

			// Moves the cordination origin point to the center of the canvas.
			this.c1FlashCanvas1.TranslateTransform(ptCenter.X, ptCenter.Y);
			Rectangle rect = new Rectangle(0, 0, 100, 40);
			for(int i = 0; i < 12; i++)
			{
				// Draws the rectangle with the same rectangle parameter
				this.c1FlashCanvas1.DrawRectangle(Pens.Orange, rect);

				// Rotates the cordinition by 30 degrees
				this.c1FlashCanvas1.RotateTransform(30);

				// Scales the cordinition
				this.c1FlashCanvas1.ScaleTransform(1.075F, 1.075F);
			}

			// Resets the cordinate
			this.c1FlashCanvas1.ResetTransform(); 

			for(int i = 0; i < 12; i++)
			{
				this.c1FlashCanvas1.DrawRectangle(Pens.Green, rect);

				// Change the Transform
				Matrix m = this.c1FlashCanvas1.Transform;
				m.Shear(0.1F, 0.1F);
				this.c1FlashCanvas1.Transform = m;
			}

			this.c1FlashCanvas1.RenderToFile(tempdir + @"\c1flash_canvas_transform.swf");
			LaunchViewer(tempdir + @"\c1flash_canvas_transform.swf");
		}
	}
}
