Files
product-vamp/src/vamp_zero/navigation.cpp
T
khodowany 142d843fac
ci / checks (push) Successful in 46m42s
Improve Catalog
2026-09-27 11:03:43 -05:00

47 lines
1.6 KiB
C++

#include <algorithm>
#include <vamp_zero/navigation.hpp>
auto vamp_zero::selected_group(vamp_zero::app_state const &state) -> vamp_zero::song_group const * {
if (state.selected_song_index == 0U || state.catalog->groups.empty()) {
return nullptr;
}
auto index = state.selected_song_index - 1U;
if (index >= state.catalog->groups.size()) {
return nullptr;
}
return &state.catalog->groups[index];
}
auto vamp_zero::selected_part(vamp_zero::app_state const &state) -> vamp_zero::library_part const * {
auto const *group = vamp_zero::selected_group(state);
if (state.selected_part_index == 0U || group == nullptr || group->parts.empty()) {
return nullptr;
}
auto index = state.selected_part_index - 1U;
if (index >= group->parts.size()) {
return nullptr;
}
auto part_index = group->parts[index];
return part_index < state.catalog->parts.size() ? &state.catalog->parts[part_index] : nullptr;
}
auto vamp_zero::active_part(vamp_zero::app_state const &state) -> vamp_zero::library_part const * {
if (state.active_part_id.empty()) {
return nullptr;
}
auto found = std::find_if(state.catalog->parts.begin(), state.catalog->parts.end(), [&](auto const &part) {
return part.id == state.active_part_id;
});
return found == state.catalog->parts.end() ? nullptr : &*found;
}
auto vamp_zero::active_pages(vamp_zero::app_state const &state) -> std::size_t {
if (state.mode == vamp_zero::app_mode::PERFORMANCE_SCORE) {
auto const *part = vamp_zero::active_part(state);
return part == nullptr ? 0U : part->total_pages;
}
return 0U;
}