Mercurial > LightClone
view LightClone/Source/Dialog.h @ 75:57c0ce406a68 tip
Add main menu
author | koryspansel <koryspansel@bendbroadband.com> |
---|---|
date | Tue, 18 Oct 2011 17:08:17 -0700 |
parents | 0574e2cf8bac |
children |
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 { /* * pLabel */ GuiLabel* pLabel; /* * pButton */ GuiButton* pButton[ButtonCount]; /* * kResult */ uint32 kResult[ButtonCount]; public: /* * Dialog */ Dialog() : GuiDialog() { } /* * Initialize */ virtual ErrorCode Initialize(ServiceProvider* pServiceProvider) { ErrorCode eCode = GuiDialog::Initialize(pServiceProvider); if(eCode == Error_Success) { SetTexture("Data\\Textures\\Dialog0.tga", true); pLabel = new GuiLabel(); pLabel->Initialize(pServiceProvider); pLabel->SetPosition(0.5f * kDimensions.x, 0.15f * kDimensions.y); pLabel->SetLabelFlag(GuiLabelFlag_CenterX); pLabel->SetFont("Courier New", 16); pLabel->SetColor(D3DCOLOR_XRGB(0, 0, 0)); Add(pLabel); for(uint32 i = 0; i < ButtonCount; ++i) { pButton[i] = new GuiButton(); pButton[i]->Initialize(pServiceProvider); pButton[i]->SetTexture(GuiButtonState_Normal, "Data\\Textures\\ButtonN.tga", true); pButton[i]->SetTexture(GuiButtonState_Hover, "Data\\Textures\\ButtonH.tga"); pButton[i]->SetTexture(GuiButtonState_Down, "Data\\Textures\\ButtonD.tga"); pButton[i]->SetFont("Courier New", 16); pButton[i]->SetColor(D3DCOLOR_XRGB(0, 0, 0)); pButton[i]->Subscribe(GuiButton::EventClick, &Dialog<ButtonCount>::OnClick, this); // assumes all buttons are equally sized const float fWidth = pButton[i]->GetDimensions().x; const float fPadding = (kDimensions.x - ButtonCount * fWidth) / (float)(ButtonCount + 1); const float fX = fPadding + i * (fWidth + fPadding); const float fY = 0.65f * kDimensions.y; pButton[i]->SetPosition(fX, fY); Add(pButton[i]); } } return eCode; } /* * SetMessage */ void SetMessage(const char* pFormat, ...) { va_list kArguments; va_start(kArguments, pFormat); char kBuffer[128]; vsprintf(kBuffer, pFormat, kArguments); pLabel->SetText(kBuffer); va_end(kArguments); } /* * SetButton */ void SetButton(uint32 nButton, const char* pText, uint32 nResult) { pButton[nButton]->SetText(pText); kResult[nButton] = nResult; } private: /* * OnClick */ void OnClick(GuiEventArguments& kArguments) { for(uint32 nButton = 0; nButton < ButtonCount; ++nButton) { if(kArguments.pSource == pButton[nButton]) { Close(kResult[nButton]); } } } }; /* * MessageDialog */ typedef Dialog<1> MessageDialog; /* * ChoiceDialog */ typedef Dialog<2> ChoiceDialog; #endif //__DIALOG_H__