using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using C1.C1Flash;

namespace Movie_Rotate
{
	/// <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.C1FlashMovie c1FlashMovie1;
		/// <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.c1FlashMovie1 = new C1.C1Flash.C1FlashMovie();
			this.SuspendLayout();
			// 
			// label1
			// 
			this.label1.Location = new System.Drawing.Point(16, 16);
			this.label1.Name = "label1";
			this.label1.Size = new System.Drawing.Size(392, 40);
			this.label1.TabIndex = 0;
			this.label1.Text = "This sample demonstrates how to generate a movie using the C1FlashMovie class.";
			// 
			// button1
			// 
			this.button1.Location = new System.Drawing.Point(120, 112);
			this.button1.Name = "button1";
			this.button1.Size = new System.Drawing.Size(160, 32);
			this.button1.TabIndex = 1;
			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(392, 190);
			this.Controls.AddRange(new System.Windows.Forms.Control[] {
																		  this.button1,
																		  this.label1});
			this.Name = "Form1";
			this.Text = "ComponentOne C1Flash Sample - Rotate";
			this.ResumeLayout(false);

		}
		#endregion

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

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

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

		private void button1_Click(object sender, System.EventArgs e)
		{
			FRectangle rect1 = new FRectangle( 0 * Constants.TWIPS, 0 * Constants.TWIPS, 100 * Constants.TWIPS, 100 * Constants.TWIPS );			// top-left rectangle
			FRectangle rect2 = new FRectangle( 50 * Constants.TWIPS, 50 * Constants.TWIPS, 100 * Constants.TWIPS, 100 * Constants.TWIPS );		// middle rectangle
			FRectangle rect3 = new FRectangle( 100 * Constants.TWIPS, 100 * Constants.TWIPS, 100 * Constants.TWIPS, 100 * Constants.TWIPS );		// bottom-right rectangle

			// set rect1 to solid-fill red.
			rect1.FillSolidColor( Color.Red );

			// set rect2 to linear-fill blue-black.
			rect2.FillGradientColor( Color.Blue, Color.Black, true );

			// set rect3 to radial-fill yellow-violet.
			rect3.FillGradientColor( Color.Yellow, Color.Violet, false );

			// set rect1 in depth 1	(at bottom)
			rect1.Depth = 1;
			// set rect2 in depth 2 (in the middle)
			rect2.Depth = 2;
			// set rect3 in depth 3.(on top of all)
			rect3.Depth = 3;
	
			// "add" rect1 and rect2 to frame1(this.c1FlashMovie1 dictionary), then "place" them on frame1
			this.c1FlashMovie1.Frames(0).AddObject( rect1 );
			this.c1FlashMovie1.Frames(0).AddObject( rect2 );
			this.c1FlashMovie1.Frames(0).AddObject( rect3 );

			// rect3 is rotating by itself.
			this.c1FlashMovie1.Frames(1).RemoveObject( rect3 );
			rect3.Rotate(22.5F);
			this.c1FlashMovie1.Frames(1).AddObject( rect3 );
			this.c1FlashMovie1.Frames(2).RemoveObject( rect3 );
			rect3.Rotate(45F);
			this.c1FlashMovie1.Frames(2).AddObject( rect3 );
			this.c1FlashMovie1.Frames(3).RemoveObject( rect3 );
			rect3.Rotate(67.5F);
			this.c1FlashMovie1.Frames(3).AddObject( rect3 );
			this.c1FlashMovie1.Frames(4).RemoveObject( rect3 );
			rect3.Rotate(90F);
			this.c1FlashMovie1.Frames(4).AddObject( rect3 );

			FEditText text = new FEditText(new Rectangle(100 * Constants.TWIPS, 100 * Constants.TWIPS, 
				300 * Constants.TWIPS, 80 * Constants.TWIPS), "Sample Text", "Arial", false, false);
			text.ReadOnly	= true;
			text.NoSelect	= true;
			text.Height		= 40 * Constants.TWIPS;
			text.AutoSize	= true;
			text.ForeColor = Color.SkyBlue;

			for(int i = 5; i < 20; i++)
			{
				text.ForeColor = Color.FromArgb(255, 255, i * 10, 255);
				text.Depth = (ushort)i;
				text.Translate(i * 10 * Constants.TWIPS, i * 10 * Constants.TWIPS);
				this.c1FlashMovie1.Frames( i ).AddObject( text );

				// Remove the frame later in the timeline. Note we need to remove it now,
				// since every time the AddObject is called, the object Id changes. But
				// we can remove in the future, which is what is happening here.
				if ( i < 20 )	
					this.c1FlashMovie1.Frames( i+1 ).RemoveObject( text );
			}

			this.c1FlashMovie1.RenderToFile(tempdir + @"\c1flash_movie_rotate.swf");
			LaunchViewer(tempdir + @"\c1flash_movie_rotate.swf");
		}
	}
}
