Add widget to seek through songs on an album

This commit is contained in:
2025-11-19 22:33:32 -07:00
parent 3df5097e60
commit bcb791c205
14 changed files with 304 additions and 71 deletions

View File

@@ -12,6 +12,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
SOURCES += \
src/components/albumTile/albumtile.cpp \
src/components/spinningAlbumArt/spinningalbumart.cpp \
src/components/tracklistWidget/tracklistwidget.cpp \
src/main.cpp \
src/windows/musicSelector/musicSelector.cpp \
src/windows/playerWindow/playerWindow.cpp \
@@ -25,6 +26,7 @@ SOURCES += \
HEADERS += \
src/components/albumTile/albumtile.h \
src/components/spinningAlbumArt/spinningalbumart.h \
src/components/tracklistWidget/tracklistwidget.h \
src/data/cleanerScripts.h \
src/windows/musicSelector/musicSelector.h \
src/windows/playerWindow/playerWindow.h \

View File

@@ -3,7 +3,7 @@
# Generated by qmake (3.1) (Qt 6.9.3)
# Project: ../../Music-Player.pro
# Template: app
# Command: /opt/homebrew/opt/qtbase/bin/qmake -o Makefile ../../Music-Player.pro -spec macx-clang CONFIG+=debug CONFIG+=qml_debug
# Command: /opt/homebrew/Cellar/qtbase/6.9.3/bin/qmake -o Makefile ../../Music-Player.pro -spec macx-clang CONFIG+=debug CONFIG+=qml_debug
#############################################################################
MAKEFILE = Makefile
@@ -18,7 +18,7 @@ DEFINES = -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB
CFLAGS = -pipe -g $(EXPORT_ARCH_ARGS) -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=14.0 -Wall -Wextra $(DEFINES)
CXXFLAGS = -pipe -stdlib=libc++ -g -std=gnu++1z $(EXPORT_ARCH_ARGS) -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=14.0 -Wall -Wextra $(DEFINES)
INCPATH = -I../../../Qt-Music-Player -I. -I/opt/homebrew/lib/QtWidgets.framework/Headers -I/opt/homebrew/lib/QtMultimedia.framework/Headers -I/opt/homebrew/lib/QtGui.framework/Headers -I/opt/homebrew/lib/QtNetwork.framework/Headers -I/opt/homebrew/lib/QtCore.framework/Headers -I. -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I. -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/opt/homebrew/share/qt/mkspecs/macx-clang -F/opt/homebrew/lib
QMAKE = /opt/homebrew/opt/qtbase/bin/qmake
QMAKE = /opt/homebrew/Cellar/qtbase/6.9.3/bin/qmake
DEL_FILE = rm -f
CHK_DIR_EXISTS= test -d
MKDIR = mkdir -p
@@ -28,8 +28,8 @@ COPY_DIR = cp -f -R
INSTALL_FILE = install -m 644 -p
INSTALL_PROGRAM = install -m 755 -p
INSTALL_DIR = cp -f -R
QINSTALL = /opt/homebrew/opt/qtbase/bin/qmake -install qinstall
QINSTALL_PROGRAM = /opt/homebrew/opt/qtbase/bin/qmake -install qinstall -exe
QINSTALL = /opt/homebrew/Cellar/qtbase/6.9.3/bin/qmake -install qinstall
QINSTALL_PROGRAM = /opt/homebrew/Cellar/qtbase/6.9.3/bin/qmake -install qinstall -exe
DEL_FILE = rm -f
SYMLINK = ln -f -s
DEL_DIR = rmdir
@@ -54,6 +54,7 @@ OBJECTS_DIR = ./
SOURCES = ../../src/components/albumTile/albumtile.cpp \
../../src/components/spinningAlbumArt/spinningalbumart.cpp \
../../src/components/tracklistWidget/tracklistwidget.cpp \
../../src/main.cpp \
../../src/windows/musicSelector/musicSelector.cpp \
../../src/windows/playerWindow/playerWindow.cpp \
@@ -62,12 +63,14 @@ SOURCES = ../../src/components/albumTile/albumtile.cpp \
../../src/layout/flowLayout/flowLayout.cpp qrc_qmake_qmake_qm_files.cpp \
moc_albumtile.cpp \
moc_spinningalbumart.cpp \
moc_tracklistwidget.cpp \
moc_musicSelector.cpp \
moc_playerWindow.cpp \
moc_albumButton.cpp \
moc_mediaButton.cpp
OBJECTS = albumtile.o \
spinningalbumart.o \
tracklistwidget.o \
main.o \
musicSelector.o \
playerWindow.o \
@@ -77,6 +80,7 @@ OBJECTS = albumtile.o \
qrc_qmake_qmake_qm_files.o \
moc_albumtile.o \
moc_spinningalbumart.o \
moc_tracklistwidget.o \
moc_musicSelector.o \
moc_playerWindow.o \
moc_albumButton.o \
@@ -455,6 +459,7 @@ DIST = /opt/homebrew/share/qt/mkspecs/features/spec_pre.prf \
/opt/homebrew/share/qt/mkspecs/features/lex.prf \
../../../../Music-Player.pro ../../src/components/albumTile/albumtile.h \
../../src/components/spinningAlbumArt/spinningalbumart.h \
../../src/components/tracklistWidget/tracklistwidget.h \
../../src/data/cleanerScripts.h \
../../src/windows/musicSelector/musicSelector.h \
../../src/windows/playerWindow/playerWindow.h \
@@ -463,6 +468,7 @@ DIST = /opt/homebrew/share/qt/mkspecs/features/spec_pre.prf \
../../src/data/albumInformation.h \
../../src/layout/flowLayout/flowLayout.h ../../src/components/albumTile/albumtile.cpp \
../../src/components/spinningAlbumArt/spinningalbumart.cpp \
../../src/components/tracklistWidget/tracklistwidget.cpp \
../../src/main.cpp \
../../src/windows/musicSelector/musicSelector.cpp \
../../src/windows/playerWindow/playerWindow.cpp \
@@ -1278,8 +1284,8 @@ distdir: FORCE
$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
$(COPY_FILE) --parents qmake_qmake_qm_files.qrc $(DISTDIR)/
$(COPY_FILE) --parents /opt/homebrew/share/qt/mkspecs/features/data/dummy.cpp $(DISTDIR)/
$(COPY_FILE) --parents ../../src/components/albumTile/albumtile.h ../../src/components/spinningAlbumArt/spinningalbumart.h ../../src/data/cleanerScripts.h ../../src/windows/musicSelector/musicSelector.h ../../src/windows/playerWindow/playerWindow.h ../../src/components/albumButton/albumButton.h ../../src/components/mediaButton/mediaButton.h ../../src/data/albumInformation.h ../../src/layout/flowLayout/flowLayout.h $(DISTDIR)/
$(COPY_FILE) --parents ../../src/components/albumTile/albumtile.cpp ../../src/components/spinningAlbumArt/spinningalbumart.cpp ../../src/main.cpp ../../src/windows/musicSelector/musicSelector.cpp ../../src/windows/playerWindow/playerWindow.cpp ../../src/components/albumButton/albumButton.cpp ../../src/components/mediaButton/mediaButton.cpp ../../src/layout/flowLayout/flowLayout.cpp $(DISTDIR)/
$(COPY_FILE) --parents ../../src/components/albumTile/albumtile.h ../../src/components/spinningAlbumArt/spinningalbumart.h ../../src/components/tracklistWidget/tracklistwidget.h ../../src/data/cleanerScripts.h ../../src/windows/musicSelector/musicSelector.h ../../src/windows/playerWindow/playerWindow.h ../../src/components/albumButton/albumButton.h ../../src/components/mediaButton/mediaButton.h ../../src/data/albumInformation.h ../../src/layout/flowLayout/flowLayout.h $(DISTDIR)/
$(COPY_FILE) --parents ../../src/components/albumTile/albumtile.cpp ../../src/components/spinningAlbumArt/spinningalbumart.cpp ../../src/components/tracklistWidget/tracklistwidget.cpp ../../src/main.cpp ../../src/windows/musicSelector/musicSelector.cpp ../../src/windows/playerWindow/playerWindow.cpp ../../src/components/albumButton/albumButton.cpp ../../src/components/mediaButton/mediaButton.cpp ../../src/layout/flowLayout/flowLayout.cpp $(DISTDIR)/
$(COPY_FILE) --parents ../../src/windows/musicSelector/musicSelector.ui $(DISTDIR)/
@@ -1322,9 +1328,9 @@ compiler_moc_predefs_clean:
moc_predefs.h: /opt/homebrew/share/qt/mkspecs/features/data/dummy.cpp
/Library/Developer/CommandLineTools/usr/bin/clang++ -pipe -stdlib=libc++ -g -std=gnu++1z $(EXPORT_ARCH_ARGS) -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=14.0 -Wall -Wextra -dM -E -o moc_predefs.h /opt/homebrew/share/qt/mkspecs/features/data/dummy.cpp
compiler_moc_header_make_all: moc_albumtile.cpp moc_spinningalbumart.cpp moc_musicSelector.cpp moc_playerWindow.cpp moc_albumButton.cpp moc_mediaButton.cpp
compiler_moc_header_make_all: moc_albumtile.cpp moc_spinningalbumart.cpp moc_tracklistwidget.cpp moc_musicSelector.cpp moc_playerWindow.cpp moc_albumButton.cpp moc_mediaButton.cpp
compiler_moc_header_clean:
-$(DEL_FILE) moc_albumtile.cpp moc_spinningalbumart.cpp moc_musicSelector.cpp moc_playerWindow.cpp moc_albumButton.cpp moc_mediaButton.cpp
-$(DEL_FILE) moc_albumtile.cpp moc_spinningalbumart.cpp moc_tracklistwidget.cpp moc_musicSelector.cpp moc_playerWindow.cpp moc_albumButton.cpp moc_mediaButton.cpp
moc_albumtile.cpp: ../../src/components/albumTile/albumtile.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QWidget \
/opt/homebrew/lib/QtWidgets.framework/Headers/qwidget.h \
@@ -1356,6 +1362,15 @@ moc_spinningalbumart.cpp: ../../src/components/spinningAlbumArt/spinningalbumart
/opt/homebrew/share/qt/libexec/moc
/opt/homebrew/share/qt/libexec/moc $(DEFINES) --include /Users/lucas/Developer/Qt-Music-Player/build/Desktop-Debug/moc_predefs.h -I/opt/homebrew/share/qt/mkspecs/macx-clang -I/Users/lucas/Developer/Qt-Music-Player -I/opt/homebrew/lib/QtWidgets.framework/Headers -I/opt/homebrew/lib/QtMultimedia.framework/Headers -I/opt/homebrew/lib/QtGui.framework/Headers -I/opt/homebrew/lib/QtNetwork.framework/Headers -I/opt/homebrew/lib/QtCore.framework/Headers -I. -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1 -I/Library/Developer/CommandLineTools/usr/lib/clang/17/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/Library/Developer/CommandLineTools/usr/include -F/opt/homebrew/lib ../../src/components/spinningAlbumArt/spinningalbumart.h -o moc_spinningalbumart.cpp
moc_tracklistwidget.cpp: ../../src/components/tracklistWidget/tracklistwidget.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QWidget \
/opt/homebrew/lib/QtWidgets.framework/Headers/qwidget.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QListWidget \
/opt/homebrew/lib/QtWidgets.framework/Headers/qlistwidget.h \
moc_predefs.h \
/opt/homebrew/share/qt/libexec/moc
/opt/homebrew/share/qt/libexec/moc $(DEFINES) --include /Users/lucas/Developer/Qt-Music-Player/build/Desktop-Debug/moc_predefs.h -I/opt/homebrew/share/qt/mkspecs/macx-clang -I/Users/lucas/Developer/Qt-Music-Player -I/opt/homebrew/lib/QtWidgets.framework/Headers -I/opt/homebrew/lib/QtMultimedia.framework/Headers -I/opt/homebrew/lib/QtGui.framework/Headers -I/opt/homebrew/lib/QtNetwork.framework/Headers -I/opt/homebrew/lib/QtCore.framework/Headers -I. -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1 -I/Library/Developer/CommandLineTools/usr/lib/clang/17/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/Library/Developer/CommandLineTools/usr/include -F/opt/homebrew/lib ../../src/components/tracklistWidget/tracklistwidget.h -o moc_tracklistwidget.cpp
moc_musicSelector.cpp: ../../src/windows/musicSelector/musicSelector.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QWidget \
/opt/homebrew/lib/QtWidgets.framework/Headers/qwidget.h \
@@ -1389,6 +1404,9 @@ moc_playerWindow.cpp: ../../src/windows/playerWindow/playerWindow.h \
../../src/components/spinningalbumart/spinningAlbumArt.h \
/opt/homebrew/lib/QtGui.framework/Headers/QPixmap \
/opt/homebrew/lib/QtGui.framework/Headers/qpixmap.h \
../../src/components/tracklistWidget/tracklistwidget.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QListWidget \
/opt/homebrew/lib/QtWidgets.framework/Headers/qlistwidget.h \
moc_predefs.h \
/opt/homebrew/share/qt/libexec/moc
/opt/homebrew/share/qt/libexec/moc $(DEFINES) --include /Users/lucas/Developer/Qt-Music-Player/build/Desktop-Debug/moc_predefs.h -I/opt/homebrew/share/qt/mkspecs/macx-clang -I/Users/lucas/Developer/Qt-Music-Player -I/opt/homebrew/lib/QtWidgets.framework/Headers -I/opt/homebrew/lib/QtMultimedia.framework/Headers -I/opt/homebrew/lib/QtGui.framework/Headers -I/opt/homebrew/lib/QtNetwork.framework/Headers -I/opt/homebrew/lib/QtCore.framework/Headers -I. -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1 -I/Library/Developer/CommandLineTools/usr/lib/clang/17/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/Library/Developer/CommandLineTools/usr/include -F/opt/homebrew/lib ../../src/windows/playerWindow/playerWindow.h -o moc_playerWindow.cpp
@@ -1473,6 +1491,17 @@ spinningalbumart.o: ../../src/components/spinningAlbumArt/spinningalbumart.cpp .
/opt/homebrew/lib/QtGui.framework/Headers/qpainterpath.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o spinningalbumart.o ../../src/components/spinningAlbumArt/spinningalbumart.cpp
tracklistwidget.o: ../../src/components/tracklistWidget/tracklistwidget.cpp ../../src/components/tracklistWidget/tracklistwidget.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QWidget \
/opt/homebrew/lib/QtWidgets.framework/Headers/qwidget.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QListWidget \
/opt/homebrew/lib/QtWidgets.framework/Headers/qlistwidget.h \
/opt/homebrew/lib/QtCore.framework/Headers/QFileInfo \
/opt/homebrew/lib/QtCore.framework/Headers/qfileinfo.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QVBoxLayout \
/opt/homebrew/lib/QtWidgets.framework/Headers/qboxlayout.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o tracklistwidget.o ../../src/components/tracklistWidget/tracklistwidget.cpp
main.o: ../../src/main.cpp ../../src/windows/musicSelector/musicSelector.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QWidget \
/opt/homebrew/lib/QtWidgets.framework/Headers/qwidget.h \
@@ -1518,6 +1547,9 @@ musicSelector.o: ../../src/windows/musicSelector/musicSelector.cpp ../../src/win
../../src/components/spinningalbumart/spinningAlbumArt.h \
/opt/homebrew/lib/QtGui.framework/Headers/QPixmap \
/opt/homebrew/lib/QtGui.framework/Headers/qpixmap.h \
../../src/components/tracklistWidget/tracklistwidget.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QListWidget \
/opt/homebrew/lib/QtWidgets.framework/Headers/qlistwidget.h \
../../src/layout/flowlayout/flowLayout.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QLayout \
/opt/homebrew/lib/QtWidgets.framework/Headers/qlayout.h \
@@ -1552,12 +1584,11 @@ playerWindow.o: ../../src/windows/playerWindow/playerWindow.cpp ../../src/window
../../src/components/spinningalbumart/spinningAlbumArt.h \
/opt/homebrew/lib/QtGui.framework/Headers/QPixmap \
/opt/homebrew/lib/QtGui.framework/Headers/qpixmap.h \
../../src/components/tracklistWidget/tracklistwidget.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QListWidget \
/opt/homebrew/lib/QtWidgets.framework/Headers/qlistwidget.h \
/opt/homebrew/lib/QtWidgets.framework/Headers/QVBoxLayout \
/opt/homebrew/lib/QtWidgets.framework/Headers/qboxlayout.h \
/opt/homebrew/lib/QtGui.framework/Headers/QPainter \
/opt/homebrew/lib/QtGui.framework/Headers/qpainter.h \
/opt/homebrew/lib/QtGui.framework/Headers/QPainterPath \
/opt/homebrew/lib/QtGui.framework/Headers/qpainterpath.h \
/opt/homebrew/lib/QtCore.framework/Headers/QFileInfo \
/opt/homebrew/lib/QtCore.framework/Headers/qfileinfo.h \
/opt/homebrew/lib/QtGui.framework/Headers/QCloseEvent \
@@ -1734,6 +1765,9 @@ moc_albumtile.o: moc_albumtile.cpp
moc_spinningalbumart.o: moc_spinningalbumart.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_spinningalbumart.o moc_spinningalbumart.cpp
moc_tracklistwidget.o: moc_tracklistwidget.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_tracklistwidget.o moc_tracklistwidget.cpp
moc_musicSelector.o: moc_musicSelector.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_musicSelector.o moc_musicSelector.cpp

