diff --git a/src/Screens/MusicSelect/OptionPage.cpp b/src/Screens/MusicSelect/OptionPage.cpp index 6e1280a..14645e1 100644 --- a/src/Screens/MusicSelect/OptionPage.cpp +++ b/src/Screens/MusicSelect/OptionPage.cpp @@ -51,7 +51,7 @@ namespace MusicSelect { PanelLayout MainOptionPage::create_layout(SharedResources& resources) { - std::vector> subpages; + std::vector> subpages; jbcoe::polymorphic_value marker_select{MarkerSelect{resources}}; subpages.emplace_back(SubpagePanel{resources, marker_select, "markers"}); return PanelLayout{subpages, resources}; @@ -68,7 +68,7 @@ namespace MusicSelect { } PanelLayout MarkerSelect::create_layout(SharedResources& resources) { - std::vector> markers; + std::vector> markers; for (const auto &[name, marker] : resources.markers) { markers.emplace_back(MarkerPanel{resources, marker}); } diff --git a/src/Screens/MusicSelect/PanelLayout.cpp b/src/Screens/MusicSelect/PanelLayout.cpp index 949647b..9de972a 100644 --- a/src/Screens/MusicSelect/PanelLayout.cpp +++ b/src/Screens/MusicSelect/PanelLayout.cpp @@ -4,25 +4,33 @@ namespace MusicSelect { PanelLayout::PanelLayout( - const std::map>>& categories, + const std::map>>& categories, SharedResources& resources ) { for (auto &&[category, panels] : categories) { if (not panels.empty()) { - std::vector> current_column; + std::vector> current_column; current_column.emplace_back(CategoryPanel{resources, category}); for (auto& panel : panels) { if (current_column.size() == 3) { - push_back({current_column[0], current_column[1], current_column[2]}); + push_back({ + std::move(current_column[0]), + std::move(current_column[1]), + std::move(current_column[2]), + }); current_column.clear(); } - current_column.push_back(panel); + current_column.push_back(std::move(panel)); } if (not current_column.empty()) { while (current_column.size() < 3) { current_column.emplace_back(EmptyPanel{resources}); } - push_back({current_column[0], current_column[1], current_column[2]}); + push_back({ + std::move(current_column[0]), + std::move(current_column[1]), + std::move(current_column[2]), + }); } } } @@ -30,30 +38,38 @@ namespace MusicSelect { } PanelLayout::PanelLayout( - const std::vector>& panels, + const std::vector>& panels, SharedResources& resources ) { - std::vector> current_column; + std::vector> current_column; for (auto& panel : panels) { if (current_column.size() == 3) { - push_back({current_column[0], current_column[1], current_column[2]}); + push_back({ + std::move(current_column[0]), + std::move(current_column[1]), + std::move(current_column[2]), + }); current_column.clear(); } - current_column.push_back(panel); + current_column.push_back(std::move(panel)); } if (not current_column.empty()) { while (current_column.size() < 3) { current_column.emplace_back(EmptyPanel{resources}); } - push_back({current_column[0], current_column[1], current_column[2]}); + push_back({ + std::move(current_column[0]), + std::move(current_column[1]), + std::move(current_column[2]), + }); } fill_layout(resources); } PanelLayout PanelLayout::red_empty_layout(SharedResources& resources) { - std::vector> panels; + std::vector> panels; for (size_t i = 0; i < 3*4; i++) { - panels.emplace_back(ColoredMessagePanel{resources, sf::Color::Red, "- EMPTY -"}); + panels.emplace(std::make_unique(resources, sf::Color::Red, "- EMPTY -")); } return PanelLayout{panels, resources}; } @@ -68,7 +84,7 @@ namespace MusicSelect { songs.end(), [](std::shared_ptr a, std::shared_ptr b){return Data::Song::sort_by_title(*a, *b);} ); - std::map>> categories; + std::map>> categories; for (const auto &song : songs) { if (song->title.size() > 0) { char letter = song->title[0]; @@ -90,12 +106,16 @@ namespace MusicSelect { return PanelLayout{categories, resources}; } + void PanelLayout::PanelLayout::push_vector(const std::vector>& panels) { + + } + void PanelLayout::fill_layout(SharedResources& resources) { while (size() < 4) { push_back({ - jbcoe::polymorphic_value{EmptyPanel{resources}}, - jbcoe::polymorphic_value{EmptyPanel{resources}}, - jbcoe::polymorphic_value{EmptyPanel{resources}} + std::unique_ptr{EmptyPanel{resources}}, + std::unique_ptr{EmptyPanel{resources}}, + std::unique_ptr{EmptyPanel{resources}} }); } } diff --git a/src/Screens/MusicSelect/PanelLayout.hpp b/src/Screens/MusicSelect/PanelLayout.hpp index a490198..f742fc5 100644 --- a/src/Screens/MusicSelect/PanelLayout.hpp +++ b/src/Screens/MusicSelect/PanelLayout.hpp @@ -1,10 +1,9 @@ #pragma once #include +#include #include -#include - #include "../../Data/Song.hpp" #include "SharedResources.hpp" @@ -12,10 +11,10 @@ namespace MusicSelect { class Panel; // PanelLayout restricts the ways you can create a scrollable grid of panels - class PanelLayout : public std::vector,3>> { + class PanelLayout : public std::vector,3>> { public: - explicit PanelLayout(const std::map>>& categories, SharedResources& resources); - explicit PanelLayout(const std::vector>& panels, SharedResources& resources); + explicit PanelLayout(const std::map>>& categories, SharedResources& resources); + explicit PanelLayout(const std::vector>& panels, SharedResources& resources); static PanelLayout red_empty_layout(SharedResources& resources); static PanelLayout title_sort(const Data::SongList& song_list, SharedResources& resources); private: diff --git a/src/Screens/MusicSelect/Ribbon.cpp b/src/Screens/MusicSelect/Ribbon.cpp index 0e2ab70..f234aa0 100644 --- a/src/Screens/MusicSelect/Ribbon.cpp +++ b/src/Screens/MusicSelect/Ribbon.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -76,7 +77,7 @@ namespace MusicSelect { return (m_position + (Data::button_to_index(button) % 4)) % m_layout.size(); } - jbcoe::polymorphic_value& Ribbon::get_panel_under_button(const Data::Button& button) { + std::unique_ptr& Ribbon::get_panel_under_button(const Data::Button& button) { auto button_index = Data::button_to_index(button); return ( m_layout @@ -116,8 +117,8 @@ namespace MusicSelect { if (std::any_of( column.begin(), column.end(), - [](jbcoe::polymorphic_value panel) -> bool { - return dynamic_cast(&*panel) != nullptr; + [](const std::unique_ptr panel) -> bool { + return std::dynamic_pointer_cast(panel) != nullptr; } )) { found = true; diff --git a/src/Screens/MusicSelect/Ribbon.hpp b/src/Screens/MusicSelect/Ribbon.hpp index 609926a..5a9e606 100644 --- a/src/Screens/MusicSelect/Ribbon.hpp +++ b/src/Screens/MusicSelect/Ribbon.hpp @@ -41,7 +41,7 @@ namespace MusicSelect { class Ribbon : public sf::Drawable, public sf::Transformable, public HoldsSharedResources, public Toolkit::Debuggable { public: Ribbon(PanelLayout layout, SharedResources& t_resources); - jbcoe::polymorphic_value& get_panel_under_button(const Data::Button& button); + std::unique_ptr& get_panel_under_button(const Data::Button& button); void click_on(const Data::Button& button); void move_right(); void move_left();