2012-07-20 01:08:29 +00:00
|
|
|
#include "GuiList.h"
|
2012-07-21 19:06:24 +00:00
|
|
|
#include <iostream>
|
2012-07-20 01:08:29 +00:00
|
|
|
|
|
|
|
GuiList::GuiList()
|
|
|
|
{
|
|
|
|
mSelection = 0;
|
2012-07-21 19:06:24 +00:00
|
|
|
InputManager::registerComponent(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
GuiList::~GuiList()
|
|
|
|
{
|
|
|
|
InputManager::unregisterComponent(this);
|
2012-07-20 01:08:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void GuiList::onRender()
|
|
|
|
{
|
2012-07-21 20:16:07 +00:00
|
|
|
const int cutoff = 40;
|
|
|
|
const int entrySize = 40;
|
|
|
|
|
2012-07-21 20:57:53 +00:00
|
|
|
int startEntry = 0;
|
|
|
|
|
2012-07-21 20:16:07 +00:00
|
|
|
//number of entries that can fit on the screen simultaniously
|
|
|
|
int screenCount = (Renderer::getScreenHeight() - cutoff) / entrySize;
|
|
|
|
screenCount -= 1;
|
|
|
|
|
2012-07-27 16:58:27 +00:00
|
|
|
if((int)mRowVector.size() >= screenCount)
|
2012-07-21 20:57:53 +00:00
|
|
|
{
|
|
|
|
startEntry = mSelection - (screenCount * 0.5);
|
|
|
|
if(startEntry < 0)
|
|
|
|
startEntry = 0;
|
2012-07-27 16:58:27 +00:00
|
|
|
if(startEntry >= (int)mRowVector.size() - screenCount)
|
|
|
|
startEntry = mRowVector.size() - screenCount;
|
2012-07-21 20:57:53 +00:00
|
|
|
}
|
2012-07-21 20:16:07 +00:00
|
|
|
|
|
|
|
int y = cutoff;
|
|
|
|
int color = 0xFF0000;
|
2012-07-21 19:06:24 +00:00
|
|
|
|
2012-07-27 16:58:27 +00:00
|
|
|
if(mRowVector.size() == 0)
|
2012-07-21 19:06:24 +00:00
|
|
|
{
|
|
|
|
Renderer::drawCenteredText("The list is empty.", y, color);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2012-07-21 20:57:53 +00:00
|
|
|
int listCutoff = startEntry + screenCount;
|
2012-07-27 16:58:27 +00:00
|
|
|
if(listCutoff > (int)mRowVector.size())
|
|
|
|
listCutoff = mRowVector.size();
|
2012-07-21 20:57:53 +00:00
|
|
|
|
|
|
|
for(int i = startEntry; i < listCutoff; i++)
|
2012-07-20 16:14:09 +00:00
|
|
|
{
|
2012-07-21 20:16:07 +00:00
|
|
|
if(mSelection == i)
|
2012-07-21 19:06:24 +00:00
|
|
|
{
|
|
|
|
Renderer::drawRect(0, y, Renderer::getScreenWidth(), 52, 0x000000);
|
|
|
|
}
|
|
|
|
|
2012-07-27 16:58:27 +00:00
|
|
|
ListRow row = mRowVector.at((unsigned int)i);
|
|
|
|
Renderer::drawCenteredText(row.name, y, row.color);
|
2012-07-21 19:06:24 +00:00
|
|
|
y += 40;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void GuiList::onInput(InputManager::InputButton button, bool keyDown)
|
|
|
|
{
|
2012-07-27 16:58:27 +00:00
|
|
|
if(mRowVector.size() > 0 && keyDown)
|
2012-07-21 19:06:24 +00:00
|
|
|
{
|
|
|
|
if(button == InputManager::DOWN)
|
|
|
|
mSelection++;
|
|
|
|
|
|
|
|
if(button == InputManager::UP)
|
|
|
|
mSelection--;
|
|
|
|
|
|
|
|
if(mSelection < 0)
|
2012-07-27 16:58:27 +00:00
|
|
|
mSelection += mRowVector.size();
|
2012-07-21 19:06:24 +00:00
|
|
|
|
2012-07-27 16:58:27 +00:00
|
|
|
if(mSelection >= (int)mRowVector.size())
|
|
|
|
mSelection -= mRowVector.size();
|
2012-07-20 16:14:09 +00:00
|
|
|
}
|
2012-07-20 01:08:29 +00:00
|
|
|
}
|
|
|
|
|
2012-07-27 16:58:27 +00:00
|
|
|
void GuiList::addObject(std::string name, void* obj, int color)
|
2012-07-20 01:08:29 +00:00
|
|
|
{
|
2012-07-27 16:58:27 +00:00
|
|
|
ListRow row = {name, obj, color};
|
|
|
|
mRowVector.push_back(row);
|
2012-07-20 01:08:29 +00:00
|
|
|
}
|
|
|
|
|
2012-07-20 16:14:09 +00:00
|
|
|
void GuiList::clear()
|
2012-07-20 01:08:29 +00:00
|
|
|
{
|
2012-07-27 16:58:27 +00:00
|
|
|
mRowVector.clear();
|
2012-07-21 20:57:53 +00:00
|
|
|
mSelection = 0;
|
2012-07-20 01:08:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
std::string GuiList::getSelectedName()
|
|
|
|
{
|
2012-07-27 16:58:27 +00:00
|
|
|
return mRowVector.at(mSelection).name;
|
2012-07-20 01:08:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void* GuiList::getSelectedObject()
|
|
|
|
{
|
2012-07-27 16:58:27 +00:00
|
|
|
return mRowVector.at(mSelection).object;
|
2012-07-20 01:08:29 +00:00
|
|
|
}
|
2012-07-21 19:06:24 +00:00
|
|
|
|
|
|
|
int GuiList::getSelection()
|
|
|
|
{
|
|
|
|
return mSelection;
|
|
|
|
}
|