View File

@@ -39,14 +39,10 @@ template <> constexpr inline auto PlayerWindow::qt_create_metaobjectdata<qt_meta
{
namespace QMC = QtMocConstants;
QtMocHelpers::StringRefStorage qt_stringData {
"PlayerWindow",
"playNext",
""
"PlayerWindow"
};
QtMocHelpers::UintData qt_methods {
// Slot 'playNext'
QtMocHelpers::SlotData<void()>(1, 2, QMC::AccessPrivate, QMetaType::Void),
};
QtMocHelpers::UintData qt_properties {
};
@@ -68,12 +64,9 @@ Q_CONSTINIT const QMetaObject PlayerWindow::staticMetaObject = { {
void PlayerWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
auto *_t = static_cast<PlayerWindow *>(_o);
if (_c == QMetaObject::InvokeMetaMethod) {
switch (_id) {
case 0: _t->playNext(); break;
default: ;
}
}
(void)_t;
(void)_c;
(void)_id;
(void)_a;
}
@@ -93,18 +86,6 @@ void *PlayerWindow::qt_metacast(const char *_clname)
int PlayerWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QWidget::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 1)
qt_static_metacall(this, _c, _id, _a);
_id -= 1;
}
if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 1)
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
_id -= 1;
}
return _id;
}
QT_WARNING_POP

