#pragma once
/*
______________________________
|        Te Qui La ?         |
|	        Gui              |============\
|  Credits :                 |++++++++++++ \
|   -Anubis82                |==============\
|   -Scotch(Scotchy)         |
|   -WarMuP                  |==============/
|   -Game-Deception          |+++++++++++++/
|							 |============/
|____________________________|

*/

/*-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-*/
#define TitlebarH 24

class CElement;
class CWindow;
class CPos;
class CRadioButton;
class CGroupBox;
class CMouse;
class CLabel;
class CCheckBox;
class C_SilentFont;
class CTexture;
class CProgressBar;
class CSlider;

struct SKey;
struct DrawingElementState;

#include <windows.h>
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <d3d9.h>
#include <D3DX9.h>
#include "CPos.h"
#include "Mouse.h"
#include "CElement.h"
#include "Elements/CLabel.h"
#include "Elements/CCheckBox.h"
#include "Elements/CProgressBar.h"
#include "Elements/CRadioButton.h"
#include "Elements/CGroupBox.h"
#include "Elements/CSlider.h"
#include "Elements/CState.h"
#include "CWindow.h"
#include "Singleton.h"
#include "DrawGui.h"
#include "FontD3D.h"
#include "SKey.h"
#include "CTexture.h"

/***********************************************************************************/
using namespace std;
/**********************************************************************************/

class Gui : public Singleton<Gui>
{
private:
	bool m_Visible;
	CMouse *gp_Mouse;
	vector<CWindow*> m_Windows;
public:
	DrawingElement *Window, *CheckBox, *Progress, *Radio;

	ID3DXSprite *m_Sprite;
	C_SilentFont *Defaut;
	CTexture *m_Texture;
	Gui();
	~Gui();
	void LoadTextures();
	void PostInitialize();
	void Draw();
	void HandleMessage( unsigned int uMsg, WPARAM wParam, LPARAM lParam );
	void MouseMove( CMouse *Mouse );
	void KeyEvent( SKey Key );
	void SetVisible( bool State );
	bool GetVisible( );
	CMouse *getMouse(){ return this->gp_Mouse; };

	void FocusWindow( CWindow * Window );
	CWindow *GetWindowByName( string Name );
	void AddWindow( CPos Abs, int W, int H, std::string Title, std::string Name );

};

#define WHITE			D3DCOLOR_ARGB(255, 255, 255, 255)
#define RED				D3DCOLOR_ARGB(255, 255, 000, 000)
#define GREEN			D3DCOLOR_ARGB(255, 000, 255, 000)
#define BLUE			D3DCOLOR_ARGB(255, 000, 000, 255) 
#define BLACK			D3DCOLOR_ARGB(150, 000, 000, 000)
#define PURPLE			D3DCOLOR_ARGB(255, 125, 000, 255) 
#define GREY			D3DCOLOR_ARGB(255, 128, 128, 128) 
#define YELLOW			D3DCOLOR_ARGB(255, 255, 255, 000) 
#define ORANGE          D3DCOLOR_ARGB(255, 255, 165, 000)
#define DEEPSKYBLUE     D3DCOLOR_ARGB(255, 30, 144, 255)
#define CHOCOLATE2      D3DCOLOR_ARGB(255, 238, 118, 33)
#define GOLD2			D3DCOLOR_ARGB(255, 238, 201, 0)

extern Gui *myGui;