diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..5507249
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+*.cpp linguist-language=C++
+*.h linguist-language=C++
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8b86780
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,31 @@
+# IDE files
+.vscode/
+.idea/
+
+# Qt build files
+*.pro.user
+*.pro.user.*
+.qmake.stash
+Makefile.Debug
+Makefile.Release
+release/
+debug/
+.qtc_clangd/
+
+# Build directories
+build/
+*.o
+*.exe
+moc_*.cpp
+moc_*.h
+ui_*.h
+qrc_*.cpp
+
+# Temporary files
+nul
+*.tmp
+*.log
+
+# OS files
+.DS_Store
+Thumbs.db
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/MultimediaLibrary.iml b/.idea/MultimediaLibrary.iml
new file mode 100644
index 0000000..f08604b
--- /dev/null
+++ b/.idea/MultimediaLibrary.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/.idea/editor.xml b/.idea/editor.xml
new file mode 100644
index 0000000..95d51a7
--- /dev/null
+++ b/.idea/editor.xml
@@ -0,0 +1,580 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..0b76fe5
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..cdf27a5
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ac4079f
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,840 @@
+#############################################################################
+# Makefile for building: MultimediaLibrary
+# Generated by qmake (3.1) (Qt 6.8.3)
+# Project: MultimediaLibrary.pro
+# Template: app
+# Command: D:\qt\6.8.3\mingw_64\bin\qmake.exe -o Makefile MultimediaLibrary.pro
+#############################################################################
+
+MAKEFILE = Makefile
+
+EQ = =
+
+first: release
+install: release-install
+uninstall: release-uninstall
+QMAKE = D:\qt\6.8.3\mingw_64\bin\qmake.exe
+DEL_FILE = del
+CHK_DIR_EXISTS= if not exist
+MKDIR = mkdir
+COPY = copy /y
+COPY_FILE = copy /y
+COPY_DIR = xcopy /s /q /y /i
+INSTALL_FILE = copy /y
+INSTALL_PROGRAM = copy /y
+INSTALL_DIR = xcopy /s /q /y /i
+QINSTALL = D:\qt\6.8.3\mingw_64\bin\qmake.exe -install qinstall
+QINSTALL_PROGRAM = D:\qt\6.8.3\mingw_64\bin\qmake.exe -install qinstall -exe
+DEL_FILE = del
+SYMLINK = $(QMAKE) -install ln -f -s
+DEL_DIR = rmdir
+MOVE = move
+IDC = idc
+IDL = midl
+ZIP = zip -r -9
+DEF_FILE =
+RES_FILE =
+SED = $(QMAKE) -install sed
+MOVE = move
+SUBTARGETS = \
+ release \
+ debug
+
+
+release: FORCE
+ $(MAKE) -f $(MAKEFILE).Release
+release-make_first: FORCE
+ $(MAKE) -f $(MAKEFILE).Release
+release-all: FORCE
+ $(MAKE) -f $(MAKEFILE).Release all
+release-clean: FORCE
+ $(MAKE) -f $(MAKEFILE).Release clean
+release-distclean: FORCE
+ $(MAKE) -f $(MAKEFILE).Release distclean
+release-install: FORCE
+ $(MAKE) -f $(MAKEFILE).Release install
+release-uninstall: FORCE
+ $(MAKE) -f $(MAKEFILE).Release uninstall
+debug: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug
+debug-make_first: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug
+debug-all: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug all
+debug-clean: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug clean
+debug-distclean: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug distclean
+debug-install: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug install
+debug-uninstall: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug uninstall
+
+Makefile: MultimediaLibrary.pro D:/qt/6.8.3/mingw_64/mkspecs/win32-g++/qmake.conf D:/qt/6.8.3/mingw_64/mkspecs/features/spec_pre.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/device_config.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/common/sanitize.conf \
+ D:/qt/6.8.3/mingw_64/mkspecs/common/gcc-base.conf \
+ D:/qt/6.8.3/mingw_64/mkspecs/common/g++-base.conf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/win32/windows_vulkan_sdk.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/common/windows-vulkan.conf \
+ D:/qt/6.8.3/mingw_64/mkspecs/common/g++-win32.conf \
+ D:/qt/6.8.3/mingw_64/mkspecs/common/windows-desktop.conf \
+ D:/qt/6.8.3/mingw_64/mkspecs/qconfig.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_ext_freetype.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_ext_libjpeg.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_ext_libpng.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_ext_openxr_loader.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3danimation.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3danimation_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dcore.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dcore_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dextras.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dextras_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dinput.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dinput_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dlogic.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dlogic_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquick.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquick_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickanimation.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickanimation_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickextras.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickextras_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickinput.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickinput_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickrender.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickrender_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickscene2d.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickscene3d.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickscene3d_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3drender.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3drender_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_activeqt.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_activeqt_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_axbase_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_axcontainer.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_axcontainer_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_axserver.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_axserver_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_bluetooth.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_bluetooth_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_bodymovin_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_charts.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_charts_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_chartsqml.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_chartsqml_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_coap.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_coap_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_concurrent.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_concurrent_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_core.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_core5compat.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_core5compat_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_core_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_datavisualization.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_datavisualization_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_datavisualizationqml.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_datavisualizationqml_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_dbus.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_dbus_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_declarativeopcua.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_declarativeopcua_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_designer.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_designer_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_designercomponents_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_entrypoint_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_example_icons_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_fb_support_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_ffmpegmediapluginimpl_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_freetype_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_graphs.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_graphs_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_graphswidgets.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_graphswidgets_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_grpc.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_grpc_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_grpcquick.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_grpcquick_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_gui.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_gui_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_harfbuzz_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_help.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_help_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_httpserver.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_httpserver_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_jpeg_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_jsonrpc_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsanimation.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsanimation_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsplatform.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsplatform_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labssettings.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labssettings_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labssharedimage.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labssharedimage_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_languageserver_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_linguist.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_location.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_location_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_mqtt.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_mqtt_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_multimedia.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_multimedia_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_multimediaquick_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_multimediatestlibprivate_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_multimediawidgets.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_network.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_network_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_networkauth.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_networkauth_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_nfc.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_nfc_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_opcua.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_opcua_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_opengl.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_opengl_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_openglwidgets.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_openglwidgets_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_packetprotocol_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_png_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_positioning.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_positioning_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_positioningquick.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_positioningquick_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_printsupport.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_printsupport_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobuf.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobuf_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufqtcoretypes.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufqtcoretypes_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufqtguitypes.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufqtguitypes_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufquick.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufquick_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufwellknowntypes.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufwellknowntypes_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qdoccatch_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qdoccatchconversions_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qdoccatchgenerators_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qml.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qml_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlcompiler.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlcompiler_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlcompilerplus_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlcore.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlcore_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmldebug_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmldom_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlintegration.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlintegration_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlls_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlmeta.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlmeta_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlmodels.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlmodels_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlnetwork.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlnetwork_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmltest.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmltest_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmltoolingsettings_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3d.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3d_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3deffects.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3deffects_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dglslparser_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticles.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticles_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysics.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysics_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysicshelpers.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysicshelpers_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dutils.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dutils_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dxr.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dxr_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickeffects_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicklayouts.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicklayouts_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickparticles_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickshapes_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktemplates2.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktimeline.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktimeline_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickvectorimage.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickvectorimage_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickvectorimagegenerator_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickwidgets.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickwidgets_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_remoteobjects.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_remoteobjects_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_remoteobjectsqml.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_remoteobjectsqml_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_repparser.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_repparser_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_scxml.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_scxml_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_scxmlqml.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_scxmlqml_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_sensors.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_sensors_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_sensorsquick.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_sensorsquick_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_serialbus.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_serialbus_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_serialport.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_serialport_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_shadertools.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_shadertools_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_spatialaudio.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_spatialaudio_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_sql.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_sql_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_statemachine.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_statemachine_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_statemachineqml.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_statemachineqml_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_svg.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_svg_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_svgwidgets.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_svgwidgets_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_testinternals_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_testlib.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_testlib_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_texttospeech.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_texttospeech_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_tools_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_uiplugin.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_uitools.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_uitools_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_virtualkeyboard.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_virtualkeyboard_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_virtualkeyboardsettings.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_virtualkeyboardsettings_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_vncserver.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_vncserver_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_vncserverquick_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webchannel.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webchannel_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webchannelquick.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webchannelquick_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_websockets.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_websockets_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webview.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webview_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webviewquick.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webviewquick_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_widgets.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_widgets_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_xml.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_xml_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_zlib_private.pri \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/qt_functions.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/qt_config.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/win32-g++/qmake.conf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/spec_post.prf \
+ .qmake.stash \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/exclusive_builds.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/toolchain.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/default_pre.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/win32/default_pre.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/resolve_config.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/exclusive_builds_post.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/default_post.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/precompile_header.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/warn_on.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/permissions.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/qt.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/resources_functions.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/resources.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/moc.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/win32/opengl.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/uic.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/qmake_use.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/file_copies.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/win32/windows.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/testcase_targets.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/exceptions.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/yacc.prf \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/lex.prf \
+ MultimediaLibrary.pro \
+ D:/qt/6.8.3/mingw_64/lib/Qt6Widgets.prl \
+ D:/qt/6.8.3/mingw_64/lib/Qt6Gui.prl \
+ D:/qt/6.8.3/mingw_64/lib/Qt6Core.prl \
+ D:/qt/6.8.3/mingw_64/lib/Qt6EntryPoint.prl \
+ D:/qt/6.8.3/mingw_64/mkspecs/features/build_pass.prf
+ $(QMAKE) -o Makefile MultimediaLibrary.pro
+D:/qt/6.8.3/mingw_64/mkspecs/features/spec_pre.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/device_config.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/common/sanitize.conf:
+D:/qt/6.8.3/mingw_64/mkspecs/common/gcc-base.conf:
+D:/qt/6.8.3/mingw_64/mkspecs/common/g++-base.conf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/win32/windows_vulkan_sdk.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/common/windows-vulkan.conf:
+D:/qt/6.8.3/mingw_64/mkspecs/common/g++-win32.conf:
+D:/qt/6.8.3/mingw_64/mkspecs/common/windows-desktop.conf:
+D:/qt/6.8.3/mingw_64/mkspecs/qconfig.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_ext_freetype.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_ext_libjpeg.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_ext_libpng.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_ext_openxr_loader.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3danimation.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3danimation_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dcore.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dcore_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dextras.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dextras_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dinput.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dinput_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dlogic.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dlogic_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquick.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquick_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickanimation.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickanimation_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickextras.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickextras_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickinput.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickinput_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickrender.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickrender_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickscene2d.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickscene2d_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickscene3d.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3dquickscene3d_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3drender.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_3drender_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_activeqt.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_activeqt_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_axbase_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_axcontainer.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_axcontainer_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_axserver.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_axserver_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_bluetooth.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_bluetooth_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_bodymovin_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_charts.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_charts_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_chartsqml.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_chartsqml_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_coap.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_coap_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_concurrent.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_concurrent_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_core.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_core5compat.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_core5compat_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_core_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_datavisualization.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_datavisualization_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_datavisualizationqml.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_datavisualizationqml_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_dbus.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_dbus_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_declarativeopcua.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_declarativeopcua_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_designer.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_designer_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_designercomponents_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_entrypoint_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_example_icons_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_examples_asset_downloader_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_fb_support_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_ffmpegmediapluginimpl_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_freetype_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_graphs.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_graphs_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_graphswidgets.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_graphswidgets_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_grpc.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_grpc_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_grpcquick.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_grpcquick_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_gui.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_gui_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_harfbuzz_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_help.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_help_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_httpserver.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_httpserver_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_jpeg_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_jsonrpc_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsanimation.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsanimation_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsplatform.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsplatform_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labsqmlmodels_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labssettings.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labssettings_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labssharedimage.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labssharedimage_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_languageserver_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_linguist.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_location.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_location_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_mqtt.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_mqtt_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_multimedia.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_multimedia_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_multimediaquick_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_multimediatestlibprivate_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_multimediawidgets.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_multimediawidgets_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_network.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_network_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_networkauth.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_networkauth_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_nfc.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_nfc_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_opcua.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_opcua_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_opengl.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_opengl_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_openglwidgets.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_openglwidgets_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_packetprotocol_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_png_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_positioning.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_positioning_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_positioningquick.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_positioningquick_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_printsupport.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_printsupport_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobuf.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobuf_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufqtcoretypes.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufqtcoretypes_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufqtguitypes.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufqtguitypes_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufquick.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufquick_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufwellknowntypes.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_protobufwellknowntypes_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qdoccatch_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qdoccatchconversions_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qdoccatchgenerators_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qml.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qml_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlassetdownloader_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlcompiler.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlcompiler_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlcompilerplus_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlcore.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlcore_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmldebug_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmldom_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlintegration.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlintegration_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmllocalstorage_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlls_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlmeta.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlmeta_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlmodels.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlmodels_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlnetwork.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlnetwork_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmltest.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmltest_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmltoolingsettings_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlworkerscript_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3d.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3d_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetimport_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dassetutils_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3deffects.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3deffects_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dglslparser_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpers_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3diblbaker_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticles.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dparticles_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysics.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysics_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysicshelpers.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dphysicshelpers_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3druntimerender_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dutils.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dutils_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dxr.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick3dxr_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quick_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basic_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2basicstyleimpl_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fluentwinui3styleimpl_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusion_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2fusionstyleimpl_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imagine_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2imaginestyleimpl_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2material_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2materialstyleimpl_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universal_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2universalstyleimpl_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrols2windowsstyleimpl_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickeffects_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicklayouts.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicklayouts_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickparticles_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickshapes_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktemplates2.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktemplates2_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktimeline.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktimeline_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quicktimelineblendtrees_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickvectorimage.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickvectorimage_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickvectorimagegenerator_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickwidgets.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_quickwidgets_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_remoteobjects.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_remoteobjects_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_remoteobjectsqml.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_remoteobjectsqml_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_repparser.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_repparser_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_scxml.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_scxml_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_scxmlqml.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_scxmlqml_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_sensors.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_sensors_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_sensorsquick.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_sensorsquick_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_serialbus.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_serialbus_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_serialport.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_serialport_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_shadertools.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_shadertools_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_spatialaudio.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_spatialaudio_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_sql.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_sql_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_statemachine.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_statemachine_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_statemachineqml.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_statemachineqml_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_svg.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_svg_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_svgwidgets.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_svgwidgets_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_testinternals_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_testlib.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_testlib_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_texttospeech.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_texttospeech_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_tools_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_uiplugin.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_uitools.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_uitools_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_virtualkeyboard.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_virtualkeyboard_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_virtualkeyboardsettings.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_virtualkeyboardsettings_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_vncserver.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_vncserver_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_vncserverquick_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webchannel.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webchannel_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webchannelquick.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webchannelquick_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_websockets.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_websockets_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webview.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webview_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webviewquick.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_webviewquick_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_widgets.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_widgets_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_xml.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_xml_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/modules/qt_lib_zlib_private.pri:
+D:/qt/6.8.3/mingw_64/mkspecs/features/qt_functions.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/qt_config.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/win32-g++/qmake.conf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/spec_post.prf:
+.qmake.stash:
+D:/qt/6.8.3/mingw_64/mkspecs/features/exclusive_builds.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/toolchain.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/default_pre.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/win32/default_pre.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/resolve_config.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/exclusive_builds_post.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/default_post.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/precompile_header.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/warn_on.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/permissions.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/qt.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/resources_functions.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/resources.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/moc.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/win32/opengl.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/uic.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/qmake_use.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/file_copies.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/win32/windows.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/testcase_targets.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/exceptions.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/yacc.prf:
+D:/qt/6.8.3/mingw_64/mkspecs/features/lex.prf:
+MultimediaLibrary.pro:
+D:/qt/6.8.3/mingw_64/lib/Qt6Widgets.prl:
+D:/qt/6.8.3/mingw_64/lib/Qt6Gui.prl:
+D:/qt/6.8.3/mingw_64/lib/Qt6Core.prl:
+D:/qt/6.8.3/mingw_64/lib/Qt6EntryPoint.prl:
+D:/qt/6.8.3/mingw_64/mkspecs/features/build_pass.prf:
+qmake: FORCE
+ @$(QMAKE) -o Makefile MultimediaLibrary.pro
+
+qmake_all: FORCE
+
+make_first: release-make_first debug-make_first FORCE
+all: release-all debug-all FORCE
+clean: release-clean debug-clean FORCE
+distclean: release-distclean debug-distclean FORCE
+ -$(DEL_FILE) Makefile
+ -$(DEL_FILE) .qmake.stash
+
+release-mocclean:
+ $(MAKE) -f $(MAKEFILE).Release mocclean
+debug-mocclean:
+ $(MAKE) -f $(MAKEFILE).Debug mocclean
+mocclean: release-mocclean debug-mocclean
+
+release-mocables:
+ $(MAKE) -f $(MAKEFILE).Release mocables
+debug-mocables:
+ $(MAKE) -f $(MAKEFILE).Debug mocables
+mocables: release-mocables debug-mocables
+
+check: first
+
+benchmark: first
+FORCE:
+
+.SUFFIXES:
+
+$(MAKEFILE).Release: Makefile
+$(MAKEFILE).Debug: Makefile
diff --git a/MultimediaLibrary.pro b/MultimediaLibrary.pro
new file mode 100644
index 0000000..09610bd
--- /dev/null
+++ b/MultimediaLibrary.pro
@@ -0,0 +1,48 @@
+QT += core widgets
+
+CONFIG += c++17
+
+TARGET = MultimediaLibrary
+TEMPLATE = app
+
+# Backend sources
+SOURCES += \
+ src/main.cpp \
+ src/Backend/Elements/Date.cpp \
+ src/Backend/Elements/Media.cpp \
+ src/Backend/Elements/Book.cpp \
+ src/Backend/Elements/Movie.cpp \
+ src/Backend/Elements/Song.cpp \
+ src/Backend/Elements/Magazine.cpp \
+ src/Backend/Elements/Podcast.cpp \
+ src/Backend/Enums/Genres.cpp \
+ src/Backend/Enums/Languages.cpp \
+ src/Backend/Library/Library.cpp \
+ src/Frontend/Windows/MainWindow.cpp
+
+# Backend headers
+HEADERS += \
+ src/Backend/Elements/Date.h \
+ src/Backend/Elements/Media.h \
+ src/Backend/Elements/Book.h \
+ src/Backend/Elements/Movie.h \
+ src/Backend/Elements/Song.h \
+ src/Backend/Elements/Magazine.h \
+ src/Backend/Elements/Podcast.h \
+ src/Backend/Enums/Genres.h \
+ src/Backend/Enums/Languages.h \
+ src/Backend/Library/Library.h \
+ src/Frontend/Windows/MainWindow.h
+
+# Include paths
+INCLUDEPATH += \
+ src/Backend/Elements \
+ src/Backend/Enums \
+ src/Backend/Library \
+ src/Frontend/Windows
+
+# Compiler flags
+QMAKE_CXXFLAGS += -std=c++17 -Wall -Wextra
+
+# Output directory
+DESTDIR = build/bin
diff --git a/README.md b/README.md
index 7c1a0ac..6ca3008 100644
--- a/README.md
+++ b/README.md
@@ -1,27 +1,214 @@
-# 📦 OOP Project – Academic Year 2024/2025
+# Multimedia Library
-## 📚 Multimedia Library
+Una libreria multimediale completa con backend C++ e frontend Qt.
-This repository contains the Object-Oriented Programming (OOP) project developed during the 2024/2025 academic year for the course taught by Professor Francesco Ranzato (SC1167 - Computer Science @UniPD).
+## 🚀 **Caratteristiche**
-The project demonstrates core OOP principles such as encapsulation, inheritance, polymorphism, and abstraction. It is designed following best practices in software design and aims to provide a clean, modular, and maintainable codebase.
+- **Backend C++**: Gestione completa di libri, film, canzoni, riviste e podcast
+- **Frontend Qt**: Interfaccia grafica moderna e intuitiva
+- **Sistema di Enum**: Generi e lingue tipizzati per ogni tipo di media
+- **Classe Date Personalizzata**: Gestione date con validazione
+- **Build System Unificato**: Makefile per backend e frontend
-## 🛠️ Technologies & Tools
+## 📁 **Struttura del Progetto**
-- Language: C++, Qt
-- IDE: VS Code
+```
+MultimediaLibrary/
+├── src/
+│ ├── Backend/
+│ │ ├── Elements/ # Classi base e derivate
+│ │ │ ├── Media.h/.cpp # Classe base astratta
+│ │ │ ├── Book.h/.cpp # Gestione libri
+│ │ │ ├── Movie.h/.cpp # Gestione film
+│ │ │ ├── Song.h/.cpp # Gestione canzoni
+│ │ │ ├── Magazine.h/.cpp # Gestione riviste
+│ │ │ ├── Podcast.h/.cpp # Gestione podcast
+│ │ │ └── Date.h/.cpp # Classe data personalizzata
+│ │ ├── Enums/ # Enum per generi e lingue
+│ │ │ ├── Genres.h/.cpp
+│ │ │ └── Languages.h/.cpp
+│ │ └── Library/ # Gestione collezione media
+│ │ └── Library.h/.cpp
+│ ├── Frontend/
+│ │ └── Windows/
+│ │ └── MainWindow.h/.cpp # Interfaccia Qt
+│ └── main.cpp # Entry point unificato
+├── build/bin/ # Eseguibili compilati
+├── Makefile # Build system per backend
+├── MultimediaLibrary.pro # Progetto Qt
+└── README.md # Questo file
+```
-## 📁 Structure
+## 🛠️ **Prerequisiti**
-- `src/`: Source code of the application
-- `test/`: Unit tests
-- `docs/`: Documentation and UML diagrams (if applicable)
+### Per il Backend (Obbligatorio)
+- **MSYS2** con MinGW-w64
+- **Make** (installato tramite MSYS2)
+- **g++** (compilatore C++17)
-## ✅ Features
+### Per il Frontend Qt (Opzionale)
+- **Qt 6.8.3** installato in `D:\qt\6.8.3\mingw_64`
+- **Qt Creator** per sviluppo
-- [List here the main functionalities your project implements]
+## 🔧 **Installazione e Setup**
-## 🤝 Contributors
+### 1. Installare Make (se non presente)
+```bash
+# Aggiungere al PATH
+$env:PATH += ";C:\msys64\usr\bin"
+```
-- **Davide** - [GitHub](https://github.com/DavideColabove)
-- **Oussama** - [GitHub](https://github.com/m4hd1-exe)
+### 2. Configurare Qt (se installato)
+```bash
+# Aggiungere Qt al PATH
+$env:PATH += ";D:\qt\6.8.3\mingw_64\bin"
+```
+
+## 🏗️ **Compilazione**
+
+### Opzione 1: Usando il Makefile Personalizzato
+```bash
+# Compila solo il backend test
+make test
+
+# Compila la GUI Qt (se Qt disponibile)
+make gui
+
+# Compila tutto
+make all
+
+# Pulisci i file di build
+make clean
+
+# Mostra aiuto
+make help
+```
+
+### Opzione 2: Usando Qt/qmake (Raccomandato per GUI)
+```bash
+# Genera Makefile da progetto Qt
+qmake MultimediaLibrary.pro
+
+# Compila
+make
+
+# Pulisci
+make clean
+```
+
+## 🚀 **Esecuzione**
+
+### Modalità Test (Backend)
+```bash
+# Esegue test del backend in console
+./build/bin/MultimediaLibraryTest
+# oppure
+./build/bin/MultimediaLibraryTest --test
+```
+
+### Modalità GUI
+```bash
+# Avvia l'interfaccia grafica Qt
+./build/bin/MultimediaLibrary.exe
+# oppure
+./build/bin/MultimediaLibrary.exe --gui
+```
+
+### Aiuto
+```bash
+./build/bin/MultimediaLibraryTest --help
+./build/bin/MultimediaLibrary.exe --help
+```
+
+## 📚 **Classi e Funzionalità**
+
+### Classe Base: `Media`
+- **Attributi**: title, author, releaseDate, id, kbSize, isAvailable, imagePath
+- **Metodi**: getters/setters, `isValid()` (virtuale puro)
+
+### Classi Derivate
+- **`Book`**: publisher, pages, isbn, language, genre (BookGenre)
+- **`Movie`**: director, duration, rating, language, genre (MovieGenre)
+- **`Song`**: artist, album, duration, genre (MusicGenre)
+- **`Magazine`**: publisher, issue, language, genre (MagazineGenre)
+- **`Podcast`**: host, episodes, duration, genre (PodcastGenre)
+
+### Classe `Library` (Gestione Collezione)
+- **CRUD Operations**: `addMedia()`, `removeMedia()`, `findMediaById()`, `getAllMedia()`
+- **Search & Filter**: `searchByTitle()`, `searchByAuthor()`, `filterByType()`, `filterByAvailability()`
+- **File Operations**: `saveToFile()`, `loadFromFile()` (formato CSV)
+- **Statistics**: `getTotalCount()`, `getAvailableCount()`, `getMediaTypeStats()`
+- **Utility**: `getNextId()`, `clear()`, `isEmpty()`
+
+### Sistema Enum
+- **Generi**: `BookGenre`, `MovieGenre`, `MusicGenre`, `MagazineGenre`, `PodcastGenre`
+- **Lingue**: `Language`
+- **Conversioni**: `enumToString()`, `stringToEnum()`
+
+## 🎨 **Interfaccia Qt**
+
+### Componenti Principali
+- **Menu Bar**: File, Edit, Search, Help
+- **Tool Bar**: Azioni rapide (Add, Edit, Delete, Search, Export)
+- **Table Widget**: Visualizzazione tabellare dei media
+- **Status Bar**: Messaggi di stato
+
+### Funzionalità (da implementare)
+- ✅ **Struttura base** completata
+- 🔄 **AddMediaDialog** - Dialog per aggiungere media
+- 🔄 **EditMediaDialog** - Dialog per modificare media
+- 🔄 **SearchDialog** - Dialog per cercare e filtrare
+- 🔄 **Import/Export** - Salvataggio e caricamento dati
+
+## 🔍 **Debug e Sviluppo**
+
+### Compilazione con Debug
+```bash
+make debug
+```
+
+### Verifica Qt
+```bash
+qmake --version
+```
+
+### Verifica Make
+```bash
+make --version
+```
+
+## 📝 **Note di Sviluppo**
+
+### Per Aprire in Qt Creator
+1. Apri `MultimediaLibrary.pro` in Qt Creator
+2. Configura il kit MinGW
+3. Compila ed esegui direttamente da Qt Creator
+
+### Per Sviluppo da Terminale
+1. Usa `make test` per testare il backend
+2. Usa `qmake && make` per compilare la GUI
+3. Usa `./build/bin/MultimediaLibrary.exe` per eseguire
+
+## 🎯 **Prossimi Passi**
+
+1. **Implementare AddMediaDialog** con ComboBox per generi e lingue
+2. **Implementare EditMediaDialog** per modificare media esistenti
+3. **Implementare SearchDialog** per cercare e filtrare
+4. **Aggiungere validazione input** con QValidator
+5. **Implementare salvataggio/caricamento** dati
+6. **Aggiungere stili CSS** per migliorare l'aspetto
+
+## ✅ **Stato Attuale**
+
+- ✅ **Backend**: Completamente funzionante
+- ✅ **Classi derivate**: Implementate con enum
+- ✅ **Classe Library**: Gestione completa della collezione
+- ✅ **Sistema build**: Makefile e qmake funzionanti
+- ✅ **GUI base**: MainWindow con menu e toolbar
+- ✅ **Qt integration**: Compilazione e linking corretti
+- 🔄 **Dialog**: In sviluppo
+- 🔄 **Funzionalità avanzate**: Da implementare
+
+---
+
+**Sviluppato con C++17, Qt 6.8.3 e Make** 🚀
diff --git a/src/Backend/Elements/Book.cpp b/src/Backend/Elements/Book.cpp
new file mode 100644
index 0000000..ab59841
--- /dev/null
+++ b/src/Backend/Elements/Book.cpp
@@ -0,0 +1,79 @@
+#include "Book.h"
+#include
+#include "../Enums/Genres.h"
+#include "../Enums/Languages.h"
+
+// Constructors
+Book::Book(std::string title, std::string author, Enums::BookGenre genre, Date releaseDate,
+ unsigned int id, unsigned int kbSize, bool isAvailable, std::string imagePath,
+ std::string publisher, unsigned int pages, std::string isbn, Enums::Language language)
+ : Media(title, author, releaseDate, id, kbSize, isAvailable, imagePath),
+ publisher(publisher), pages(pages), isbn(isbn), language(language), genre(genre) {}
+
+Book::Book(const Book& book)
+ : Media(book), publisher(book.publisher), pages(book.pages), isbn(book.isbn), language(book.language), genre(book.genre) {}
+
+Book::Book() : Media(), publisher(""), pages(0), isbn(""), language(Enums::Language::ITALIAN), genre(Enums::BookGenre::FICTION) {}
+
+Book::~Book() {}
+
+// Virtual method implementations for non-trivial polymorphism
+bool Book::isValid() const {
+ return !getTitle().empty() && !getAuthor().empty() && !publisher.empty() &&
+ pages > 0 && !isbn.empty();
+}
+
+// Book-specific getters and setters
+std::string Book::getPublisher() const {
+ return publisher;
+}
+
+Book& Book::setPublisher(const std::string& pub) {
+ publisher = pub;
+ return *this;
+}
+
+unsigned int Book::getPages() const {
+ return pages;
+}
+
+Book& Book::setPages(unsigned int p) {
+ pages = p;
+ return *this;
+}
+
+std::string Book::getIsbn() const {
+ return isbn;
+}
+
+Book& Book::setIsbn(const std::string& isbn) {
+ this->isbn = isbn;
+ return *this;
+}
+
+Enums::Language Book::getLanguage() const {
+ return language;
+}
+
+Book& Book::setLanguage(Enums::Language lang) {
+ language = lang;
+ return *this;
+}
+
+std::string Book::getLanguageString() const {
+ return Enums::languageToString(language);
+}
+
+// Genre-specific methods
+Enums::BookGenre Book::getGenre() const {
+ return genre;
+}
+
+Book& Book::setGenre(Enums::BookGenre g) {
+ genre = g;
+ return *this;
+}
+
+std::string Book::getGenreString() const {
+ return Enums::bookGenreToString(genre);
+}
diff --git a/src/Backend/Elements/Book.h b/src/Backend/Elements/Book.h
new file mode 100644
index 0000000..e20f2a8
--- /dev/null
+++ b/src/Backend/Elements/Book.h
@@ -0,0 +1,46 @@
+#ifndef BOOK_H
+#define BOOK_H
+
+#include "Media.h"
+#include
+#include "../Enums/Genres.h"
+#include "../Enums/Languages.h"
+
+class Book : public Media {
+ private:
+ std::string publisher;
+ unsigned int pages;
+ std::string isbn;
+ Enums::Language language;
+ Enums::BookGenre genre;
+
+ public:
+ // Constructors
+ Book(std::string title, std::string author, Enums::BookGenre genre, Date releaseDate,
+ unsigned int id, unsigned int kbSize, bool isAvailable, std::string imagePath,
+ std::string publisher, unsigned int pages, std::string isbn, Enums::Language language);
+ Book(const Book& book);
+ Book();
+ virtual ~Book();
+
+ // Virtual method implementations for non-trivial polymorphism
+ virtual bool isValid() const override;
+
+ // Book-specific getters and setters
+ std::string getPublisher() const;
+ Book& setPublisher(const std::string& pub);
+ unsigned int getPages() const;
+ Book& setPages(unsigned int p);
+ std::string getIsbn() const;
+ Book& setIsbn(const std::string& isbn);
+ Enums::Language getLanguage() const;
+ Book& setLanguage(Enums::Language lang);
+ std::string getLanguageString() const;
+
+ // Genre-specific methods
+ Enums::BookGenre getGenre() const;
+ Book& setGenre(Enums::BookGenre genre);
+ std::string getGenreString() const;
+};
+
+#endif // BOOK_H
diff --git a/src/Backend/Elements/Date.cpp b/src/Backend/Elements/Date.cpp
new file mode 100644
index 0000000..ecd9104
--- /dev/null
+++ b/src/Backend/Elements/Date.cpp
@@ -0,0 +1,123 @@
+#include "Date.h"
+#include
+#include
+#include
+
+// Constructors
+Date::Date(int y, int m, int d) : year(y), month(m), day(d) {
+ if (!isValid()) {
+ throw std::invalid_argument("Invalid date");
+ }
+}
+
+Date::Date(const Date& date) : year(date.year), month(date.month), day(date.day) {}
+
+Date::Date() : year(1900), month(1), day(1) {}
+
+// Getters and setters
+int Date::getYear() const {
+ return year;
+}
+
+Date& Date::setYear(int y) {
+ year = y;
+ if (!isValid()) {
+ throw std::invalid_argument("Invalid year");
+ }
+ return *this;
+}
+
+int Date::getMonth() const {
+ return month;
+}
+
+Date& Date::setMonth(int m) {
+ month = m;
+ if (!isValid()) {
+ throw std::invalid_argument("Invalid month");
+ }
+ return *this;
+}
+
+int Date::getDay() const {
+ return day;
+}
+
+Date& Date::setDay(int d) {
+ day = d;
+ if (!isValid()) {
+ throw std::invalid_argument("Invalid day");
+ }
+ return *this;
+}
+
+// Utility methods
+bool Date::isValid() const {
+ if (year < 1900 || year > 2100) return false;
+ if (month < 1 || month > 12) return false;
+
+ int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
+
+ // Leap year check
+ if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) {
+ daysInMonth[1] = 29;
+ }
+
+ return day >= 1 && day <= daysInMonth[month - 1];
+}
+
+std::string Date::toString() const {
+ return toString("YYYY-MM-DD");
+}
+
+std::string Date::toString(const std::string& format) const {
+ std::string result = format;
+
+ // Replace placeholders with actual values
+ std::string yearStr = std::to_string(year);
+ std::string monthStr = std::to_string(month);
+ std::string dayStr = std::to_string(day);
+
+ // Pad with zeros if needed
+ if (monthStr.length() == 1) monthStr = "0" + monthStr;
+ if (dayStr.length() == 1) dayStr = "0" + dayStr;
+
+ // Replace YYYY, MM, DD
+ size_t pos = result.find("YYYY");
+ if (pos != std::string::npos) result.replace(pos, 4, yearStr);
+
+ pos = result.find("MM");
+ if (pos != std::string::npos) result.replace(pos, 2, monthStr);
+
+ pos = result.find("DD");
+ if (pos != std::string::npos) result.replace(pos, 2, dayStr);
+
+ return result;
+}
+
+// Operators
+bool Date::operator==(const Date& other) const {
+ return year == other.year && month == other.month && day == other.day;
+}
+
+bool Date::operator!=(const Date& other) const {
+ return !(*this == other);
+}
+
+bool Date::operator<(const Date& other) const {
+ if (year != other.year) return year < other.year;
+ if (month != other.month) return month < other.month;
+ return day < other.day;
+}
+
+bool Date::operator>(const Date& other) const {
+ return other < *this;
+}
+
+bool Date::operator<=(const Date& other) const {
+ return *this < other || *this == other;
+}
+
+bool Date::operator>=(const Date& other) const {
+ return *this > other || *this == other;
+}
\ No newline at end of file
diff --git a/src/Backend/Elements/Date.h b/src/Backend/Elements/Date.h
new file mode 100644
index 0000000..d860175
--- /dev/null
+++ b/src/Backend/Elements/Date.h
@@ -0,0 +1,40 @@
+#ifndef DATE_H
+#define DATE_H
+
+#include
+
+class Date {
+private:
+ int year;
+ int month;
+ int day;
+
+public:
+ // Constructors
+ Date(int y, int m, int d);
+ Date(const Date& date);
+ Date();
+
+ // Getters and setters
+ int getYear() const;
+ Date& setYear(int y);
+ int getMonth() const;
+ Date& setMonth(int m);
+ int getDay() const;
+ Date& setDay(int d);
+
+ // Utility methods
+ bool isValid() const;
+ std::string toString() const;
+ std::string toString(const std::string& format) const; // format: "YYYY-MM-DD", "DD/MM/YYYY", etc.
+
+ // Operators
+ bool operator==(const Date& other) const;
+ bool operator!=(const Date& other) const;
+ bool operator<(const Date& other) const;
+ bool operator>(const Date& other) const;
+ bool operator<=(const Date& other) const;
+ bool operator>=(const Date& other) const;
+};
+
+#endif // DATE_H
\ No newline at end of file
diff --git a/src/Backend/Elements/Magazine.cpp b/src/Backend/Elements/Magazine.cpp
new file mode 100644
index 0000000..c56d3d4
--- /dev/null
+++ b/src/Backend/Elements/Magazine.cpp
@@ -0,0 +1,94 @@
+#include "Magazine.h"
+#include
+#include "../Enums/Genres.h"
+
+// Constructors
+Magazine::Magazine(std::string title, std::string author, Enums::MagazineGenre genre, Date releaseDate,
+ unsigned int id, unsigned int kbSize, bool isAvailable, std::string imagePath,
+ std::string publisher, unsigned int issueNumber, std::string issn, std::string editor,
+ unsigned int pages, std::string frequency)
+ : Media(title, author, releaseDate, id, kbSize, isAvailable, imagePath),
+ publisher(publisher), issueNumber(issueNumber), issn(issn), editor(editor), pages(pages), frequency(frequency), genre(genre) {}
+
+Magazine::Magazine(const Magazine& magazine)
+ : Media(magazine), publisher(magazine.publisher), issueNumber(magazine.issueNumber), issn(magazine.issn),
+ editor(magazine.editor), pages(magazine.pages), frequency(magazine.frequency), genre(magazine.genre) {}
+
+Magazine::Magazine() : Media(), publisher(""), issueNumber(0), issn(""), editor(""), pages(0), frequency(""), genre(Enums::MagazineGenre::NEWS) {}
+
+Magazine::~Magazine() {}
+
+// Virtual method implementations for non-trivial polymorphism
+bool Magazine::isValid() const {
+ return !getTitle().empty() && !publisher.empty() && issueNumber > 0 &&
+ !issn.empty() && !editor.empty() && pages > 0 && !frequency.empty();
+}
+
+// Magazine-specific getters and setters
+std::string Magazine::getPublisher() const {
+ return publisher;
+}
+
+Magazine& Magazine::setPublisher(const std::string& pub) {
+ publisher = pub;
+ return *this;
+}
+
+unsigned int Magazine::getIssueNumber() const {
+ return issueNumber;
+}
+
+Magazine& Magazine::setIssueNumber(unsigned int issue) {
+ issueNumber = issue;
+ return *this;
+}
+
+std::string Magazine::getIssn() const {
+ return issn;
+}
+
+Magazine& Magazine::setIssn(const std::string& issn) {
+ this->issn = issn;
+ return *this;
+}
+
+std::string Magazine::getEditor() const {
+ return editor;
+}
+
+Magazine& Magazine::setEditor(const std::string& ed) {
+ editor = ed;
+ return *this;
+}
+
+unsigned int Magazine::getPages() const {
+ return pages;
+}
+
+Magazine& Magazine::setPages(unsigned int p) {
+ pages = p;
+ return *this;
+}
+
+std::string Magazine::getFrequency() const {
+ return frequency;
+}
+
+Magazine& Magazine::setFrequency(const std::string& freq) {
+ frequency = freq;
+ return *this;
+}
+
+// Genre-specific methods
+Enums::MagazineGenre Magazine::getGenre() const {
+ return genre;
+}
+
+Magazine& Magazine::setGenre(Enums::MagazineGenre g) {
+ genre = g;
+ return *this;
+}
+
+std::string Magazine::getGenreString() const {
+ return Enums::magazineGenreToString(genre);
+}
diff --git a/src/Backend/Elements/Magazine.h b/src/Backend/Elements/Magazine.h
new file mode 100644
index 0000000..db92de2
--- /dev/null
+++ b/src/Backend/Elements/Magazine.h
@@ -0,0 +1,51 @@
+#ifndef MAGAZINE_H
+#define MAGAZINE_H
+
+#include "Media.h"
+#include
+#include "../Enums/Genres.h"
+
+class Magazine : public Media {
+ private:
+ std::string publisher;
+ unsigned int issueNumber;
+ std::string issn;
+ std::string editor;
+ unsigned int pages;
+ std::string frequency; // Monthly, Weekly, etc.
+ Enums::MagazineGenre genre;
+
+ public:
+ // Constructors
+ Magazine(std::string title, std::string author, Enums::MagazineGenre genre, Date releaseDate,
+ unsigned int id, unsigned int kbSize, bool isAvailable, std::string imagePath,
+ std::string publisher, unsigned int issueNumber, std::string issn, std::string editor,
+ unsigned int pages, std::string frequency);
+ Magazine(const Magazine& magazine);
+ Magazine();
+ virtual ~Magazine();
+
+ // Virtual method implementations for non-trivial polymorphism
+ virtual bool isValid() const override;
+
+ // Magazine-specific getters and setters
+ std::string getPublisher() const;
+ Magazine& setPublisher(const std::string& pub);
+ unsigned int getIssueNumber() const;
+ Magazine& setIssueNumber(unsigned int issue);
+ std::string getIssn() const;
+ Magazine& setIssn(const std::string& issn);
+ std::string getEditor() const;
+ Magazine& setEditor(const std::string& ed);
+ unsigned int getPages() const;
+ Magazine& setPages(unsigned int p);
+ std::string getFrequency() const;
+ Magazine& setFrequency(const std::string& freq);
+
+ // Genre-specific methods
+ Enums::MagazineGenre getGenre() const;
+ Magazine& setGenre(Enums::MagazineGenre genre);
+ std::string getGenreString() const;
+};
+
+#endif // MAGAZINE_H
diff --git a/src/Backend/Elements/Media.cpp b/src/Backend/Elements/Media.cpp
new file mode 100644
index 0000000..e21d56e
--- /dev/null
+++ b/src/Backend/Elements/Media.cpp
@@ -0,0 +1,70 @@
+#include "Media.h"
+
+#include
+#include
+
+Media::Media(std::string t, std::string a, Date rD, unsigned int id, unsigned int kb, bool isAv, std::string im): title(t), author(a), releaseDate(rD), id(id), kbSize(kb), isAvailable(isAv), imagePath(im) {}
+
+Media::Media(const Media& media): title(media.title), id(media.id), author(media.author), releaseDate(media.releaseDate), kbSize(media.kbSize), isAvailable(media.isAvailable), imagePath(media.imagePath) {}
+
+Media::Media() : title(""), id(0), author(""), releaseDate(), kbSize(0), isAvailable(false), imagePath("") {}
+
+
+
+Media& Media::setTitle(const std::string& t) {
+ this->title = t;
+ return *this;
+}
+const std::string& Media::getTitle() const {
+ return title;
+}
+
+Media& Media::setAuthor(const std::string& a) {
+ this->author = a;
+ return *this;
+}
+const std::string& Media::getAuthor() const {
+ return author;
+}
+
+
+
+Media& Media::setReleaseDate(const Date& rD) {
+ this->releaseDate = rD;
+ return *this;
+}
+const Date& Media::getReleaseDate() const {
+ return releaseDate;
+}
+
+Media& Media::setID(unsigned int id) {
+ this->id = id;
+ return *this;
+}
+unsigned int Media::getID() const {
+ return id;
+}
+
+Media& Media::setKbSize(unsigned int kb) {
+ this->kbSize = kb;
+ return *this;
+}
+unsigned int Media::getKbSize() const {
+ return kbSize;
+}
+
+Media& Media::setIsAvailable(bool isAv) {
+ this->isAvailable = isAv;
+ return *this;
+}
+bool Media::getIsAvailable() const {
+ return isAvailable;
+}
+
+Media& Media::setImagePath(const std::string& im) {
+ this->imagePath = im;
+ return *this;
+}
+const std::string& Media::getImagePath() const {
+ return imagePath;
+}
\ No newline at end of file
diff --git a/src/Backend/Elements/Media.h b/src/Backend/Elements/Media.h
new file mode 100644
index 0000000..52e3c9a
--- /dev/null
+++ b/src/Backend/Elements/Media.h
@@ -0,0 +1,44 @@
+#ifndef MEDIA_H
+#define MEDIA_H
+
+#include
+#include "Date.h"
+#include "../Enums/Genres.h"
+#include "../Enums/Languages.h"
+
+class Media{
+ protected:
+ std::string title;
+ std::string author;
+ // Genre will be handled by derived classes with specific enum types
+ Date releaseDate;
+ unsigned int id;
+ unsigned int kbSize;
+ bool isAvailable;
+ std::string imagePath;
+ public:
+ Media(std::string t, std::string a, Date rD, unsigned int id, unsigned int kb, bool isAv, std::string im);
+ Media(const Media& media);
+ Media();
+ virtual ~Media() = default; // Virtual destructor
+
+ // Virtual methods for non-trivial polymorphism
+ virtual bool isValid() const = 0; // Validates media-specific attributes
+
+ Media& setTitle(const std::string& t);
+ const std::string& getTitle() const;
+ Media& setAuthor(const std::string& a);
+ const std::string& getAuthor() const;
+ Media& setReleaseDate(const Date& rD);
+ const Date& getReleaseDate() const;
+ Media& setID(unsigned int id);
+ unsigned int getID() const;
+ Media& setKbSize(unsigned int kb);
+ unsigned int getKbSize() const;
+ Media& setIsAvailable(bool isAv);
+ bool getIsAvailable() const;
+ Media& setImagePath(const std::string& im);
+ const std::string& getImagePath() const;
+};
+
+#endif // MEDIA_H
\ No newline at end of file
diff --git a/src/Backend/Elements/Movie.cpp b/src/Backend/Elements/Movie.cpp
new file mode 100644
index 0000000..07489e9
--- /dev/null
+++ b/src/Backend/Elements/Movie.cpp
@@ -0,0 +1,99 @@
+#include "Movie.h"
+#include
+#include "../Enums/Genres.h"
+#include "../Enums/Languages.h"
+
+// Constructors
+Movie::Movie(std::string title, std::string author, Enums::MovieGenre genre, Date releaseDate,
+ unsigned int id, unsigned int kbSize, bool isAvailable, std::string imagePath,
+ std::string director, unsigned int duration, std::string studio, std::string rating,
+ Enums::Language language, std::string country)
+ : Media(title, author, releaseDate, id, kbSize, isAvailable, imagePath),
+ director(director), duration(duration), studio(studio), rating(rating), language(language), country(country), genre(genre) {}
+
+Movie::Movie(const Movie& movie)
+ : Media(movie), director(movie.director), duration(movie.duration), studio(movie.studio),
+ rating(movie.rating), language(movie.language), country(movie.country), genre(movie.genre) {}
+
+Movie::Movie() : Media(), director(""), duration(0), studio(""), rating(""), language(Enums::Language::ENGLISH), country(""), genre(Enums::MovieGenre::DRAMA) {}
+
+Movie::~Movie() {}
+
+// Virtual method implementations for non-trivial polymorphism
+bool Movie::isValid() const {
+ return !getTitle().empty() && !director.empty() && !studio.empty() &&
+ duration > 0 && !rating.empty() && !country.empty();
+}
+
+// Movie-specific getters and setters
+std::string Movie::getDirector() const {
+ return director;
+}
+
+Movie& Movie::setDirector(const std::string& dir) {
+ director = dir;
+ return *this;
+}
+
+unsigned int Movie::getDuration() const {
+ return duration;
+}
+
+Movie& Movie::setDuration(unsigned int dur) {
+ duration = dur;
+ return *this;
+}
+
+std::string Movie::getStudio() const {
+ return studio;
+}
+
+Movie& Movie::setStudio(const std::string& stu) {
+ studio = stu;
+ return *this;
+}
+
+std::string Movie::getRating() const {
+ return rating;
+}
+
+Movie& Movie::setRating(const std::string& rat) {
+ rating = rat;
+ return *this;
+}
+
+Enums::Language Movie::getLanguage() const {
+ return language;
+}
+
+Movie& Movie::setLanguage(Enums::Language lang) {
+ language = lang;
+ return *this;
+}
+
+std::string Movie::getLanguageString() const {
+ return Enums::languageToString(language);
+}
+
+std::string Movie::getCountry() const {
+ return country;
+}
+
+Movie& Movie::setCountry(const std::string& cou) {
+ country = cou;
+ return *this;
+}
+
+// Genre-specific methods
+Enums::MovieGenre Movie::getGenre() const {
+ return genre;
+}
+
+Movie& Movie::setGenre(Enums::MovieGenre g) {
+ genre = g;
+ return *this;
+}
+
+std::string Movie::getGenreString() const {
+ return Enums::movieGenreToString(genre);
+}
diff --git a/src/Backend/Elements/Movie.h b/src/Backend/Elements/Movie.h
new file mode 100644
index 0000000..8664696
--- /dev/null
+++ b/src/Backend/Elements/Movie.h
@@ -0,0 +1,53 @@
+#ifndef MOVIE_H
+#define MOVIE_H
+
+#include "Media.h"
+#include
+#include "../Enums/Genres.h"
+#include "../Enums/Languages.h"
+
+class Movie : public Media {
+ private:
+ std::string director;
+ unsigned int duration; // in minutes
+ std::string studio;
+ std::string rating; // PG, PG-13, R, etc.
+ Enums::Language language;
+ std::string country;
+ Enums::MovieGenre genre;
+
+ public:
+ // Constructors
+ Movie(std::string title, std::string author, Enums::MovieGenre genre, Date releaseDate,
+ unsigned int id, unsigned int kbSize, bool isAvailable, std::string imagePath,
+ std::string director, unsigned int duration, std::string studio, std::string rating,
+ Enums::Language language, std::string country);
+ Movie(const Movie& movie);
+ Movie();
+ virtual ~Movie();
+
+ // Virtual method implementations for non-trivial polymorphism
+ virtual bool isValid() const override;
+
+ // Movie-specific getters and setters
+ std::string getDirector() const;
+ Movie& setDirector(const std::string& dir);
+ unsigned int getDuration() const;
+ Movie& setDuration(unsigned int dur);
+ std::string getStudio() const;
+ Movie& setStudio(const std::string& stu);
+ std::string getRating() const;
+ Movie& setRating(const std::string& rat);
+ Enums::Language getLanguage() const;
+ Movie& setLanguage(Enums::Language lang);
+ std::string getLanguageString() const;
+ std::string getCountry() const;
+ Movie& setCountry(const std::string& cou);
+
+ // Genre-specific methods
+ Enums::MovieGenre getGenre() const;
+ Movie& setGenre(Enums::MovieGenre genre);
+ std::string getGenreString() const;
+};
+
+#endif // MOVIE_H
diff --git a/src/Backend/Elements/Podcast.cpp b/src/Backend/Elements/Podcast.cpp
new file mode 100644
index 0000000..604eee2
--- /dev/null
+++ b/src/Backend/Elements/Podcast.cpp
@@ -0,0 +1,95 @@
+#include "Podcast.h"
+#include
+#include "../Enums/Genres.h"
+
+// Constructors
+Podcast::Podcast(std::string title, std::string author, Enums::PodcastGenre genre, Date releaseDate,
+ unsigned int id, unsigned int kbSize, bool isAvailable, std::string imagePath,
+ std::string host, unsigned int episodeNumber, std::string platform, unsigned int duration,
+ std::string series, std::string description)
+ : Media(title, author, releaseDate, id, kbSize, isAvailable, imagePath),
+ host(host), episodeNumber(episodeNumber), platform(platform), duration(duration),
+ series(series), description(description), genre(genre) {}
+
+Podcast::Podcast(const Podcast& podcast)
+ : Media(podcast), host(podcast.host), episodeNumber(podcast.episodeNumber), platform(podcast.platform),
+ duration(podcast.duration), series(podcast.series), description(podcast.description), genre(podcast.genre) {}
+
+Podcast::Podcast() : Media(), host(""), episodeNumber(0), platform(""), duration(0), series(""), description(""), genre(Enums::PodcastGenre::EDUCATION) {}
+
+Podcast::~Podcast() {}
+
+// Virtual method implementations for non-trivial polymorphism
+bool Podcast::isValid() const {
+ return !getTitle().empty() && !host.empty() && episodeNumber > 0 &&
+ !platform.empty() && duration > 0 && !series.empty() && !description.empty();
+}
+
+// Podcast-specific getters and setters
+std::string Podcast::getHost() const {
+ return host;
+}
+
+Podcast& Podcast::setHost(const std::string& h) {
+ host = h;
+ return *this;
+}
+
+unsigned int Podcast::getEpisodeNumber() const {
+ return episodeNumber;
+}
+
+Podcast& Podcast::setEpisodeNumber(unsigned int ep) {
+ episodeNumber = ep;
+ return *this;
+}
+
+std::string Podcast::getPlatform() const {
+ return platform;
+}
+
+Podcast& Podcast::setPlatform(const std::string& plat) {
+ platform = plat;
+ return *this;
+}
+
+unsigned int Podcast::getDuration() const {
+ return duration;
+}
+
+Podcast& Podcast::setDuration(unsigned int dur) {
+ duration = dur;
+ return *this;
+}
+
+std::string Podcast::getSeries() const {
+ return series;
+}
+
+Podcast& Podcast::setSeries(const std::string& ser) {
+ series = ser;
+ return *this;
+}
+
+std::string Podcast::getDescription() const {
+ return description;
+}
+
+Podcast& Podcast::setDescription(const std::string& desc) {
+ description = desc;
+ return *this;
+}
+
+// Genre-specific methods
+Enums::PodcastGenre Podcast::getGenre() const {
+ return genre;
+}
+
+Podcast& Podcast::setGenre(Enums::PodcastGenre g) {
+ genre = g;
+ return *this;
+}
+
+std::string Podcast::getGenreString() const {
+ return Enums::podcastGenreToString(genre);
+}
diff --git a/src/Backend/Elements/Podcast.h b/src/Backend/Elements/Podcast.h
new file mode 100644
index 0000000..e0f6d96
--- /dev/null
+++ b/src/Backend/Elements/Podcast.h
@@ -0,0 +1,51 @@
+#ifndef PODCAST_H
+#define PODCAST_H
+
+#include "Media.h"
+#include
+#include "../Enums/Genres.h"
+
+class Podcast : public Media {
+ private:
+ std::string host;
+ unsigned int episodeNumber;
+ std::string platform; // Spotify, Apple Podcasts, etc.
+ unsigned int duration; // in minutes
+ std::string series;
+ std::string description;
+ Enums::PodcastGenre genre;
+
+ public:
+ // Constructors
+ Podcast(std::string title, std::string author, Enums::PodcastGenre genre, Date releaseDate,
+ unsigned int id, unsigned int kbSize, bool isAvailable, std::string imagePath,
+ std::string host, unsigned int episodeNumber, std::string platform, unsigned int duration,
+ std::string series, std::string description);
+ Podcast(const Podcast& podcast);
+ Podcast();
+ virtual ~Podcast();
+
+ // Virtual method implementations for non-trivial polymorphism
+ virtual bool isValid() const override;
+
+ // Podcast-specific getters and setters
+ std::string getHost() const;
+ Podcast& setHost(const std::string& h);
+ unsigned int getEpisodeNumber() const;
+ Podcast& setEpisodeNumber(unsigned int ep);
+ std::string getPlatform() const;
+ Podcast& setPlatform(const std::string& plat);
+ unsigned int getDuration() const;
+ Podcast& setDuration(unsigned int dur);
+ std::string getSeries() const;
+ Podcast& setSeries(const std::string& ser);
+ std::string getDescription() const;
+ Podcast& setDescription(const std::string& desc);
+
+ // Genre-specific methods
+ Enums::PodcastGenre getGenre() const;
+ Podcast& setGenre(Enums::PodcastGenre genre);
+ std::string getGenreString() const;
+};
+
+#endif // PODCAST_H
diff --git a/src/Backend/Elements/Song.cpp b/src/Backend/Elements/Song.cpp
new file mode 100644
index 0000000..796c4e9
--- /dev/null
+++ b/src/Backend/Elements/Song.cpp
@@ -0,0 +1,94 @@
+#include "Song.h"
+#include
+#include "../Enums/Genres.h"
+
+// Constructors
+Song::Song(std::string title, std::string author, Enums::MusicGenre genre, Date releaseDate,
+ unsigned int id, unsigned int kbSize, bool isAvailable, std::string imagePath,
+ std::string artist, std::string album, unsigned int duration, std::string format,
+ std::string label, unsigned int trackNumber)
+ : Media(title, author, releaseDate, id, kbSize, isAvailable, imagePath),
+ artist(artist), album(album), duration(duration), format(format), label(label), trackNumber(trackNumber), genre(genre) {}
+
+Song::Song(const Song& song)
+ : Media(song), artist(song.artist), album(song.album), duration(song.duration),
+ format(song.format), label(song.label), trackNumber(song.trackNumber), genre(song.genre) {}
+
+Song::Song() : Media(), artist(""), album(""), duration(0), format(""), label(""), trackNumber(0), genre(Enums::MusicGenre::POP) {}
+
+Song::~Song() {}
+
+// Virtual method implementations for non-trivial polymorphism
+bool Song::isValid() const {
+ return !getTitle().empty() && !artist.empty() && !album.empty() &&
+ duration > 0 && !format.empty() && !label.empty() && trackNumber > 0;
+}
+
+// Song-specific getters and setters
+std::string Song::getArtist() const {
+ return artist;
+}
+
+Song& Song::setArtist(const std::string& art) {
+ artist = art;
+ return *this;
+}
+
+std::string Song::getAlbum() const {
+ return album;
+}
+
+Song& Song::setAlbum(const std::string& alb) {
+ album = alb;
+ return *this;
+}
+
+unsigned int Song::getDuration() const {
+ return duration;
+}
+
+Song& Song::setDuration(unsigned int dur) {
+ duration = dur;
+ return *this;
+}
+
+std::string Song::getFormat() const {
+ return format;
+}
+
+Song& Song::setFormat(const std::string& fmt) {
+ format = fmt;
+ return *this;
+}
+
+std::string Song::getLabel() const {
+ return label;
+}
+
+Song& Song::setLabel(const std::string& lab) {
+ label = lab;
+ return *this;
+}
+
+unsigned int Song::getTrackNumber() const {
+ return trackNumber;
+}
+
+Song& Song::setTrackNumber(unsigned int track) {
+ trackNumber = track;
+ return *this;
+}
+
+// Genre-specific methods
+Enums::MusicGenre Song::getGenre() const {
+ return genre;
+}
+
+Song& Song::setGenre(Enums::MusicGenre g) {
+ genre = g;
+ return *this;
+}
+
+std::string Song::getGenreString() const {
+ return Enums::musicGenreToString(genre);
+}
diff --git a/src/Backend/Elements/Song.h b/src/Backend/Elements/Song.h
new file mode 100644
index 0000000..c620674
--- /dev/null
+++ b/src/Backend/Elements/Song.h
@@ -0,0 +1,51 @@
+#ifndef SONG_H
+#define SONG_H
+
+#include "Media.h"
+#include
+#include "../Enums/Genres.h"
+
+class Song : public Media {
+ private:
+ std::string artist;
+ std::string album;
+ unsigned int duration; // in seconds
+ std::string format; // MP3, FLAC, WAV, etc.
+ std::string label;
+ unsigned int trackNumber;
+ Enums::MusicGenre genre;
+
+ public:
+ // Constructors
+ Song(std::string title, std::string author, Enums::MusicGenre genre, Date releaseDate,
+ unsigned int id, unsigned int kbSize, bool isAvailable, std::string imagePath,
+ std::string artist, std::string album, unsigned int duration, std::string format,
+ std::string label, unsigned int trackNumber);
+ Song(const Song& song);
+ Song();
+ virtual ~Song();
+
+ // Virtual method implementations for non-trivial polymorphism
+ virtual bool isValid() const override;
+
+ // Song-specific getters and setters
+ std::string getArtist() const;
+ Song& setArtist(const std::string& art);
+ std::string getAlbum() const;
+ Song& setAlbum(const std::string& alb);
+ unsigned int getDuration() const;
+ Song& setDuration(unsigned int dur);
+ std::string getFormat() const;
+ Song& setFormat(const std::string& fmt);
+ std::string getLabel() const;
+ Song& setLabel(const std::string& lab);
+ unsigned int getTrackNumber() const;
+ Song& setTrackNumber(unsigned int track);
+
+ // Genre-specific methods
+ Enums::MusicGenre getGenre() const;
+ Song& setGenre(Enums::MusicGenre genre);
+ std::string getGenreString() const;
+};
+
+#endif // SONG_H
diff --git a/src/Backend/Enums/Genres.cpp b/src/Backend/Enums/Genres.cpp
new file mode 100644
index 0000000..90ae8e3
--- /dev/null
+++ b/src/Backend/Enums/Genres.cpp
@@ -0,0 +1,310 @@
+#include "Genres.h"
+#include