#pragma once #include "RoundedRectangle.hpp" #include #include #include #include namespace sf { class Event; class RenderWindow; class Shader; } namespace QuickMedia { class Body; class Tabs { public: Tabs(sf::Shader *rounded_rectangle_shader); Tabs(sf::Shader *rounded_rectangle_shader, sf::Color shade_color); static float get_height(); static float get_shade_height(); // Returns the id (index) of the tab. The ids start from 0 int add_tab(const std::string &title, Body *body); void on_event(sf::Event &event); void draw(sf::RenderWindow &window, sf::Vector2f pos, float width); void set_text(int index, const std::string &text); void set_selected(int index); int get_selected() const; std::function on_change_tab = nullptr; private: void move_selected_tab(int new_tab); float tab_index_to_x_offset(int index); private: struct Tab { sf::Text text; std::string label_utf8; // TODO: Remove Body *body; }; std::vector tabs; RoundedRectangle background; sf::RectangleShape shade; int selected_tab = 0; float scroll = 0.0f; float width_per_tab = 0.0f; float tab_background_width = 0.0f; float container_width = 0.0f; int tab_offset = 0; sf::Color shade_color; }; }