#include "GwenTextureWindow.h"
#include "gwenUserInterface.h"
#include "gwenInternalData.h"
#include "Gwen/Controls/ImagePanel.h"



class MyGraphWindow : public Gwen::Controls::WindowControl
{
	Gwen::Controls::ImagePanel* m_imgPanel;

public:
	
	class MyMenuItems2* m_menuItems;
	
	MyGraphWindow (	const MyGraphInput& input)
    : Gwen::Controls::WindowControl( input.m_data->pCanvas ),
	m_menuItems(0)
	{
		Gwen::UnicodeString str = Gwen::Utility::StringToUnicode(input.m_name);
		SetTitle( str );


		SetPos(input.m_xPos,input.m_yPos);
		SetSize( 12+input.m_width+2*input.m_borderWidth, 30+input.m_height+2*input.m_borderWidth );
		
		m_imgPanel = new Gwen::Controls::ImagePanel( this );
		if (input.m_texName)
		{
			Gwen::UnicodeString texName = Gwen::Utility::StringToUnicode(input.m_texName);
			m_imgPanel->SetImage( texName );
		}
		m_imgPanel->SetBounds( input.m_borderWidth, input.m_borderWidth, 
							  input.m_width, 
							  input.m_height );
        //		this->Dock( Gwen::Pos::Bottom);
	}
	virtual ~MyGraphWindow()
	{
		delete m_imgPanel;
	}


};

class MyMenuItems2 :  public Gwen::Controls::Base
{
	MyGraphWindow* m_graphWindow;
	
public:
	
	Gwen::Controls::MenuItem* m_item;
	
    MyMenuItems2(MyGraphWindow* graphWindow) 
	:Gwen::Controls::Base(0),
	m_graphWindow(graphWindow),
	m_item(0)
    {
    }
	
    void MenuItemSelect(Gwen::Controls::Base* pControl)
    {
		if (m_graphWindow->Hidden())
		{
			m_graphWindow->SetHidden(false);
			//@TODO(erwincoumans) setCheck/SetCheckable drawing is broken, need to see what's wrong
//			if (m_item)
//				m_item->SetCheck(false);
			
		} else
		{
			m_graphWindow->SetHidden(true);
//			if (m_item)
//				m_item->SetCheck(true);
			
		}
		
    }
};

MyGraphWindow* setupTextureWindow(const MyGraphInput& input)
{
	MyGraphWindow* graphWindow = new MyGraphWindow(input);
	MyMenuItems2* menuItems = new MyMenuItems2(graphWindow);
	graphWindow->m_menuItems = menuItems;
	
	Gwen::UnicodeString str = Gwen::Utility::StringToUnicode(input.m_name);
	menuItems->m_item = input.m_data->m_viewMenu->GetMenu()->AddItem( str, menuItems,(Gwen::Event::Handler::Function)&MyMenuItems2::MenuItemSelect);
//	menuItems->m_item->SetCheckable(true);

	return graphWindow;
	
}

void destroyTextureWindow(MyGraphWindow* window)
{
	delete window->m_menuItems->m_item;
	delete window->m_menuItems;
	delete window;
}