View File

@@ -0,0 +1,121 @@
/****************************************************************************
** Meta object code from reading C++ file 'tracklistwidget.h'
**
** Created by: The Qt Meta Object Compiler version 69 (Qt 6.9.3)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../../src/components/tracklistWidget/tracklistwidget.h"
#include <QtCore/qmetatype.h>
#include <QtCore/qtmochelpers.h>
#include <memory>
#include <QtCore/qxptype_traits.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'tracklistwidget.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 69
#error "This file was generated using the moc from 6.9.3. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
#ifndef Q_CONSTINIT
#define Q_CONSTINIT
#endif
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QT_WARNING_DISABLE_GCC("-Wuseless-cast")
namespace {
struct qt_meta_tag_ZN15TrackListWidgetE_t {};
} // unnamed namespace
template <> constexpr inline auto TrackListWidget::qt_create_metaobjectdata<qt_meta_tag_ZN15TrackListWidgetE_t>()
{
namespace QMC = QtMocConstants;
QtMocHelpers::StringRefStorage qt_stringData {
"TrackListWidget",
"trackSelected",
"",
"index"
};
QtMocHelpers::UintData qt_methods {
// Signal 'trackSelected'
QtMocHelpers::SignalData<void(int)>(1, 2, QMC::AccessPublic, QMetaType::Void, {{
{ QMetaType::Int, 3 },
}}),
};
QtMocHelpers::UintData qt_properties {
};
QtMocHelpers::UintData qt_enums {
};
return QtMocHelpers::metaObjectData<TrackListWidget, qt_meta_tag_ZN15TrackListWidgetE_t>(QMC::MetaObjectFlag{}, qt_stringData,
qt_methods, qt_properties, qt_enums);
}
Q_CONSTINIT const QMetaObject TrackListWidget::staticMetaObject = { {
QMetaObject::SuperData::link<QWidget::staticMetaObject>(),
qt_staticMetaObjectStaticContent<qt_meta_tag_ZN15TrackListWidgetE_t>.stringdata,
qt_staticMetaObjectStaticContent<qt_meta_tag_ZN15TrackListWidgetE_t>.data,
qt_static_metacall,
nullptr,
qt_staticMetaObjectRelocatingContent<qt_meta_tag_ZN15TrackListWidgetE_t>.metaTypes,
nullptr
} };
void TrackListWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
auto *_t = static_cast<TrackListWidget *>(_o);
if (_c == QMetaObject::InvokeMetaMethod) {
switch (_id) {
case 0: _t->trackSelected((*reinterpret_cast< std::add_pointer_t<int>>(_a[1]))); break;
default: ;
}
}
if (_c == QMetaObject::IndexOfMethod) {
if (QtMocHelpers::indexOfMethod<void (TrackListWidget::*)(int )>(_a, &TrackListWidget::trackSelected, 0))
return;
}
}
const QMetaObject *TrackListWidget::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *TrackListWidget::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_staticMetaObjectStaticContent<qt_meta_tag_ZN15TrackListWidgetE_t>.strings))
return static_cast<void*>(this);
return QWidget::qt_metacast(_clname);
}
int TrackListWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QWidget::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 1)
qt_static_metacall(this, _c, _id, _a);
_id -= 1;
}
if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 1)
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
_id -= 1;
}
return _id;
}
// SIGNAL 0
void TrackListWidget::trackSelected(int _t1)
{
QMetaObject::activate<void>(this, &staticMetaObject, 0, nullptr, _t1);
}
QT_WARNING_POP

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,42 @@
#include "tracklistwidget.h"
#include <QFileInfo>
#include <QVBoxLayout>
#include "src/data/cleanerScripts.h"
TrackListWidget::TrackListWidget(const QStringList& audioFiles, QWidget* parent)
: QWidget(parent)
{
list_ = new QListWidget(this);
QVBoxLayout* layout = new QVBoxLayout(this);
layout->addWidget(list_);
int trackNum = 1;
for (const QString& f : audioFiles) {
// Extract just the filename
QString fileName = QFileInfo(f).fileName();
// Run through your cleaner
QString songTitle = cleanTrackTitle(fileName);
// Format display text: "1. Song Title"
QString display = QString("%1. %2")
.arg(trackNum++)
.arg(songTitle);
list_->addItem(display);
}
// Emit signal when clicked
connect(list_, &QListWidget::itemClicked, this, [=](QListWidgetItem* item){
int index = list_->row(item);
emit trackSelected(index);
});
}
void TrackListWidget::setCurrentRow(int row)
{
list_->setCurrentRow(row);
}

View File

@@ -0,0 +1,23 @@
#ifndef TRACKLISTWIDGET_H
#define TRACKLISTWIDGET_H
#include <QWidget>
#include <QListWidget>
class TrackListWidget : public QWidget
{
Q_OBJECT
public:
explicit TrackListWidget(const QStringList& audioFiles, QWidget* parent = nullptr);
void setCurrentRow(int row); // <-- THIS must be here
signals:
void trackSelected(int index);
private:
QListWidget* list_;
};
#endif // TRACKLISTWIDGET_H

View File

@@ -1,7 +1,5 @@
#include "playerWindow.h"
#include <QVBoxLayout>
#include <QPainter>
#include <QPainterPath>
#include <QFileInfo>
#include <QCloseEvent>
#include "src/data/cleanerScripts.h"
@@ -9,24 +7,31 @@
PlayerWindow::PlayerWindow(const AlbumData& item, QWidget* parent)
: QWidget(parent), item_(item)
{
this->setWindowTitle("Now Playing");
this->resize(300, 370);
setWindowTitle("Now Playing");
resize(350, 500);
QVBoxLayout* layout = new QVBoxLayout(this);
// SUPER SIMPLE now:
// Album artwork
spinningArt_ = new SpinningAlbumArt(item.imagePath, 250);
layout->addWidget(spinningArt_);
layout->addWidget(spinningArt_, 0, Qt::AlignCenter);
trackLabel_ = new QLabel("Track 1");
// Track label
trackLabel_ = new QLabel("Track");
trackLabel_->setAlignment(Qt::AlignCenter);
trackLabel_->setStyleSheet("font-size: 14px; font-weight: 500;");
layout->addWidget(trackLabel_);
// Track list widget
trackList_ = new TrackListWidget(item_.audioFiles, this);
layout->addWidget(trackList_);
// Audio backend
player_ = new QMediaPlayer(this);
audio_ = new QAudioOutput(this);
player_->setAudioOutput(audio_);
// Spin album art based on playback
connect(player_, &QMediaPlayer::playbackStateChanged, this,
[this](QMediaPlayer::PlaybackState st){
if (st == QMediaPlayer::PlayingState)
@@ -35,35 +40,60 @@ PlayerWindow::PlayerWindow(const AlbumData& item, QWidget* parent)
spinningArt_->stop();
});
playNext();
// When a track finishes, auto-play next
connect(player_, &QMediaPlayer::mediaStatusChanged, this,
[this](QMediaPlayer::MediaStatus st){
if (st == QMediaPlayer::EndOfMedia)
handleTrackFinished();
});
// When a track is clicked
connect(trackList_, &TrackListWidget::trackSelected, this,
[this](int i){
index_ = i;
playTrack(index_);
});
// Start with track 0
playTrack(index_);
}
void PlayerWindow::playNext()
void PlayerWindow::playTrack(int idx)
{
if (index_ >= item_.audioFiles.size()) {
this->close();
if (idx < 0 || idx >= item_.audioFiles.size())
return;
}
QString filePath = item_.audioFiles[index_];
index_ = idx;
QString filePath = item_.audioFiles[idx];
QString fileName = QFileInfo(filePath).fileName();
QString title = cleanTrackTitle(fileName);
trackLabel_->setText(
QString("Track %1: %2").arg(index_ + 1).arg(title)
);
trackLabel_->setText(QString("Track %1: %2").arg(idx + 1).arg(title));
player_->setSource(QUrl::fromLocalFile(filePath));
player_->play();
index_++;
// Highlight in the list
trackList_->setCurrentRow(idx);
}
void PlayerWindow::handleTrackFinished()
{
int nextIndex = index_ + 1;
if (nextIndex >= item_.audioFiles.size()) {
close();
return;
}
playTrack(nextIndex);
}
void PlayerWindow::closeEvent(QCloseEvent* event)
{
if (player_) {
if (player_)
player_->stop();
spinTimer_->stop();
}
QWidget::closeEvent(event);
}

View File

@@ -1,4 +1,5 @@
#pragma once
#ifndef PLAYERWINDOW_H
#define PLAYERWINDOW_H
#include <QWidget>
#include <QLabel>
@@ -7,33 +8,32 @@
#include <QTimer>
#include "src/data/albumInformation.h"
#include "src/components/spinningalbumart/spinningAlbumArt.h"
#include "src/components/tracklistWidget/tracklistwidget.h"
class PlayerWindow : public QWidget {
class PlayerWindow : public QWidget
{
Q_OBJECT
SpinningAlbumArt* spinningArt_;
public:
explicit PlayerWindow(const AlbumData& item, QWidget* parent = nullptr);
void setCurrentRow(int row);
protected:
void closeEvent(QCloseEvent* event) override;
private slots:
void playNext();
private:
void playTrack(int index);
void handleTrackFinished();
AlbumData item_;
int index_ = 0;
int index_ = 0; // active track index
SpinningAlbumArt* spinningArt_;
QLabel* trackLabel_;
TrackListWidget* trackList_;
QMediaPlayer* player_;
QAudioOutput* audio_;
QLabel* artLabel_;
QLabel* trackLabel_;
QPixmap discArt_; // circular cropped album art
QPixmap overlayArt_; // optional overlay (not required)
qreal rotationAngle_ = 0;
QTimer* spinTimer_;
};
#endif