view LightClone/Source/Dialog.h @ 41:a986355cca5f

Move Tower structure into Environment
author koryspansel
date Thu, 22 Sep 2011 10:25:35 -0700
parents 00d17d8f407d
children 6790cf9e8bd8
line wrap: on
line source

/*
 * Dialog
 */

#ifndef __DIALOG_H__
#define __DIALOG_H__

#include "Core.h"
#include "GuiDialog.h"
#include "GuiLabel.h"
#include "GuiButton.h"
#include <stdarg.h>
#include <stdio.h>

/*
 * DialogResult
 */
enum
{
	DialogResult_Ok		= 0,

	DialogResult_Yes	= 0,
	DialogResult_No		= 1,
};

/*
 * Dialog
 */
template<uint32 ButtonCount>
class Dialog : public GuiDialog
{
	/*
	 * kLabel
	 */
	GuiLabel kLabel;

	/*
	 * kButton
	 */
	GuiButton kButton[ButtonCount];

	/*
	 * kResult
	 */
	uint32 kResult[ButtonCount];

public:

	/*
	 * Dialog
	 */
	Dialog() : GuiDialog()
	{
	}

	/*
	 * Initialize
	 */
	virtual ErrorCode Initialize(ResourceManager* pResourceManager)
	{
		ErrorCode eCode = GuiDialog::Initialize(pResourceManager);
		if(eCode == Error_Success)
		{
			SetTexture("Data\\Textures\\Dialog0.tga", true);

			kLabel.Initialize(pResourceManager);
			kLabel.SetPosition(0.5f * kDimensions.x, 0.15f * kDimensions.y);
			kLabel.SetLabelFlag(GuiLabelFlag_CenterX);
			kLabel.SetFont("Courier New", 16);
			kLabel.SetColor(D3DCOLOR_XRGB(0, 0, 0));

			Add(&kLabel);

			for(uint32 i = 0; i < ButtonCount; ++i)
			{
				kButton[i].Initialize(pResourceManager);
				kButton[i].SetTexture(GuiButtonState_Normal, "Data\\Textures\\ButtonN.tga", true);
				kButton[i].SetTexture(GuiButtonState_Hover, "Data\\Textures\\ButtonH.tga");
				kButton[i].SetTexture(GuiButtonState_Down, "Data\\Textures\\ButtonD.tga");
				kButton[i].SetFont("Courier New", 16);
				kButton[i].SetColor(D3DCOLOR_XRGB(0, 0, 0));
				kButton[i].Subscribe(GuiButton::EventClick, &Dialog::OnClick, this);

				const float fX	= ((i + 1) * kDimensions.x / (float)(ButtonCount + 1)) - 0.5f * kButton[i].GetDimensions().x;
				const float fY	= 0.65f * kDimensions.y;

				kButton[i].SetPosition(fX, fY);

				Add(&kButton[i]);
			}
		}

		return eCode;
	}

	/*
	 * SetMessage
	 */
	void SetMessage(const char* pFormat, ...)
	{
		va_list kArguments;
		va_start(kArguments, pFormat);

		char kBuffer[128];
		vsprintf(kBuffer, pFormat, kArguments);

		kLabel.SetText(kBuffer);

		va_end(kArguments);
	}

	/*
	 * SetButton
	 */
	void SetButton(uint32 nButton, const char* pText, uint32 nResult)
	{
		kButton[nButton].SetText(pText);
		kResult[nButton] = nResult;
	}

private:

	/*
	 * OnClick
	 */
	void OnClick(GuiEventArguments& kArguments)
	{
		for(uint32 nButton = 0; nButton < ButtonCount; ++nButton)
		{
			if(kArguments.pSource == &kButton[nButton])
			{
				Close(kResult[nButton]);
			}
		}
	}
};

#endif //__DIALOG_H__