#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.Controls;

#endregion

namespace CodeImp.DoomBuilder.Windows
{
	public partial class ScriptEditorForm : DelayedForm
	{
		#region ================== Variables

		// Closing?
		private bool appclose;
		
		#endregion
		
		#region ================== Properties
		
		public ScriptEditorPanel Editor { get { return editor; } }
		
		#endregion
		
		#region ================== Constructor
		
		// Constructor
		public ScriptEditorForm()
		{
			InitializeComponent();
			editor.Initialize(this);
			KeyPreview = true;
			PreviewKeyDown += new PreviewKeyDownEventHandler(ScriptEditorForm_PreviewKeyDown);
			KeyDown += new KeyEventHandler(ScriptEditorForm_KeyDown);
			KeyUp += new KeyEventHandler(ScriptEditorForm_KeyDown);
		}

		#endregion

		#region ================== Methods

		// This asks to save files and returns the result
		// Also does implicit saves
		// Returns false when cancelled by the user
		public bool AskSaveAll()
		{
			// Implicit-save the script lumps
			editor.ImplicitSave();
			
			// Save other scripts
			return editor.AskSaveAll();
		}
		
		// Close the window
		new public void Close()
		{
			appclose = true;
			base.Close();
		}

		//mxd
		internal void DisplayError(TextResourceErrorItem error)
		{
			editor.ShowError(error);
		}

		//mxd
		/*internal void DisplayError(TextFileErrorItem error)
		{
			editor.ShowError(error);
		}*/

		#endregion

		#region ================== Events

		private void ScriptEditorForm_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
		{
			if (e.KeyCode == Keys.F10)
				e.IsInputKey = true;
		}

		private void ScriptEditorForm_KeyDown(object sender, KeyEventArgs e)
		{
			if (e.KeyCode == Keys.F10)
			{
				e.SuppressKeyPress = true;
				e.Handled = true;
			}
		}

		// Window is loaded
		private void ScriptEditorForm_Load(object sender, EventArgs e)
		{
			// Apply panel settings
			editor.ApplySettings();
		}
		
		// Window is shown
		private void ScriptEditorForm_Shown(object sender, EventArgs e)
		{
			// Focus to script editor
			editor.ForceFocus();
		}
		
		// Window is closing
		private void ScriptEditorForm_FormClosing(object sender, FormClosingEventArgs e)
		{
			editor.SaveSettings();
			
			// Only when closed by the user
			if(!appclose && (e.CloseReason == CloseReason.UserClosing || e.CloseReason == CloseReason.FormOwnerClosing))
			{
				// Remember if scipts are changed
				General.Map.ApplyScriptChanged();
				
				// Ask to save scripts
				if(AskSaveAll())
				{
					// Let the general call close the editor
					General.Map.CloseScriptEditor(true);
				}
				else
				{
					// Cancel
					e.Cancel = true;
				}
			}

			// Not cancelling?
			if(!e.Cancel) editor.OnClose();
		}

		// Help
		private void ScriptEditorForm_HelpRequested(object sender, HelpEventArgs hlpevent)
		{
			if(!editor.LaunchKeywordHelp())	General.ShowHelp("w_scripteditor.html"); //mxd
			hlpevent.Handled = true;
		}
		
		#endregion
	}
}