text: /*
  	GWEN
  	Copyright (c) 2010 Facepunch Studios
  	See license in Gwen.h
  */
  
  
  #include "Gwen/Controls/WindowControl.h"
  #include "Gwen/Controls/ImagePanel.h"
  #include "Gwen/Controls/Label.h"
  #include "Gwen/Controls/Modal.h"
  
  using namespace Gwen;
  using namespace Gwen::Controls;
  using namespace Gwen::ControlsInternal;
  
  GWEN_CONTROL_CONSTRUCTOR( WindowControl )
  {
  	m_Modal = NULL;
  	m_bInFocus = false;
  	m_bDeleteOnClose = false;
  
  	m_TitleBar = new Dragger( this );
  	m_TitleBar->Dock( Pos::Top );
  	m_TitleBar->SetHeight( 18 );
  	m_TitleBar->SetPadding( Padding( 0, 0, 0, 5 ) );
  	m_TitleBar->SetTarget( this );
  
  	m_Title = new Label( m_TitleBar );
  	m_Title->SetAlignment( Pos::Center );
  	m_Title->SetText( "Window" );
  	m_Title->SetTextColor(Gwen::Colors::White);
  	m_Title->Dock( Pos::Fill );
  
  	m_CloseButton = new Button( m_TitleBar );
  	m_CloseButton->SetText( "" );
  	m_CloseButton->SetSize( m_TitleBar->Height(), m_TitleBar->Height() );
  	m_CloseButton->Dock(Pos::Right);
  	m_CloseButton->onPress.Add( this, &WindowControl::CloseButtonPressed );
  	m_CloseButton->SetTabable( false );
  	m_CloseButton->SetName( "closeButton" );
  
  	//Create a blank content control, dock it to the top - Should this be a ScrollControl?
  	m_InnerPanel = new Base( this );
  	m_InnerPanel->Dock( Pos::Fill );
  
  	BringToFront();
  
  	SetTabable( false );
  	Focus();
  
  	SetMinimumSize( Gwen::Point( 100, 40 ) );
  	SetClampMovement( true );
  	SetKeyboardInputEnabled( false );
  }
  
  
  WindowControl::~WindowControl()
  {
  	if ( m_Modal )
  	{
  		m_Modal->DelayedDelete();
  	}
  }
  
  void WindowControl::MakeModal( bool invisible )
  {
  	if ( m_Modal ) return;
  
  	m_Modal = new ControlsInternal::Modal( GetCanvas() );
  	SetParent( m_Modal );
  
  	if ( invisible )
  	{
  		m_Modal->SetShouldDrawBackground( false );
  	}
  }
  
  bool WindowControl::IsOnTop()
  {
  	for (Base::List::reverse_iterator iter = GetParent()->Children.rbegin(); iter != GetParent()->Children.rend(); ++iter)
  	{
  		if (!*iter)
  			continue;
  
  		WindowControl* pWindow = (*iter)->DynamicCastWindowControl();
  
  		if ( !pWindow )
  			continue;
  
  		if ( pWindow == this )
  			return true;
  
  		return false;
  	}
  
  	return false;
  
  }
  
  void WindowControl::Render( Skin::Base* skin )
  {
  	//This should use m_bInFocus but I need to figure out best way to make layout happen
  	skin->DrawWindow( this, m_TitleBar->Bottom(), IsOnTop() );
  }
  
  void WindowControl::RenderUnder( Skin::Base* skin )
  {
  	BaseClass::RenderUnder( skin );
  	skin->DrawShadow( this );
  }
  
  void WindowControl::SetTitle(Gwen::UnicodeString title)
  {
  	m_Title->SetText( title );
  }
  void WindowControl::SetClosable(bool closeable)
  {
  	m_CloseButton->SetHidden( !closeable );
  }
  
  void WindowControl::SetHidden(bool hidden)
  {
  	if ( !hidden )
  		BringToFront();
  
  	BaseClass::SetHidden(hidden);
  }
  
  void WindowControl::Touch()
  {
  	BaseClass::Touch();
  	BringToFront();
  	m_bInFocus = IsOnTop();
  	//If Keyboard focus isn't one of our children, make it us
  }
  
  void WindowControl::CloseButtonPressed( Gwen::Controls::Base* /*pFromPanel*/ )
  {
  	SetHidden( true );
  
  	if ( m_bDeleteOnClose )
  		DelayedDelete();
  }
  
  
  void WindowControl::RenderFocus( Gwen::Skin::Base* /*skin*/ )
  {
  
  }