diff --git a/Music-Player.pro b/Music-Player.pro index 63dcf2f..da9db19 100644 --- a/Music-Player.pro +++ b/Music-Player.pro @@ -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 \ diff --git a/build/Desktop-Debug/Makefile b/build/Desktop-Debug/Makefile index e1365f6..5225ad1 100644 --- a/build/Desktop-Debug/Makefile +++ b/build/Desktop-Debug/Makefile @@ -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 diff --git a/build/Desktop-Debug/Music-Player.app/Contents/MacOS/Music-Player b/build/Desktop-Debug/Music-Player.app/Contents/MacOS/Music-Player index b83fa28..73ea17d 100755 Binary files a/build/Desktop-Debug/Music-Player.app/Contents/MacOS/Music-Player and b/build/Desktop-Debug/Music-Player.app/Contents/MacOS/Music-Player differ diff --git a/build/Desktop-Debug/moc_playerWindow.cpp b/build/Desktop-Debug/moc_playerWindow.cpp index 7f1bd2a..38b1e00 100644 --- a/build/Desktop-Debug/moc_playerWindow.cpp +++ b/build/Desktop-Debug/moc_playerWindow.cpp @@ -39,14 +39,10 @@ template <> constexpr inline auto PlayerWindow::qt_create_metaobjectdata(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(_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(_a[0]) = QMetaType(); - _id -= 1; - } return _id; } QT_WARNING_POP diff --git a/build/Desktop-Debug/moc_playerWindow.o b/build/Desktop-Debug/moc_playerWindow.o index dd8a6a4..1cdbfdd 100644 Binary files a/build/Desktop-Debug/moc_playerWindow.o and b/build/Desktop-Debug/moc_playerWindow.o differ diff --git a/build/Desktop-Debug/moc_tracklistwidget.cpp b/build/Desktop-Debug/moc_tracklistwidget.cpp new file mode 100644 index 0000000..6bb890c --- /dev/null +++ b/build/Desktop-Debug/moc_tracklistwidget.cpp @@ -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 + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'tracklistwidget.h' doesn't include ." +#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() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TrackListWidget", + "trackSelected", + "", + "index" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'trackSelected' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TrackListWidget::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TrackListWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->trackSelected((*reinterpret_cast< std::add_pointer_t>(_a[1]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_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.strings)) + return static_cast(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(_a[0]) = QMetaType(); + _id -= 1; + } + return _id; +} + +// SIGNAL 0 +void TrackListWidget::trackSelected(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build/Desktop-Debug/moc_tracklistwidget.o b/build/Desktop-Debug/moc_tracklistwidget.o new file mode 100644 index 0000000..5dc4962 Binary files /dev/null and b/build/Desktop-Debug/moc_tracklistwidget.o differ diff --git a/build/Desktop-Debug/musicSelector.o b/build/Desktop-Debug/musicSelector.o index e2691d1..a18fbc3 100644 Binary files a/build/Desktop-Debug/musicSelector.o and b/build/Desktop-Debug/musicSelector.o differ diff --git a/build/Desktop-Debug/playerWindow.o b/build/Desktop-Debug/playerWindow.o index e1fc8ec..a11549a 100644 Binary files a/build/Desktop-Debug/playerWindow.o and b/build/Desktop-Debug/playerWindow.o differ diff --git a/build/Desktop-Debug/tracklistwidget.o b/build/Desktop-Debug/tracklistwidget.o new file mode 100644 index 0000000..82f89cf Binary files /dev/null and b/build/Desktop-Debug/tracklistwidget.o differ diff --git a/src/components/tracklistWidget/tracklistwidget.cpp b/src/components/tracklistWidget/tracklistwidget.cpp new file mode 100644 index 0000000..15c7431 --- /dev/null +++ b/src/components/tracklistWidget/tracklistwidget.cpp @@ -0,0 +1,42 @@ +#include "tracklistwidget.h" +#include +#include +#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); +} diff --git a/src/components/tracklistWidget/tracklistwidget.h b/src/components/tracklistWidget/tracklistwidget.h new file mode 100644 index 0000000..c29ff1b --- /dev/null +++ b/src/components/tracklistWidget/tracklistwidget.h @@ -0,0 +1,23 @@ +#ifndef TRACKLISTWIDGET_H +#define TRACKLISTWIDGET_H + +#include +#include + +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 diff --git a/src/windows/playerWindow/playerWindow.cpp b/src/windows/playerWindow/playerWindow.cpp index 3a59ee0..3581d0a 100644 --- a/src/windows/playerWindow/playerWindow.cpp +++ b/src/windows/playerWindow/playerWindow.cpp @@ -1,7 +1,5 @@ #include "playerWindow.h" #include -#include -#include #include #include #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); } diff --git a/src/windows/playerWindow/playerWindow.h b/src/windows/playerWindow/playerWindow.h index a2086d0..6403eef 100644 --- a/src/windows/playerWindow/playerWindow.h +++ b/src/windows/playerWindow/playerWindow.h @@ -1,4 +1,5 @@ -#pragma once +#ifndef PLAYERWINDOW_H +#define PLAYERWINDOW_H #include #include @@ -7,33 +8,32 @@ #include #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