195 lines
6.6 KiB
C#
195 lines
6.6 KiB
C#
|
////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Neoforce Controls //
|
||
|
// //
|
||
|
////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// File: ModalContainer.cs //
|
||
|
// //
|
||
|
// Version: 0.7 //
|
||
|
// //
|
||
|
// Date: 11/09/2010 //
|
||
|
// //
|
||
|
// Author: Tom Shane //
|
||
|
// //
|
||
|
////////////////////////////////////////////////////////////////
|
||
|
// //
|
||
|
// Copyright (c) by Tom Shane //
|
||
|
// //
|
||
|
////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#region //// Using /////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
using Microsoft.Xna.Framework;
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
namespace TomShane.Neoforce.Controls
|
||
|
{
|
||
|
|
||
|
public class ModalContainer: Container
|
||
|
{
|
||
|
|
||
|
#region //// Fields ////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
private ModalResult modalResult = ModalResult.None;
|
||
|
private ModalContainer lastModal = null;
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region //// Properties ////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
public override bool Visible
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return base.Visible;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
if (value) Focused = true;
|
||
|
base.Visible = value;
|
||
|
}
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
public virtual bool IsModal
|
||
|
{
|
||
|
get { return Manager.ModalWindow == this; }
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
public virtual ModalResult ModalResult
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return modalResult;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
modalResult = value;
|
||
|
}
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region //// Events ////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
public event WindowClosingEventHandler Closing;
|
||
|
public event WindowClosedEventHandler Closed;
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region //// Consructors ///////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
public ModalContainer(Manager manager): base(manager)
|
||
|
{
|
||
|
Manager.Input.GamePadDown += new GamePadEventHandler(Input_GamePadDown);
|
||
|
GamePadActions = new WindowGamePadActions();
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region //// Methods ///////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
public virtual void ShowModal()
|
||
|
{
|
||
|
lastModal = Manager.ModalWindow;
|
||
|
Manager.ModalWindow = this;
|
||
|
Manager.Input.KeyDown += new KeyEventHandler(Input_KeyDown);
|
||
|
Manager.Input.GamePadDown += new GamePadEventHandler(Input_GamePadDown);
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
public virtual void Close()
|
||
|
{
|
||
|
WindowClosingEventArgs ex = new WindowClosingEventArgs();
|
||
|
OnClosing(ex);
|
||
|
if (!ex.Cancel)
|
||
|
{
|
||
|
Manager.Input.KeyDown -= Input_KeyDown;
|
||
|
Manager.Input.GamePadDown -= Input_GamePadDown;
|
||
|
Manager.ModalWindow = lastModal;
|
||
|
if (lastModal != null) lastModal.Focused = true;
|
||
|
Hide();
|
||
|
WindowClosedEventArgs ev = new WindowClosedEventArgs();
|
||
|
OnClosed(ev);
|
||
|
|
||
|
if (ev.Dispose)
|
||
|
{
|
||
|
this.Dispose();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
public virtual void Close(ModalResult modalResult)
|
||
|
{
|
||
|
ModalResult = modalResult;
|
||
|
Close();
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
protected virtual void OnClosing(WindowClosingEventArgs e)
|
||
|
{
|
||
|
if (Closing != null) Closing.Invoke(this, e);
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
protected virtual void OnClosed(WindowClosedEventArgs e)
|
||
|
{
|
||
|
if (Closed != null) Closed.Invoke(this, e);
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
void Input_KeyDown(object sender, KeyEventArgs e)
|
||
|
{
|
||
|
if (Visible && (Manager.FocusedControl != null && Manager.FocusedControl.Root == this) &&
|
||
|
e.Key == Microsoft.Xna.Framework.Input.Keys.Escape)
|
||
|
{
|
||
|
//Close(ModalResult.Cancel);
|
||
|
}
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
void Input_GamePadDown(object sender, GamePadEventArgs e)
|
||
|
{
|
||
|
if (Visible && (Manager.FocusedControl != null && Manager.FocusedControl.Root == this))
|
||
|
{
|
||
|
if (e.Button == (GamePadActions as WindowGamePadActions).Accept)
|
||
|
{
|
||
|
Close(ModalResult.Ok);
|
||
|
}
|
||
|
else if (e.Button == (GamePadActions as WindowGamePadActions).Cancel)
|
||
|
{
|
||
|
Close(ModalResult.Cancel);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|