using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using PhysFS_NET;

namespace TestApp
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class TestAppForm : System.Windows.Forms.Form
	{
      private System.Windows.Forms.Label label2;
      private System.Windows.Forms.Button RefreshCDsButton;
      private System.Windows.Forms.ListBox CDDrivesList;
      private System.Windows.Forms.ListBox SearchPathList;
      private System.Windows.Forms.Label label1;
      private System.Windows.Forms.TextBox EnumFilesPath;
      private System.Windows.Forms.ListBox EnumList;
      private System.Windows.Forms.Label label3;
      private System.Windows.Forms.TextBox NewSearchPathText;
      private System.Windows.Forms.Button AddSearchPathButton;
      private System.Windows.Forms.Button RemovePathButton;
      private System.Windows.Forms.Button RefreshEnumList;
      private System.Windows.Forms.Button RefreshSearchPathButton;
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public TestAppForm()
		{
			//
			// 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.label2 = new System.Windows.Forms.Label();
         this.RefreshCDsButton = new System.Windows.Forms.Button();
         this.CDDrivesList = new System.Windows.Forms.ListBox();
         this.SearchPathList = new System.Windows.Forms.ListBox();
         this.label1 = new System.Windows.Forms.Label();
         this.EnumFilesPath = new System.Windows.Forms.TextBox();
         this.EnumList = new System.Windows.Forms.ListBox();
         this.label3 = new System.Windows.Forms.Label();
         this.RefreshEnumList = new System.Windows.Forms.Button();
         this.NewSearchPathText = new System.Windows.Forms.TextBox();
         this.AddSearchPathButton = new System.Windows.Forms.Button();
         this.RemovePathButton = new System.Windows.Forms.Button();
         this.RefreshSearchPathButton = new System.Windows.Forms.Button();
         this.SuspendLayout();
         // 
         // label2
         // 
         this.label2.Location = new System.Drawing.Point(8, 8);
         this.label2.Name = "label2";
         this.label2.Size = new System.Drawing.Size(136, 16);
         this.label2.TabIndex = 2;
         this.label2.Text = "Available CD-ROM Drives";
         // 
         // RefreshCDsButton
         // 
         this.RefreshCDsButton.Location = new System.Drawing.Point(8, 152);
         this.RefreshCDsButton.Name = "RefreshCDsButton";
         this.RefreshCDsButton.Size = new System.Drawing.Size(72, 24);
         this.RefreshCDsButton.TabIndex = 4;
         this.RefreshCDsButton.Text = "Refresh";
         this.RefreshCDsButton.Click += new System.EventHandler(this.RefreshCDsButton_Click);
         // 
         // CDDrivesList
         // 
         this.CDDrivesList.Location = new System.Drawing.Point(8, 24);
         this.CDDrivesList.Name = "CDDrivesList";
         this.CDDrivesList.Size = new System.Drawing.Size(136, 121);
         this.CDDrivesList.TabIndex = 7;
         // 
         // SearchPathList
         // 
         this.SearchPathList.Location = new System.Drawing.Point(152, 24);
         this.SearchPathList.Name = "SearchPathList";
         this.SearchPathList.Size = new System.Drawing.Size(248, 95);
         this.SearchPathList.TabIndex = 8;
         // 
         // label1
         // 
         this.label1.Location = new System.Drawing.Point(152, 8);
         this.label1.Name = "label1";
         this.label1.Size = new System.Drawing.Size(136, 16);
         this.label1.TabIndex = 10;
         this.label1.Text = "Search Path";
         // 
         // EnumFilesPath
         // 
         this.EnumFilesPath.Location = new System.Drawing.Point(408, 128);
         this.EnumFilesPath.Name = "EnumFilesPath";
         this.EnumFilesPath.Size = new System.Drawing.Size(208, 20);
         this.EnumFilesPath.TabIndex = 11;
         this.EnumFilesPath.Text = "";
         // 
         // EnumList
         // 
         this.EnumList.Location = new System.Drawing.Point(408, 24);
         this.EnumList.Name = "EnumList";
         this.EnumList.Size = new System.Drawing.Size(208, 95);
         this.EnumList.TabIndex = 12;
         // 
         // label3
         // 
         this.label3.Location = new System.Drawing.Point(408, 8);
         this.label3.Name = "label3";
         this.label3.Size = new System.Drawing.Size(136, 16);
         this.label3.TabIndex = 13;
         this.label3.Text = "Enumerate Files";
         // 
         // RefreshEnumList
         // 
         this.RefreshEnumList.Location = new System.Drawing.Point(544, 152);
         this.RefreshEnumList.Name = "RefreshEnumList";
         this.RefreshEnumList.Size = new System.Drawing.Size(72, 24);
         this.RefreshEnumList.TabIndex = 14;
         this.RefreshEnumList.Text = "Refresh";
         this.RefreshEnumList.Click += new System.EventHandler(this.RefreshEnumList_Click);
         // 
         // NewSearchPathText
         // 
         this.NewSearchPathText.Location = new System.Drawing.Point(152, 128);
         this.NewSearchPathText.Name = "NewSearchPathText";
         this.NewSearchPathText.Size = new System.Drawing.Size(248, 20);
         this.NewSearchPathText.TabIndex = 15;
         this.NewSearchPathText.Text = "";
         // 
         // AddSearchPathButton
         // 
         this.AddSearchPathButton.Location = new System.Drawing.Point(152, 152);
         this.AddSearchPathButton.Name = "AddSearchPathButton";
         this.AddSearchPathButton.Size = new System.Drawing.Size(72, 24);
         this.AddSearchPathButton.TabIndex = 9;
         this.AddSearchPathButton.Text = "Add Path";
         this.AddSearchPathButton.Click += new System.EventHandler(this.AddSearchPathButton_Click);
         // 
         // RemovePathButton
         // 
         this.RemovePathButton.Location = new System.Drawing.Point(232, 152);
         this.RemovePathButton.Name = "RemovePathButton";
         this.RemovePathButton.Size = new System.Drawing.Size(88, 24);
         this.RemovePathButton.TabIndex = 16;
         this.RemovePathButton.Text = "Remove Path";
         this.RemovePathButton.Click += new System.EventHandler(this.RemovePathButton_Click);
         // 
         // RefreshSearchPathButton
         // 
         this.RefreshSearchPathButton.Location = new System.Drawing.Point(328, 152);
         this.RefreshSearchPathButton.Name = "RefreshSearchPathButton";
         this.RefreshSearchPathButton.Size = new System.Drawing.Size(72, 24);
         this.RefreshSearchPathButton.TabIndex = 17;
         this.RefreshSearchPathButton.Text = "Refresh";
         this.RefreshSearchPathButton.Click += new System.EventHandler(this.RefreshSearchPathButton_Click);
         // 
         // TestAppForm
         // 
         this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
         this.ClientSize = new System.Drawing.Size(624, 309);
         this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                      this.RefreshSearchPathButton,
                                                                      this.RemovePathButton,
                                                                      this.NewSearchPathText,
                                                                      this.RefreshEnumList,
                                                                      this.label3,
                                                                      this.EnumList,
                                                                      this.EnumFilesPath,
                                                                      this.label1,
                                                                      this.SearchPathList,
                                                                      this.CDDrivesList,
                                                                      this.RefreshCDsButton,
                                                                      this.label2,
                                                                      this.AddSearchPathButton});
         this.Name = "TestAppForm";
         this.Text = "PhysFS Test Application";
         this.Load += new System.EventHandler(this.TestAppForm_Load);
         this.ResumeLayout(false);

      }
		#endregion

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

      private void TestAppForm_Load(object sender, System.EventArgs e)
      {
      
      }

      private void RefreshCDsButton_Click(object sender, System.EventArgs e)
      {
         // Clear ths listbox if it contains any items
         CDDrivesList.Items.Clear();
         // Add the items to the list
         CDDrivesList.Items.AddRange(PhysFS.GetCDROMDrives());
      }

      private void RefreshSearchPathButton_Click(object sender, System.EventArgs e)
      {
         // Clear ths listbox if it contains any items
         SearchPathList.Items.Clear();
         // Add the items to the list
         SearchPathList.Items.AddRange(PhysFS.GetSearchPath());
      }

      private void AddSearchPathButton_Click(object sender, System.EventArgs e)
      {
         // Add search path
         PhysFS.AddToSearchPath(NewSearchPathText.Text, false);
         // Clear ths listbox if it contains any items
         SearchPathList.Items.Clear();
         // Add the items to the list
         SearchPathList.Items.AddRange(PhysFS.GetSearchPath());
      }

      private void RemovePathButton_Click(object sender, System.EventArgs e)
      {
         if(SearchPathList.SelectedItem != null)
         {
            PhysFS.RemoveFromSearchPath(SearchPathList.SelectedItem.ToString());
            // Clear ths listbox if it contains any items
            SearchPathList.Items.Clear();
            // Add the items to the list
            SearchPathList.Items.AddRange(PhysFS.GetSearchPath());
         }
      }

      private void RefreshEnumList_Click(object sender, System.EventArgs e)
      {
         EnumList.Items.Clear();
         EnumList.Items.AddRange(PhysFS.EnumerateFiles(EnumFilesPath.Text));
      }
	}
}