skizzle/include/util/widget_selector.hpp

60 lines
1.3 KiB
C++

#ifndef __PTF_UTIL_WIDGET_SELECTOR_HPP__
#define __PTF_UTIL_WIDGET_SELECTOR_HPP__
#include <SFML/Graphics.hpp>
#include <functional>
#include "manager.hpp"
/**
* Un choix possible dans une catégorie
*/
struct SelectorItem {
sf::String name;
sf::Sprite sprite;
};
/**
* Représente une catégorie de choix possibles
*/
struct SelectorCategory {
sf::String name;
std::vector<std::shared_ptr<SelectorItem>> items;
/**
* Ajoute un nouvel item dans cette catégorie
*/
std::shared_ptr<SelectorItem> addItem(sf::String name, sf::Texture& texture);
};
/**
* Affiche une liste de sélection
*/
class WidgetSelector {
private:
Manager& manager;
sf::RectangleShape background;
std::vector<std::shared_ptr<SelectorCategory>> categories;
SelectorItem* selected;
public:
WidgetSelector(Manager& manager);
/**
* Ajoute une nouvelle catégorie de choix
*/
std::shared_ptr<SelectorCategory> addCategory(sf::String name);
/**
* Traite l'événement et renvoie true si l'on s'en est servi
*/
bool processEvent(const sf::Event& event);
/**
* Dessine le widget à la position donnée et avec la taille donnée
*/
void draw(sf::Vector2f position, sf::Vector2f size);
};
#endif