feat: queue panel skip-to-track and drag reorder; remove visualizer
Queue panel: - Double-clicking an upcoming track skips to it immediately: drops all tracks before it from the queue and starts playback (skipToUpcoming) - Items can be dragged to reorder; rowsMoved rebuilds the queue via setUpcomingOrder() - Track JSON stored per-item so order survives drag operations - New PlayQueue methods: skipToUpcoming(), setUpcomingOrder() - New QueuePanel signal: skipToTrackRequested(qint64) wired to MainWindow Remove visualizer: - Drop VisualizerWidget, Qt6::OpenGLWidgets, projectM CMake detection - Remove qobuz_backend_read_pcm FFI (Rust + C header + Qt wrapper) - Remove pcm_visualizer from PlayerStatus and PCM tap from AudioOutput Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -184,6 +184,39 @@ public:
|
||||
int totalSize() const { return m_playNext.size() + m_queue.size(); }
|
||||
int currentIndex() const { return m_index; }
|
||||
|
||||
/// Skip to upcoming[upcomingIndex]: removes everything before it, pops and returns it.
|
||||
QJsonObject skipToUpcoming(int upcomingIndex)
|
||||
{
|
||||
// Remove items 0..upcomingIndex-1 from the front of upcoming
|
||||
for (int i = 0; i < upcomingIndex; ++i) {
|
||||
if (!m_playNext.isEmpty())
|
||||
m_playNext.removeFirst();
|
||||
else if (m_index + 1 < m_queue.size())
|
||||
++m_index;
|
||||
}
|
||||
// Pop and return the target (now at upcoming[0])
|
||||
if (!m_playNext.isEmpty()) {
|
||||
const QJsonObject t = m_playNext.takeFirst();
|
||||
emit queueChanged();
|
||||
return t;
|
||||
}
|
||||
if (m_index + 1 < m_queue.size()) {
|
||||
++m_index;
|
||||
emit queueChanged();
|
||||
return m_queue.at(m_index);
|
||||
}
|
||||
emit queueChanged();
|
||||
return {};
|
||||
}
|
||||
|
||||
/// Replace the upcoming list with a new order (used after drag-reorder in UI).
|
||||
void setUpcomingOrder(const QVector<QJsonObject> &newOrder)
|
||||
{
|
||||
m_playNext = newOrder;
|
||||
m_queue.resize(m_index + 1); // drop old main-queue tail
|
||||
emit queueChanged();
|
||||
}
|
||||
|
||||
/// Move an upcoming item (by its index in upcomingTracks()) to the front of playNext.
|
||||
void moveUpcomingToTop(int upcomingIndex)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user