mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-25 07:35: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/DateTimeComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.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/RatingComponent.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.h
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.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/DateTimeComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.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/RatingComponent.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/components/ScrollableContainer.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/components/SliderComponent.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