mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-25 15:45:38 +00:00
Started on OptionListComponent.
This commit is contained in:
parent
e7135d869c
commit
6956211ff0
|
@ -164,6 +164,7 @@ set(ES_HEADERS
|
|||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.h
|
||||
|
@ -220,6 +221,7 @@ set(ES_SOURCES
|
|||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/OptionListComponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/RatingComponent.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.cpp
|
||||
|
|
55
src/components/OptionListComponent.cpp
Normal file
55
src/components/OptionListComponent.cpp
Normal file
|
@ -0,0 +1,55 @@
|
|||
#include "OptionListComponent.h"
|
||||
|
||||
OptionListComponent::OptionListComponent(Window* window) : GuiComponent(window),
|
||||
mClosedCallback(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
void OptionListComponent::setClosedCallback(std::function<void(std::vector<const ListEntry*>)> callback)
|
||||
{
|
||||
mClosedCallback = callback;
|
||||
}
|
||||
|
||||
bool OptionListComponent::input(InputConfig* config, Input input)
|
||||
{
|
||||
return GuiComponent::input(config, input);
|
||||
}
|
||||
|
||||
void OptionListComponent::render(const Eigen::Affine3f& parentTrans)
|
||||
{
|
||||
Eigen::Affine3f trans = parentTrans * getTransform();
|
||||
|
||||
renderChildren(trans);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void OptionListComponent::populate(const std::vector<T>& vec, std::function<ListEntry(const T&)> selector)
|
||||
{
|
||||
for(auto it = vec.begin(); it != vec.end(); it++)
|
||||
{
|
||||
ListEntry e = selector(*it);
|
||||
if(!e.name.empty())
|
||||
mEntries.push_back(e);
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<const ListEntry*> OptionListComponent::getSelected()
|
||||
{
|
||||
std::vector<const ListEntry*> ret;
|
||||
for(auto it = mEntries.begin(); it != mEntries.end(); it++)
|
||||
{
|
||||
if((*it).selected)
|
||||
ret.push_back(&(*it));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void OptionListComponent::close()
|
||||
{
|
||||
if(mClosedCallback)
|
||||
mClosedCallback(getSelected());
|
||||
|
||||
delete this;
|
||||
}
|
||||
|
38
src/components/OptionListComponent.h
Normal file
38
src/components/OptionListComponent.h
Normal file
|
@ -0,0 +1,38 @@
|
|||
#pragma once
|
||||
|
||||
#include "../GuiComponent.h"
|
||||
#include <vector>
|
||||
#include <functional>
|
||||
|
||||
//Used to display a list of options.
|
||||
//Can select one or multiple options.
|
||||
|
||||
struct ListEntry
|
||||
{
|
||||
std::string name;
|
||||
unsigned int color;
|
||||
bool selected;
|
||||
};
|
||||
|
||||
class OptionListComponent : public GuiComponent
|
||||
{
|
||||
public:
|
||||
OptionListComponent(Window* window);
|
||||
|
||||
bool input(InputConfig* config, Input input);
|
||||
void render(const Eigen::Affine3f& trans);
|
||||
|
||||
void setClosedCallback(std::function<void(std::vector<const ListEntry*>)> callback);
|
||||
|
||||
template<typename T>
|
||||
void populate(const std::vector<T>& vec, std::function<ListEntry(const T&)> selector);
|
||||
|
||||
std::vector<const ListEntry*> getSelected();
|
||||
private:
|
||||
void close();
|
||||
|
||||
std::function<void(std::vector<const ListEntry*>)> mClosedCallback;
|
||||
|
||||
std::vector<ListEntry> mEntries;
|
||||
};
|
||||
|
Loading…
Reference in a new issue