From 844a4ab676d3c356bae215edb50a71fcadd1a343 Mon Sep 17 00:00:00 2001 From: Elias Steurer Date: Sat, 30 Apr 2022 13:22:17 +0200 Subject: [PATCH] Remove all .qrc files . We now use qt_add_qml_module Copy fonts manually now Fix paths --- CMakeLists.txt | 15 +- ScreenPlay/CMakeLists.txt | 150 +++++++++++++++++- ScreenPlay/Resources.qrc | 135 ---------------- ScreenPlay/fonts.qrc | 15 -- ScreenPlay/main.cpp | 1 - ScreenPlay/main.qml | 2 +- ScreenPlay/qml/Community/Community.qml | 14 +- ScreenPlay/qml/Community/CommunityNavItem.qml | 2 +- ScreenPlay/qml/Create/StartInfo.qml | 38 ++--- .../qml/Create/Wizards/GifWallpaper.qml | 2 +- ScreenPlay/qml/Create/Wizards/HTMLWidget.qml | 2 +- .../CreateWallpaperInit.qml | 4 +- .../Wizards/ImportWebm/ImportWebmInit.qml | 6 +- .../Wizards/Importh264/Importh264Init.qml | 4 +- ScreenPlay/qml/Create/Wizards/QMLWidget.qml | 2 +- ScreenPlay/qml/Installed/Installed.qml | 6 +- .../qml/Installed/InstalledNavigation.qml | 10 +- .../qml/Installed/InstalledWelcomeScreen.qml | 10 +- ScreenPlay/qml/Installed/ScreenPlayItem.qml | 10 +- .../qml/Installed/ScreenPlayItemImage.qml | 8 +- ScreenPlay/qml/Installed/Sidebar.qml | 12 +- ScreenPlay/qml/Monitors/Monitors.qml | 2 +- ScreenPlay/qml/Navigation/Navigation.qml | 28 ++-- .../qml/Navigation/WindowNavigation.qml | 6 +- ScreenPlay/qml/Settings/Settings.qml | 18 +-- ScreenPlay/qml/Settings/SettingsHeader.qml | 2 +- ScreenPlay/qml/Workshop/Workshop.qml | 4 +- ScreenPlay/src/app.cpp | 28 ++-- ScreenPlay/src/settings.cpp | 2 +- ScreenPlay/src/util.cpp | 16 +- ScreenPlay/src/wizards.cpp | 10 +- ScreenPlay/tests/tst_main.cpp | 9 +- ScreenPlayShader.zip | Bin 0 -> 38397 bytes ScreenPlayShader/CMakeLists.txt | 1 + ScreenPlayShader/Resources.qrc | 9 -- ScreenPlayShader/src/TestMain.cpp | 4 +- ScreenPlayShader/src/TestMain.qml | 3 +- ScreenPlaySysInfo/CMakeLists.txt | 5 +- ScreenPlaySysInfo/{src => qml}/TestMain.qml | 0 ScreenPlaySysInfo/src/TestMain.cpp | 4 +- ScreenPlayUtil/CMakeLists.txt | 1 + ScreenPlayUtil/qml/Dialogs/CriticalError.qml | 2 +- .../qml/Dialogs/MonitorConfiguration.qml | 2 +- ScreenPlayUtil/qml/GrowIconLink.qml | 2 +- ScreenPlayUtil/qml/LicenseSelector.qml | 4 +- ScreenPlayUtil/qml/ModalBackgroundBlur.qml | 2 +- ScreenPlayUtil/qml/Search.qml | 2 +- ScreenPlayUtil/qml/Slider.qml | 2 +- ScreenPlayUtil/qml/Tag.qml | 2 +- ScreenPlayUtil/qml/TrayIcon.qml | 2 +- ScreenPlayWallpaper/CMakeLists.txt | 15 +- ScreenPlayWallpaper/Resources.qrc | 7 - ScreenPlayWallpaper/qml/Wallpaper.qml | 14 +- ScreenPlayWallpaper/src/winwindow.cpp | 2 +- ScreenPlayWeather/CMakeLists.txt | 3 +- ScreenPlayWeather/{src => qml}/TestMain.qml | 11 +- ScreenPlayWeather/src/TestMain.cpp | 4 +- ScreenPlayWidget/CMakeLists.txt | 1 + ScreenPlayWidget/src/widgetwindow.cpp | 4 +- ScreenPlayWorkshop/CMakeLists.txt | 3 +- ScreenPlayWorkshop/qml/SteamWorkshop.qml | 2 +- .../qml/SteamWorkshopStartPage.qml | 4 +- ScreenPlayWorkshop/{src => qml}/TestMain.qml | 2 +- ScreenPlayWorkshop/src/TestMain.cpp | 3 +- ScreenPlayWorkshop/src/steamworkshop.cpp | 22 ++- ScreenPlayWorkshop/src/steamworkshop.h | 2 + 66 files changed, 359 insertions(+), 360 deletions(-) delete mode 100644 ScreenPlay/Resources.qrc delete mode 100644 ScreenPlay/fonts.qrc create mode 100644 ScreenPlayShader.zip delete mode 100644 ScreenPlayShader/Resources.qrc rename ScreenPlaySysInfo/{src => qml}/TestMain.qml (100%) delete mode 100644 ScreenPlayWallpaper/Resources.qrc rename ScreenPlayWeather/{src => qml}/TestMain.qml (92%) rename ScreenPlayWorkshop/{src => qml}/TestMain.qml (81%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 683e13c7..2c39b46c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,14 @@ project( HOMEPAGE_URL "https://screen-play.app/" LANGUAGES CXX) +if(WIN32) + set(VCPKG_ARCH "x64-windows") +elseif(UNIX AND NOT APPLE) + set(VCPKG_ARCH "x64-linux") +elseif(APPLE) + set(VCPKG_ARCH "x64-osx") +endif() + # This sets cmake to compile all dlls into the main directory set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) @@ -35,13 +43,6 @@ endif() file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) -if(WIN32) - set(VCPKG_ARCH "x64-windows") -elseif(UNIX AND NOT APPLE) - set(VCPKG_ARCH "x64-linux") -elseif(APPLE) - set(VCPKG_ARCH "x64-osx") -endif() add_compile_definitions(COMPILE_INFO="Build Date: ${BUILD_DATE}. Git Hash: ${GIT_COMMIT_HASH}. ") add_compile_definitions(SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}") diff --git a/ScreenPlay/CMakeLists.txt b/ScreenPlay/CMakeLists.txt index 6326be20..43940426 100644 --- a/ScreenPlay/CMakeLists.txt +++ b/ScreenPlay/CMakeLists.txt @@ -111,6 +111,140 @@ set(TS_FILES translations/ScreenPlay_vi_VN.ts translations/ScreenPlay_zh_CN.ts) +set(RESOURCES + assets/WorkshopPreview.html + assets/icons/app.ico + assets/icons/brand_github.svg + assets/icons/brand_gitlab.svg + assets/icons/brand_twitch.svg + assets/icons/brand_twitter.svg + assets/icons/exclamation-triangle-solid.svg + assets/icons/font-awsome/close.svg + assets/icons/font-awsome/frown-o.svg + assets/icons/icon_arrow_left.svg + assets/icons/icon_arrow_right.svg + assets/icons/icon_build.svg + assets/icons/icon_cake.afdesign + assets/icons/icon_cake.svg + assets/icons/icon_close.svg + assets/icons/icon_code.svg + assets/icons/icon_community.svg + assets/icons/icon_delete.svg + assets/icons/icon_document.svg + assets/icons/icon_done.svg + assets/icons/icon_download.svg + assets/icons/icon_emptyWidget.svg + assets/icons/icon_folder_open.svg + assets/icons/icon_forum.svg + assets/icons/icon_hand_left.svg + assets/icons/icon_hand_right.svg + assets/icons/icon_heavy_metal.svg + assets/icons/icon_help_center.svg + assets/icons/icon_indicator_down.svg + assets/icons/icon_info.svg + assets/icons/icon_installed.svg + assets/icons/icon_launch.svg + assets/icons/icon_library_music.svg + assets/icons/icon_local_movies.svg + assets/icons/icon_logo_head.svg + assets/icons/icon_monitor.svg + assets/icons/icon_movie.svg + assets/icons/icon_multiple_images.svg + assets/icons/icon_new_releases.svg + assets/icons/icon_open_in_new.svg + assets/icons/icon_pause.svg + assets/icons/icon_people.svg + assets/icons/icon_play.svg + assets/icons/icon_plus.svg + assets/icons/icon_report_problem.svg + assets/icons/icon_scene.svg + assets/icons/icon_screen.svg + assets/icons/icon_search.svg + assets/icons/icon_settings.svg + assets/icons/icon_share.svg + assets/icons/icon_single_image.svg + assets/icons/icon_steam.svg + assets/icons/icon_supervisor_account.svg + assets/icons/icon_thumb_down.svg + assets/icons/icon_thumb_up.svg + assets/icons/icon_time.svg + assets/icons/icon_tv.svg + assets/icons/icon_upload.svg + assets/icons/icon_volume.svg + assets/icons/icon_volume_mute.svg + assets/icons/icon_volume_up.svg + assets/icons/icon_widgets.svg + assets/icons/icon_window.svg + assets/icons/monitor_setup.svg + assets/images/Intro.png + assets/images/Intro_PC.png + assets/images/Intro_shine.png + assets/images/Window.svg + assets/images/mask_round.svg + assets/images/mask_workshop.png + assets/images/missingPreview.png + assets/images/noisy-texture-3.png + assets/images/noisy-texture.png + assets/licenses/Apache2.txt + assets/licenses/OFL.txt + assets/particle/backgroundGlow.png + assets/particle/dot.png + assets/shader/movingcolorramp.fsh + assets/startinfo/blender.png + assets/startinfo/flaticon.png + assets/startinfo/forums.png + assets/startinfo/freesound.png + assets/startinfo/gimp.png + assets/startinfo/git_extentions.png + assets/startinfo/gitlab.png + assets/startinfo/godot.png + assets/startinfo/handbreak.png + assets/startinfo/inkscape.png + assets/startinfo/kdeenlive.png + assets/startinfo/krita.png + assets/startinfo/obs.png + assets/startinfo/qml_online.png + assets/startinfo/reddit.png + assets/startinfo/shadertoy.png + assets/startinfo/sharex.png + assets/startinfo/unsplash.png + assets/startinfo/vscode.png + assets/wizards/License_All_Rights_Reserved_1.0.txt + assets/wizards/License_Apache_2.0.txt + assets/wizards/License_CC0_1.0.txt + assets/wizards/License_CC_Attribution-NonCommercial-ShareAlike_4.0.txt + assets/wizards/License_CC_Attribution-ShareAlike_4.0.txt + assets/wizards/License_CC_Attribution_4.0.txt + assets/wizards/License_GPL_3.0.txt + assets/wizards/example_html.png + assets/wizards/example_qml.png + legal/DataProtection.txt + "legal/Font Awesome Free License.txt" + legal/OFL.txt + legal/OpenSSL.txt + "legal/Qt LGPLv3.txt" + legal/gpl-3.0.txt + legal/lgpl-2.1.txt + profiles.json + qtquickcontrols2.conf + assets/images/Early_Access.png + assets/icons/icon_sort-up-solid.svg + assets/icons/icon_sort-down-solid.svg + assets/icons/brand_reddit.svg + assets/icons/steam_default_avatar.png + assets/macos/app.screenplay.plist + assets/icons/item_banner_new.svg + qml/Create/WizardsFiles/HTMLWallpaperMain.html + qml/Create/WizardsFiles/HTMLWidgetMain.html + assets/icons/icon_minimize.svg + assets/icons/icon_video_settings_black_24dp.svg + qml/Create/WizardsFiles/QMLWallpaperMain.qml + qml/Create/WizardsFiles/QMLWidgetMain.qml + assets/icons/font-awsome/patreon-brands.svg + assets/images/steam_offline.png + assets/images/scale_window_indicator.png +) + # Needed on macos find_package(Threads REQUIRED) find_package(OpenSSL REQUIRED) @@ -133,9 +267,6 @@ find_package( LinguistTools Test) -qt_add_resources(RESOURCES Resources.qrc) -qt_add_big_resources(FONTS fonts.qrc) - add_library(ScreenPlayApp STATIC) target_include_directories(ScreenPlayApp PUBLIC src/ inc/public/ScreenPlay) @@ -153,6 +284,8 @@ qt_add_qml_module( SOURCES ${SOURCES} ${HEADER} + RESOURCES + ${RESOURCES} ) target_link_libraries( ScreenPlayApp @@ -166,9 +299,7 @@ target_link_libraries( Qt6::Svg ScreenPlayUtil ScreenPlayUtilplugin - SteamSDKQtEnums - ${RESOURCES} - ${FONTS}) + SteamSDKQtEnums) if(${SCREENPLAY_STEAM}) target_compile_definitions(ScreenPlayApp PRIVATE SCREENPLAY_STEAM=1) @@ -207,6 +338,13 @@ target_include_directories( PUBLIC inc/public/ PRIVATE src/) +if(WIN32 OR UNIX AND NOT APPLE) + include(CopyRecursive) + set(FONTS_OUT_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/assets/fonts) + file(MAKE_DIRECTORY ${FONTS_OUT_DIR}) + copy_recursive(${CMAKE_CURRENT_SOURCE_DIR}/assets/fonts ${FONTS_OUT_DIR} "*.ttf") + copy_recursive(${CMAKE_CURRENT_SOURCE_DIR}/assets/fonts ${FONTS_OUT_DIR} "*.otf") +endif() if(WIN32) target_link_libraries(ScreenPlayApp PUBLIC sentry::sentry) diff --git a/ScreenPlay/Resources.qrc b/ScreenPlay/Resources.qrc deleted file mode 100644 index 18c4ad32..00000000 --- a/ScreenPlay/Resources.qrc +++ /dev/null @@ -1,135 +0,0 @@ - - - assets/WorkshopPreview.html - assets/icons/app.ico - assets/icons/brand_github.svg - assets/icons/brand_gitlab.svg - assets/icons/brand_twitch.svg - assets/icons/brand_twitter.svg - assets/icons/exclamation-triangle-solid.svg - assets/icons/font-awsome/close.svg - assets/icons/font-awsome/frown-o.svg - assets/icons/icon_arrow_left.svg - assets/icons/icon_arrow_right.svg - assets/icons/icon_build.svg - assets/icons/icon_cake.afdesign - assets/icons/icon_cake.svg - assets/icons/icon_close.svg - assets/icons/icon_code.svg - assets/icons/icon_community.svg - assets/icons/icon_delete.svg - assets/icons/icon_document.svg - assets/icons/icon_done.svg - assets/icons/icon_download.svg - assets/icons/icon_emptyWidget.svg - assets/icons/icon_folder_open.svg - assets/icons/icon_forum.svg - assets/icons/icon_hand_left.svg - assets/icons/icon_hand_right.svg - assets/icons/icon_heavy_metal.svg - assets/icons/icon_help_center.svg - assets/icons/icon_indicator_down.svg - assets/icons/icon_info.svg - assets/icons/icon_installed.svg - assets/icons/icon_launch.svg - assets/icons/icon_library_music.svg - assets/icons/icon_local_movies.svg - assets/icons/icon_logo_head.svg - assets/icons/icon_monitor.svg - assets/icons/icon_movie.svg - assets/icons/icon_multiple_images.svg - assets/icons/icon_new_releases.svg - assets/icons/icon_open_in_new.svg - assets/icons/icon_pause.svg - assets/icons/icon_people.svg - assets/icons/icon_play.svg - assets/icons/icon_plus.svg - assets/icons/icon_report_problem.svg - assets/icons/icon_scene.svg - assets/icons/icon_screen.svg - assets/icons/icon_search.svg - assets/icons/icon_settings.svg - assets/icons/icon_share.svg - assets/icons/icon_single_image.svg - assets/icons/icon_steam.svg - assets/icons/icon_supervisor_account.svg - assets/icons/icon_thumb_down.svg - assets/icons/icon_thumb_up.svg - assets/icons/icon_time.svg - assets/icons/icon_tv.svg - assets/icons/icon_upload.svg - assets/icons/icon_volume.svg - assets/icons/icon_volume_mute.svg - assets/icons/icon_volume_up.svg - assets/icons/icon_widgets.svg - assets/icons/icon_window.svg - assets/icons/monitor_setup.svg - assets/images/Intro.png - assets/images/Intro_PC.png - assets/images/Intro_shine.png - assets/images/Window.svg - assets/images/mask_round.svg - assets/images/mask_workshop.png - assets/images/missingPreview.png - assets/images/noisy-texture-3.png - assets/images/noisy-texture.png - assets/licenses/Apache2.txt - assets/licenses/OFL.txt - assets/particle/backgroundGlow.png - assets/particle/dot.png - assets/shader/movingcolorramp.fsh - assets/startinfo/blender.png - assets/startinfo/flaticon.png - assets/startinfo/forums.png - assets/startinfo/freesound.png - assets/startinfo/gimp.png - assets/startinfo/git_extentions.png - assets/startinfo/gitlab.png - assets/startinfo/godot.png - assets/startinfo/handbreak.png - assets/startinfo/inkscape.png - assets/startinfo/kdeenlive.png - assets/startinfo/krita.png - assets/startinfo/obs.png - assets/startinfo/qml_online.png - assets/startinfo/reddit.png - assets/startinfo/shadertoy.png - assets/startinfo/sharex.png - assets/startinfo/unsplash.png - assets/startinfo/vscode.png - assets/wizards/License_All_Rights_Reserved_1.0.txt - assets/wizards/License_Apache_2.0.txt - assets/wizards/License_CC0_1.0.txt - assets/wizards/License_CC_Attribution-NonCommercial-ShareAlike_4.0.txt - assets/wizards/License_CC_Attribution-ShareAlike_4.0.txt - assets/wizards/License_CC_Attribution_4.0.txt - assets/wizards/License_GPL_3.0.txt - assets/wizards/example_html.png - assets/wizards/example_qml.png - legal/DataProtection.txt - legal/Font Awesome Free License.txt - legal/OFL.txt - legal/OpenSSL.txt - legal/Qt LGPLv3.txt - legal/gpl-3.0.txt - legal/lgpl-2.1.txt - profiles.json - qtquickcontrols2.conf - assets/images/Early_Access.png - assets/icons/icon_sort-up-solid.svg - assets/icons/icon_sort-down-solid.svg - assets/icons/brand_reddit.svg - assets/icons/steam_default_avatar.png - assets/macos/app.screenplay.plist - assets/icons/item_banner_new.svg - qml/Create/WizardsFiles/HTMLWallpaperMain.html - qml/Create/WizardsFiles/HTMLWidgetMain.html - assets/icons/icon_minimize.svg - assets/icons/icon_video_settings_black_24dp.svg - qml/Create/WizardsFiles/QMLWallpaperMain.qml - qml/Create/WizardsFiles/QMLWidgetMain.qml - assets/icons/font-awsome/patreon-brands.svg - assets/images/steam_offline.png - assets/images/scale_window_indicator.png - - diff --git a/ScreenPlay/fonts.qrc b/ScreenPlay/fonts.qrc deleted file mode 100644 index 76558247..00000000 --- a/ScreenPlay/fonts.qrc +++ /dev/null @@ -1,15 +0,0 @@ - - - assets/fonts/LibreBaskerville-Italic.ttf - assets/fonts/NotoSans-Light.ttf - assets/fonts/NotoSans-Medium.ttf - assets/fonts/NotoSans-Regular.ttf - assets/fonts/NotoSans-Thin.ttf - assets/fonts/NotoSansCJKkr-Regular.otf - assets/fonts/Roboto-Light.ttf - assets/fonts/Roboto-Regular.ttf - assets/fonts/Roboto-Thin.ttf - assets/fonts/RobotoMono-Light.ttf - assets/fonts/RobotoMono-Thin.ttf - - diff --git a/ScreenPlay/main.cpp b/ScreenPlay/main.cpp index 2a25c9ad..e9724644 100644 --- a/ScreenPlay/main.cpp +++ b/ScreenPlay/main.cpp @@ -49,7 +49,6 @@ Q_IMPORT_QML_PLUGIN(ScreenPlayWorkshopPlugin) int main(int argc, char* argv[]) { - Q_INIT_RESOURCE(Resources); QApplication qtGuiApp(argc, argv); diff --git a/ScreenPlay/main.qml b/ScreenPlay/main.qml index 2ce0f9cb..c5333817 100644 --- a/ScreenPlay/main.qml +++ b/ScreenPlay/main.qml @@ -297,7 +297,7 @@ ApplicationWindow { margins: 1 } Image { - source: "qrc:/assets/images/scale_window_indicator.png" + source: "qrc:/qml/ScreenPlayApp/assets/images/scale_window_indicator.png" } MouseArea { id: maResize diff --git a/ScreenPlay/qml/Community/Community.qml b/ScreenPlay/qml/Community/Community.qml index c8aae13a..cf0d7795 100644 --- a/ScreenPlay/qml/Community/Community.qml +++ b/ScreenPlay/qml/Community/Community.qml @@ -46,7 +46,7 @@ Item { Button { text: qsTr("News") onClicked: Qt.openUrlExternally("https://screen-play.app/blog/") - icon.source: "qrc:/assets/icons/icon_document.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_document.svg" icon.width: 14 icon.height: 14 Layout.alignment: Qt.AlignVCenter @@ -56,7 +56,7 @@ Item { text: qsTr("Wiki") onClicked: Qt.openUrlExternally( "https://kelteseth.gitlab.io/ScreenPlayDocs/") - icon.source: "qrc:/assets/icons/icon_help_center.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_help_center.svg" icon.width: 14 icon.height: 14 Layout.alignment: Qt.AlignVCenter @@ -66,7 +66,7 @@ Item { text: qsTr("Forum") onClicked: Qt.openUrlExternally( "https://forum.screen-play.app/") - icon.source: "qrc:/assets/icons/icon_forum.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_forum.svg" icon.width: 14 icon.height: 14 Layout.alignment: Qt.AlignVCenter @@ -76,7 +76,7 @@ Item { text: qsTr("Reddit") onClicked: Qt.openUrlExternally( "https://www.reddit.com/r/ScreenPlayApp/") - icon.source: "qrc:/assets/icons/brand_reddit.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/brand_reddit.svg" icon.width: 14 icon.height: 14 Layout.alignment: Qt.AlignVCenter @@ -86,7 +86,7 @@ Item { text: qsTr("Issue Tracker") onClicked: Qt.openUrlExternally( "https://gitlab.com/kelteseth/ScreenPlay/-/issues") - icon.source: "qrc:/assets/icons/icon_report_problem.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_report_problem.svg" icon.width: 14 icon.height: 14 Layout.alignment: Qt.AlignVCenter @@ -96,7 +96,7 @@ Item { text: qsTr("Contribute") onClicked: Qt.openUrlExternally( "https://gitlab.com/kelteseth/ScreenPlay#general-contributing") - icon.source: "qrc:/assets/icons/icon_supervisor_account.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_supervisor_account.svg" icon.width: 14 icon.height: 14 Layout.alignment: Qt.AlignVCenter @@ -105,7 +105,7 @@ Item { Button { text: qsTr("Steam Workshop") onClicked: Qt.openUrlExternally("steam://url/GameHub/672870") - icon.source: "qrc:/assets/icons/icon_steam.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_steam.svg" icon.width: 14 icon.height: 14 Layout.alignment: Qt.AlignVCenter diff --git a/ScreenPlay/qml/Community/CommunityNavItem.qml b/ScreenPlay/qml/Community/CommunityNavItem.qml index c972b6ea..ba7af1e7 100644 --- a/ScreenPlay/qml/Community/CommunityNavItem.qml +++ b/ScreenPlay/qml/Community/CommunityNavItem.qml @@ -49,7 +49,7 @@ TabButton { ToolButton { opacity: 0.6 width: parent.width * 0.2 - icon.source: "qrc:/assets/icons/icon_open_in_new.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_open_in_new.svg" icon.width: 16 icon.height: 16 onClicked: Qt.openUrlExternally(control.openLink) diff --git a/ScreenPlay/qml/Create/StartInfo.qml b/ScreenPlay/qml/Create/StartInfo.qml index a689c523..957c6979 100644 --- a/ScreenPlay/qml/Create/StartInfo.qml +++ b/ScreenPlay/qml/Create/StartInfo.qml @@ -70,7 +70,7 @@ Item { model: ListModel { ListElement { text: "Subreddit" - image: "qrc:/assets/startinfo/reddit.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/reddit.png" link: "https://www.reddit.com/r/ScreenPlayApp/" description: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit." category: "Community" @@ -78,7 +78,7 @@ Item { ListElement { text: "Forums" - image: "qrc:/assets/startinfo/forums.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/forums.png" link: "https://forum.screen-play.app/" description: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit." category: "Community" @@ -86,7 +86,7 @@ Item { ListElement { text: "QML Online Editor" - image: "qrc:/assets/startinfo/qml_online.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/qml_online.png" link: "https://qmlonline.kde.org/" description: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit." category: "Tools" @@ -94,7 +94,7 @@ Item { ListElement { text: "Godot" - image: "qrc:/assets/startinfo/godot.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/godot.png" link: "https://godotengine.org/" description: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit." category: "Tools" @@ -102,7 +102,7 @@ Item { ListElement { text: "Handbreak" - image: "qrc:/assets/startinfo/handbreak.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/handbreak.png" link: "https://handbrake.fr/" description: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cum sociis natoque penatibus et magnis dis parturient montes," category: "Tools" @@ -110,7 +110,7 @@ Item { ListElement { text: "Blender" - image: "qrc:/assets/startinfo/blender.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/blender.png" link: "https://www.blender.org/" description: "" category: "Tools" @@ -118,7 +118,7 @@ Item { ListElement { text: "OBS Studio" - image: "qrc:/assets/startinfo/obs.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/obs.png" link: "https://obsproject.com/" description: "" category: "Tools" @@ -126,7 +126,7 @@ Item { ListElement { text: "Krita" - image: "qrc:/assets/startinfo/krita.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/krita.png" link: "https://krita.org/" description: "" category: "Tools" @@ -134,7 +134,7 @@ Item { ListElement { text: "Gimp" - image: "qrc:/assets/startinfo/gimp.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/gimp.png" link: "https://gimp.org/" description: "" category: "Tools" @@ -142,7 +142,7 @@ Item { ListElement { text: "Inscape" - image: "qrc:/assets/startinfo/inkscape.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/inkscape.png" link: "https://inkscape.org/" description: "" category: "Tools" @@ -150,7 +150,7 @@ Item { ListElement { text: "Kdenlive" - image: "qrc:/assets/startinfo/kdeenlive.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/kdeenlive.png" link: "https://kdenlive.org/" description: "" category: "Tools" @@ -158,7 +158,7 @@ Item { ListElement { text: "ShareX" - image: "qrc:/assets/startinfo/sharex.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/sharex.png" link: "https://getsharex.com/" description: "" category: "Tools" @@ -166,7 +166,7 @@ Item { ListElement { text: "GitLab" - image: "qrc:/assets/startinfo/gitlab.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/gitlab.png" link: "https://about.gitlab.com/" description: "" category: "Tools" @@ -174,7 +174,7 @@ Item { ListElement { text: "Git Extensions - Git UI for Windows" - image: "qrc:/assets/startinfo/git_extentions.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/git_extentions.png" link: "https://gitextensions.github.io/" description: "" category: "Tools" @@ -182,7 +182,7 @@ Item { ListElement { text: "Visual Studio Code" - image: "qrc:/assets/startinfo/vscode.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/vscode.png" link: "https://code.visualstudio.com/" description: "" category: "Tools" @@ -190,7 +190,7 @@ Item { ListElement { text: "Shadertoy" - image: "qrc:/assets/startinfo/shadertoy.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/shadertoy.png" link: "https://www.shadertoy.com/" description: "" category: "Resources" @@ -198,7 +198,7 @@ Item { ListElement { text: "Flaticon" - image: "qrc:/assets/startinfo/flaticon.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/flaticon.png" link: "https://www.flaticon.com/" description: "" category: "Resources" @@ -206,7 +206,7 @@ Item { ListElement { text: "Unsplash" - image: "qrc:/assets/startinfo/unsplash.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/unsplash.png" link: "https://unsplash.com/" description: "" category: "Resources" @@ -214,7 +214,7 @@ Item { ListElement { text: "FreeSound" - image: "qrc:/assets/startinfo/freesound.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/freesound.png" link: "https://freesound.org/" description: "" category: "Resources" diff --git a/ScreenPlay/qml/Create/Wizards/GifWallpaper.qml b/ScreenPlay/qml/Create/Wizards/GifWallpaper.qml index a543674b..7c11bcb6 100644 --- a/ScreenPlay/qml/Create/Wizards/GifWallpaper.qml +++ b/ScreenPlay/qml/Create/Wizards/GifWallpaper.qml @@ -72,7 +72,7 @@ WizardPage { anchors.fill: parent fillMode: Image.Tile opacity: 0.2 - source: "qrc:/assets/images/noisy-texture-3.png" + source: "qrc:/qml/ScreenPlayApp/assets/images/noisy-texture-3.png" } Text { diff --git a/ScreenPlay/qml/Create/Wizards/HTMLWidget.qml b/ScreenPlay/qml/Create/Wizards/HTMLWidget.qml index de59342f..c35492d9 100644 --- a/ScreenPlay/qml/Create/Wizards/HTMLWidget.qml +++ b/ScreenPlay/qml/Create/Wizards/HTMLWidget.qml @@ -48,7 +48,7 @@ WizardPage { Image { id: imgPreview - source: "qrc:/assets/wizards/example_html.png" + source: "qrc:/qml/ScreenPlayApp/assets/wizards/example_html.png" anchors.fill: parent fillMode: Image.PreserveAspectCrop } diff --git a/ScreenPlay/qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml b/ScreenPlay/qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml index c60cc36f..37704a93 100644 --- a/ScreenPlay/qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml +++ b/ScreenPlay/qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml @@ -95,7 +95,7 @@ Item { Common.Slider { id: sliderQuality - iconSource: "qrc:/assets/icons/icon_settings.svg" + iconSource: "qrc:/qml/ScreenPlayApp/assets/icons/icon_settings.svg" headline: qsTr("Quality slider. Lower value means better quality.") Layout.preferredWidth: 400 @@ -114,7 +114,7 @@ Item { text: qsTr("Open Documentation") Material.accent: Material.color(Material.LightGreen) highlighted: true - icon.source: "qrc:/assets/icons/icon_document.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_document.svg" icon.color: "white" icon.width: 16 icon.height: 16 diff --git a/ScreenPlay/qml/Create/Wizards/ImportWebm/ImportWebmInit.qml b/ScreenPlay/qml/Create/Wizards/ImportWebm/ImportWebmInit.qml index d79d1e0c..2d23c08a 100644 --- a/ScreenPlay/qml/Create/Wizards/ImportWebm/ImportWebmInit.qml +++ b/ScreenPlay/qml/Create/Wizards/ImportWebm/ImportWebmInit.qml @@ -89,7 +89,7 @@ Item { anchors.fill: parent fillMode: Image.Tile opacity: 0.2 - source: "qrc:/assets/images/noisy-texture-3.png" + source: "qrc:/qml/ScreenPlayApp/assets/images/noisy-texture-3.png" } Text { @@ -120,7 +120,7 @@ Item { StartInfoLinkImage { text: "Handbreak" - image: "qrc:/assets/startinfo/handbreak.png" + image: "qrc:/qml/ScreenPlayApp/assets/startinfo/handbreak.png" link: "https://handbrake.fr/" description: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cum sociis natoque penatibus et magnis dis parturient montes," category: "Tools" @@ -141,7 +141,7 @@ Item { text: qsTr("Open Documentation") Material.accent: Material.color(Material.LightGreen) highlighted: true - icon.source: "qrc:/assets/icons/icon_document.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_document.svg" icon.color: "white" icon.width: 16 icon.height: 16 diff --git a/ScreenPlay/qml/Create/Wizards/Importh264/Importh264Init.qml b/ScreenPlay/qml/Create/Wizards/Importh264/Importh264Init.qml index 11499629..3dc35f37 100644 --- a/ScreenPlay/qml/Create/Wizards/Importh264/Importh264Init.qml +++ b/ScreenPlay/qml/Create/Wizards/Importh264/Importh264Init.qml @@ -92,7 +92,7 @@ Item { anchors.fill: parent fillMode: Image.Tile opacity: 0.2 - source: "qrc:/assets/images/noisy-texture-3.png" + source: "qrc:/qml/ScreenPlayApp/assets/images/noisy-texture-3.png" } Text { @@ -122,7 +122,7 @@ Item { text: qsTr("Open Documentation") Material.accent: Material.color(Material.LightGreen) highlighted: true - icon.source: "qrc:/assets/icons/icon_document.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_document.svg" icon.color: "white" icon.width: 16 icon.height: 16 diff --git a/ScreenPlay/qml/Create/Wizards/QMLWidget.qml b/ScreenPlay/qml/Create/Wizards/QMLWidget.qml index fc9117ea..23005d30 100644 --- a/ScreenPlay/qml/Create/Wizards/QMLWidget.qml +++ b/ScreenPlay/qml/Create/Wizards/QMLWidget.qml @@ -48,7 +48,7 @@ WizardPage { Image { id: imgPreview - source: "qrc:/assets/wizards/example_qml.png" + source: "qrc:/qml/ScreenPlayApp/assets/wizards/example_qml.png" anchors.fill: parent fillMode: Image.PreserveAspectCrop } diff --git a/ScreenPlay/qml/Installed/Installed.qml b/ScreenPlay/qml/Installed/Installed.qml index 802ffba8..997ea971 100644 --- a/ScreenPlay/qml/Installed/Installed.qml +++ b/ScreenPlay/qml/Installed/Installed.qml @@ -270,7 +270,7 @@ Item { MenuItem { text: qsTr("Open containing folder") objectName: "openFolder" - icon.source: "qrc:/assets/icons/icon_folder_open.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_folder_open.svg" onClicked: { App.util.openFolderInExplorer( contextMenu.absoluteStoragePath) @@ -280,7 +280,7 @@ Item { MenuItem { text: enabled ? qsTr("Remove Item") : qsTr("Remove via Workshop") objectName: enabled ? "removeItem" : "removeWorkshopItem" - icon.source: "qrc:/assets/icons/icon_delete.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_delete.svg" enabled: contextMenu.publishedFileID === 0 onClicked: { deleteDialog.open() @@ -290,7 +290,7 @@ Item { MenuItem { text: qsTr("Open Workshop Page") enabled: contextMenu.publishedFileID !== 0 - icon.source: "qrc:/assets/icons/icon_steam.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_steam.svg" onClicked: { Qt.openUrlExternally( "steam://url/CommunityFilePage/" + contextMenu.publishedFileID) diff --git a/ScreenPlay/qml/Installed/InstalledNavigation.qml b/ScreenPlay/qml/Installed/InstalledNavigation.qml index 696f8320..4d0b179e 100644 --- a/ScreenPlay/qml/Installed/InstalledNavigation.qml +++ b/ScreenPlay/qml/Installed/InstalledNavigation.qml @@ -61,7 +61,7 @@ Item { icon.width: 16 height: parent.height width: implicitWidth - icon.source: "qrc:/assets/icons/icon_installed.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_installed.svg" onClicked: { setSidebarActive(false) App.installedListFilter.sortBySearchType( @@ -77,7 +77,7 @@ Item { icon.width: 16 width: implicitWidth height: parent.height - icon.source: "qrc:/assets/icons/icon_code.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_code.svg" onClicked: { setSidebarActive(false) App.installedListFilter.sortBySearchType( @@ -93,7 +93,7 @@ Item { icon.width: 16 height: parent.height width: implicitWidth - icon.source: "qrc:/assets/icons/icon_movie.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_movie.svg" onClicked: { setSidebarActive(false) App.installedListFilter.sortBySearchType( @@ -109,7 +109,7 @@ Item { icon.width: 16 height: parent.height width: implicitWidth - icon.source: "qrc:/assets/icons/icon_widgets.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_widgets.svg" onClicked: { setSidebarActive(false) App.installedListFilter.sortBySearchType( @@ -137,7 +137,7 @@ Item { property int sortOrder: Qt.DescendingOrder - icon.source: (btnSortOrder.sortOrder === Qt.AscendingOrder) ? "qrc:/assets/icons/icon_sort-down-solid.svg" : "qrc:/assets/icons/icon_sort-up-solid.svg" + icon.source: (btnSortOrder.sortOrder === Qt.AscendingOrder) ? "qrc:/qml/ScreenPlayApp/assets/icons/icon_sort-down-solid.svg" : "qrc:/qml/ScreenPlayApp/assets/icons/icon_sort-up-solid.svg" icon.width: 12 icon.height: 12 hoverEnabled: true diff --git a/ScreenPlay/qml/Installed/InstalledWelcomeScreen.qml b/ScreenPlay/qml/Installed/InstalledWelcomeScreen.qml index d73937cb..448843a9 100644 --- a/ScreenPlay/qml/Installed/InstalledWelcomeScreen.qml +++ b/ScreenPlay/qml/Installed/InstalledWelcomeScreen.qml @@ -20,7 +20,7 @@ Item { Image { id: imgBg - source: "qrc:/assets/images/Intro.png" + source: "qrc:/qml/ScreenPlayApp/assets/images/Intro.png" anchors.fill: parent } @@ -37,7 +37,7 @@ Item { Image { id: imgShine - source: "qrc:/assets/images/Intro_shine.png" + source: "qrc:/qml/ScreenPlayApp/assets/images/Intro_shine.png" height: 1753 width: 1753 opacity: 0 @@ -59,7 +59,7 @@ Item { Image { id: imgLogo - source: "qrc:/assets/images/Early_Access.png" + source: "qrc:/qml/ScreenPlayApp/assets/images/Early_Access.png" width: 539 height: 148 sourceSize: Qt.size(width, height) @@ -96,7 +96,7 @@ Item { Image { id: imgPC - source: "qrc:/assets/images/Intro_PC.png" + source: "qrc:/qml/ScreenPlayApp/assets/images/Intro_PC.png" width: 500 * 0.8 height: 500 * 0.8 sourceSize: Qt.size(width, height) @@ -119,7 +119,7 @@ Item { font.weight: Font.Thin width: implicitWidth + 20 height: implicitHeight + 10 - icon.source: "qrc:/assets/icons/icon_steam.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_steam.svg" icon.width: 18 icon.height: 18 onClicked: helperButtonPressed(1) diff --git a/ScreenPlay/qml/Installed/ScreenPlayItem.qml b/ScreenPlay/qml/Installed/ScreenPlayItem.qml index bab9ec8c..33cc2981 100644 --- a/ScreenPlay/qml/Installed/ScreenPlayItem.qml +++ b/ScreenPlay/qml/Installed/ScreenPlayItem.qml @@ -25,15 +25,15 @@ Item { height: 180 onTypeChanged: { if (Common.JSUtil.isWidget(type)) { - icnType.source = "qrc:/assets/icons/icon_widgets.svg" + icnType.source = "qrc:/qml/ScreenPlayApp/assets/icons/icon_widgets.svg" return } if (Common.JSUtil.isScene(type)) { - icnType.source = "qrc:/assets/icons/icon_code.svg" + icnType.source = "qrc:/qml/ScreenPlayApp/assets/icons/icon_code.svg" return } if (Common.JSUtil.isVideo(type)) { - icnType.source = "qrc:/assets/icons/icon_movie.svg" + icnType.source = "qrc:/qml/ScreenPlayApp/assets/icons/icon_movie.svg" return } } @@ -118,7 +118,7 @@ Item { Image { id: mask - source: "qrc:/assets/images/Window.svg" + source: "qrc:/qml/ScreenPlayApp/assets/images/Window.svg" sourceSize: Qt.size(root.width, root.height) visible: false smooth: true @@ -164,7 +164,7 @@ Item { width: 20 height: 20 opacity: 0.25 - source: "qrc:/assets/icons/icon_movie.svg" + source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_movie.svg" sourceSize: Qt.size(20, 20) anchors { diff --git a/ScreenPlay/qml/Installed/ScreenPlayItemImage.qml b/ScreenPlay/qml/Installed/ScreenPlayItemImage.qml index 429e7deb..7e1c4d4d 100644 --- a/ScreenPlay/qml/Installed/ScreenPlayItemImage.qml +++ b/ScreenPlay/qml/Installed/ScreenPlayItemImage.qml @@ -32,15 +32,15 @@ Item { fillMode: Image.PreserveAspectCrop source: { if (root.sourceImage === "") - return "qrc:/assets/images/missingPreview.png"; + return "qrc:/qml/ScreenPlayApp/assets/images/missingPreview.png"; - return root.screenPreview === "" ? "qrc:/assets/images/missingPreview.png" : Qt.resolvedUrl(absoluteStoragePath + "/" + root.sourceImage); + return root.screenPreview === "" ? "qrc:/qml/ScreenPlayApp/assets/images/missingPreview.png" : Qt.resolvedUrl(absoluteStoragePath + "/" + root.sourceImage); } onStatusChanged: { if (image.status === Image.Ready) { root.state = "loaded"; } else if (image.status === Image.Error) { - source = "qrc:/assets/images/missingPreview.png"; + source = "qrc:/qml/ScreenPlayApp/assets/images/missingPreview.png"; root.state = "loaded"; } } @@ -54,7 +54,7 @@ Item { asynchronous: true playing: true - source: root.sourceImageGIF === "" ? "qrc:/assets/images/missingPreview.png" : Qt.resolvedUrl(absoluteStoragePath + "/" + root.sourceImageGIF) + source: root.sourceImageGIF === "" ? "qrc:/qml/ScreenPlayApp/assets/images/missingPreview.png" : Qt.resolvedUrl(absoluteStoragePath + "/" + root.sourceImageGIF) fillMode: Image.PreserveAspectCrop } diff --git a/ScreenPlay/qml/Installed/Sidebar.qml b/ScreenPlay/qml/Installed/Sidebar.qml index 3b158b9d..1329533e 100644 --- a/ScreenPlay/qml/Installed/Sidebar.qml +++ b/ScreenPlay/qml/Installed/Sidebar.qml @@ -42,10 +42,10 @@ Item { txtHeadline.text = App.installedListModel.get(root.contentFolderName).m_title; const hasPreviewGif = App.installedListModel.get(root.contentFolderName).m_previewGIF !== undefined; if (!hasPreviewGif) { - image.source = Qt.resolvedUrl(App.GlobalVariables.localStoragePath + "/" + root.contentFolderName + "/" + App.installedListModel.get(root.contentFolderName).m_preview); + image.source = Qt.resolvedUrl(App.globalVariables.localStoragePath + "/" + root.contentFolderName + "/" + App.installedListModel.get(root.contentFolderName).m_preview); image.playing = false; } else { - image.source = Qt.resolvedUrl(App.GlobalVariables.localStoragePath + "/" + root.contentFolderName + "/" + App.installedListModel.get(root.contentFolderName).m_previewGIF); + image.source = Qt.resolvedUrl(App.globalVariables.localStoragePath + "/" + root.contentFolderName + "/" + App.installedListModel.get(root.contentFolderName).m_previewGIF); image.playing = true; } if (Common.JSUtil.isWidget(root.type) || (monitorSelection.activeMonitors.length > 0)) { @@ -170,7 +170,7 @@ Item { anchors.fill: parent onStatusChanged: { if (image.status === Image.Error) - source = "qrc:/assets/images/missingPreview.png"; + source = "qrc:/qml/ScreenPlayApp/assets/images/missingPreview.png"; } } @@ -238,7 +238,7 @@ Item { Image { id: imgBack - source: "qrc:/assets/icons/icon_arrow_right.svg" + source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_arrow_right.svg" sourceSize: Qt.size(15, 15) fillMode: Image.PreserveAspectFit anchors.centerIn: parent @@ -364,12 +364,12 @@ Item { Material.background: Material.accent Material.foreground: "white" font.family: App.settings.font - icon.source: "qrc:/assets/icons/icon_plus.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_plus.svg" icon.color: "white" icon.width: 16 icon.height: 16 onClicked: { - const absoluteStoragePath = App.GlobalVariables.localStoragePath + "/" + root.contentFolderName; + const absoluteStoragePath = App.globalVariables.localStoragePath + "/" + root.contentFolderName; const previewImage = App.installedListModel.get(root.contentFolderName).m_preview; if (Common.JSUtil.isWallpaper(root.type)) { let activeMonitors = monitorSelection.getActiveMonitors(); diff --git a/ScreenPlay/qml/Monitors/Monitors.qml b/ScreenPlay/qml/Monitors/Monitors.qml index 481492be..5d54be17 100644 --- a/ScreenPlay/qml/Monitors/Monitors.qml +++ b/ScreenPlay/qml/Monitors/Monitors.qml @@ -244,7 +244,7 @@ Common.Popup { height: width icon.width: 16 icon.height: 16 - icon.source: "qrc:/assets/icons/font-awsome/close.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/font-awsome/close.svg" icon.color: Material.iconColor onClicked: root.close() diff --git a/ScreenPlay/qml/Navigation/Navigation.qml b/ScreenPlay/qml/Navigation/Navigation.qml index d989e82c..56a78fef 100644 --- a/ScreenPlay/qml/Navigation/Navigation.qml +++ b/ScreenPlay/qml/Navigation/Navigation.qml @@ -91,7 +91,7 @@ Rectangle { font.pointSize: 12 height: parent.height width: implicitWidth - icon.source: "qrc:/assets/icons/icon_plus.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_plus.svg" onClicked: { root.onPageChanged("Create") } @@ -108,7 +108,7 @@ Rectangle { font.pointSize: 12 height: parent.height width: implicitWidth - icon.source: "qrc:/assets/icons/icon_steam.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_steam.svg" onClicked: { root.onPageChanged("Workshop") } @@ -124,7 +124,7 @@ Rectangle { font.pointSize: 12 height: parent.height width: implicitWidth - icon.source: "qrc:/assets/icons/icon_installed.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_installed.svg" onClicked: { root.onPageChanged("Installed") } @@ -140,7 +140,7 @@ Rectangle { font.pointSize: 12 height: parent.height width: implicitWidth - icon.source: "qrc:/assets/icons/icon_community.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_community.svg" onClicked: { root.onPageChanged("Community") } @@ -156,7 +156,7 @@ Rectangle { font.pointSize: 12 height: parent.height width: implicitWidth - icon.source: "qrc:/assets/icons/icon_settings.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_settings.svg" onClicked: { root.onPageChanged("Settings") } @@ -186,7 +186,7 @@ Rectangle { } ToolButton { - icon.source: "qrc:/assets/icons/font-awsome/patreon-brands.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/font-awsome/patreon-brands.svg" text: qsTr("Support me on Patreon!") onClicked: Qt.openUrlExternally( "https://www.patreon.com/ScreenPlayApp") @@ -215,7 +215,7 @@ Rectangle { ToolButton { id: miMuteAll Layout.alignment: Qt.AlignVCenter - icon.source: "qrc:/assets/icons/icon_volume.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_volume.svg" icon.width: root.iconWidth icon.height: root.iconHeight enabled: quickActionRow.contentActive @@ -224,11 +224,11 @@ Rectangle { property bool soundEnabled: true onSoundEnabledChanged: { if (miMuteAll.soundEnabled) { - miMuteAll.icon.source = "qrc:/assets/icons/icon_volume.svg" + miMuteAll.icon.source = "qrc:/qml/ScreenPlayApp/assets/icons/icon_volume.svg" App.screenPlayManager.setAllWallpaperValue("muted", "false") } else { - miMuteAll.icon.source = "qrc:/assets/icons/icon_volume_mute.svg" + miMuteAll.icon.source = "qrc:/qml/ScreenPlayApp/assets/icons/icon_volume_mute.svg" App.screenPlayManager.setAllWallpaperValue("muted", "true") } @@ -242,18 +242,18 @@ Rectangle { id: miStopAll enabled: quickActionRow.contentActive Layout.alignment: Qt.AlignVCenter - icon.source: "qrc:/assets/icons/icon_pause.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_pause.svg" icon.width: root.iconWidth icon.height: root.iconHeight onClicked: isPlaying = !isPlaying property bool isPlaying: true onIsPlayingChanged: { if (miStopAll.isPlaying) { - miStopAll.icon.source = "qrc:/assets/icons/icon_pause.svg" + miStopAll.icon.source = "qrc:/qml/ScreenPlayApp/assets/icons/icon_pause.svg" App.screenPlayManager.setAllWallpaperValue( "isPlaying", "true") } else { - miStopAll.icon.source = "qrc:/assets/icons/icon_play.svg" + miStopAll.icon.source = "qrc:/qml/ScreenPlayApp/assets/icons/icon_play.svg" App.screenPlayManager.setAllWallpaperValue( "isPlaying", "false") } @@ -267,7 +267,7 @@ Rectangle { id: miCloseAll enabled: quickActionRow.contentActive Layout.alignment: Qt.AlignVCenter - icon.source: "qrc:/assets/icons/icon_close.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_close.svg" icon.width: root.iconWidth icon.height: root.iconHeight onClicked: { @@ -285,7 +285,7 @@ Rectangle { ToolButton { id: miConfig Layout.alignment: Qt.AlignVCenter - icon.source: "qrc:/assets/icons/icon_video_settings_black_24dp.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_video_settings_black_24dp.svg" icon.width: root.iconWidth icon.height: root.iconHeight onClicked: App.util.setToggleWallpaperConfiguration() diff --git a/ScreenPlay/qml/Navigation/WindowNavigation.qml b/ScreenPlay/qml/Navigation/WindowNavigation.qml index 69185fb6..3ad08401 100644 --- a/ScreenPlay/qml/Navigation/WindowNavigation.qml +++ b/ScreenPlay/qml/Navigation/WindowNavigation.qml @@ -47,7 +47,7 @@ Rectangle { } onPositionChanged: { if (mouseArea.pressed) { - let pos = ScreenPlay.cursorPos() + let pos = App.cursorPos() window.setX(pos.x - clickPos.x) window.setY(pos.y - clickPos.y) } @@ -64,13 +64,13 @@ Rectangle { WindowNavButton { id: miMinimize Layout.alignment: Qt.AlignVCenter - icon.source: "qrc:/assets/icons/icon_minimize.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_minimize.svg" onClicked: root.window.hide() } WindowNavButton { id: miquit Layout.alignment: Qt.AlignVCenter - icon.source: "qrc:/assets/icons/icon_close.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_close.svg" onClicked: { if (App.screenPlayManager.activeWallpaperCounter === 0 && App.screenPlayManager.activeWidgetsCounter === 0) { diff --git a/ScreenPlay/qml/Settings/Settings.qml b/ScreenPlay/qml/Settings/Settings.qml index 12d16d25..6e026b4b 100644 --- a/ScreenPlay/qml/Settings/Settings.qml +++ b/ScreenPlay/qml/Settings/Settings.qml @@ -249,7 +249,7 @@ Item { id: headerPerformance text: qsTr("Performance") - image: "qrc:/assets/icons/icon_build.svg" + image: "qrc:/qml/ScreenPlayApp/assets/icons/icon_build.svg" } contentItem: Column { @@ -319,7 +319,7 @@ Item { id: headerAbout text: qsTr("About") - image: "qrc:/assets/icons/icon_cake.svg" + image: "qrc:/qml/ScreenPlayApp/assets/icons/icon_cake.svg" } contentItem: Column { @@ -399,31 +399,31 @@ Item { } GrowIconLink { - iconSource: "qrc:/assets/icons/brand_github.svg" + iconSource: "qrc:/qml/ScreenPlayApp/assets/icons/brand_github.svg" url: "https://github.com/kelteseth" color: "#333333" } GrowIconLink { - iconSource: "qrc:/assets/icons/brand_gitlab.svg" + iconSource: "qrc:/qml/ScreenPlayApp/assets/icons/brand_gitlab.svg" url: "https://gitlab.com/kelteseth" color: "#FC6D26" } GrowIconLink { - iconSource: "qrc:/assets/icons/brand_twitter.svg" + iconSource: "qrc:/qml/ScreenPlayApp/assets/icons/brand_twitter.svg" url: "https://twitter.com/Kelteseth" color: "#1DA1F2" } GrowIconLink { - iconSource: "qrc:/assets/icons/brand_twitch.svg" + iconSource: "qrc:/qml/ScreenPlayApp/assets/icons/brand_twitch.svg" url: "https://www.twitch.tv/kelteseth/" color: "#6441A5" } GrowIconLink { - iconSource: "qrc:/assets/icons/brand_reddit.svg" + iconSource: "qrc:/qml/ScreenPlayApp/assets/icons/brand_reddit.svg" url: "https://www.reddit.com/r/ScreenPlayApp/" color: "#FF4500" } @@ -449,7 +449,7 @@ Item { Image { id: mask - source: "qrc:/assets/images/mask_round.svg" + source: "qrc:/qml/ScreenPlayApp/assets/images/mask_round.svg" sourceSize: Qt.size(width, height) smooth: true width: 120 @@ -471,7 +471,7 @@ Item { SettingsHorizontalSeperator {} SettingsButton { - icon.source: "qrc:/assets/icons/icon_launch.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_launch.svg" headline: qsTr("Version") description: qsTr("ScreenPlay Build Version \n") + App.settings.gitBuildHash diff --git a/ScreenPlay/qml/Settings/SettingsHeader.qml b/ScreenPlay/qml/Settings/SettingsHeader.qml index d370fd56..eff2342c 100644 --- a/ScreenPlay/qml/Settings/SettingsHeader.qml +++ b/ScreenPlay/qml/Settings/SettingsHeader.qml @@ -9,7 +9,7 @@ Item { property color background: "#FFAB00" property string text: "HEADLINE" - property url image: "qrc:/assets/icons/icon_settings.svg" + property url image: "qrc:/qml/ScreenPlayApp/assets/icons/icon_settings.svg" state: "out" Component.onCompleted: state = "in" diff --git a/ScreenPlay/qml/Workshop/Workshop.qml b/ScreenPlay/qml/Workshop/Workshop.qml index ecbbc15d..7868710d 100644 --- a/ScreenPlay/qml/Workshop/Workshop.qml +++ b/ScreenPlay/qml/Workshop/Workshop.qml @@ -15,11 +15,11 @@ Item { Component.onCompleted: { if (App.settings.steamVersion) { workshopLoader.setSource( - "qrc:/ScreenPlayWorkshop/qml/SteamWorkshop.qml", { + "qrc:/qml/ScreenPlayWorkshop/qml/SteamWorkshop.qml", { "modalSource": modalSource }) } else { - workshopLoader.setSource("qrc:/ScreenPlayWorkshop/qml/Forum.qml") + workshopLoader.setSource("qrc:/qml/ScreenPlayWorkshop/qml/Forum.qml") } } diff --git a/ScreenPlay/src/app.cpp b/ScreenPlay/src/app.cpp index 716f46bf..0cd2c8d8 100644 --- a/ScreenPlay/src/app.cpp +++ b/ScreenPlay/src/app.cpp @@ -58,27 +58,24 @@ App::App() m_continuousIntegrationMetricsTimer.start(); - QGuiApplication::setWindowIcon(QIcon(":/assets/icons/app.ico")); + QGuiApplication::setWindowIcon(QIcon(":/qml/ScreenPlayApp/assets/icons/app.ico")); QGuiApplication::setOrganizationName("ScreenPlay"); QGuiApplication::setOrganizationDomain("screen-play.app"); QGuiApplication::setApplicationName("ScreenPlay"); QGuiApplication::setApplicationVersion(QVersionNumber(0, 15, 0).toString()); QGuiApplication::setQuitOnLastWindowClosed(false); - QFontDatabase::addApplicationFont(":/assets/fonts/LibreBaskerville-Italic.ttf"); - - QFontDatabase::addApplicationFont(":/assets/fonts/Roboto-Light.ttf"); - QFontDatabase::addApplicationFont(":/assets/fonts/Roboto-Regular.ttf"); - QFontDatabase::addApplicationFont(":/assets/fonts/Roboto-Thin.ttf"); - QFontDatabase::addApplicationFont(":/assets/fonts/RobotoMono-Light.ttf"); - QFontDatabase::addApplicationFont(":/assets/fonts/RobotoMono-Thin.ttf"); - - QFontDatabase::addApplicationFont(":/assets/fonts/NotoSans-Thin.ttf"); - QFontDatabase::addApplicationFont(":/assets/fonts/NotoSans-Regular.ttf"); - QFontDatabase::addApplicationFont(":/assets/fonts/NotoSans-Medium.ttf"); - QFontDatabase::addApplicationFont(":/assets/fonts/NotoSans-Light.ttf"); - - QFontDatabase::addApplicationFont(":/assets/fonts/NotoSansCJKkr-Regular.otf"); + QFontDatabase::addApplicationFont(":/qml/ScreenPlayApp/assets/fonts/LibreBaskerville-Italic.ttf"); + const QString fontsPath = QGuiApplication::instance()->applicationDirPath() + "/assets/fonts/"; + const QDir fontsDir(fontsPath); + if (!fontsDir.isEmpty() && fontsDir.exists()) { + QDirIterator it(fontsPath, { "*.ttf", "*.otf" }, QDir::Files); + while (it.hasNext()) { + QFontDatabase::addApplicationFont(it.next()); + } + } else { + qWarning() << "Unable to load font from: " << fontsPath; + } QQuickWindow::setTextRenderType(QQuickWindow::TextRenderType::NativeTextRendering); @@ -191,7 +188,6 @@ void App::init() qmlRegisterSingletonInstance("ScreenPlay", 1, 0, "App", this); m_mainWindowEngine->addImportPath(guiApplication->applicationDirPath() + "/qml"); guiApplication->addLibraryPath(guiApplication->applicationDirPath()); - qInfo() << m_mainWindowEngine->importPathList(); if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE) { setupKDE(); diff --git a/ScreenPlay/src/settings.cpp b/ScreenPlay/src/settings.cpp index b829c980..75e75ca0 100644 --- a/ScreenPlay/src/settings.cpp +++ b/ScreenPlay/src/settings.cpp @@ -121,7 +121,7 @@ void Settings::writeJsonFileFromResource(const QString& filename) if (!directory.exists()) { directory.mkpath(directory.path()); } - QFile defaultSettings(":/" + filename + ".json"); + QFile defaultSettings(":/qml/ScreenPlayApp/" + filename + ".json"); file.open(QIODevice::WriteOnly | QIODevice::Text); defaultSettings.open(QIODevice::ReadOnly | QIODevice::Text); diff --git a/ScreenPlay/src/util.cpp b/ScreenPlay/src/util.cpp index 2f3855b6..ff689f16 100644 --- a/ScreenPlay/src/util.cpp +++ b/ScreenPlay/src/util.cpp @@ -108,7 +108,7 @@ QString Util::toLocal(const QString& url) */ void Util::Util::requestAllLicenses() { - if (m_requestAllLicensesFuture.isStarted()) + if (m_requestAllLicensesFuture.isRunning()) return; m_requestAllLicensesFuture = QtConcurrent::run([this]() { @@ -116,32 +116,32 @@ void Util::Util::requestAllLicenses() QFile file; QTextStream out(&file); - file.setFileName(":/legal/Font Awesome Free License.txt"); + file.setFileName(":/qml/ScreenPlayApp/legal/Font Awesome Free License.txt"); file.open(QIODevice::ReadOnly | QIODevice::Text); tmp += out.readAll(); file.close(); - file.setFileName(":/legal/gpl-3.0.txt"); + file.setFileName(":/qml/ScreenPlayApp/legal/gpl-3.0.txt"); file.open(QIODevice::ReadOnly | QIODevice::Text); tmp += out.readAll(); file.close(); - file.setFileName(":/legal/gpl-3.0.txt"); + file.setFileName(":/qml/ScreenPlayApp/legal/gpl-3.0.txt"); file.open(QIODevice::ReadOnly | QIODevice::Text); tmp += out.readAll(); file.close(); - file.setFileName(":/legal/OFL.txt"); + file.setFileName(":/qml/ScreenPlayApp/legal/OFL.txt"); file.open(QIODevice::ReadOnly | QIODevice::Text); tmp += out.readAll(); file.close(); - file.setFileName(":/legal/OpenSSL.txt"); + file.setFileName(":/qml/ScreenPlayApp/legal/OpenSSL.txt"); file.open(QIODevice::ReadOnly | QIODevice::Text); tmp += out.readAll(); file.close(); - file.setFileName(":/legal/Qt LGPLv3.txt"); + file.setFileName(":/qml/ScreenPlayApp/legal/Qt LGPLv3.txt"); file.open(QIODevice::ReadOnly | QIODevice::Text); tmp += out.readAll(); file.close(); @@ -160,7 +160,7 @@ void Util::Util::requestDataProtection() QFile file; QTextStream out(&file); - file.setFileName(":/legal/DataProtection.txt"); + file.setFileName(":/qml/ScreenPlayApp/legal/DataProtection.txt"); file.open(QIODevice::ReadOnly | QIODevice::Text); tmp += out.readAll(); file.close(); diff --git a/ScreenPlay/src/wizards.cpp b/ScreenPlay/src/wizards.cpp index 8d0b9ba8..dffff319 100644 --- a/ScreenPlay/src/wizards.cpp +++ b/ScreenPlay/src/wizards.cpp @@ -54,7 +54,7 @@ void Wizards::createQMLWidget(const QString& title, obj.insert("type", "qmlWidget"); obj.insert("file", "main.qml"); - if (!Util::writeFileFromQrc(":/assets/wizards/" + licenseFile, workingPath + "/" + licenseFile)) { + if (!Util::writeFileFromQrc(":/qml/ScreenPlayApp/assets/wizards/" + licenseFile, workingPath + "/" + licenseFile)) { qWarning() << "Could not write " << licenseFile; emit widgetCreationFinished(WizardResult::WriteLicenseFileError); return; @@ -120,7 +120,7 @@ void Wizards::createHTMLWidget(const QString& title, obj.insert("type", "htmlWidget"); obj.insert("file", "index.html"); - if (!Util::writeFileFromQrc(":/assets/wizards/" + licenseFile, workingPath + "/" + licenseFile)) { + if (!Util::writeFileFromQrc(":/qml/ScreenPlayApp/assets/wizards/" + licenseFile, workingPath + "/" + licenseFile)) { qWarning() << "Could not write " << licenseFile; emit widgetCreationFinished(WizardResult::WriteLicenseFileError); return; @@ -188,7 +188,7 @@ void Wizards::createHTMLWallpaper( obj.insert("type", "htmlWallpaper"); obj.insert("file", "index.html"); - if (!Util::writeFileFromQrc(":/assets/wizards/" + licenseFile, workingPath + "/" + licenseFile)) { + if (!Util::writeFileFromQrc(":/qml/ScreenPlayApp/assets/wizards/" + licenseFile, workingPath + "/" + licenseFile)) { qWarning() << "Could not write " << licenseFile; emit widgetCreationFinished(WizardResult::WriteLicenseFileError); return; @@ -262,7 +262,7 @@ void Wizards::createQMLWallpaper( } } - if (!Util::writeFileFromQrc(":/assets/wizards/" + licenseFile, workingPath + "/" + licenseFile)) { + if (!Util::writeFileFromQrc(":/qml/ScreenPlayApp/assets/wizards/" + licenseFile, workingPath + "/" + licenseFile)) { qWarning() << "Could not write " << licenseFile; emit widgetCreationFinished(WizardResult::WriteLicenseFileError); return; @@ -315,7 +315,7 @@ void Wizards::createGifWallpaper( obj.insert("tags", ScreenPlayUtil::fillArray(tags)); obj.insert("type", "gifWallpaper"); - if (!Util::writeFileFromQrc(":/assets/wizards/" + licenseFile, workingPath + "/" + licenseFile)) { + if (!Util::writeFileFromQrc(":/qml/ScreenPlayApp/assets/wizards/" + licenseFile, workingPath + "/" + licenseFile)) { qWarning() << "Could not write " << licenseFile; emit widgetCreationFinished(WizardResult::WriteLicenseFileError); return; diff --git a/ScreenPlay/tests/tst_main.cpp b/ScreenPlay/tests/tst_main.cpp index 3b20bf70..2d87d482 100644 --- a/ScreenPlay/tests/tst_main.cpp +++ b/ScreenPlay/tests/tst_main.cpp @@ -54,12 +54,13 @@ class ScreenPlayTest : public QObject { private slots: void initTestCase() { - Q_INIT_RESOURCE(Resources); app.init(); - m_window = qobject_cast(app.mainWindowEngine()->rootObjects().first()); + m_window = qobject_cast(app.mainWindowEngine()->rootObjects().first()); + + m_window->addImportPath(QGuiApplication::instance()->applicationDirPath() + "/qml"); QVERIFY(m_window); - QVERIFY(QTest::qWaitForWindowExposed(m_window)); + //QVERIFY(QTest::qWaitForWindowExposed(m_window.)); QTest::qWait(1000); m_installedSidebar = m_window->findChild("installedSidebar"); @@ -72,7 +73,7 @@ private slots: void import_convert_video(); private: - QQuickWindow* m_window = nullptr; + QQmlApplicationEngine* m_window = nullptr; QQuickItem* m_installedSidebar = nullptr; ScreenPlay::App app; }; diff --git a/ScreenPlayShader.zip b/ScreenPlayShader.zip new file mode 100644 index 0000000000000000000000000000000000000000..e9d28a3b7b6ee26d3312f2101721f636133ef5ea GIT binary patch literal 38397 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 literal 0 HcmV?d00001 diff --git a/ScreenPlayShader/CMakeLists.txt b/ScreenPlayShader/CMakeLists.txt index bd2e59a0..5a694c1a 100644 --- a/ScreenPlayShader/CMakeLists.txt +++ b/ScreenPlayShader/CMakeLists.txt @@ -42,6 +42,7 @@ qt_add_qml_module( ${SCREENPLAY_QML_MODULES_PATH}/${PROJECT_NAME} URI ${PROJECT_NAME} + RESOURCE_PREFIX /qml VERSION 1.0 SOURCES diff --git a/ScreenPlayShader/Resources.qrc b/ScreenPlayShader/Resources.qrc deleted file mode 100644 index a2d123b7..00000000 --- a/ScreenPlayShader/Resources.qrc +++ /dev/null @@ -1,9 +0,0 @@ - - - assets/Shadertoy_Bayer.png - assets/Shadertoy_Gray_Noise_Medium.png - assets/Shadertoy_Lichen.jpg - assets/test_image_andras-vas-Bd7gNnWJBkU-unsplash.jpg - assets/mask_01.png - - diff --git a/ScreenPlayShader/src/TestMain.cpp b/ScreenPlayShader/src/TestMain.cpp index 0ad0c82c..ca308a72 100644 --- a/ScreenPlayShader/src/TestMain.cpp +++ b/ScreenPlayShader/src/TestMain.cpp @@ -9,9 +9,11 @@ int main(int argc, char* argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; + engine.addImportPath(QGuiApplication::instance()->applicationDirPath() + "/qml"); + // The first subfolder is the libraryName followed by the regular // folder strucutre: LibararyName/Subfolder - const QUrl url(u"qrc:/ScreenPlayShader/src/TestMain.qml"_qs); + const QUrl url(u"qrc:/qml/ScreenPlayShader/src/TestMain.qml"_qs); QObject::connect( &engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject* obj, const QUrl& objUrl) { diff --git a/ScreenPlayShader/src/TestMain.qml b/ScreenPlayShader/src/TestMain.qml index 3afd779f..b96c5c84 100644 --- a/ScreenPlayShader/src/TestMain.qml +++ b/ScreenPlayShader/src/TestMain.qml @@ -2,6 +2,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls import QtQuick.Controls.Material +import ScreenPlayShader 1.0 Window { id: root @@ -14,7 +15,7 @@ Window { id: img anchors.fill: parent fillMode: Image.PreserveAspectCrop - source: "qrc:/ScreenPlayShader/assets/test_image_andras-vas-Bd7gNnWJBkU-unsplash.jpg" + source: "qrc:/qml/ScreenPlayShader/assets/test_image_andras-vas-Bd7gNnWJBkU-unsplash.jpg" layer.enabled: true layer.effect: ShaderEffect { property real amplitude: 0.04 * .1 diff --git a/ScreenPlaySysInfo/CMakeLists.txt b/ScreenPlaySysInfo/CMakeLists.txt index 7cd8196e..ee59d6fe 100644 --- a/ScreenPlaySysInfo/CMakeLists.txt +++ b/ScreenPlaySysInfo/CMakeLists.txt @@ -14,7 +14,7 @@ find_package( COMPONENTS Quick Core REQUIRED) -set(QML src/TestMain.qml) +set(QML qml/TestMain.qml) set(QML_PLUGIN_SOURCES src/cpu.cpp @@ -50,7 +50,8 @@ qt_add_qml_module( VERSION 1.0 OUTPUT_DIRECTORY - ${CMAKE_BINARY_DIR}/bin/${PROJECT_NAME} + ${SCREENPLAY_QML_MODULES_PATH}/${PROJECT_NAME} + RESOURCE_PREFIX /qml QML_FILES ${QML} SOURCES diff --git a/ScreenPlaySysInfo/src/TestMain.qml b/ScreenPlaySysInfo/qml/TestMain.qml similarity index 100% rename from ScreenPlaySysInfo/src/TestMain.qml rename to ScreenPlaySysInfo/qml/TestMain.qml diff --git a/ScreenPlaySysInfo/src/TestMain.cpp b/ScreenPlaySysInfo/src/TestMain.cpp index 2148af2d..e68585ed 100644 --- a/ScreenPlaySysInfo/src/TestMain.cpp +++ b/ScreenPlaySysInfo/src/TestMain.cpp @@ -12,9 +12,11 @@ int main(int argc, char* argv[]) QGuiApplication app(argc, argv); QQmlApplicationEngine engine; + engine.addImportPath(app.applicationDirPath() + "/qml"); + // The first subfolder is the libraryName followed by the regular // folder strucutre: LibararyName/Subfolder - const QUrl url(u"qrc:/ScreenPlaySysInfo/src/TestMain.qml"_qs); + const QUrl url(u"qrc:/qml/ScreenPlaySysInfo/qml/TestMain.qml"_qs); QObject::connect( &engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject* obj, const QUrl& objUrl) { diff --git a/ScreenPlayUtil/CMakeLists.txt b/ScreenPlayUtil/CMakeLists.txt index d0927b31..90a437ee 100644 --- a/ScreenPlayUtil/CMakeLists.txt +++ b/ScreenPlayUtil/CMakeLists.txt @@ -62,6 +62,7 @@ qt_add_qml_module( ${PROJECT_NAME} OUTPUT_DIRECTORY ${SCREENPLAY_QML_MODULES_PATH}/${PROJECT_NAME} + RESOURCE_PREFIX /qml URI ${PROJECT_NAME} VERSION diff --git a/ScreenPlayUtil/qml/Dialogs/CriticalError.qml b/ScreenPlayUtil/qml/Dialogs/CriticalError.qml index 547a0c8c..616a6f00 100644 --- a/ScreenPlayUtil/qml/Dialogs/CriticalError.qml +++ b/ScreenPlayUtil/qml/Dialogs/CriticalError.qml @@ -42,7 +42,7 @@ Common.Dialog { Layout.alignment: Qt.AlignHCenter Layout.preferredWidth: 150 Layout.preferredHeight: 150 - source: "qrc:/assets/icons/exclamation-triangle-solid.svg" + source: "qrc:/qml/ScreenPlayApp/assets/icons/exclamation-triangle-solid.svg" fillMode: Image.PreserveAspectFit layer { diff --git a/ScreenPlayUtil/qml/Dialogs/MonitorConfiguration.qml b/ScreenPlayUtil/qml/Dialogs/MonitorConfiguration.qml index 0f796fae..5c65ee3a 100644 --- a/ScreenPlayUtil/qml/Dialogs/MonitorConfiguration.qml +++ b/ScreenPlayUtil/qml/Dialogs/MonitorConfiguration.qml @@ -30,7 +30,7 @@ Common.Dialog { Layout.alignment: Qt.AlignHCenter Layout.preferredWidth: 150 Layout.preferredHeight: 150 - source: "qrc:/assets/icons/monitor_setup.svg" + source: "qrc:/qml/ScreenPlayApp/assets/icons/monitor_setup.svg" fillMode: Image.PreserveAspectFit } diff --git a/ScreenPlayUtil/qml/GrowIconLink.qml b/ScreenPlayUtil/qml/GrowIconLink.qml index 23d1787d..ffd91b4c 100644 --- a/ScreenPlayUtil/qml/GrowIconLink.qml +++ b/ScreenPlayUtil/qml/GrowIconLink.qml @@ -21,7 +21,7 @@ Rectangle { anchors.centerIn: parent visible: false smooth: true - source: "qrc:/assets/icons/icon_info.svg" + source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_info.svg" } ColorOverlay { diff --git a/ScreenPlayUtil/qml/LicenseSelector.qml b/ScreenPlayUtil/qml/LicenseSelector.qml index d5329af3..819ab669 100644 --- a/ScreenPlayUtil/qml/LicenseSelector.qml +++ b/ScreenPlayUtil/qml/LicenseSelector.qml @@ -85,13 +85,13 @@ ColumnLayout { } ToolButton { - icon.source: "qrc:/assets/icons/icon_help_center.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_help_center.svg" icon.color: Material.iconColor onClicked: toolTip.open() } ToolButton { - icon.source: "qrc:/assets/icons/icon_open_in_new.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_open_in_new.svg" icon.color: Material.iconColor onClicked: Qt.openUrlExternally(licenseModel.get(cb.currentIndex).tldrlegal) } diff --git a/ScreenPlayUtil/qml/ModalBackgroundBlur.qml b/ScreenPlayUtil/qml/ModalBackgroundBlur.qml index 9b3821b8..582987fe 100644 --- a/ScreenPlayUtil/qml/ModalBackgroundBlur.qml +++ b/ScreenPlayUtil/qml/ModalBackgroundBlur.qml @@ -21,7 +21,7 @@ FastBlur { Image { anchors.fill: parent opacity: 0.1 - source: "qrc:/assets/images/noisy-texture-3.png" + source: "qrc:/qml/ScreenPlayApp/assets/images/noisy-texture-3.png" fillMode: Image.Tile } } diff --git a/ScreenPlayUtil/qml/Search.qml b/ScreenPlayUtil/qml/Search.qml index 24e2bc1a..d24d119b 100644 --- a/ScreenPlayUtil/qml/Search.qml +++ b/ScreenPlayUtil/qml/Search.qml @@ -12,7 +12,7 @@ Item { ToolButton { id: icnSearch - icon.source: "qrc:/assets/icons/icon_search.svg" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_search.svg" height: 30 width: 30 icon.width: 30 diff --git a/ScreenPlayUtil/qml/Slider.qml b/ScreenPlayUtil/qml/Slider.qml index aa3a2a25..cd1312c9 100644 --- a/ScreenPlayUtil/qml/Slider.qml +++ b/ScreenPlayUtil/qml/Slider.qml @@ -9,7 +9,7 @@ Item { id: root property string headline: "dummyHeandline" - property string iconSource: "qrc:/assets/icons/icon_volume.svg" + property string iconSource: "qrc:/qml/ScreenPlayApp/assets/icons/icon_volume.svg" property alias slider: slider height: 70 diff --git a/ScreenPlayUtil/qml/Tag.qml b/ScreenPlayUtil/qml/Tag.qml index 89ceb3fa..490f77c2 100644 --- a/ScreenPlayUtil/qml/Tag.qml +++ b/ScreenPlayUtil/qml/Tag.qml @@ -74,7 +74,7 @@ Item { id: name anchors.fill: parent - source: "qrc:/assets/icons/icon_close.svg" + source: "qrc:/qml/ScreenPlayApp/assets/icons/icon_close.svg" } } diff --git a/ScreenPlayUtil/qml/TrayIcon.qml b/ScreenPlayUtil/qml/TrayIcon.qml index 3a3aa87e..3fe4b4fa 100644 --- a/ScreenPlayUtil/qml/TrayIcon.qml +++ b/ScreenPlayUtil/qml/TrayIcon.qml @@ -9,7 +9,7 @@ SystemTrayIcon { property Window window visible: true - icon.source: "qrc:/assets/icons/app.ico" + icon.source: "qrc:/qml/ScreenPlayApp/assets/icons/app.ico" tooltip: qsTr("ScreenPlay - Double click to change you settings.") onActivated: function (reason) { switch (reason) { diff --git a/ScreenPlayWallpaper/CMakeLists.txt b/ScreenPlayWallpaper/CMakeLists.txt index 0372f6ce..b30c45c5 100644 --- a/ScreenPlayWallpaper/CMakeLists.txt +++ b/ScreenPlayWallpaper/CMakeLists.txt @@ -44,20 +44,27 @@ set(QML qml/Wallpaper.qml qml/WebsiteWallpaper.qml) -qt_add_resources(RESOURCES Resources.qrc) +set(RESOURCES + dot.png + qtquickcontrols2.conf + index.html +) -add_executable(${PROJECT_NAME} ${SOURCES} ${HEADER} ${RESOURCES}) +add_executable(${PROJECT_NAME} ${SOURCES} ${HEADER} ) qt_add_qml_module( ${PROJECT_NAME} URI - ScreenPlay.Wallpaper + ${PROJECT_NAME} VERSION 1.0 OUTPUT_DIRECTORY ${SCREENPLAY_QML_MODULES_PATH}/${PROJECT_NAME} + RESOURCE_PREFIX /qml QML_FILES - ${QML}) + ${QML} + RESOURCES + ${RESOURCES}) target_link_libraries( ${PROJECT_NAME} diff --git a/ScreenPlayWallpaper/Resources.qrc b/ScreenPlayWallpaper/Resources.qrc deleted file mode 100644 index 03416186..00000000 --- a/ScreenPlayWallpaper/Resources.qrc +++ /dev/null @@ -1,7 +0,0 @@ - - - dot.png - qtquickcontrols2.conf - index.html - - diff --git a/ScreenPlayWallpaper/qml/Wallpaper.qml b/ScreenPlayWallpaper/qml/Wallpaper.qml index c6a187b7..7f623daa 100644 --- a/ScreenPlayWallpaper/qml/Wallpaper.qml +++ b/ScreenPlayWallpaper/qml/Wallpaper.qml @@ -22,21 +22,21 @@ Rectangle { if (Qt.platform.os === "osx") { if ((Wallpaper.videoCodec === VideoCodec.VP8 || Wallpaper.videoCodec === VideoCodec.VP9)) { - loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaWebView.qml" + loader.source = "qrc:/qml/ScreenPlayWallpaper/qml/MultimediaWebView.qml" } else { - loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml" + loader.source = "qrc:/qml/ScreenPlayWallpaper/qml/MultimediaView.qml" } } if (Qt.platform.os === "windows") { - loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml" + loader.source = "qrc:/qml/ScreenPlayWallpaper/qml/MultimediaView.qml" } fadeIn() break case InstalledType.HTMLWallpaper: loader.setSource( - "qrc:/ScreenPlayWallpaper/qml/WebsiteWallpaper.qml", { + "qrc:/qml/ScreenPlayWallpaper/qml/WebsiteWallpaper.qml", { "url": Qt.resolvedUrl( Wallpaper.projectSourceFileAbsolute) }) @@ -47,13 +47,13 @@ Rectangle { break case InstalledType.WebsiteWallpaper: loader.setSource( - "qrc:/ScreenPlayWallpaper/qml/WebsiteWallpaper.qml", { + "qrc:/qml/ScreenPlayWallpaper/qml/WebsiteWallpaper.qml", { "url": Wallpaper.projectSourceFileAbsolute }) fadeIn() break case InstalledType.GifWallpaper: - loader.setSource("qrc:/ScreenPlayWallpaper/qml/GifWallpaper.qml", { + loader.setSource("qrc:/qml/ScreenPlayWallpaper/qml/GifWallpaper.qml", { "source": Qt.resolvedUrl( Wallpaper.projectSourceFileAbsolute) }) @@ -118,7 +118,7 @@ Rectangle { if (oldType === InstalledType.VideoWallpaper) return - loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml" + loader.source = "qrc:/qml/ScreenPlayWallpaper/qml/MultimediaView.qml" } target: Wallpaper diff --git a/ScreenPlayWallpaper/src/winwindow.cpp b/ScreenPlayWallpaper/src/winwindow.cpp index ab20d364..e7b62de3 100644 --- a/ScreenPlayWallpaper/src/winwindow.cpp +++ b/ScreenPlayWallpaper/src/winwindow.cpp @@ -454,7 +454,7 @@ void WinWindow::configureWindowGeometry() // Instead of setting "renderType: Text.NativeRendering" every time we can set it here once m_window.setTextRenderType(QQuickWindow::TextRenderType::NativeTextRendering); m_window.setResizeMode(QQuickView::ResizeMode::SizeRootObjectToView); - m_window.setSource(QUrl("qrc:/ScreenPlayWallpaper/qml/Wallpaper.qml")); + m_window.setSource(QUrl("qrc:/qml/ScreenPlayWallpaper/qml/Wallpaper.qml")); m_window.hide(); } diff --git a/ScreenPlayWeather/CMakeLists.txt b/ScreenPlayWeather/CMakeLists.txt index 2ececeff..9fbb9827 100644 --- a/ScreenPlayWeather/CMakeLists.txt +++ b/ScreenPlayWeather/CMakeLists.txt @@ -12,7 +12,7 @@ find_package( COMPONENTS Core Quick REQUIRED) -set(QML src/TestMain.qml) +set(QML qml/TestMain.qml) set(QML_PLUGIN_SOURCES src/screenplayweather.cpp) @@ -249,6 +249,7 @@ qt_add_qml_module( ${PROJECT_NAME} OUTPUT_DIRECTORY ${SCREENPLAY_QML_MODULES_PATH}/${PROJECT_NAME} + RESOURCE_PREFIX /qml VERSION 1.0 QML_FILES diff --git a/ScreenPlayWeather/src/TestMain.qml b/ScreenPlayWeather/qml/TestMain.qml similarity index 92% rename from ScreenPlayWeather/src/TestMain.qml rename to ScreenPlayWeather/qml/TestMain.qml index 6dc79f12..10785fce 100644 --- a/ScreenPlayWeather/src/TestMain.qml +++ b/ScreenPlayWeather/qml/TestMain.qml @@ -15,12 +15,7 @@ Window { id: weather city: "Friedrichshafen" onReady: { - rp.model = weather.days - print("onReady", weather.days.count) - // for (var i = 0; i < rp.count; i++) { - // rp.itemAt(i).day = weather.getDay(i) - // } } } function mapWeatherCode(code) { @@ -31,14 +26,14 @@ Window { // to https://erikflowers.github.io/weather-icons/ switch (code) { case 0: - return time + "-sunny" + return weather_prefix + "day-sunny" case 1: case 2: case 3: return weather_prefix + "cloud" case 45: case 48: - return weather_prefix + "sunny" + return weather_prefix + "day-sunny" case 51: case 53: case 55: @@ -117,7 +112,7 @@ Window { Image { Layout.alignment: Qt.AlignCenter horizontalAlignment: Image.AlignHCenter - source: "qrc:/ScreenPlayWeather/assets/icons/" + root.mapWeatherCode( + source: "qrc:/qml/ScreenPlayWeather/assets/icons/" + root.mapWeatherCode( weatherCode) + ".svg" } diff --git a/ScreenPlayWeather/src/TestMain.cpp b/ScreenPlayWeather/src/TestMain.cpp index 17d32359..8c567bb6 100644 --- a/ScreenPlayWeather/src/TestMain.cpp +++ b/ScreenPlayWeather/src/TestMain.cpp @@ -9,9 +9,11 @@ int main(int argc, char* argv[]) QGuiApplication app(argc, argv); QQmlApplicationEngine engine; + engine.addImportPath(app.applicationDirPath() + "/qml"); + // The first subfolder is the libraryName followed by the regular // folder strucutre: LibararyName/Subfolder - const QUrl url(u"qrc:/ScreenPlayWeather/src/TestMain.qml"_qs); + const QUrl url(u"qrc:/qml/ScreenPlayWeather/qml/TestMain.qml"_qs); QObject::connect( &engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject* obj, const QUrl& objUrl) { diff --git a/ScreenPlayWidget/CMakeLists.txt b/ScreenPlayWidget/CMakeLists.txt index 4822251d..09ac7251 100644 --- a/ScreenPlayWidget/CMakeLists.txt +++ b/ScreenPlayWidget/CMakeLists.txt @@ -61,6 +61,7 @@ qt_add_qml_module( 1.0 OUTPUT_DIRECTORY ${SCREENPLAY_QML_MODULES_PATH}/${PROJECT_NAME} + RESOURCE_PREFIX /qml QML_FILES ${QML} RESOURCES diff --git a/ScreenPlayWidget/src/widgetwindow.cpp b/ScreenPlayWidget/src/widgetwindow.cpp index ee2f9f7c..1983c2fc 100644 --- a/ScreenPlayWidget/src/widgetwindow.cpp +++ b/ScreenPlayWidget/src/widgetwindow.cpp @@ -68,10 +68,10 @@ WidgetWindow::WidgetWindow( qWarning() << "Cannot parse Wallpaper type from value" << m_project.value("type"); } } - + m_window.engine()->addImportPath(qGuiApp->applicationDirPath() + "/qml"); m_window.setTextRenderType(QQuickWindow::TextRenderType::NativeTextRendering); m_window.setResizeMode(QQuickView::ResizeMode::SizeViewToRootObject); - m_window.setSource(QUrl("qrc:/ScreenPlayWidget/qml/Widget.qml")); + m_window.setSource(QUrl("qrc:/qml/ScreenPlayWidget/qml/Widget.qml")); m_window.setPosition(m_position); m_window.show(); diff --git a/ScreenPlayWorkshop/CMakeLists.txt b/ScreenPlayWorkshop/CMakeLists.txt index ba5113b1..4a895451 100644 --- a/ScreenPlayWorkshop/CMakeLists.txt +++ b/ScreenPlayWorkshop/CMakeLists.txt @@ -13,7 +13,7 @@ find_package( REQUIRED) set(QML - src/TestMain.qml + qml/TestMain.qml qml/Background.qml qml/Forum.qml qml/Navigation.qml @@ -105,6 +105,7 @@ qt_add_qml_module( ${PROJECT_NAME} OUTPUT_DIRECTORY ${WORKSHOP_PLUGIN_DIR} + RESOURCE_PREFIX /qml VERSION 1.0 QML_FILES diff --git a/ScreenPlayWorkshop/qml/SteamWorkshop.qml b/ScreenPlayWorkshop/qml/SteamWorkshop.qml index d8eaccd0..fe763531 100644 --- a/ScreenPlayWorkshop/qml/SteamWorkshop.qml +++ b/ScreenPlayWorkshop/qml/SteamWorkshop.qml @@ -16,7 +16,7 @@ Item { id: screenPlayWorkshop Component.onCompleted: { if (screenPlayWorkshop.init()) { - stackView.push("qrc:/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml", { + stackView.push("qrc:/qml/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml", { "stackView": stackView, "screenPlayWorkshop": screenPlayWorkshop, "steamWorkshop": screenPlayWorkshop.steamWorkshop, diff --git a/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml b/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml index 2ce40451..d458957c 100644 --- a/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml +++ b/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml @@ -276,7 +276,7 @@ Item { text: qsTr("Profile") onClicked: { stackView.push( - "qrc:/ScreenPlayWorkshop/qml/SteamProfile.qml", + "qrc:/qml/ScreenPlayWorkshop/qml/SteamProfile.qml", { "screenPlayWorkshop": root.screenPlayWorkshop, "steamWorkshop": root.steamWorkshop @@ -296,7 +296,7 @@ Item { text: qsTr("Upload") onClicked: { stackView.push( - "qrc:/ScreenPlayWorkshop/qml/upload/UploadProject.qml", + "qrc:/qml/ScreenPlayWorkshop/qml/upload/UploadProject.qml", { "screenPlayWorkshop": root.screenPlayWorkshop, "steamWorkshop": root.steamWorkshop diff --git a/ScreenPlayWorkshop/src/TestMain.qml b/ScreenPlayWorkshop/qml/TestMain.qml similarity index 81% rename from ScreenPlayWorkshop/src/TestMain.qml rename to ScreenPlayWorkshop/qml/TestMain.qml index e7bc0376..f891b922 100644 --- a/ScreenPlayWorkshop/src/TestMain.qml +++ b/ScreenPlayWorkshop/qml/TestMain.qml @@ -13,6 +13,6 @@ Window { Loader { anchors.fill: parent - source:"qrc:/ScreenPlayWorkshop/qml/SteamWorkshop.qml" + source:"qrc:/qml/ScreenPlayWorkshop/qml/SteamWorkshop.qml" } } diff --git a/ScreenPlayWorkshop/src/TestMain.cpp b/ScreenPlayWorkshop/src/TestMain.cpp index d9c93740..fa4f2a71 100644 --- a/ScreenPlayWorkshop/src/TestMain.cpp +++ b/ScreenPlayWorkshop/src/TestMain.cpp @@ -19,9 +19,10 @@ int main(int argc, char* argv[]) "Error: only enums"); QQmlApplicationEngine engine; + engine.addImportPath(app.applicationDirPath() + "/qml"); // The first subfolder is the libraryName followed by the regular // folder strucutre: LibararyName/Subfolder - const QUrl url(u"qrc:/ScreenPlayWorkshop/src/TestMain.qml"_qs); + const QUrl url(u"qrc:/qml/ScreenPlayWorkshop/qml/TestMain.qml"_qs); QObject::connect( &engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject* obj, const QUrl& objUrl) { diff --git a/ScreenPlayWorkshop/src/steamworkshop.cpp b/ScreenPlayWorkshop/src/steamworkshop.cpp index cc8d8f52..46b6912b 100644 --- a/ScreenPlayWorkshop/src/steamworkshop.cpp +++ b/ScreenPlayWorkshop/src/steamworkshop.cpp @@ -200,20 +200,27 @@ void SteamWorkshop::searchWorkshop(const int enumEUGCQuery) if (!checkOnline()) return; - auto searchHandle = SteamUGC()->CreateQueryAllUGCRequest( + if (m_searchHandle != 0) { + qInfo() << "Invalid m_searchHandle"; + return; + } + + auto m_searchHandle = SteamUGC()->CreateQueryAllUGCRequest( static_cast(enumEUGCQuery), EUGCMatchingUGCType::k_EUGCMatchingUGCType_Items, m_appID, m_appID, m_workshopListModel->currentPage()); + qInfo() << m_searchHandle; + m_workshopListModel->clear(); //Important: First send the request to get the Steam API Call then set the handler - SteamUGC()->SetReturnAdditionalPreviews(searchHandle, true); - SteamUGC()->SetReturnKeyValueTags(searchHandle, true); - SteamUGC()->SetReturnLongDescription(searchHandle, true); - m_steamUGCQuerySearchWorkshopResult.Set(SteamUGC()->SendQueryUGCRequest(searchHandle), this, &SteamWorkshop::onWorkshopSearched); + SteamUGC()->SetReturnAdditionalPreviews(m_searchHandle, true); + SteamUGC()->SetReturnKeyValueTags(m_searchHandle, true); + SteamUGC()->SetReturnLongDescription(m_searchHandle, true); + m_steamUGCQuerySearchWorkshopResult.Set(SteamUGC()->SendQueryUGCRequest(m_searchHandle), this, &SteamWorkshop::onWorkshopSearched); } void SteamWorkshop::onWorkshopSearched(SteamUGCQueryCompleted_t* pCallback, bool bIOFailure) @@ -222,6 +229,8 @@ void SteamWorkshop::onWorkshopSearched(SteamUGCQueryCompleted_t* pCallback, bool qWarning() << "onWorkshopSearched ioFailure"; return; } + + qInfo() << "onWorkshopSearched" << m_searchHandle; queryWorkshopItemFromHandle(m_workshopListModel.get(), pCallback); } @@ -302,8 +311,11 @@ bool SteamWorkshop::queryWorkshopItemFromHandle(SteamWorkshopListModel* listMode } } + qInfo() << m_searchHandle << pCallback->m_handle; SteamUGC()->ReleaseQueryUGCRequest(pCallback->m_handle); + qInfo() << m_searchHandle << pCallback->m_handle; + emit workshopSearchCompleted(results); return true; } diff --git a/ScreenPlayWorkshop/src/steamworkshop.h b/ScreenPlayWorkshop/src/steamworkshop.h index 17951c6e..6093a4e9 100644 --- a/ScreenPlayWorkshop/src/steamworkshop.h +++ b/ScreenPlayWorkshop/src/steamworkshop.h @@ -212,6 +212,8 @@ private: UGCQueryHandle_t m_UGCRegquestItemDetailHandle = 0; SteamAPICall_t m_UGCRegquestItemDetailCall = 0; + UGCQueryHandle_t m_searchHandle = 0; + QTimer m_pollTimer; QQueue m_bulkUploadqueue;