47 lines
1.6 KiB
C++
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;
|
|
}
|