WIP revert to unique_ptr
This commit is contained in:
parent
4b5bb697c0
commit
e2d4e50004
@ -51,7 +51,7 @@ namespace MusicSelect {
|
||||
|
||||
|
||||
PanelLayout MainOptionPage::create_layout(SharedResources& resources) {
|
||||
std::vector<jbcoe::polymorphic_value<Panel>> subpages;
|
||||
std::vector<std::unique_ptr<Panel>> subpages;
|
||||
jbcoe::polymorphic_value<OptionPage> 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<jbcoe::polymorphic_value<Panel>> markers;
|
||||
std::vector<std::unique_ptr<Panel>> markers;
|
||||
for (const auto &[name, marker] : resources.markers) {
|
||||
markers.emplace_back(MarkerPanel{resources, marker});
|
||||
}
|
||||
|
@ -4,25 +4,33 @@
|
||||
|
||||
namespace MusicSelect {
|
||||
PanelLayout::PanelLayout(
|
||||
const std::map<std::string,std::vector<jbcoe::polymorphic_value<Panel>>>& categories,
|
||||
const std::map<std::string,std::vector<std::unique_ptr<Panel>>>& categories,
|
||||
SharedResources& resources
|
||||
) {
|
||||
for (auto &&[category, panels] : categories) {
|
||||
if (not panels.empty()) {
|
||||
std::vector<jbcoe::polymorphic_value<Panel>> current_column;
|
||||
std::vector<std::unique_ptr<Panel>> 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<jbcoe::polymorphic_value<Panel>>& panels,
|
||||
const std::vector<std::unique_ptr<Panel>>& panels,
|
||||
SharedResources& resources
|
||||
) {
|
||||
std::vector<jbcoe::polymorphic_value<Panel>> current_column;
|
||||
std::vector<std::unique_ptr<Panel>> 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<jbcoe::polymorphic_value<Panel>> panels;
|
||||
std::vector<std::unique_ptr<Panel>> panels;
|
||||
for (size_t i = 0; i < 3*4; i++) {
|
||||
panels.emplace_back(ColoredMessagePanel{resources, sf::Color::Red, "- EMPTY -"});
|
||||
panels.emplace(std::make_unique<ColoredMessagePanel>(resources, sf::Color::Red, "- EMPTY -"));
|
||||
}
|
||||
return PanelLayout{panels, resources};
|
||||
}
|
||||
@ -68,7 +84,7 @@ namespace MusicSelect {
|
||||
songs.end(),
|
||||
[](std::shared_ptr<const Data::Song> a, std::shared_ptr<const Data::Song> b){return Data::Song::sort_by_title(*a, *b);}
|
||||
);
|
||||
std::map<std::string, std::vector<jbcoe::polymorphic_value<Panel>>> categories;
|
||||
std::map<std::string, std::vector<std::unique_ptr<Panel>>> 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<std::unique_ptr<Panel>>& panels) {
|
||||
|
||||
}
|
||||
|
||||
void PanelLayout::fill_layout(SharedResources& resources) {
|
||||
while (size() < 4) {
|
||||
push_back({
|
||||
jbcoe::polymorphic_value<Panel>{EmptyPanel{resources}},
|
||||
jbcoe::polymorphic_value<Panel>{EmptyPanel{resources}},
|
||||
jbcoe::polymorphic_value<Panel>{EmptyPanel{resources}}
|
||||
std::unique_ptr<Panel>{EmptyPanel{resources}},
|
||||
std::unique_ptr<Panel>{EmptyPanel{resources}},
|
||||
std::unique_ptr<Panel>{EmptyPanel{resources}}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include <jbcoe/polymorphic_value.h>
|
||||
|
||||
#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<std::array<jbcoe::polymorphic_value<Panel>,3>> {
|
||||
class PanelLayout : public std::vector<std::array<std::unique_ptr<Panel>,3>> {
|
||||
public:
|
||||
explicit PanelLayout(const std::map<std::string,std::vector<jbcoe::polymorphic_value<Panel>>>& categories, SharedResources& resources);
|
||||
explicit PanelLayout(const std::vector<jbcoe::polymorphic_value<Panel>>& panels, SharedResources& resources);
|
||||
explicit PanelLayout(const std::map<std::string,std::vector<std::unique_ptr<Panel>>>& categories, SharedResources& resources);
|
||||
explicit PanelLayout(const std::vector<std::unique_ptr<Panel>>& panels, SharedResources& resources);
|
||||
static PanelLayout red_empty_layout(SharedResources& resources);
|
||||
static PanelLayout title_sort(const Data::SongList& song_list, SharedResources& resources);
|
||||
private:
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include <imgui/imgui.h>
|
||||
@ -76,7 +77,7 @@ namespace MusicSelect {
|
||||
return (m_position + (Data::button_to_index(button) % 4)) % m_layout.size();
|
||||
}
|
||||
|
||||
jbcoe::polymorphic_value<Panel>& Ribbon::get_panel_under_button(const Data::Button& button) {
|
||||
std::unique_ptr<Panel>& 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> panel) -> bool {
|
||||
return dynamic_cast<CategoryPanel*>(&*panel) != nullptr;
|
||||
[](const std::unique_ptr<Panel> panel) -> bool {
|
||||
return std::dynamic_pointer_cast<CategoryPanel>(panel) != nullptr;
|
||||
}
|
||||
)) {
|
||||
found = true;
|
||||
|
@ -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<Panel>& get_panel_under_button(const Data::Button& button);
|
||||
std::unique_ptr<Panel>& get_panel_under_button(const Data::Button& button);
|
||||
void click_on(const Data::Button& button);
|
||||
void move_right();
|
||||
void move_left();
|
||||
|
Loading…
x
Reference in New Issue
Block a user