#include #include 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; }