diff --git a/.gitignore b/.gitignore index 365f2fa6..b4ef7825 100644 --- a/.gitignore +++ b/.gitignore @@ -95,3 +95,4 @@ _deps /Common/ffmpeg/* /Docs/html/screenplay.index /ContentBuilder/** +/aqtinstall.log diff --git a/CMake/CMakeLists.txt b/CMake/CMakeLists.txt index 0b954bc4..8083506c 100644 --- a/CMake/CMakeLists.txt +++ b/CMake/CMakeLists.txt @@ -1,8 +1,7 @@ project(CMake) set(FILES # cmake-format: sortable - CopyRecursive.cmake - QtUpdateTranslations.cmake) + CopyRecursive.cmake QtUpdateTranslations.cmake) add_custom_target( ${PROJECT_NAME} diff --git a/CMakeLists.txt b/CMakeLists.txt index da7d2998..3e261871 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,17 +1,18 @@ cmake_minimum_required(VERSION 3.16.0) -project(ScreenPlay - VERSION 0.15.0 - DESCRIPTION "Modern, Cross Plattform, Live Wallpaper, Widgets and AppDrawer!" - HOMEPAGE_URL "https://screen-play.app/" - LANGUAGES CXX) +project( + ScreenPlay + VERSION 0.15.0 + DESCRIPTION "Modern, Cross Plattform, Live Wallpaper, Widgets and AppDrawer!" + HOMEPAGE_URL "https://screen-play.app/" + LANGUAGES CXX) # This sets cmake to compile all dlls into the main directory set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) -option(SCREENPLAY_STEAM "For FOSS distribution so we do not bundle proprietary code." ON) +option(SCREENPLAY_STEAM "For FOSS distribution so we do not bundle proprietary code." ON) option(SCREENPLAY_TESTS "Enables UI tests." OFF) option(SCREENPLAY_CREATE_INSTALLER "Indicates whether an installer via the Qt Installer Framework is created." OFF) @@ -148,8 +149,7 @@ if(${SCREENPLAY_CREATE_INSTALLER}) DESCRIPTION "This installs ScreenPlay.") cpack_ifw_configure_component( - ScreenPlayApp - FORCED_INSTALLATION + ScreenPlayApp FORCED_INSTALLATION NAME "ScreenPlay" VERSION ${PROJECT_VERSION} # Version of component DESCRIPTION "Welcome to the K3000 installer." @@ -158,4 +158,3 @@ if(${SCREENPLAY_CREATE_INSTALLER}) CHECKABLE FALSE) endif() - diff --git a/ScreenPlay/CMakeLists.txt b/ScreenPlay/CMakeLists.txt index 04e84ac4..723a39ac 100644 --- a/ScreenPlay/CMakeLists.txt +++ b/ScreenPlay/CMakeLists.txt @@ -71,7 +71,6 @@ set(QML qml/Monitors/MonitorsProjectSettingItem.qml qml/Navigation/Navigation.qml qml/Navigation/NavigationItem.qml - qml/Navigation/NavigationWallpaperConfiguration.qml qml/Monitors/DefaultVideoControls.qml qml/Common/TagSelector.qml qml/Common/Tag.qml @@ -146,6 +145,7 @@ list( ${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_it_IT.ts ${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_nl_NL.ts ${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_de_DE.ts + ${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_pl_PL.ts ${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_zh_CN.ts ${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_pt_BR.ts ${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_es_ES.ts @@ -175,8 +175,6 @@ find_package( WebSockets Svg LinguistTools - WebEngineQuick - WebEngineCore Test) qt_add_resources(RESOURCES Resources.qrc) @@ -184,8 +182,6 @@ qt_add_big_resources(FONTS fonts.qrc) add_library(ScreenPlayLib ${SOURCES} ${HEADER} ${RESOURCES} ${FONTS}) -target_include_directories(ScreenPlayLib PUBLIC ./ src/ ${LibArchive_INCLUDE_DIRS}) - target_link_libraries( ScreenPlayLib PUBLIC ScreenPlaySDK @@ -199,9 +195,6 @@ target_link_libraries( Qt6::Core Qt6::WebSockets Qt6::Svg - Qt6::WebEngineQuick - Qt6::WebEngineCore - ${LibArchive_LIBRARIES} SteamSDKQtEnums) if(${TESTS_ENABLED}) diff --git a/ScreenPlay/Resources.qrc b/ScreenPlay/Resources.qrc index 85d1d5dd..625e5a34 100644 --- a/ScreenPlay/Resources.qrc +++ b/ScreenPlay/Resources.qrc @@ -148,5 +148,11 @@ translations/ScreenPlay_it_IT.ts 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 + translations/ScreenPlay_pl_PL.qm + translations/ScreenPlay_pl_PL.ts diff --git a/ScreenPlay/app.cpp b/ScreenPlay/app.cpp index 8c60f339..cfe79715 100644 --- a/ScreenPlay/app.cpp +++ b/ScreenPlay/app.cpp @@ -210,14 +210,12 @@ void App::init() } qmlRegisterSingletonInstance("ScreenPlay", 1, 0, "ScreenPlay", this); + QGuiApplication::instance()->addLibraryPath(QGuiApplication::instance()->applicationDirPath()); -#ifdef Q_OS_MACOS - // Needed for macos .app files - m_mainWindowEngine->addPluginPath(QGuiApplication::instance()->applicationDirPath()); -#endif if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE) { setupKDE(); } + m_mainWindowEngine->load(QUrl(QStringLiteral("qrc:/ScreenPlay/main.qml"))); // Must be called last to display a error message on startup by the qml engine diff --git a/ScreenPlay/app.h b/ScreenPlay/app.h index 92e774c3..342d3ce8 100644 --- a/ScreenPlay/app.h +++ b/ScreenPlay/app.h @@ -48,7 +48,6 @@ #include #include #include -#include #include "src/create.h" #include "src/globalvariables.h" @@ -64,8 +63,6 @@ #include #include -class ScreenPlayWorkshopPlugin; - namespace ScreenPlay { class App : public QObject { @@ -119,6 +116,8 @@ public slots: QString version() const; void exit(); + QPointF cursorPos() { return QCursor::pos(); } + void setGlobalVariables(GlobalVariables* globalVariables) { if (m_globalVariables.get() == globalVariables) @@ -215,11 +214,11 @@ public slots: m_wizards.reset(wizards); emit wizardsChanged(m_wizards.get()); } + private: bool setupKDE(); private: - QPluginLoader m_workshopPlugin; QNetworkAccessManager m_networkAccessManager; QElapsedTimer m_continuousIntegrationMetricsTimer; std::unique_ptr m_mainWindowEngine; diff --git a/ScreenPlay/assets/icons/icon_close_black_24dp.svg b/ScreenPlay/assets/icons/icon_close_black_24dp.svg new file mode 100644 index 00000000..989837ca --- /dev/null +++ b/ScreenPlay/assets/icons/icon_close_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ScreenPlay/assets/icons/icon_minimize.svg b/ScreenPlay/assets/icons/icon_minimize.svg new file mode 100644 index 00000000..a5f54781 --- /dev/null +++ b/ScreenPlay/assets/icons/icon_minimize.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/ScreenPlay/assets/icons/icon_video_settings_black_24dp.svg b/ScreenPlay/assets/icons/icon_video_settings_black_24dp.svg new file mode 100644 index 00000000..1cd53c98 --- /dev/null +++ b/ScreenPlay/assets/icons/icon_video_settings_black_24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ScreenPlay/main.cpp b/ScreenPlay/main.cpp index 874bc134..b37aa693 100644 --- a/ScreenPlay/main.cpp +++ b/ScreenPlay/main.cpp @@ -36,7 +36,6 @@ #include #include #include -#include #include #define DOCTEST_CONFIG_IMPLEMENT @@ -47,9 +46,6 @@ int main(int argc, char* argv[]) { Q_INIT_RESOURCE(Resources); - QtWebEngineQuick::initialize(); - QApplication::setAttribute(Qt::AA_ShareOpenGLContexts); - QApplication qtGuiApp(argc, argv); // Unit tests diff --git a/ScreenPlay/main.qml b/ScreenPlay/main.qml index 2f79f610..98c44b95 100644 --- a/ScreenPlay/main.qml +++ b/ScreenPlay/main.qml @@ -15,18 +15,18 @@ import "qml/Workshop" as Workshop import "qml/Community" as Community ApplicationWindow { - id: window + id: root function setTheme(theme) { switch (theme) { case Settings.System: - window.Material.theme = Material.System; + root.Material.theme = Material.System; break; case Settings.Dark: - window.Material.theme = Material.Dark; + root.Material.theme = Material.Dark; break; case Settings.Light: - window.Material.theme = Material.Light; + root.Material.theme = Material.Light; break; } } @@ -38,7 +38,7 @@ ApplicationWindow { } if (name === "Installed") { - stackView.replace("qrc:/ScreenPlay/qml/" + name + "/" + name + ".qml", { + stackView.replace("qrc:/ScreenPlay/qml/Installed/Installed.qml", { "sidebar": sidebar }) return @@ -55,159 +55,254 @@ ApplicationWindow { title: "ScreenPlay Alpha - " + ScreenPlay.version() minimumHeight: 450 minimumWidth: 1050 + flags: Qt.FramelessWindowHint |Qt.Window + // Partial workaround for // https://bugreports.qt.io/browse/QTBUG-86047 Material.accent: Material.color(Material.Orange) onVisibilityChanged: { - if (window.visibility === 2) + if (root.visibility === 2) ScreenPlay.installedListModel.reset(); } + onClosing: { + if (ScreenPlay.screenPlayManager.activeWallpaperCounter === 0 + && ScreenPlay.screenPlayManager.activeWidgetsCounter === 0) { + Qt.quit() + } + } Component.onCompleted: { setTheme(ScreenPlay.settings.theme); - switchPage("Installed"); + stackView.push("qrc:/ScreenPlay/qml/Installed/Installed.qml", { + "sidebar": sidebar + }) if (!ScreenPlay.settings.silentStart) - window.show(); + root.show(); } - Connections { - function onThemeChanged(theme) { - setTheme(theme); - } + Item { + anchors.fill: parent + anchors.margins: 1 - target: ScreenPlay.settings - } - Connections { - function onRequestNavigation(nav) { - switchPage(nav); - } - target: ScreenPlay.util - } - - Connections { - function onRequestRaise() { - window.show(); - } - - target: ScreenPlay.screenPlayManager - } - - Dialogs.SteamNotAvailable { - id: dialogSteam - } - - Dialogs.MonitorConfiguration { - } - - Dialogs.CriticalError { - mainWindow: window - } - - Common.TrayIcon { - } - - StackView { - id: stackView - objectName: "stackView" - property int duration: 300 - - anchors { - top: nav.bottom - right: parent.right - bottom: parent.bottom - left: parent.left - } - - replaceEnter: Transition { - OpacityAnimator { - from: 0 - to: 1 - duration: stackView.duration - easing.type: Easing.InOutQuart + Connections { + function onThemeChanged(theme) { + setTheme(theme); } - ScaleAnimator { - from: 0.8 - to: 1 - duration: stackView.duration - easing.type: Easing.InOutQuart + target: ScreenPlay.settings + } + + Connections { + function onRequestNavigation(nav) { + switchPage(nav); + } + + target: ScreenPlay.util + } + + Connections { + function onRequestRaise() { + root.show(); + } + + target: ScreenPlay.screenPlayManager + } + + Dialogs.SteamNotAvailable { + id: dialogSteam + } + + Dialogs.MonitorConfiguration { + } + + Dialogs.CriticalError { + window: root + } + + Common.TrayIcon { + window: root + } + + StackView { + id: stackView + objectName: "stackView" + property int duration: 300 + + anchors { + top: nav.bottom + right: parent.right + bottom: parent.bottom + left: parent.left + } + + replaceEnter: Transition { + OpacityAnimator { + from: 0 + to: 1 + duration: stackView.duration + easing.type: Easing.InOutQuart + } + + ScaleAnimator { + from: 0.8 + to: 1 + duration: stackView.duration + easing.type: Easing.InOutQuart + } + + } + + replaceExit: Transition { + OpacityAnimator { + from: 1 + to: 0 + duration: stackView.duration + easing.type: Easing.InOutQuart + } + + ScaleAnimator { + from: 1 + to: 0.8 + duration: stackView.duration + easing.type: Easing.InOutQuart + } + } } - replaceExit: Transition { - OpacityAnimator { - from: 1 - to: 0 - duration: stackView.duration - easing.type: Easing.InOutQuart + Connections { + function onSetSidebarActive(active) { + if (active) + sidebar.state = "active"; + else + sidebar.state = "inactive"; } - ScaleAnimator { - from: 1 - to: 0.8 - duration: stackView.duration - easing.type: Easing.InOutQuart + function onSetNavigationItem(pos) { + if (pos === 0) + nav.onPageChanged("Create"); + else + nav.onPageChanged("Workshop"); + } + + target: stackView.currentItem + ignoreUnknownSignals: true + } + + Installed.Sidebar { + id: sidebar + objectName: "installedSidebar" + navHeight: nav.height + + anchors { + top: parent.top + right: parent.right + bottom: parent.bottom } } - } + Navigation.Navigation { + id: nav + window: root + width:parent.width + anchors { + top: parent.top + right: parent.right + left: parent.left + } + + onChangePage: (name)=> { + monitors.close(); + switchPage(name); + } + - Connections { - function onSetSidebarActive(active) { - if (active) - sidebar.state = "active"; - else - sidebar.state = "inactive"; } - function onSetNavigationItem(pos) { - if (pos === 0) - nav.onPageChanged("Create"); - else - nav.onPageChanged("Workshop"); + Monitors.Monitors { + id: monitors } - target: stackView.currentItem - ignoreUnknownSignals: true - } - Installed.Sidebar { - id: sidebar - objectName: "installedSidebar" - - navHeight: nav.height - - anchors { - top: parent.top - right: parent.right - bottom: parent.bottom - } } - Navigation.Navigation { - id: nav - - onChangePage: (name)=> { - monitors.close(); - switchPage(name); + Rectangle { + height: 1 + color:"#222" + anchors{ + top:parent.top + right:parent.right + left:parent.left } - - anchors { - top: parent.top - right: parent.right - left: parent.left + } + Rectangle { + height: 1 + color:"#222" + anchors{ + bottom:parent.bottom + right:parent.right + left:parent.left + } + } + Rectangle { + width: 1 + color:"#222" + anchors{ + left:parent.left + bottom:parent.bottom + top:parent.top + } + } + Rectangle { + width: 1 + color:"#222" + anchors{ + right:parent.right + bottom:parent.bottom + top:parent.top } - } - Monitors.Monitors { - id: monitors + Rectangle { + width: 15 + height:width + color:"#555" + anchors{ + right:parent.right + bottom:parent.bottom + margins: 1 + } + MouseArea { + id: maResize + anchors.fill: parent + cursorShape: Qt.SizeFDiagCursor + property point clickPosition + property size originalSize + onPressed: { + maResize.clickPosition = Qt.point(maResize.mouseX, maResize.mouseY); + maResize.clickPosition = maResize.mapToGlobal(maResize.clickPosition.x , maResize.clickPosition.y ) + maResize.originalSize = Qt.size(root.width, root.height) + } + onPositionChanged: { + if (maResize.pressed){ + let newPos = maResize.mapToGlobal(maResize.mouseX, maResize.mouseY) + let newPosX = newPos.x - maResize.clickPosition.x + let newPosY = newPos.y - maResize.clickPosition.y + + root.setGeometry(root.x,root.y, maResize.originalSize.width + newPosX, + maResize.originalSize.height + newPosY) + + } + + + } + } } } diff --git a/ScreenPlay/qml/Common/Dialogs/CriticalError.qml b/ScreenPlay/qml/Common/Dialogs/CriticalError.qml index b27bbcaf..1c1779dc 100644 --- a/ScreenPlay/qml/Common/Dialogs/CriticalError.qml +++ b/ScreenPlay/qml/Common/Dialogs/CriticalError.qml @@ -9,7 +9,7 @@ import ScreenPlay 1.0 Dialog { id: root - property Window mainWindow + property ApplicationWindow window property string message modal: true @@ -22,7 +22,7 @@ Dialog { Connections { function onDisplayErrorPopup(msg) { root.message = msg; - root.mainWindow.show(); + root.window.show(); root.open(); } diff --git a/ScreenPlay/qml/Common/TrayIcon.qml b/ScreenPlay/qml/Common/TrayIcon.qml index 4a5e4e90..609b67cc 100644 --- a/ScreenPlay/qml/Common/TrayIcon.qml +++ b/ScreenPlay/qml/Common/TrayIcon.qml @@ -1,10 +1,12 @@ import QtQuick -import Qt.labs.platform 1.1 +import QtQuick.Window +import Qt.labs.platform import ScreenPlay 1.0 SystemTrayIcon { id: root + property var window visible: true icon.source: "qrc:/assets/icons/app.ico" tooltip: qsTr("ScreenPlay - Double click to change you settings.") diff --git a/ScreenPlay/qml/Community/Community.qml b/ScreenPlay/qml/Community/Community.qml index 60fae792..5f73f20e 100644 --- a/ScreenPlay/qml/Community/Community.qml +++ b/ScreenPlay/qml/Community/Community.qml @@ -4,16 +4,24 @@ import QtQuick.Controls.Material import Qt5Compat.GraphicalEffects import QtQuick.Layouts import ScreenPlay 1.0 -import QtWebEngine Item { id: root + XMLNewsfeed { + anchors { + top: navWrapper.bottom + right: parent.right + bottom: parent.bottom + left: parent.left + } + } + Rectangle { id: navWrapper color: Material.theme === Material.Light ? "white" : Material.background - height: 50 + height: 60 anchors { top: parent.top @@ -21,60 +29,72 @@ Item { left: parent.left } - TabBar { + RowLayout { id: nav height: parent.height - currentIndex: 0 anchors { top: parent.top left: parent.left + leftMargin: 20 bottom: parent.bottom - right: parent.right } - CommunityNavItem { + Button { text: qsTr("News") - openLink: "https://screen-play.app/blog/" + onClicked: Qt.openUrlExternally("https://screen-play.app/blog/") icon.source: "qrc:/assets/icons/icon_document.svg" + icon.width: 14 + icon.height: 14 + Layout.alignment: Qt.AlignVCenter } - CommunityNavItem { + Button { text: qsTr("Wiki") - openLink: "https://kelteseth.gitlab.io/ScreenPlayDocs/" + onClicked: Qt.openUrlExternally("https://kelteseth.gitlab.io/ScreenPlayDocs/") icon.source: "qrc:/assets/icons/icon_help_center.svg" + icon.width: 14 + icon.height: 14 + Layout.alignment: Qt.AlignVCenter } - CommunityNavItem { + Button { text: qsTr("Forum") - openLink: "https://forum.screen-play.app/" + onClicked: Qt.openUrlExternally("https://forum.screen-play.app/") icon.source: "qrc:/assets/icons/icon_forum.svg" + icon.width: 14 + icon.height: 14 + Layout.alignment: Qt.AlignVCenter } - CommunityNavItem { - text: qsTr("Issue List") - openLink: "https://gitlab.com/kelteseth/ScreenPlay/-/issues" + Button { + text: qsTr("Issue Tracker") + onClicked: Qt.openUrlExternally("https://gitlab.com/kelteseth/ScreenPlay/-/issues") icon.source: "qrc:/assets/icons/icon_report_problem.svg" + icon.width: 14 + icon.height: 14 + Layout.alignment: Qt.AlignVCenter } - CommunityNavItem { + Button { text: qsTr("Contribute") - openLink: "https://gitlab.com/kelteseth/ScreenPlay#general-contributing" + onClicked: Qt.openUrlExternally("https://gitlab.com/kelteseth/ScreenPlay#general-contributing") icon.source: "qrc:/assets/icons/icon_supervisor_account.svg" + icon.width: 14 + icon.height: 14 + Layout.alignment: Qt.AlignVCenter } - CommunityNavItem { + Button { text: qsTr("Steam Workshop") - openLink: "steam://url/GameHub/672870" + onClicked: Qt.openUrlExternally("steam://url/GameHub/672870") icon.source: "qrc:/assets/icons/icon_steam.svg" + icon.width: 14 + icon.height: 14 + Layout.alignment: Qt.AlignVCenter } - - background: Item { - } - } - } LinearGradient { @@ -99,90 +119,8 @@ Item { position: 1 color: "transparent" } - } - } - SwipeView { - id: swipeView - - currentIndex: nav.currentIndex - - anchors { - top: navWrapper.bottom - right: parent.right - bottom: parent.bottom - left: parent.left - } - - XMLNewsfeed { - } - - Repeater { - id: repeater - - Loader { - active: SwipeView.isCurrentItem || SwipeView.isNextItem || SwipeView.isPreviousItem - asynchronous: true - - sourceComponent: Item { - Component.onCompleted: timer.start() - - Timer { - id: timer - - interval: 200 - onTriggered: webView.url = webModel.get(index + 1).url - } - - WebEngineView { - id: webView - - anchors.fill: parent - } - - } - - } - - model: ListModel { - id: webModel - - ListElement { - url: "https://screen-play.app/blog/" - } - - ListElement { - url: "https://kelteseth.gitlab.io/ScreenPlayDocs/" - } - - ListElement { - url: "https://forum.screen-play.app/" - } - - ListElement { - url: "https://gitlab.com/kelteseth/ScreenPlay/-/issues" - } - - ListElement { - url: "https://gitlab.com/kelteseth/ScreenPlay#general-contributing" - } - - ListElement { - url: "https://steamcommunity.com/app/672870/workshop/" - } - - } - - } - - } - - Binding { - target: nav - property: "currentIndex" - value: swipeView.currentIndex - } } diff --git a/ScreenPlay/qml/Community/CommunityNavItem.qml b/ScreenPlay/qml/Community/CommunityNavItem.qml index 25f71c62..ad347945 100644 --- a/ScreenPlay/qml/Community/CommunityNavItem.qml +++ b/ScreenPlay/qml/Community/CommunityNavItem.qml @@ -9,6 +9,7 @@ TabButton { property url openLink height: parent.height + onClicked: Qt.openUrlExternally(control.openLink) contentItem: Item { anchors.fill: parent diff --git a/ScreenPlay/qml/Community/XMLNewsfeed.qml b/ScreenPlay/qml/Community/XMLNewsfeed.qml index 28f4e77c..10061b93 100644 --- a/ScreenPlay/qml/Community/XMLNewsfeed.qml +++ b/ScreenPlay/qml/Community/XMLNewsfeed.qml @@ -17,7 +17,6 @@ Item { flickDeceleration: 5000 cellHeight: 250 cellWidth: 450 - clip: true model: feedModel anchors { diff --git a/ScreenPlay/qml/Create/Wizards/Importh264/Importh264Init.qml b/ScreenPlay/qml/Create/Wizards/Importh264/Importh264Init.qml index 7db08486..a458ba40 100644 --- a/ScreenPlay/qml/Create/Wizards/Importh264/Importh264Init.qml +++ b/ScreenPlay/qml/Create/Wizards/Importh264/Importh264Init.qml @@ -120,7 +120,7 @@ Item { text: qsTr("Open Documentation") Material.background: Material.LightGreen - Material.foreground: "white" + highlighted: true icon.source: "qrc:/assets/icons/icon_document.svg" icon.color: "white" icon.width: 16 diff --git a/ScreenPlay/qml/Installed/Installed.qml b/ScreenPlay/qml/Installed/Installed.qml index 879da4eb..d48e3db5 100644 --- a/ScreenPlay/qml/Installed/Installed.qml +++ b/ScreenPlay/qml/Installed/Installed.qml @@ -91,8 +91,8 @@ Item { property bool isScrolling: gridView.verticalVelocity != 0 boundsBehavior: Flickable.DragOverBounds - maximumFlickVelocity: 2500 - flickDeceleration: 500 + maximumFlickVelocity: 5000 + flickDeceleration: 5000 anchors.fill: parent cellWidth: 340 cellHeight: 200 diff --git a/ScreenPlay/qml/Monitors/DefaultVideoControls.qml b/ScreenPlay/qml/Monitors/DefaultVideoControls.qml index df5e2bb7..70176db2 100644 --- a/ScreenPlay/qml/Monitors/DefaultVideoControls.qml +++ b/ScreenPlay/qml/Monitors/DefaultVideoControls.qml @@ -114,7 +114,7 @@ ColumnLayout { "text": qsTr("Scale_Down") }] onActivated: { - ScreenPlay.screenPlayManager.setWallpaperValueAtMonitorIndex(activeMonitorIndex, "fillmode", settingsComboBox.currentText); + ScreenPlay.screenPlayManager.setWallpaperFillModeAtMonitorIndex(activeMonitorIndex,settingsComboBox.currentValue); } } diff --git a/ScreenPlay/qml/Monitors/MonitorSelection.qml b/ScreenPlay/qml/Monitors/MonitorSelection.qml index b6ca8212..38c8e65f 100644 --- a/ScreenPlay/qml/Monitors/MonitorSelection.qml +++ b/ScreenPlay/qml/Monitors/MonitorSelection.qml @@ -17,7 +17,7 @@ Rectangle { property alias background: root.color property alias radius: root.radius - signal requestProjectSettings(int index, var installedType, string appID) + signal requestProjectSettings(var index, var installedType, var appID) function selectOnly(index) { for (var i = 0; i < rp.count; i++) { @@ -62,7 +62,7 @@ Rectangle { } function resize() { - var absoluteDesktopSize = ScreenPlay.monitorListModel.getAbsoluteDesktopSize(); + var absoluteDesktopSize = ScreenPlay.monitorListModel.absoluteDesktopSize(); var isWidthGreaterThanHeight = false; var windowsDelta = 0; if (absoluteDesktopSize.width < absoluteDesktopSize.height) { @@ -135,22 +135,14 @@ Rectangle { delegate: MonitorSelectionItem { id: delegate - monitorID: m_monitorID - monitorName: m_name appID: m_appID - height: m_availableGeometry.height - width: m_availableGeometry.width - x: m_availableGeometry.x - y: m_availableGeometry.y - monitorManufacturer: m_manufacturer - monitorModel: m_model - monitorSize: m_availableGeometry + geometry: m_geometry fontSize: root.fontSize - index: m_number + index: m_index previewImage: m_previewImage installedType: m_installedType monitorWithoutContentSelectable: root.monitorWithoutContentSelectable - onMonitorSelected: root.selectMonitorAt(delegate.index) + onMonitorSelected: (index) => root.selectMonitorAt(index) } } @@ -167,15 +159,5 @@ Rectangle { } -// layer.effect: InnerShadow { -// cached: true -// fast: true -// smooth: true -// radius: 32 -// spread: 0.8 -// verticalOffset: 3 -// color: "#55000000" -// } - // Width of the Sidebar or Space that should be used } diff --git a/ScreenPlay/qml/Monitors/MonitorSelectionItem.qml b/ScreenPlay/qml/Monitors/MonitorSelectionItem.qml index d33f044c..d7849c09 100644 --- a/ScreenPlay/qml/Monitors/MonitorSelectionItem.qml +++ b/ScreenPlay/qml/Monitors/MonitorSelectionItem.qml @@ -7,11 +7,14 @@ import ScreenPlay.Enums.InstalledType 1.0 Item { id: root - property rect monitorSize: Qt.rect(0, 0, 0, 0) - property string monitorModel - property string monitorManufacturer - property string monitorName - property string monitorID + property rect geometry + onGeometryChanged: { + root.width = geometry.width + root.height = geometry.height + root.x = geometry.x + root.y = geometry.y + } + property string previewImage property string appID property var installedType: InstalledType.QMLWallpaper @@ -34,7 +37,7 @@ Item { } Text { - text: monitorSize.width + "x" + monitorSize.height + text: geometry.width + "x" + geometry.height color: Material.foreground horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter @@ -72,13 +75,6 @@ Item { fillMode: Image.PreserveAspectCrop } - Text { - font.pointSize: 14 - text: root.index - anchors.centerIn: parent - color: "white" - } - MouseArea { anchors.fill: parent hoverEnabled: true @@ -86,7 +82,7 @@ Item { onClicked: { if (monitorWithoutContentSelectable) { monitorSelected(index); - return ; + return } if (root.hasContent && !root.monitorWithoutContentSelectable) monitorSelected(index); diff --git a/ScreenPlay/qml/Monitors/Monitors.qml b/ScreenPlay/qml/Monitors/Monitors.qml index 1326bc58..5f7a3243 100644 --- a/ScreenPlay/qml/Monitors/Monitors.qml +++ b/ScreenPlay/qml/Monitors/Monitors.qml @@ -83,7 +83,7 @@ Popup { monitorWithoutContentSelectable: false availableWidth: width - 20 availableHeight: 150 - function onRequestProjectSettings() { + onRequestProjectSettings: ( index, installedType, appID) => { if (installedType === InstalledType.VideoWallpaper) { videoControlWrapper.state = "visible"; customPropertiesGridView.visible = false; @@ -92,7 +92,9 @@ Popup { } else { videoControlWrapper.state = "hidden"; customPropertiesGridView.visible = true; - ScreenPlay.screenPlayManager.requestProjectSettingsAtMonitorIndex(index); + if(!ScreenPlay.screenPlayManager.requestProjectSettingsAtMonitorIndex(index)){ + console.warn("Unable to get requested settings from index: ", index) + } } activeMonitorIndex = index; } @@ -126,12 +128,11 @@ Popup { Button { id: btnRemoveSelectedWallpaper - - text: qsTr("Remove selected") Material.background: Material.accent - Material.foreground: "white" + highlighted: true + text: qsTr("Remove selected") font.family: ScreenPlay.settings.font - enabled: monitorSelection.activeMonitors.length == 1 + enabled: monitorSelection.activeMonitors.length == 1 && ScreenPlay.screenPlayManager.activeWallpaperCounter > 0 onClicked: { if (!ScreenPlay.screenPlayManager.removeWallpaperAt(monitorSelection.activeMonitors[0])) print("Unable to close singel wallpaper"); @@ -142,9 +143,9 @@ Popup { Button { id: btnRemoveAllWallpape - text: qsTr("Remove ") + ScreenPlay.screenPlayManager.activeWallpaperCounter + " " + qsTr("Wallpapers") + text: qsTr("Remove all ") + ScreenPlay.screenPlayManager.activeWallpaperCounter + " " + qsTr("Wallpapers") Material.background: Material.accent - Material.foreground: "white" + highlighted: true font.family: ScreenPlay.settings.font enabled: ScreenPlay.screenPlayManager.activeWallpaperCounter > 0 onClicked: { @@ -158,9 +159,10 @@ Popup { Button { id: btnRemoveAllWidgets - text: qsTr("Remove ") + ScreenPlay.screenPlayManager.activeWidgetsCounter + " " + qsTr("Widgets") + text: qsTr("Remove all ") + ScreenPlay.screenPlayManager.activeWidgetsCounter + " " + qsTr("Widgets") Material.background: Material.accent - Material.foreground: "white" + Material.foreground: Material.primaryTextColor + highlighted: true font.family: ScreenPlay.settings.font enabled: ScreenPlay.screenPlayManager.activeWidgetsCounter > 0 onClicked: { diff --git a/ScreenPlay/qml/Navigation/Navigation.qml b/ScreenPlay/qml/Navigation/Navigation.qml index a85cc851..0bba540c 100644 --- a/ScreenPlay/qml/Navigation/Navigation.qml +++ b/ScreenPlay/qml/Navigation/Navigation.qml @@ -1,5 +1,7 @@ import QtQuick import QtQuick.Controls +import QtQuick.Layouts +import QtQuick.Window import QtQuick.Controls.Material import Qt5Compat.GraphicalEffects import QtQuick.Controls.Material.impl @@ -10,56 +12,78 @@ import "../Common" Rectangle { id: root - property string currentNavigationName: "" + property string currentNavigationName: "Installed" property var navArray: [navCreate, navWorkshop, navInstalled, navSettings, navCommunity] property bool navActive: true + property ApplicationWindow window + property int iconWidth: 16 + property int iconHeight: iconWidth signal changePage(string name) function setActive(active) { - navActive = active; + navActive = active if (active) - root.state = "enabled"; + root.state = "enabled" else - root.state = "disabled"; + root.state = "disabled" } function setNavigation(name) { - var i = 0; + var i = 0 for (; i < navArray.length; i++) { if (navArray[i].name === name) { - navArray[i].state = "active"; - root.currentNavigationName = name; + navArray[i].state = "active" + root.currentNavigationName = name } else { - navArray[i].state = "inactive"; + navArray[i].state = "inactive" } } } function onPageChanged(name) { if (!navActive) - return ; + return - root.changePage(name); - setNavigation(name); + root.changePage(name) + setNavigation(name) } height: 60 - clip: true width: 1366 color: Material.theme === Material.Light ? "white" : Material.background layer.enabled: true - MouseHoverBlocker { + MouseArea { + id: mouseArea + + property var clickPos + + anchors.fill: parent + hoverEnabled: true + onPressed: (mouse)=>{ + clickPos = { + "x": mouse.x, + "y": mouse.y + }; + } + onPositionChanged: { + if (mouseArea.pressed){ + let pos = ScreenPlay.cursorPos(); + window.setX(pos.x - clickPos.x) + window.setY(pos.y - clickPos.y) + } + + } } Connections { function onRequestNavigationActive(isActive) { - setActive(isActive); + setActive(isActive) } function onRequestNavigation(nav) { - onPageChanged(nav); + onPageChanged(nav) } target: ScreenPlay.util @@ -128,10 +152,146 @@ Rectangle { onPageClicked: (name)=> {root.onPageChanged(name)} objectName: "settingsTab" } - } - NavigationWallpaperConfiguration { + Rectangle { + id:quickActionRowBackground + anchors.centerIn: quickActionRow + width: quickActionRow.width + 5 + height: quickActionRow.height - 16 + color: Material.theme === Material.Light ? Material.background : "#242424" + border.color: Material.theme === Material.Light ? Material.iconDisabledColor : Qt.darker(Material.background) + border.width: 1 + radius: 3 + } + + RowLayout { + id: quickActionRow + anchors { + top: parent.top + right: parent.right + rightMargin: 10 + bottom: parent.bottom + } + + property bool contentActive: ScreenPlay.screenPlayManager.activeWallpaperCounter > 0 + || ScreenPlay.screenPlayManager.activeWidgetsCounter > 0 + + onContentActiveChanged: { + if(!contentActive){ + miMuteAll.isMuted = false + miStopAll.isPlaying = false + } + } + + ToolButton { + id: miMuteAll + Layout.alignment: Qt.AlignVCenter + icon.source: "qrc:/assets/icons/icon_volume.svg" + icon.width: root.iconWidth + icon.height: root.iconHeight + enabled: quickActionRow.contentActive + + onClicked: isMuted = !isMuted + property bool isMuted: false + onIsMutedChanged: { + if (miMuteAll.isMuted) { + miMuteAll.icon.source = "qrc:/assets/icons/icon_volume.svg" + ScreenPlay.screenPlayManager.setAllWallpaperValue("muted", + "false") + } else { + miMuteAll.icon.source = "qrc:/assets/icons/icon_volume_mute.svg" + ScreenPlay.screenPlayManager.setAllWallpaperValue("muted", + "true") + } + } + + hoverEnabled: true + ToolTip.text: qsTr("Mute/Unmute all Wallpaper") + ToolTip.visible: hovered + } + ToolButton { + id: miStopAll + enabled: quickActionRow.contentActive + Layout.alignment: Qt.AlignVCenter + icon.source: "qrc:/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" + ScreenPlay.screenPlayManager.setAllWallpaperValue( + "isPlaying", "true") + } else { + miStopAll.icon.source = "qrc:/assets/icons/icon_play.svg" + ScreenPlay.screenPlayManager.setAllWallpaperValue( + "isPlaying", "false") + } + } + hoverEnabled: true + ToolTip.text: qsTr("Pause/Play all Wallpaper") + ToolTip.visible: hovered + } + ToolButton { + id: miConfig + Layout.alignment: Qt.AlignVCenter + icon.source: "qrc:/assets/icons/icon_video_settings_black_24dp.svg" + icon.width: root.iconWidth + icon.height: root.iconHeight + onClicked: ScreenPlay.util.setToggleWallpaperConfiguration() + hoverEnabled: true + ToolTip.text: qsTr("Configure Wallpaper") + ToolTip.visible: hovered + } + + Rectangle { + color: Material.theme === Material.Light ? Material.iconDisabledColor : Qt.darker(Material.background) + height: quickActionRowBackground.height + width: 1 + } + + ToolButton { + id: miMinimize + Layout.alignment: Qt.AlignVCenter + icon.source: "qrc:/assets/icons/icon_minimize.svg" + icon.width: root.iconWidth + icon.height: root.iconHeight + onClicked: root.window.hide() + hoverEnabled: true + ToolTip.text: qsTr("Minimize to Tray") + ToolTip.visible: hovered + } + ToolButton { + id: miquit + Layout.alignment: Qt.AlignVCenter + icon.source: "qrc:/assets/icons/icon_close.svg" + icon.width: root.iconWidth + icon.height: root.iconHeight + onClicked: { + if(ScreenPlay.screenPlayManager.activeWallpaperCounter === 0 + && ScreenPlay.screenPlayManager.activeWidgetsCounter === 0){ + Qt.quit() + return + } + dialog.open() + } + hoverEnabled: true + ToolTip.text: qsTr("Exit") + ToolTip.visible: hovered + } + + Dialog { + id: dialog + anchors.centerIn: Overlay.overlay + title: qsTr("Are you sure you want to exit ScreenPlay? \nThis will shut down all Wallpaper and Widgets.") + standardButtons: Dialog.Ok | Dialog.Cancel + onAccepted: Qt.quit() + modal: true + } + + } layer.effect: ElevationEffect { @@ -149,7 +309,6 @@ Rectangle { target: row opacity: 0.3 } - } ] transitions: [ @@ -161,7 +320,6 @@ Rectangle { target: row duration: 300 } - } ] } diff --git a/ScreenPlay/qml/Navigation/NavigationItem.qml b/ScreenPlay/qml/Navigation/NavigationItem.qml index ef42ea88..70e20388 100644 --- a/ScreenPlay/qml/Navigation/NavigationItem.qml +++ b/ScreenPlay/qml/Navigation/NavigationItem.qml @@ -24,7 +24,6 @@ Item { width: txtAmount.paintedWidth + txt.paintedWidth + icon.paintedWidth + 40 height: 60 state: "inactive" - clip: true onEnabledChanged: { if (!enabled) { navigationItem.width = 0; @@ -74,7 +73,7 @@ Item { anchors.left: txtAmount.right anchors.leftMargin: navigationItem.amount == "" ? 0 : 5 text: "name" - font.pointSize: 14 + font.pointSize: 12 color: Material.primaryTextColor anchors.verticalCenter: parent.verticalCenter font.family: ScreenPlay.settings.font diff --git a/ScreenPlay/qml/Navigation/NavigationWallpaperConfiguration.qml b/ScreenPlay/qml/Navigation/NavigationWallpaperConfiguration.qml deleted file mode 100644 index 17e22941..00000000 --- a/ScreenPlay/qml/Navigation/NavigationWallpaperConfiguration.qml +++ /dev/null @@ -1,127 +0,0 @@ -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Material -import Qt5Compat.GraphicalEffects -import ScreenPlay 1.0 -import "../Common" - -Item { - id: root - - width: 390 - property bool active: ScreenPlay.screenPlayManager.activeWallpaperCounter > 0 - - anchors { - top: parent.top - right: parent.right - rightMargin: 20 - bottom: parent.bottom - } - - Connections { - function onActiveWallpaperCounterChanged() { - rippleEffect.trigger() - } - - target: ScreenPlay.screenPlayManager - } - - Pane { - anchors.centerIn: parent - contentWidth: activeMonitorName.contentWidth + image.width + 80 - contentHeight: parent.height - 10 - background: Item { - Rectangle { - id: bg - clip: true - anchors { - fill: parent - margins: 16 - } - color: "transparent" - border.color: root.active ? Material.accentColor : Material.iconDisabledColor - border.width: 1 - radius: 3 - } - - RippleEffect { - id: rippleEffect - - target: bg - } - } - - Behavior on contentWidth { - PropertyAnimation { - duration: 250 - easing.type: Easing.InOutQuart - } - } - - Text { - id: activeMonitorName - - horizontalAlignment: Text.AlignRight - color: root.active ? Material.primaryTextColor : Material.iconDisabledColor - font.pointSize: 12 - font.family: ScreenPlay.settings.font - text: root.active ? qsTr("Configurate active Wallpaper or Widgets") : qsTr( - "No active Wallpaper or Widgets") - - anchors { - right: image.right - rightMargin: 50 - verticalCenter: parent.verticalCenter - } - } - - Image { - id: image - - width: 28 - height: 24 - source: "qrc:/assets/icons/icon_monitor.svg" - layer { - effect: ColorOverlay { - color: root.active ? Material.color( - Material.Orange) : Material.iconDisabledColor - } - } - - anchors { - rightMargin: 30 - right: parent.right - verticalCenter: parent.verticalCenter - } - - Text { - id: txtAmountActiveWallpapers - - text: ScreenPlay.screenPlayManager.activeWallpaperCounter - + ScreenPlay.screenPlayManager.activeWidgetsCounter - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: root.active ? Material.color( - Material.Orange) : Material.iconDisabledColor - font.pointSize: 10 - font.bold: true - font.family: ScreenPlay.settings.font - anchors { - horizontalCenter: parent.horizontalCenter - bottom: parent.bottom - bottomMargin: 7 - } - } - } - - MouseArea { - id: ma - - anchors.fill: parent - cursorShape: Qt.PointingHandCursor - onClicked: { - ScreenPlay.util.setToggleWallpaperConfiguration() - } - } - } -} diff --git a/ScreenPlay/qml/Settings/Settings.qml b/ScreenPlay/qml/Settings/Settings.qml index 8f3c5ac5..b1fe542f 100644 --- a/ScreenPlay/qml/Settings/Settings.qml +++ b/ScreenPlay/qml/Settings/Settings.qml @@ -169,6 +169,9 @@ Item { }, { "value": Settings.De_DE, "text": "German" + }, { + "value": Settings.Pl_PL, + "text": "Polish" }, { "value": Settings.It_IT, "text": "Italian" diff --git a/ScreenPlay/qml/Workshop/Forum.qml b/ScreenPlay/qml/Workshop/Forum.qml index a6a114c8..2b2c5639 100644 --- a/ScreenPlay/qml/Workshop/Forum.qml +++ b/ScreenPlay/qml/Workshop/Forum.qml @@ -3,7 +3,6 @@ import QtQuick.Controls import QtQuick.Controls.Material import QtQuick.Layouts import Qt5Compat.GraphicalEffects -import QtWebEngine import ScreenPlay 1.0 @@ -51,15 +50,4 @@ Item { } } - WebEngineView { - id: webView - anchors { - top: navWrapper.bottom - right: parent.right - bottom: parent.bottom - left: parent.left - } - url:"https://forum.screen-play.app/category/5/wallpaper" - - } } diff --git a/ScreenPlay/qml/Workshop/Sidebar.qml b/ScreenPlay/qml/Workshop/Sidebar.qml index ee22d5e7..ec22b013 100644 --- a/ScreenPlay/qml/Workshop/Sidebar.qml +++ b/ScreenPlay/qml/Workshop/Sidebar.qml @@ -2,7 +2,6 @@ import QtQuick import Qt5Compat.GraphicalEffects import QtQuick.Controls import QtQuick.Layouts -import QtWebEngine import QtQuick.Controls.Material import Workshop 1.0 import ScreenPlay 1.0 @@ -29,7 +28,6 @@ Drawer { root.close() return } - webView.opacity = 0 root.publishedFileID = publishedFileID root.imgUrl = imgUrl root.subscriptionCount = subscriptionCount @@ -41,7 +39,6 @@ Drawer { root.open() steamWorkshop.requestWorkshopItemDetails(publishedFileID) - webView.setVideo() } edge: Qt.RightEdge @@ -50,16 +47,6 @@ Drawer { modal: false width: 400 interactive: false - Component.onCompleted: { - WebEngine.settings.localContentCanAccessFileUrls = true - WebEngine.settings.localContentCanAccessRemoteUrls = true - WebEngine.settings.allowRunningInsecureContent = true - WebEngine.settings.accelerated2dCanvasEnabled = true - WebEngine.settings.javascriptCanOpenWindows = false - WebEngine.settings.showScrollBars = false - WebEngine.settings.playbackRequiresUserGesture = false - WebEngine.settings.focusOnNavigationEnabled = true - } Connections { function onRequestItemDetailReturned(title, tags, steamIDOwner, description, votesUp, votesDown, url, fileSize, publishedFileId) { @@ -106,42 +93,7 @@ Drawer { anchors.fill: parent } - WebEngineView { - id: webView - property bool ready: false - - function getUpdateVideoCommand() { - let src = "" - src += "var video = document.getElementById('video');\n" - src += "video.src = '" + root.videoPreview + "';\n" - // Incase a workshop item has no gif preview - src += "video.poster = '" + root.videoPreview + "';\n" - src += "video.play();\n" - return src - } - - function setVideo() { - if (!root.videoPreview.toString().startsWith("https")) - return - - webView.runJavaScript(getUpdateVideoCommand(), - function (result) { - webView.opacity = 1 - }) - } - - anchors.fill: parent - opacity: 0 - url: "qrc:/assets/WorkshopPreview.html" - onUrlChanged: print(url) - - Behavior on opacity { - NumberAnimation { - duration: 200 - } - } - } LinearGradient { height: 50 diff --git a/ScreenPlay/src/installedlistmodel.cpp b/ScreenPlay/src/installedlistmodel.cpp index c132e0e0..65ad38af 100644 --- a/ScreenPlay/src/installedlistmodel.cpp +++ b/ScreenPlay/src/installedlistmodel.cpp @@ -200,12 +200,12 @@ void InstalledListModel::append(const QJsonObject& obj, const QString& folderNam */ void InstalledListModel::loadInstalledContent() { - if (m_loadContentFuture.isRunning()) { + if (m_isLoading) { qInfo() << "loadInstalledContent is already running. Skip."; return; } - - m_loadContentFuture = QtConcurrent::run([this]() { + m_isLoading = true; + auto unused = QtConcurrent::run([this]() { QFileInfoList list = QDir(m_globalVariables->localStoragePath().toLocalFile()).entryInfoList(QDir::NoDotAndDotDot | QDir::AllDirs); int counter = 0; @@ -239,6 +239,7 @@ void InstalledListModel::loadInstalledContent() } setCount(counter); emit installedLoadingFinished(); + m_isLoading = false; }); } diff --git a/ScreenPlay/src/installedlistmodel.h b/ScreenPlay/src/installedlistmodel.h index c20b3476..c552675a 100644 --- a/ScreenPlay/src/installedlistmodel.h +++ b/ScreenPlay/src/installedlistmodel.h @@ -124,7 +124,7 @@ private: QFileSystemWatcher m_fileSystemWatcher; QVector m_screenPlayFiles; int m_count { 0 }; - QFuture m_loadContentFuture; + std::atomic_bool m_isLoading { false }; const std::shared_ptr& m_globalVariables; }; diff --git a/ScreenPlay/src/monitorlistmodel.cpp b/ScreenPlay/src/monitorlistmodel.cpp index cb468956..b2c0cdd6 100644 --- a/ScreenPlay/src/monitorlistmodel.cpp +++ b/ScreenPlay/src/monitorlistmodel.cpp @@ -37,15 +37,8 @@ QHash MonitorListModel::roleNames() const { static const QHash roles { { static_cast(MonitorRole::AppID), "m_appID" }, - { static_cast(MonitorRole::MonitorID), "m_monitorID" }, - { static_cast(MonitorRole::Name), "m_name" }, - { static_cast(MonitorRole::Size), "m_size" }, - { static_cast(MonitorRole::AvailableGeometry), "m_availableGeometry" }, - { static_cast(MonitorRole::AvailableVirtualGeometry), "m_availableVirtualGeometry" }, - { static_cast(MonitorRole::Number), "m_number" }, + { static_cast(MonitorRole::Index), "m_index" }, { static_cast(MonitorRole::Geometry), "m_geometry" }, - { static_cast(MonitorRole::Model), "m_model" }, - { static_cast(MonitorRole::Manufacturer), "m_manufacturer" }, { static_cast(MonitorRole::PreviewImage), "m_previewImage" }, { static_cast(MonitorRole::InstalledType), "m_installedType" }, }; @@ -86,32 +79,10 @@ QVariant MonitorListModel::data(const QModelIndex& index, int role) const } else { return QVariant(""); } - case MonitorRole::MonitorID: { - QScreen* screen = m_monitorList.at(row).m_screen; - - QVariant id = QString::number(screen->size().width()) - + "x" + QString::number(screen->size().height()) - + "_" + QString::number(screen->availableGeometry().x()) - + "x" + QString::number(screen->availableGeometry().y()); - - return id; - } - case MonitorRole::Name: - return m_monitorList.at(row).m_screen->name(); - case MonitorRole::Size: - return m_monitorList.at(row).m_screen->size(); - case MonitorRole::AvailableGeometry: - return m_monitorList.at(row).m_availableGeometry; - case MonitorRole::AvailableVirtualGeometry: - return m_monitorList.at(row).m_screen->availableVirtualGeometry(); - case MonitorRole::Number: - return m_monitorList.at(row).m_number; + case MonitorRole::Index: + return m_monitorList.at(row).m_index; case MonitorRole::Geometry: - return m_monitorList.at(row).m_screen->geometry(); - case MonitorRole::Model: - return m_monitorList.at(row).m_screen->model(); - case MonitorRole::Manufacturer: - return m_monitorList.at(row).m_screen->manufacturer(); + return m_monitorList.at(row).m_geometry; case MonitorRole::InstalledType: if (m_monitorList.at(row).m_activeWallpaper) { return static_cast(m_monitorList.at(row).m_activeWallpaper->type()); @@ -143,7 +114,9 @@ void MonitorListModel::loadMonitors() // This offset lets us center the monitor selection view in the center int offsetX = 0; int offsetY = 0; - for (int i = 0; i < monitors.iMonitors.size(); i++) { + const int moinitorCount = monitors.iMonitors.size(); + + for (int i = 0; i < moinitorCount; i++) { const int x = monitors.rcMonitors[i].left; const int y = monitors.rcMonitors[i].top; if (x < 0) { @@ -154,18 +127,18 @@ void MonitorListModel::loadMonitors() } } - for (int i = 0; i < monitors.iMonitors.size(); i++) { + for (int i = 0; i < moinitorCount; i++) { const int width = std::abs(monitors.rcMonitors[i].right - monitors.rcMonitors[i].left); const int height = std::abs(monitors.rcMonitors[i].top - monitors.rcMonitors[i].bottom); const int x = monitors.rcMonitors[i].left; const int y = monitors.rcMonitors[i].top; - QRect availableVirtualGeometry( + QRect geometry( x + offsetX, y + offsetY, width, height); beginInsertRows(index, m_monitorList.size(), m_monitorList.size()); - m_monitorList.append(Monitor { i, availableVirtualGeometry, QApplication::screens().at(i) }); + m_monitorList.append(Monitor { i, geometry }); endInsertRows(); } #else @@ -190,14 +163,8 @@ void MonitorListModel::loadMonitors() if (screen->geometry().width() == 0 || screen->geometry().height() == 0) continue; - QRect availableVirtualGeometry( - screen->geometry().x() + offsetX, - screen->geometry().y() + offsetY, - screen->geometry().width(), - screen->geometry().height()); - beginInsertRows(index, m_monitorList.size(), m_monitorList.size()); - m_monitorList.append(Monitor { i, availableVirtualGeometry, screen }); + m_monitorList.append(Monitor { i, screen->geometry() }); endInsertRows(); } #endif @@ -251,7 +218,7 @@ void MonitorListModel::closeWallpaper(const QString& appID) * \brief MonitorListModel::getAbsoluteDesktopSize * \return */ -QRect MonitorListModel::getAbsoluteDesktopSize() const +QRect MonitorListModel::absoluteDesktopSize() const { auto* app = static_cast(QGuiApplication::instance()); return app->screens().at(0)->availableVirtualGeometry(); @@ -283,7 +250,7 @@ void MonitorListModel::setWallpaperMonitor(const std::shared_ptr MonitorListModel::getAppIDByMonitorIndex(const int index) const { for (auto& monitor : m_monitorList) { - if (monitor.m_number == index && monitor.m_activeWallpaper) { + if (monitor.m_index == index && monitor.m_activeWallpaper) { return { monitor.m_activeWallpaper->appID() }; } } diff --git a/ScreenPlay/src/monitorlistmodel.h b/ScreenPlay/src/monitorlistmodel.h index 311ec59e..24adcd06 100644 --- a/ScreenPlay/src/monitorlistmodel.h +++ b/ScreenPlay/src/monitorlistmodel.h @@ -58,18 +58,15 @@ namespace ScreenPlay { struct Monitor { Monitor( - const int number, - const QRect& availableGeometry, - QScreen* screen) + const int index, + const QRect& geometry) { - m_number = number; - m_availableGeometry = availableGeometry; - m_screen = screen; + m_index = index; + m_geometry = geometry; } - QRect m_availableGeometry; - int m_number { 0 }; - QScreen* m_screen { nullptr }; + int m_index { 0 }; + QRect m_geometry; std::shared_ptr m_activeWallpaper { nullptr }; }; @@ -81,15 +78,8 @@ public: enum class MonitorRole { AppID = Qt::UserRole, - MonitorID, - Name, - Size, - AvailableGeometry, - AvailableVirtualGeometry, - Number, + Index, Geometry, - Model, - Manufacturer, PreviewImage, InstalledType, }; @@ -114,7 +104,7 @@ public slots: void reset(); void clearActiveWallpaper(); void closeWallpaper(const QString& appID); - QRect getAbsoluteDesktopSize() const; + QRect absoluteDesktopSize() const; void screenAdded(QScreen* screen) { diff --git a/ScreenPlay/src/screenplaymanager.cpp b/ScreenPlay/src/screenplaymanager.cpp index 29e53f3d..8992ee80 100644 --- a/ScreenPlay/src/screenplaymanager.cpp +++ b/ScreenPlay/src/screenplaymanager.cpp @@ -83,22 +83,21 @@ void ScreenPlayManager::init( if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE) { m_websocketServer = std::make_unique(QStringLiteral("ScreenPlayWebSocket"), QWebSocketServer::SslMode::NonSecureMode); - const bool success = m_websocketServer->listen(QHostAddress::Any, m_webSocketPort); - qInfo() << "Open Websocket:" << success << "port:" <listen(QHostAddress::Any, m_webSocketPort); + qInfo() << "Open Websocket:" << success << "port:" << m_webSocketPort; QObject::connect(m_websocketServer.get(), &QWebSocketServer::newConnection, this, [this]() { qInfo() << "New Websocket Connection"; auto* socket = m_websocketServer->nextPendingConnection(); - QObject::connect(socket, &QWebSocket::textMessageReceived, this, [this](const QString &message) { - qInfo() << "Message:" << message; + QObject::connect(socket, &QWebSocket::textMessageReceived, this, [this](const QString& message) { + qInfo() << "Message:" << message; }); - QObject::connect(socket, &QWebSocket::disconnected, this, [this,socket]() { - m_connections.removeOne(socket); - qInfo() << "Disconnected connection count: " << m_connections.count(); + QObject::connect(socket, &QWebSocket::disconnected, this, [this, socket]() { + m_connections.removeOne(socket); + qInfo() << "Disconnected connection count: " << m_connections.count(); }); - m_connections.push_back(socket); - // socket->flush(); + // socket->flush(); }); } @@ -150,8 +149,8 @@ bool ScreenPlayManager::createWallpaper( const QString path = QUrl::fromUserInput(absoluteStoragePath).toLocalFile(); const QString appID = ScreenPlayUtil::generateRandomString(); - if(m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE){ - if(m_connections.empty()) + if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE) { + if (m_connections.empty()) return false; QJsonObject msg; @@ -206,11 +205,11 @@ bool ScreenPlayManager::createWallpaper( QObject::connect(wallpaper.get(), &ScreenPlayWallpaper::requestSave, this, &ScreenPlayManager::requestSaveProfiles); QObject::connect(wallpaper.get(), &ScreenPlayWallpaper::requestClose, this, &ScreenPlayManager::removeWallpaper); QObject::connect(wallpaper.get(), &ScreenPlayWallpaper::error, this, &ScreenPlayManager::displayErrorPopup); - if(m_settings->desktopEnvironment() != Settings::DesktopEnvironment::KDE){ + if (m_settings->desktopEnvironment() != Settings::DesktopEnvironment::KDE) { if (!wallpaper->start()) { return false; } - } + } m_screenPlayWallpapers.append(wallpaper); m_monitorListModel->setWallpaperMonitor(wallpaper, monitorIndex); increaseActiveWallpaperCounter(); @@ -285,16 +284,15 @@ bool ScreenPlayManager::removeAllWallpapers() return false; } } - if(m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE){ - for(auto& connection : m_connections){ - QJsonObject obj; - obj.insert("command", "quit"); - connection->sendTextMessage(QJsonDocument(obj).toJson(QJsonDocument::Compact)); + if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE) { + for (auto& connection : m_connections) { + QJsonObject obj; + obj.insert("command", "quit"); + connection->sendTextMessage(QJsonDocument(obj).toJson(QJsonDocument::Compact)); connection->flush(); connection->close(); - } - - } + } + } emit requestSaveProfiles(); @@ -376,13 +374,30 @@ bool ScreenPlayManager::setWallpaperValueAtMonitorIndex(const int index, const Q return false; } +/*! + \brief Set a wallpaper \a fillmode at a given \a index and converts the qml enum (int) + into the c++ enum class value. +*/ +bool ScreenPlayManager::setWallpaperFillModeAtMonitorIndex(const int index, const int fillmode) +{ + const auto fillModeTyped = static_cast(fillmode); + + if (auto appID = m_monitorListModel->getAppIDByMonitorIndex(index)) { + return setWallpaperValue(*appID, "fillmode", QVariant::fromValue(fillModeTyped).toString()); + } + + qWarning() << "Could net get appID from m_monitorListModel!"; + return false; +} + /*! \brief Convenient function to set a \a value at a given \a index and \a key for all wallaper. For exmaple used to mute all wallpaper. */ bool ScreenPlayManager::setAllWallpaperValue(const QString& key, const QString& value) { for (auto& wallpaper : m_screenPlayWallpapers) { - return setWallpaperValue(wallpaper->appID(), key, value); + if (!wallpaper->setWallpaperValue(key, value, true)) + return false; } return true; } @@ -406,7 +421,7 @@ ScreenPlayWallpaper* ScreenPlayManager::getWallpaperByAppID(const QString& appID */ void ScreenPlayManager::newConnection() { - qInfo() << "[1/3] SDKConnection incomming"; + qInfo() << "[1/4] SDKConnection incomming"; auto connection = std::make_unique(m_server->nextPendingConnection()); QObject::connect(connection.get(), &SDKConnection::requestRaise, this, &ScreenPlayManager::requestRaise); @@ -433,7 +448,7 @@ void ScreenPlayManager::newConnection() for (int i = 0; i < m_screenPlayWallpapers.size(); ++i) { if (m_screenPlayWallpapers.at(i)->appID() == matchingConnection->appID()) { - qInfo() << "Matching Wallpaper found!"; + qInfo() << "[3/4] Matching Wallpaper found!"; m_screenPlayWallpapers.at(i)->setSDKConnection(std::move(matchingConnection)); return; } @@ -441,7 +456,7 @@ void ScreenPlayManager::newConnection() for (int i = 0; i < m_screenPlayWidgets.size(); ++i) { if (m_screenPlayWidgets.at(i)->appID() == matchingConnection->appID()) { - qInfo() << "Matching Widget found!"; + qInfo() << "[3/4] Matching Widget found!"; m_screenPlayWidgets.at(i)->setSDKConnection(std::move(matchingConnection)); return; } @@ -468,9 +483,9 @@ bool ScreenPlayManager::removeWallpaper(const QString& appID) if (wallpaper->appID() != appID) { return false; } - if(m_settings->desktopEnvironment() == Settings::DesktopEnvironment::Windows || - m_settings->desktopEnvironment() == Settings::DesktopEnvironment::OSX) - wallpaper->messageQuit(); + + if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::Windows || m_settings->desktopEnvironment() == Settings::DesktopEnvironment::OSX) + wallpaper->messageKDECloseWallpaper(); qInfo() << "Remove wallpaper " << wallpaper->file() << "at monitor " << wallpaper->screenNumber(); @@ -478,6 +493,8 @@ bool ScreenPlayManager::removeWallpaper(const QString& appID) // for shared_ptr to release the object. m_monitorListModel->setWallpaperMonitor({}, wallpaper->screenNumber()); + wallpaper->close(); + decreaseActiveWallpaperCounter(); return true; @@ -507,7 +524,7 @@ bool ScreenPlayManager::removeWidget(const QString& appID) return false; } - widget->messageQuit(); + widget->close(); qInfo() << "Remove widget " << appID; diff --git a/ScreenPlay/src/screenplaymanager.h b/ScreenPlay/src/screenplaymanager.h index 54655562..d0e699d2 100644 --- a/ScreenPlay/src/screenplaymanager.h +++ b/ScreenPlay/src/screenplaymanager.h @@ -116,6 +116,7 @@ public slots: bool requestProjectSettingsAtMonitorIndex(const int index); bool setWallpaperValueAtMonitorIndex(const int index, const QString& key, const QString& value); + bool setWallpaperFillModeAtMonitorIndex(const int index, const int fillmode); bool setAllWallpaperValue(const QString& key, const QString& value); bool setWallpaperValue(const QString& appID, const QString& key, const QString& value); ScreenPlayWallpaper* getWallpaperByAppID(const QString& appID) const; diff --git a/ScreenPlay/src/screenplaywallpaper.cpp b/ScreenPlay/src/screenplaywallpaper.cpp index 920b6478..c2e293f3 100644 --- a/ScreenPlay/src/screenplaywallpaper.cpp +++ b/ScreenPlay/src/screenplaywallpaper.cpp @@ -138,7 +138,7 @@ QJsonObject ScreenPlayWallpaper::getActiveSettingsJson() /*! \brief Sends command quit to the wallpaper. */ -void ScreenPlayWallpaper::messageQuit() +void ScreenPlayWallpaper::close() { // When the wallpaper never connected, this is invalid if (!m_connection) { @@ -146,9 +146,9 @@ void ScreenPlayWallpaper::messageQuit() return; } - QJsonObject obj; - obj.insert("command", "quit"); - m_connection->sendMessage(QJsonDocument(obj).toJson(QJsonDocument::Compact)); + if (m_connection->close()) { + m_isExiting = true; + } } /*! \brief Prints the exit code if != 0. @@ -175,6 +175,9 @@ void ScreenPlayWallpaper::processError(QProcess::ProcessError error) */ bool ScreenPlayWallpaper::setWallpaperValue(const QString& key, const QString& value, const bool save) { + if (m_isExiting) + return false; + if (!m_connection) { qWarning() << "Cannot set value for unconnected wallpaper!"; return false; @@ -208,8 +211,13 @@ bool ScreenPlayWallpaper::setWallpaperValue(const QString& key, const QString& v void ScreenPlayWallpaper::setSDKConnection(std::unique_ptr connection) { m_connection = std::move(connection); - qInfo() << "[3/3] SDKConnection (Wallpaper) saved!"; + qInfo() << "[4/4] SDKConnection (Wallpaper) saved!"; + setIsConnected(true); + QObject::connect(m_connection.get(), &SDKConnection::disconnected, this, [this]() { + setIsConnected(false); + qInfo() << "disconnecetd;"; + }); QTimer::singleShot(1000, this, [this]() { if (playbackRate() != 1.0) { setWallpaperValue("playbackRate", QString::number(playbackRate()), false); @@ -240,9 +248,15 @@ void ScreenPlayWallpaper::replace( const InstalledType::InstalledType type, const bool checkWallpaperVisible) { - if (!m_connection) + + if (m_isExiting) return; + if (!m_connection) { + qWarning() << "Cannot replace for unconnected wallpaper!"; + return; + } + m_previewImage = previewImage; m_type = type; m_fillMode = fillMode; diff --git a/ScreenPlay/src/screenplaywallpaper.h b/ScreenPlay/src/screenplaywallpaper.h index 1dde44c3..ab555cf8 100644 --- a/ScreenPlay/src/screenplaywallpaper.h +++ b/ScreenPlay/src/screenplaywallpaper.h @@ -44,14 +44,16 @@ #include "globalvariables.h" #include "projectsettingslistmodel.h" #include "sdkconnection.h" -#include "util.h" #include "settings.h" +#include "util.h" namespace ScreenPlay { class ScreenPlayWallpaper : public QObject { Q_OBJECT + Q_PROPERTY(bool isConnected READ isConnected WRITE setIsConnected NOTIFY isConnectedChanged) + Q_PROPERTY(QVector screenNumber READ screenNumber WRITE setScreenNumber NOTIFY screenNumberChanged) Q_PROPERTY(float volume READ volume WRITE setVolume NOTIFY volumeChanged) @@ -85,7 +87,6 @@ public: const std::shared_ptr& settings, QObject* parent = nullptr); - bool start(); void replace( @@ -112,6 +113,7 @@ public: bool isLooping() const { return m_isLooping; } ProjectSettingsListModel* getProjectSettingsListModel() { return &m_projectSettingsListModel; } float playbackRate() const { return m_playbackRate; } + bool isConnected() const { return m_isConnected; } signals: void screenNumberChanged(QVector screenNumber); @@ -125,13 +127,16 @@ signals: void volumeChanged(float volume); void isLoopingChanged(bool isLooping); void playbackRateChanged(float playbackRate); + void messageKDECloseWallpaper(); void requestSave(); void requestClose(const QString& appID); void error(const QString& msg); + void isConnectedChanged(bool isConnected); + public slots: - void messageQuit(); + void close(); void processExit(int exitCode, QProcess::ExitStatus exitStatus); void processError(QProcess::ProcessError error); bool setWallpaperValue(const QString& key, const QString& value, const bool save = false); @@ -229,6 +234,14 @@ public slots: emit playbackRateChanged(m_playbackRate); } + void setIsConnected(bool isConnected) + { + if (m_isConnected == isConnected) + return; + m_isConnected = isConnected; + emit isConnectedChanged(m_isConnected); + } + private: const std::shared_ptr m_globalVariables; std::unique_ptr m_connection; @@ -248,5 +261,9 @@ private: float m_playbackRate { 1.0f }; QTimer m_pingAliveTimer; QStringList m_appArgumentsList; + bool m_isConnected { false }; + // There are still cases where we can access the current item + // while exiting. This flag is to ignore all setWallpaperValue calls + bool m_isExiting { false }; }; } diff --git a/ScreenPlay/src/screenplaywidget.cpp b/ScreenPlay/src/screenplaywidget.cpp index b08c0c1b..dee57ac5 100644 --- a/ScreenPlay/src/screenplaywidget.cpp +++ b/ScreenPlay/src/screenplaywidget.cpp @@ -73,11 +73,15 @@ bool ScreenPlayWidget::start() /*! \brief Sends command quit to the widget. */ -void ScreenPlayWidget::messageQuit() +void ScreenPlayWidget::close() { - QJsonObject obj; - obj.insert("command", "quit"); - m_connection->sendMessage(QJsonDocument(obj).toJson(QJsonDocument::Compact)); + // When the wallpaper never connected, this is invalid + if (!m_connection) { + qCritical() << "Cannot request quit, widget never connected!"; + return; + } + + m_connection->close(); } /*! diff --git a/ScreenPlay/src/screenplaywidget.h b/ScreenPlay/src/screenplaywidget.h index 7a10340c..b657273c 100644 --- a/ScreenPlay/src/screenplaywidget.h +++ b/ScreenPlay/src/screenplaywidget.h @@ -85,7 +85,7 @@ public: ProjectSettingsListModel* getProjectSettingsListModel() { return &m_projectSettingsListModel; } public slots: - void messageQuit(); + void close(); QJsonObject getActiveSettingsJson(); void setPreviewImage(QString previewImage) diff --git a/ScreenPlay/src/sdkconnection.cpp b/ScreenPlay/src/sdkconnection.cpp index 5ef313d8..c60bd62a 100644 --- a/ScreenPlay/src/sdkconnection.cpp +++ b/ScreenPlay/src/sdkconnection.cpp @@ -17,6 +17,8 @@ ScreenPlay::SDKConnection::SDKConnection(QLocalSocket* socket, QObject* parent) : QObject(parent) { m_socket = socket; + + connect(m_socket, &QLocalSocket::disconnected, this, &SDKConnection::disconnected); connect(m_socket, &QLocalSocket::readyRead, this, &SDKConnection::readyRead); connect(m_socket, &QLocalSocket::errorOccurred, this, [](QLocalSocket::LocalSocketError socketError) { qInfo() << "Localsocket error:" << socketError; @@ -62,7 +64,7 @@ void ScreenPlay::SDKConnection::readyRead() qCritical() << "Wallpaper type not found. Expected: " << ScreenPlayUtil::getAvailableTypes() << " got: " << msg; } - qInfo() << "[2/3] SDKConnection parsed with type: " << m_type << " connected with AppID:" << m_appID; + qInfo() << "[2/4] SDKConnection parsed with type: " << m_type << " connected with AppID:" << m_appID; emit appConnected(this); @@ -92,6 +94,10 @@ void ScreenPlay::SDKConnection::readyRead() */ bool ScreenPlay::SDKConnection::sendMessage(const QByteArray& message) { + if (!m_socket) { + qWarning() << "Unable to write to unconnected socket wit message: " << message; + return false; + } m_socket->write(message); return m_socket->waitForBytesWritten(); } @@ -102,28 +108,15 @@ bool ScreenPlay::SDKConnection::sendMessage(const QByteArray& message) */ bool ScreenPlay::SDKConnection::close() { + if (!m_socket) { + qWarning() << "Cannot close invalid socket."; + return false; + } qInfo() << "Close " << m_type << m_appID << m_socket->state(); + m_socket->disconnectFromServer(); + m_socket->close(); - QJsonObject obj; - obj.insert("command", QJsonValue("quit")); - QByteArray command = QJsonDocument(obj).toJson(); - - m_socket->write(command); - if (!m_socket->waitForBytesWritten()) { - qWarning("Faild to send quit command to app"); - return false; - } - - if (m_socket->state() == QLocalSocket::ConnectedState) { - m_socket->disconnectFromServer(); - m_socket->close(); - - qInfo() << "### Destroy APPID:\t " << m_appID << " State: " << m_socket->state(); - } else { - qWarning() << "Cannot disconnect app " << m_appID << " with the state:" << m_socket->state(); - return false; - } - return true; + return m_socket->state() == QLocalSocket::UnconnectedState; } } diff --git a/ScreenPlay/src/sdkconnection.h b/ScreenPlay/src/sdkconnection.h index 74fbb572..bb576423 100644 --- a/ScreenPlay/src/sdkconnection.h +++ b/ScreenPlay/src/sdkconnection.h @@ -78,6 +78,7 @@ public: QString type() const { return m_type; } signals: + void disconnected(); void requestCloseAt(int at); void appIDChanged(QString appID); void monitorChanged(QVector monitor); diff --git a/ScreenPlay/src/settings.h b/ScreenPlay/src/settings.h index 0470eee3..00a43fa3 100644 --- a/ScreenPlay/src/settings.h +++ b/ScreenPlay/src/settings.h @@ -117,6 +117,7 @@ public: enum class Language { En_US, De_DE, + Pl_PL, It_IT, Ru_RU, Fr_FR, diff --git a/ScreenPlay/src/wizards.cpp b/ScreenPlay/src/wizards.cpp index 1ad9a541..149c2c2d 100644 --- a/ScreenPlay/src/wizards.cpp +++ b/ScreenPlay/src/wizards.cpp @@ -270,7 +270,7 @@ void Wizards::createGifWallpaper( const QString& file, const QVector& tags) { - QtConcurrent::run([=]() { + auto con = QtConcurrent::run([=]() { std::optional folderName = createTemporaryFolder(); if (!folderName.has_value()) { diff --git a/ScreenPlay/translations/ScreenPlay_.ts b/ScreenPlay/translations/ScreenPlay_.ts index 9eb22bf4..53262709 100644 --- a/ScreenPlay/translations/ScreenPlay_.ts +++ b/ScreenPlay/translations/ScreenPlay_.ts @@ -70,10 +70,6 @@ Forum - - Issue List - - Contribute @@ -82,6 +78,10 @@ Steam Workshop + + Issue Tracker + + CommunityNavItem @@ -680,10 +680,6 @@ Remove selected - - Remove - - Wallpapers @@ -692,6 +688,10 @@ Widgets + + Remove all + + MonitorsProjectSettingItem @@ -758,15 +758,29 @@ Settings - - - NavigationWallpaperConfiguration - Configurate active Wallpaper or Widgets + Mute/Unmute all Wallpaper - No active Wallpaper or Widgets + Pause/Play all Wallpaper + + + + Configure Wallpaper + + + + Minimize to Tray + + + + Exit + + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. @@ -1005,10 +1019,6 @@ Version - - ScreenPlay Build Version - - Open Changelog @@ -1049,6 +1059,11 @@ Privacy + + ScreenPlay Build Version + + + SettingsExpander diff --git a/ScreenPlay/translations/ScreenPlay_de_DE.qm b/ScreenPlay/translations/ScreenPlay_de_DE.qm index 594f6bef..7cc595f4 100644 Binary files a/ScreenPlay/translations/ScreenPlay_de_DE.qm and b/ScreenPlay/translations/ScreenPlay_de_DE.qm differ diff --git a/ScreenPlay/translations/ScreenPlay_de_DE.ts b/ScreenPlay/translations/ScreenPlay_de_DE.ts index 7f845a5d..3b805295 100644 --- a/ScreenPlay/translations/ScreenPlay_de_DE.ts +++ b/ScreenPlay/translations/ScreenPlay_de_DE.ts @@ -70,10 +70,6 @@ Forum Forum - - Issue List - Fehler Liste - Contribute Beitragen @@ -82,6 +78,10 @@ Steam Workshop Steam Workshop + + Issue Tracker + + CommunityNavItem @@ -488,98 +488,98 @@ Importh264Convert AnalyseVideo... - Analysiere Video... + AnalyseVideo... Generating preview image... - Erzeuge Vorschaubild... + Generating preview image... Generating preview thumbnail image... - Erzeuge Vorschau-Miniaturbild... + Generating preview thumbnail image... Generating 5 second preview video... - Generiere ein 5-Sekunden-Vorschau-Video... + Generating 5 second preview video... Generating preview gif... - Generiere Vorschau-Gif... + Generating preview gif... Converting Audio... - Konvertiere Audio... + Converting Audio... Converting Video... This can take some time! - Video wird umgewandelt... Das kann etwas dauern! + Converting Video... This can take some time! Converting Video ERROR! - Konvertieren nicht erfolgreich! + Converting Video ERROR! Analyse Video ERROR! - Analyse des Videos schlug Fehl! + Analyse Video ERROR! Import a video to a wallpaper - Importiere ein Video zu ein Wallpaper + Import a video to a wallpaper Generating preview video... - Generiere Vorschau-Video... + Generating preview video... Name (required!) - Name (erforderlich!) + Name (required!) Description - Beschreibung + Description Youtube URL - YouTube-URL + Youtube URL Abort - Abbrechen + Abort Save - Speichern + Save Save Wallpaper... - Speicher Wallpaper... + Save Wallpaper... Importh264Init Import a .mp4 video - + Import a .mp4 video ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. - + ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. Invalid file type. Must be valid h264 (*.mp4)! - + Invalid file type. Must be valid h264 (*.mp4)! Drop a *.mp4 file here or use 'Select file' below. - + Drop a *.mp4 file here or use 'Select file' below. Open Documentation - + Open Documentation Select file - Datei auswählen + Select file @@ -682,10 +682,6 @@ Bitte Konfiguriere deine Wallpaper noch erneut Remove selected Die Auswahl entfernen - - Remove - Entferne - Wallpapers Hintergründe @@ -694,6 +690,10 @@ Bitte Konfiguriere deine Wallpaper noch erneut Widgets Widgets + + Remove all + + MonitorsProjectSettingItem @@ -760,16 +760,31 @@ Bitte Konfiguriere deine Wallpaper noch erneut Settings Einstellungen - - - NavigationWallpaperConfiguration - Configurate active Wallpaper or Widgets - Konfiguriere aktive Wallpaper oder Widgets + Mute/Unmute all Wallpaper + Mute/Unmute all Wallpaper - No active Wallpaper or Widgets - Keine aktiven Wallpaper oder Widgets + Pause/Play all Wallpaper + Pause/Play all Wallpaper + + + Configure Wallpaper + Configure Wallpaper + + + Minimize to Tray + Minimize to Tray + + + Exit + Exit + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. @@ -1007,10 +1022,6 @@ Bitte Konfiguriere deine Wallpaper noch erneut Version Version - - ScreenPlay Build Version - ScreenPlay-Build-Version - Open Changelog Changelog öffnen @@ -1051,6 +1062,12 @@ Bitte Konfiguriere deine Wallpaper noch erneut Privacy Datenschutz + + ScreenPlay Build Version + + ScreenPlay Build Version + + SettingsExpander @@ -1067,15 +1084,15 @@ Bitte Konfiguriere deine Wallpaper noch erneut Video Import h264 (.mp4) - + Video Import h264 (.mp4) Video Import VP8 & VP9 (.webm) - + Video Import VP8 & VP9 (.webm) Video import (all types) - + Video import (all types) GIF Wallpaper @@ -1182,11 +1199,11 @@ Bitte Konfiguriere deine Wallpaper noch erneut StartInfo Free tools to help you to create wallpaper - + Free tools to help you to create wallpaper Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! - + Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! @@ -1577,7 +1594,7 @@ Bitte Konfiguriere deine Wallpaper noch erneut Password Required To Kick Session - + Password Required To Kick Session Already Logged In Elsewhere diff --git a/ScreenPlay/translations/ScreenPlay_es_ES.qm b/ScreenPlay/translations/ScreenPlay_es_ES.qm index d697ae06..85df5d45 100644 Binary files a/ScreenPlay/translations/ScreenPlay_es_ES.qm and b/ScreenPlay/translations/ScreenPlay_es_ES.qm differ diff --git a/ScreenPlay/translations/ScreenPlay_es_ES.ts b/ScreenPlay/translations/ScreenPlay_es_ES.ts index 56f5997d..f88433fd 100644 --- a/ScreenPlay/translations/ScreenPlay_es_ES.ts +++ b/ScreenPlay/translations/ScreenPlay_es_ES.ts @@ -5,15 +5,15 @@ ColorPicker Red - Red + Rojo Green - Green + Verde Blue - Blue + Azul RGB @@ -45,7 +45,7 @@ V: - V: + V: Alpha: @@ -60,7 +60,7 @@ Community News - News + Noticias Wiki @@ -68,33 +68,33 @@ Forum - Forum - - - Issue List - Issue List + Foro Contribute - Contribute + Contribuir Steam Workshop Steam Workshop + + Issue Tracker + + CommunityNavItem Open in browser - Open in browser + Abrir en el navegador CreateWallpaperInit Import any video type - Import any video type + Importar cualquier tipo de vídeo Depending on your PC configuration it is better to convert your wallpaper to a specific video codec. If both have bad performance you can also try a QML wallpaper! Supported video formats are: @@ -106,19 +106,19 @@ Set your preffered video codec: - Set your preffered video codec: + Establezca su códec de vídeo predeterminado: Quality slider. Lower value means better quality. - Quality slider. Lower value means better quality. + Deslizador de calidad. Un valor más bajo significa una mejor calidad. Open Documentation - Open Documentation + Abrir documentación Select file - Select file + Seleccionar archivo @@ -164,7 +164,7 @@ Converting Video... This can take some time! - Converting Video... This can take some time! + Convirtiendo vídeo... ¡Esto puede tardar un poco! Converting Video ERROR! @@ -192,7 +192,7 @@ Youtube URL - Youtube URL + URL de YouTube Abort @@ -200,7 +200,7 @@ Save - Save + Guardar Save Wallpaper... @@ -215,7 +215,7 @@ Playback rate - Playback rate + Velocidad de reproducción Current Video Time @@ -292,7 +292,7 @@ General - General + General Wallpaper name @@ -300,11 +300,11 @@ Created By - Created By + Creado por Tags - Tags + Etiquetas @@ -315,11 +315,11 @@ General - General + General Wallpaper name - Wallpaper name + Nombre del fondo Created By @@ -335,14 +335,14 @@ Preview Image - Preview Image + Imagen de previsualización HTMLWidget Create a HTML widget - Create a HTML widget + Crear un widget HTML General @@ -350,7 +350,7 @@ Widget name - Widget name + Nombre del widget Created by @@ -451,7 +451,7 @@ Save - Save + Guardar Save Wallpaper... @@ -462,7 +462,7 @@ ImportWebmInit Import a .webm video - Import a .webm video + Importar un vídeo .webm When importing webm we can skip the long conversion. When you get unsatisfying results with the ScreenPlay importer from 'ideo import and convert (all types)' you can also convert via the free and open source HandBrake! @@ -509,7 +509,7 @@ Converting Audio... - + Converting Audio... Converting Video... This can take some time! @@ -533,11 +533,11 @@ Name (required!) - + Name (required!) Description - + Description Youtube URL @@ -545,7 +545,7 @@ Abort - + Abort Save @@ -560,19 +560,19 @@ Importh264Init Import a .mp4 video - + Import a .mp4 video ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. - + ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. Invalid file type. Must be valid h264 (*.mp4)! - + Invalid file type. Must be valid h264 (*.mp4)! Drop a *.mp4 file here or use 'Select file' below. - + Drop a *.mp4 file here or use 'Select file' below. Open Documentation @@ -637,7 +637,7 @@ LicenseSelector License - License + Licencia Share — copy and redistribute the material in any medium or format. Adapt — remix, transform, and build upon the material for any purpose, even commercially. @@ -683,10 +683,6 @@ Remove selected Remove selected - - Remove - Remove - Wallpapers Wallpapers @@ -695,6 +691,10 @@ Widgets Widgets + + Remove all + + MonitorsProjectSettingItem @@ -761,16 +761,31 @@ Settings Settings - - - NavigationWallpaperConfiguration - Configurate active Wallpaper or Widgets - Configurate active Wallpaper or Widgets + Mute/Unmute all Wallpaper + Mute/Unmute all Wallpaper - No active Wallpaper or Widgets - No active Wallpaper or Widgets + Pause/Play all Wallpaper + Pause/Play all Wallpaper + + + Configure Wallpaper + Configure Wallpaper + + + Minimize to Tray + Minimize to Tray + + + Exit + Exit + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. @@ -1008,10 +1023,6 @@ Version Version - - ScreenPlay Build Version - ScreenPlay Build Version - Open Changelog Open Changelog @@ -1052,6 +1063,12 @@ Privacy Privacy + + ScreenPlay Build Version + + ScreenPlay Build Version + + SettingsExpander @@ -1068,15 +1085,15 @@ Video Import h264 (.mp4) - + Video Import h264 (.mp4) Video Import VP8 & VP9 (.webm) - + Video Import VP8 & VP9 (.webm) Video import (all types) - + Video import (all types) GIF Wallpaper @@ -1183,11 +1200,11 @@ StartInfo Free tools to help you to create wallpaper - + Free tools to help you to create wallpaper Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! - + Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! @@ -1578,7 +1595,7 @@ Password Required To Kick Session - + Password Required To Kick Session Already Logged In Elsewhere diff --git a/ScreenPlay/translations/ScreenPlay_fr_FR.qm b/ScreenPlay/translations/ScreenPlay_fr_FR.qm index 4049870a..9946b2d0 100644 Binary files a/ScreenPlay/translations/ScreenPlay_fr_FR.qm and b/ScreenPlay/translations/ScreenPlay_fr_FR.qm differ diff --git a/ScreenPlay/translations/ScreenPlay_fr_FR.ts b/ScreenPlay/translations/ScreenPlay_fr_FR.ts index f12e7b69..34bb32ef 100644 --- a/ScreenPlay/translations/ScreenPlay_fr_FR.ts +++ b/ScreenPlay/translations/ScreenPlay_fr_FR.ts @@ -21,7 +21,7 @@ HSV - HSV + TSV R: @@ -70,10 +70,6 @@ Forum Forum - - Issue List - Liste des problèmes - Contribute Contribuer @@ -82,6 +78,10 @@ Steam Workshop Steam Workshop + + Issue Tracker + + CommunityNavItem @@ -265,15 +265,15 @@ Forum Download Wallpaper and Widgets from our forums manually. If you want to download Steam Workshop content you have to install ScreenPlay via Steam. - Download Wallpaper and Widgets from our forums manually. If you want to download Steam Workshop content you have to install ScreenPlay via Steam. + Téléchargez manuellement des fond d'écran et des widgets depuis notre forum. Si vous voulez télécharger du contenu Steam Workshop, vous devez installer ScreenPlay via Steam. Install Steam Version - Install Steam Version + Installer la version Steam Open In Browser - Open In Browser + Ouvrir dans le navigateur @@ -365,7 +365,7 @@ HeadlineSection Headline Section - Headline Section + Section de titre @@ -427,7 +427,7 @@ Import a video to a wallpaper - Import a video to a wallpaper + Convertir une vidéo en fond d'écran Generating preview video... @@ -466,15 +466,15 @@ When importing webm we can skip the long conversion. When you get unsatisfying results with the ScreenPlay importer from 'ideo import and convert (all types)' you can also convert via the free and open source HandBrake! - When importing webm we can skip the long conversion. When you get unsatisfying results with the ScreenPlay importer from 'ideo import and convert (all types)' you can also convert via the free and open source HandBrake! + Lors de l'importation de webm, vous pouvez ignorer l'étape de conversion. Lorsque vous obtenez des résultats insatisfaisants avec l'importateur de ScreenPlay via 'import et conversion de vidéo (tous types)' vous pouvez convertir au format webm via le logiciel HandBrake. Il est gratuit et open source! Invalid file type. Must be valid VP8 or VP9 (*.webm)! - Invalid file type. Must be valid VP8 or VP9 (*.webm)! + Type de fichier invalide. Doit être un VP8 ou VP9 (*.webm)! Drop a *.webm file here or use 'Select file' below. - Drop a *.webm file here or use 'Select file' below. + Déposez un fichier *.webm ici ou utilisez 'Sélectionner un fichier' ci-dessous. Open Documentation @@ -489,39 +489,39 @@ Importh264Convert AnalyseVideo... - AnalyseVidéo... + AnalyseVideo... Generating preview image... - Génération de l'image d'aperçu... + Generating preview image... Generating preview thumbnail image... - Génération de la miniature de l’aperçu... + Generating preview thumbnail image... Generating 5 second preview video... - Génération d’une vidéo d’aperçu de 5 secondes... + Generating 5 second preview video... Generating preview gif... - + Generating preview gif... Converting Audio... - Conversion de l’audio... + Converting Audio... Converting Video... This can take some time! - + Converting Video... This can take some time! Converting Video ERROR! - + Converting Video ERROR! Analyse Video ERROR! - Erreur d'Analyse Vidéo ! + Analyse Video ERROR! Import a video to a wallpaper @@ -529,11 +529,11 @@ Generating preview video... - Génération de la vidéo d'aperçu... + Generating preview video... Name (required!) - Nom (requis!) + Name (required!) Description @@ -541,46 +541,46 @@ Youtube URL - URL Youtube  + Youtube URL Abort - + Abort Save - + Save Save Wallpaper... - Enregistrer le fond d'écran + Save Wallpaper... Importh264Init Import a .mp4 video - + Import a .mp4 video ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. - + ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. Invalid file type. Must be valid h264 (*.mp4)! - + Invalid file type. Must be valid h264 (*.mp4)! Drop a *.mp4 file here or use 'Select file' below. - + Drop a *.mp4 file here or use 'Select file' below. Open Documentation - Ouvrir la documentation + Open Documentation Select file - Sélectionner un fichier + Select file @@ -595,7 +595,7 @@ Pull to refresh! - Pull to refresh! + Faire glisser pour actualiser! Get more Wallpaper & Widgets via the Steam workshop! @@ -645,7 +645,7 @@ You grant other to remix your work and change the license to their liking. - You grant other to remix your work and change the license to their liking. + Vous permettez aux autres utilisateurs de réutiliser et altérer votre travail et de changer la licence selon leur souhait. Share — copy and redistribute the material in any medium or format. Adapt — remix, transform, and build upon the material. You are not allowed to use it commercially! @@ -657,7 +657,7 @@ You grant other to remix your work but it must remain under the GPLv3. We recommend this license for all code wallpaper! - You grant other to remix your work but it must remain under the GPLv3. We recommend this license for all code wallpaper! + Vous permettez aux autres utilisateurs de réutiliser et altérer votre travail, mais il doit rester sous licence GPLv3. Nous recommandons cette licence pour tout les fonds d'écrans codé. You do not share any rights and nobody is allowed to use or remix it (Not recommended). Can also used to credit work others. @@ -669,224 +669,239 @@ Your monitor setup changed! Please configure your wallpaper again. - Your monitor setup changed! - Please configure your wallpaper again. + La configuration de votre écran a changé! + Veuillez configurer votre fond d'écran à nouveau. Monitors Wallpaper Configuration - Wallpaper Configuration + Configuration du fond d'écran Remove selected - Remove selected - - - Remove - Remove + Retirer l'écran sélectionné Wallpapers - Wallpapers + Fonds d’écran Widgets - Widgets + Widgets + + + Remove all + MonitorsProjectSettingItem Set color - Set color + Définir la couleur Please choose a color - Please choose a color + Veuillez choisir une couleur Navigation All - All + Tout Scenes - Scenes + Scènes Videos - Videos + Vidéos Widgets - Widgets + Widgets Install Date Ascending - Install Date Ascending + Date d'installation croissante Install Date Descending - Install Date Descending + Date d'installation décroissante Subscribed items: - Subscribed items: + Éléments souscrits : Upload to the Steam Workshop - Upload to the Steam Workshop + Uploader sur le Steam Workshop Create - Create + Créer Workshop - Workshop + Workshop Installed - Installed + Installé Community - Community + Communauté Settings - Settings - - - - NavigationWallpaperConfiguration - - Configurate active Wallpaper or Widgets - Configurate active Wallpaper or Widgets + Paramètres - No active Wallpaper or Widgets - No active Wallpaper or Widgets + Mute/Unmute all Wallpaper + Mute/Unmute all Wallpaper + + + Pause/Play all Wallpaper + Pause/Play all Wallpaper + + + Configure Wallpaper + Configure Wallpaper + + + Minimize to Tray + Minimize to Tray + + + Exit + Exit + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. PopupOffline You need to run Steam for this. steamErrorRestart: %1 - steamErrorAPIInit: %2 - You need to run Steam for this. steamErrorRestart: %1 - steamErrorAPIInit: %2 + Vous devez exécuter Steam pour cela. steamErrorRestart: %1 - steamErrorAPIInit: %2 Back - Back + Précédent PopupSteamWorkshopAgreement You Need to Agree To The Steam Subscriber Agreement First - You Need to Agree To The Steam Subscriber Agreement First + Vous devez d'abord accepter l'Accord de Souscription Steam REQUIRES INTERNET CONNECTION AND FREE STEAM ACCOUNT TO ACTIVATE. Notice: Product offered subject to your acceptance of the Steam Subscriber Agreement (SSA). You must activate this product via the Internet by registering for a Steam account and accepting the SSA. Please see https://store.steampowered.com/subscriber_agreement/ to view the SSA prior to purchase. If you do not agree with the provisions of the SSA, you should return this game unopened to your retailer in accordance with their return policy. - REQUIRES INTERNET CONNECTION AND FREE STEAM ACCOUNT TO ACTIVATE. Notice: Product offered subject to your acceptance of the Steam Subscriber Agreement (SSA). You must activate this product via the Internet by registering for a Steam account and accepting the SSA. Please see https://store.steampowered.com/subscriber_agreement/ to view the SSA prior to purchase. If you do not agree with the provisions of the SSA, you should return this game unopened to your retailer in accordance with their return policy. + REQUIÈRE UNE CONNEXION INTERNET ET UN COMPTE STEAM GRATUIT POUR L'ACTIVATION. Avertissement: Produit offert sous réserve de votre acceptation de l'Accord de Souscription Steam (ASS). Vous devez activer ce produit via Internet en vous enregistrant sur un compte Steam et en acceptant l'ASS. Veuillez consulter https://store.steampowered.com/subscriber_agreement/ pour consulter l'ASS avant l'achat. Si vous n'êtes pas d'accord avec les dispositions de l'ASS, vous devriez retourner ce jeu non ouvert à votre détaillant conformément à leur politique de retour. View The Steam Subscriber Agreement - View The Steam Subscriber Agreement + Voir l'Accord de Souscription Steam Accept Steam Workshop Agreement - Accept Steam Workshop Agreement + Accepter l'Accord de Souscription Steam QMLWallpaper Create a QML Wallpaper - Create a QML Wallpaper + Créer un fond d'écran QML General - General + Général Wallpaper name - Wallpaper name + Nom du fond d'écran Created By - Created By + Créé par Description - Description + Description License & Tags - License & Tags + Licence & Tags Preview Image - Preview Image + Image d'aperçu QMLWidget Create a QML widget - Create a QML widget + Créer un widget QML General - General + Général Widget name - Widget name + Nom du Widget Created by - Created by + Créé par Tags - Tags + Tags SaveNotification Profile saved successfully! - Profile saved successfully! + Profil enregistré avec succès! ScreenPlayItem NEW - NEW + NOUVEAU Search Search for Wallpaper & Widgets - Search for Wallpaper & Widgets + Recherche de fond d'écran et de widgets Settings General - General + Général Autostart - Autostart + Démarrage automatique ScreenPlay will start with Windows and will setup your Desktop every time for you. @@ -1008,10 +1023,6 @@ Version Version - - ScreenPlay Build Version - ScreenPlay Build Version - Open Changelog Open Changelog @@ -1034,30 +1045,36 @@ If your ScreenPlay missbehaves this is a good way to look for answers. This shows all logs and warning during runtime. - If your ScreenPlay missbehaves this is a good way to look for answers. This shows all logs and warning during runtime. + Si ScreenPlay ne fonctionne pas correctement, c'est une bonne façon de chercher des réponses. Cela montre tous les logs et les avertissements émis pendant l'exécution. Show Logs - Show Logs + Afficher les logs Data Protection - Data Protection + Protection des données We use you data very carefully to improve ScreenPlay. We do not sell or share this (anonymous) information with others! - We use you data very carefully to improve ScreenPlay. We do not sell or share this (anonymous) information with others! + Nous utilisons vos données exclusivement pour améliorer ScreenPlay. Nous ne vendons pas ou ne partageons pas ces données (anonyme) avec d'autres ! Privacy - Privacy + Confidentialité + + + ScreenPlay Build Version + + ScreenPlay Build Version + SettingsExpander Copy text to clipboard - Copy text to clipboard + Copier le texte dans le presse-papiers @@ -1068,47 +1085,47 @@ Video Import h264 (.mp4) - + Video Import h264 (.mp4) Video Import VP8 & VP9 (.webm) - + Video Import VP8 & VP9 (.webm) Video import (all types) - + Video import (all types) GIF Wallpaper - GIF Wallpaper + Fond d'écran GIF QML Wallpaper - QML Wallpaper + Fond d'écran QML HTML5 Wallpaper - HTML5 Wallpaper + Fond d'écran HTML5 Website Wallpaper - Website Wallpaper + Fond d'écran Site web QML Widget - QML Widget + Widget QML HTML Widget - HTML Widget + Widget HTML Set Wallpaper - Set Wallpaper + Définir le fond d'écran Set Widget - Set Widget + Définir le Widget Headline @@ -1116,139 +1133,139 @@ Select a Monitor to display the content - Select a Monitor to display the content + Sélectionnez un écran pour afficher le contenu Set Volume - Set Volume + Régler le volume Fill Mode - Fill Mode + Mode de remplissage Stretch - Stretch + Étirer Fill - Fill + Remplir Contain - Contain + Contenir Cover - Cover + Couvrir Scale-Down - Scale-Down + Réduire Size: - Size: + Taille : No description... - No description... + Pas de description ... Click here if you like the content - Click here if you like the content + Cliquez ici si vous aimez le contenu Click here if you do not like the content - Click here if you do not like the content + Cliquez ici si vous n'aimez pas le contenu Subscribtions: - Subscribtions: + Abonnements : Open In Steam - Open In Steam + Ouvrir dans Steam Subscribed! - Subscribed! + Abonné! Subscribe - Subscribe + S'abonner StartInfo Free tools to help you to create wallpaper - + Free tools to help you to create wallpaper Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! - + Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! SteamNotAvailable Could not load steam integration! - Could not load steam integration! + Impossible de charger l'intégration Steam! SteamProfile Back - Back + Précédent Forward - Forward + Suivant SteamWorkshopStartPage Loading - Loading + Chargement Download now! - Download now! + Télécharger maintenant! Downloading... - Downloading... + Téléchargement... Details - Details + Détails Open In Steam - Open In Steam + Ouvrir dans Steam Profile - Profile + Profil Upload - Upload + Uploader Search for Wallpaper and Widgets... - Search for Wallpaper and Widgets... + Recherche de fond d'écran et de widgets... Open Workshop in Steam - Open Workshop in Steam + Ouvrir le Workshop dans Steam Ranked By Vote - Ranked By Vote + Classé par vote Publication Date @@ -1578,7 +1595,7 @@ Password Required To Kick Session - + Password Required To Kick Session Already Logged In Elsewhere diff --git a/ScreenPlay/translations/ScreenPlay_it_IT.qm b/ScreenPlay/translations/ScreenPlay_it_IT.qm index 5c81ce55..f42c72da 100644 Binary files a/ScreenPlay/translations/ScreenPlay_it_IT.qm and b/ScreenPlay/translations/ScreenPlay_it_IT.qm differ diff --git a/ScreenPlay/translations/ScreenPlay_it_IT.ts b/ScreenPlay/translations/ScreenPlay_it_IT.ts index 4c071d37..3e968092 100644 --- a/ScreenPlay/translations/ScreenPlay_it_IT.ts +++ b/ScreenPlay/translations/ScreenPlay_it_IT.ts @@ -70,10 +70,6 @@ Forum Forum - - Issue List - Lista Problemi - Contribute Contribuisci @@ -82,6 +78,10 @@ Steam Workshop Steam Workshop + + Issue Tracker + + CommunityNavItem @@ -489,98 +489,98 @@ Importh264Convert AnalyseVideo... - Analizza Video... + AnalyseVideo... Generating preview image... - + Generating preview image... Generating preview thumbnail image... - Generazione miniatura di anteprima... + Generating preview thumbnail image... Generating 5 second preview video... - Generazione anteprima video di 5 secondi... + Generating 5 second preview video... Generating preview gif... - Generazione gif di anteprima... + Generating preview gif... Converting Audio... - Conversione Audio... + Converting Audio... Converting Video... This can take some time! - Conversione Video... Potrebbe richiedere un po' di tempo! + Converting Video... This can take some time! Converting Video ERROR! - Conversione Video ERRORE! + Converting Video ERROR! Analyse Video ERROR! - Analisi Video ERRORE! + Analyse Video ERROR! Import a video to a wallpaper - Importa un video in uno sfondo + Import a video to a wallpaper Generating preview video... - Generazione video di anteprima... + Generating preview video... Name (required!) - Nome (obbligatorio) + Name (required!) Description - Descrizione + Description Youtube URL - URL Youtube + Youtube URL Abort - Interrompi + Abort Save - Salva + Save Save Wallpaper... - Salva sfondo... + Save Wallpaper... Importh264Init Import a .mp4 video - + Import a .mp4 video ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. - + ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. Invalid file type. Must be valid h264 (*.mp4)! - + Invalid file type. Must be valid h264 (*.mp4)! Drop a *.mp4 file here or use 'Select file' below. - + Drop a *.mp4 file here or use 'Select file' below. Open Documentation - Apri documentazione + Open Documentation Select file - Seleziona file + Select file @@ -683,10 +683,6 @@ Remove selected Rimuovi selezionati - - Remove - Rimuovi - Wallpapers Sfondi @@ -695,6 +691,10 @@ Widgets Widgets + + Remove all + + MonitorsProjectSettingItem @@ -761,16 +761,31 @@ Settings Impostazioni - - - NavigationWallpaperConfiguration - Configurate active Wallpaper or Widgets - Configura Sfondi o Widgets attivi + Mute/Unmute all Wallpaper + Mute/Unmute all Wallpaper - No active Wallpaper or Widgets - Nessuno Sfondo o Widget attivi + Pause/Play all Wallpaper + Pause/Play all Wallpaper + + + Configure Wallpaper + Configure Wallpaper + + + Minimize to Tray + Minimize to Tray + + + Exit + Exit + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. @@ -1008,10 +1023,6 @@ Version Versione - - ScreenPlay Build Version - Versione Build di ScreenPlay - Open Changelog Apri Changelog @@ -1052,6 +1063,12 @@ Privacy Privacy + + ScreenPlay Build Version + + ScreenPlay Build Version + + SettingsExpander @@ -1068,15 +1085,15 @@ Video Import h264 (.mp4) - + Video Import h264 (.mp4) Video Import VP8 & VP9 (.webm) - + Video Import VP8 & VP9 (.webm) Video import (all types) - + Video import (all types) GIF Wallpaper @@ -1183,11 +1200,11 @@ StartInfo Free tools to help you to create wallpaper - + Free tools to help you to create wallpaper Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! - + Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! @@ -1578,7 +1595,7 @@ Password Required To Kick Session - + Password Required To Kick Session Already Logged In Elsewhere diff --git a/ScreenPlay/translations/ScreenPlay_ko_KR.qm b/ScreenPlay/translations/ScreenPlay_ko_KR.qm index 892b2a8a..9b62f8a8 100644 Binary files a/ScreenPlay/translations/ScreenPlay_ko_KR.qm and b/ScreenPlay/translations/ScreenPlay_ko_KR.qm differ diff --git a/ScreenPlay/translations/ScreenPlay_ko_KR.ts b/ScreenPlay/translations/ScreenPlay_ko_KR.ts index 93437fca..1b1daaed 100644 --- a/ScreenPlay/translations/ScreenPlay_ko_KR.ts +++ b/ScreenPlay/translations/ScreenPlay_ko_KR.ts @@ -70,10 +70,6 @@ Forum 게시판 - - Issue List - 이슈 목록 - Contribute Contribute @@ -82,6 +78,10 @@ Steam Workshop 스팀 창작마당 + + Issue Tracker + + CommunityNavItem @@ -493,27 +493,27 @@ Generating preview image... - + Generating preview image... Generating preview thumbnail image... - + Generating preview thumbnail image... Generating 5 second preview video... - + Generating 5 second preview video... Generating preview gif... - + Generating preview gif... Converting Audio... - + Converting Audio... Converting Video... This can take some time! - + Converting Video... This can take some time! Converting Video ERROR! @@ -541,15 +541,15 @@ Youtube URL - + Youtube URL Abort - + Abort Save - + Save Save Wallpaper... @@ -560,27 +560,27 @@ Importh264Init Import a .mp4 video - + Import a .mp4 video ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. - + ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. Invalid file type. Must be valid h264 (*.mp4)! - + Invalid file type. Must be valid h264 (*.mp4)! Drop a *.mp4 file here or use 'Select file' below. - + Drop a *.mp4 file here or use 'Select file' below. Open Documentation - 문서 열기 + Open Documentation Select file - 파일 선택 + Select file @@ -683,10 +683,6 @@ Remove selected Remove selected - - Remove - Remove - Wallpapers Wallpapers @@ -695,6 +691,10 @@ Widgets Widgets + + Remove all + + MonitorsProjectSettingItem @@ -761,16 +761,31 @@ Settings Settings - - - NavigationWallpaperConfiguration - Configurate active Wallpaper or Widgets - Configurate active Wallpaper or Widgets + Mute/Unmute all Wallpaper + Mute/Unmute all Wallpaper - No active Wallpaper or Widgets - No active Wallpaper or Widgets + Pause/Play all Wallpaper + Pause/Play all Wallpaper + + + Configure Wallpaper + Configure Wallpaper + + + Minimize to Tray + Minimize to Tray + + + Exit + Exit + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. @@ -1008,10 +1023,6 @@ Version Version - - ScreenPlay Build Version - ScreenPlay Build Version - Open Changelog Open Changelog @@ -1052,6 +1063,12 @@ Privacy Privacy + + ScreenPlay Build Version + + ScreenPlay Build Version + + SettingsExpander @@ -1068,15 +1085,15 @@ Video Import h264 (.mp4) - + Video Import h264 (.mp4) Video Import VP8 & VP9 (.webm) - + Video Import VP8 & VP9 (.webm) Video import (all types) - + Video import (all types) GIF Wallpaper @@ -1183,11 +1200,11 @@ StartInfo Free tools to help you to create wallpaper - + Free tools to help you to create wallpaper Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! - + Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! @@ -1578,7 +1595,7 @@ Password Required To Kick Session - + Password Required To Kick Session Already Logged In Elsewhere diff --git a/ScreenPlay/translations/ScreenPlay_nl_NL.qm b/ScreenPlay/translations/ScreenPlay_nl_NL.qm index 77cc5214..3775ad60 100644 Binary files a/ScreenPlay/translations/ScreenPlay_nl_NL.qm and b/ScreenPlay/translations/ScreenPlay_nl_NL.qm differ diff --git a/ScreenPlay/translations/ScreenPlay_nl_NL.ts b/ScreenPlay/translations/ScreenPlay_nl_NL.ts index 9fc355c1..ee9c10dd 100644 --- a/ScreenPlay/translations/ScreenPlay_nl_NL.ts +++ b/ScreenPlay/translations/ScreenPlay_nl_NL.ts @@ -70,10 +70,6 @@ Forum Forum - - Issue List - Probleem lijst - Contribute Bijdragen @@ -82,6 +78,10 @@ Steam Workshop Steam Workshop + + Issue Tracker + + CommunityNavItem @@ -110,7 +110,7 @@ Quality slider. Lower value means better quality. - Quality slider. Lower value means better quality. + Kwaliteit schuifregelaar. Lagere waarde betekent betere kwaliteit. Open Documentation @@ -118,18 +118,18 @@ Select file - Select file + Selecteer bestand CreateWallpaperResult An error occurred! - An error occurred! + Er is een fout opgetreden! Copy text to clipboard - Copy text to clipboard + Kopieer tekst naar klembord Back to create and send an error report! @@ -144,94 +144,94 @@ Generating preview image... - Generating preview image... + Voorbeeld afbeelding aan het genereren... Generating preview thumbnail image... - Generating preview thumbnail image... + Voorbeeld miniatuurafbeelding aan het genereren... Generating 5 second preview video... - Generating 5 second preview video... + 5 seconden voorbeeldvideo aan het genereren... Generating preview gif... - Generating preview gif... + Voorbeeld gif aan het genereren... Converting Audio... - Converting Audio... + Audio aan het converteren... Converting Video... This can take some time! - Converting Video... This can take some time! + Video aan het converteren... Dit kan even duren! Converting Video ERROR! - Converting Video ERROR! + Video Converteren FOUT! Analyse Video ERROR! - Analyse Video ERROR! + Video Analyse FOUT! Convert a video to a wallpaper - Convert a video to a wallpaper + Converteer een video naar een achtergrond Generating preview video... - Generating preview video... + Voorbeeldvideo aan het genereren... Name (required!) - Name (required!) + Naam (verplicht!) Description - Description + Beschrijving Youtube URL - Youtube URL + Youtube URL Abort - Abort + Breek af Save - Save + Sla op Save Wallpaper... - Save Wallpaper... + Sla achtergrond op... DefaultVideoControls Volume - Volume + Volume Playback rate - Playback rate + Afspeelsnelheid Current Video Time - Current Video Time + Huidige Videotijd Fill Mode - Fill Mode + Vulmodus Stretch - Stretch + Rek uit Fill - Fill + Vul Contain @@ -239,26 +239,26 @@ Cover - Cover + Dek Scale_Down - Scale_Down + Schaal_Omlaag FileSelector Clear - Clear + Wis Select File - Select File + Selecteer bestand Please choose a file - Please choose a file + Kies een bestand @@ -300,42 +300,42 @@ Created By - Created By + Gemaakt door Tags - Tags + Tags HTMLWallpaper Create a HTML Wallpaper - Create a HTML Wallpaper + Maak een HTML Achtergrond General - General + Algemeen Wallpaper name - Wallpaper name + Achtergrond naam Created By - Created By + Gemaakt door Description - Description + Beschrijving License & Tags - License & Tags + Licentie & Tags Preview Image - Preview Image + Voorbeeldafbeelding @@ -560,23 +560,23 @@ Importh264Init Import a .mp4 video - + Import a .mp4 video ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. - + ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. Invalid file type. Must be valid h264 (*.mp4)! - + Invalid file type. Must be valid h264 (*.mp4)! Drop a *.mp4 file here or use 'Select file' below. - + Drop a *.mp4 file here or use 'Select file' below. Open Documentation - + Open Documentation Select file @@ -683,10 +683,6 @@ Remove selected Remove selected - - Remove - Remove - Wallpapers Wallpapers @@ -695,6 +691,10 @@ Widgets Widgets + + Remove all + + MonitorsProjectSettingItem @@ -761,16 +761,31 @@ Settings Settings - - - NavigationWallpaperConfiguration - Configurate active Wallpaper or Widgets - Configurate active Wallpaper or Widgets + Mute/Unmute all Wallpaper + Mute/Unmute all Wallpaper - No active Wallpaper or Widgets - No active Wallpaper or Widgets + Pause/Play all Wallpaper + Pause/Play all Wallpaper + + + Configure Wallpaper + Configure Wallpaper + + + Minimize to Tray + Minimize to Tray + + + Exit + Exit + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. @@ -1008,10 +1023,6 @@ Version Version - - ScreenPlay Build Version - ScreenPlay Build Version - Open Changelog Open Changelog @@ -1052,6 +1063,12 @@ Privacy Privacy + + ScreenPlay Build Version + + ScreenPlay Build Version + + SettingsExpander @@ -1068,15 +1085,15 @@ Video Import h264 (.mp4) - + Video Import h264 (.mp4) Video Import VP8 & VP9 (.webm) - + Video Import VP8 & VP9 (.webm) Video import (all types) - + Video import (all types) GIF Wallpaper @@ -1183,11 +1200,11 @@ StartInfo Free tools to help you to create wallpaper - + Free tools to help you to create wallpaper Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! - + Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! @@ -1578,7 +1595,7 @@ Password Required To Kick Session - + Password Required To Kick Session Already Logged In Elsewhere diff --git a/ScreenPlay/translations/ScreenPlay_pl_PL.qm b/ScreenPlay/translations/ScreenPlay_pl_PL.qm new file mode 100644 index 00000000..d00fbca8 Binary files /dev/null and b/ScreenPlay/translations/ScreenPlay_pl_PL.qm differ diff --git a/ScreenPlay/translations/ScreenPlay_pl_PL.ts b/ScreenPlay/translations/ScreenPlay_pl_PL.ts new file mode 100644 index 00000000..60a26e2d --- /dev/null +++ b/ScreenPlay/translations/ScreenPlay_pl_PL.ts @@ -0,0 +1,1937 @@ + + + + + ColorPicker + + Red + Czerwony + + + Green + Zielony + + + Blue + Niebieski + + + RGB + RGB + + + HSV + HSV + + + R: + R: + + + G: + G: + + + B: + B: + + + H: + H: + + + S: + S: + + + V: + V: + + + Alpha: + Alfa: + + + # + # + + + + Community + + News + Aktualności + + + Wiki + Wiki + + + Forum + Forum + + + Contribute + Udziel się + + + Steam Workshop + Warsztat Steam + + + Issue Tracker + + + + + CommunityNavItem + + Open in browser + Otwórz w przeglądarce + + + + CreateWallpaperInit + + Import any video type + Importuj dowolny typ filmu + + + Depending on your PC configuration it is better to convert your wallpaper to a specific video codec. If both have bad performance you can also try a QML wallpaper! Supported video formats are: + +*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv + W zależności od konfiguracji Twojego urządzenia zalecamy przekonwertować tapetę do konkretnego kodeka wideo. Jeśli wydajność jest słaba w obu przypadkach, możesz wypróbować tapetę QML! Wspierane są następujące formaty wideo: + +*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv + + + Set your preffered video codec: + Ustaw preferowany kodek wideo: + + + Quality slider. Lower value means better quality. + Suwak jakości. Mniejsza wartość oznacza lepszą jakość. + + + Open Documentation + Otwórz dokumentację + + + Select file + Wybierz plik + + + + CreateWallpaperResult + + An error occurred! + Wystąpił błąd! + + + Copy text to clipboard + Skopiuj tekst do schowka + + + Back to create and send an error report! + Wróć do tworzenia i wyślij raport o błędzie! + + + + CreateWallpaperVideoImportConvert + + + + + + Generating preview image... + Generowanie obrazu podglądu... + + + Generating preview thumbnail image... + Generowanie miniaturki podglądu... + + + Generating 5 second preview video... + Generowanie 5-sekundowego podglądu wideo... + + + Generating preview gif... + Generowanie podglądu gif... + + + Converting Audio... + Konwertowanie dźwięku... + + + Converting Video... This can take some time! + Konwertowanie wideo... Może to zająć trochę czasu! + + + Converting Video ERROR! + BŁĄD konwertowania wideo! + + + Analyse Video ERROR! + BŁĄD analizowania filmu! + + + Convert a video to a wallpaper + Konwertuj film na tapetę + + + Generating preview video... + Generowanie podglądu wideo... + + + Name (required!) + Nazwa (wymagane!) + + + Description + Opis + + + Youtube URL + Adres URL YouTube + + + Abort + Przerwij + + + Save + Zapisz + + + Save Wallpaper... + Zapisz tapetę... + + + + DefaultVideoControls + + Volume + Głośność + + + Playback rate + Prędkość odtwarzania + + + Current Video Time + Moment filmu + + + Fill Mode + Fill Mode + + + Stretch + Rozciągnięcie + + + Fill + Wypełnij + + + Contain + Contain + + + Cover + Cover + + + Scale_Down + Scale_Down + + + + FileSelector + + Clear + Wyczyść + + + Select File + Wybierz plik + + + Please choose a file + Należy wybrać plik + + + + Forum + + Download Wallpaper and Widgets from our forums manually. If you want to download Steam Workshop content you have to install ScreenPlay via Steam. + Pobierz ręcznie tapety i widżety z naszego forum. Jeśli chcesz pobierać treści z Warsztatu Steam, należy zainstalować ScreenPlay przez Steam. + + + Install Steam Version + Zainstaluj wersję Steam + + + Open In Browser + Otwórz w przeglądarce + + + + GifWallpaper + + Import a Gif Wallpaper + Importuj tapetę Gif + + + Drop a *.gif file here or use 'Select file' below. + Przeciągnij tutaj plik *.gif lub naciśnij 'Wybierz plik'. + + + Select your gif + Wybierz swój gif + + + General + Ogólne + + + Wallpaper name + Nazwa tapety + + + Created By + Utworzone przez + + + Tags + Znaczniki + + + + HTMLWallpaper + + Create a HTML Wallpaper + Utwórz tapetę HTML + + + General + Ogólne + + + Wallpaper name + Nazwa tapety + + + Created By + Utworzone przez + + + Description + Opis + + + License & Tags + Licencja i znaczniki + + + Preview Image + Obraz podglądu + + + + HTMLWidget + + Create a HTML widget + Utwórz widżet HTML + + + General + Ogólne + + + Widget name + Nazwa widżetu + + + Created by + Utworzone przez + + + Tags + Znaczniki + + + + HeadlineSection + + Headline Section + Sekcja nagłówka + + + + ImageSelector + + Set your own preview image + Ustaw swój obraz podglądu + + + Clear + Wyczyść + + + Select Preview Image + Wybierz obraz podglądu + + + + ImportWebmConvert + + + + + + AnalyseVideo... + Analizowanie filmu... + + + Generating preview image... + Generowanie obrazu podglądu... + + + Generating preview thumbnail image... + Generowanie miniaturki podglądu... + + + Generating 5 second preview video... + Generowanie 5-sekundowego podglądu wideo... + + + Generating preview gif... + Generowanie podglądu gif... + + + Converting Audio... + Konwertowanie dźwięku... + + + Converting Video... This can take some time! + Konwertowanie wideo... Może to zająć trochę czasu! + + + Converting Video ERROR! + BŁĄD konwertowania wideo! + + + Analyse Video ERROR! + BŁĄD analizowania filmu! + + + Import a video to a wallpaper + Importowanie filmu jako tapetę + + + Generating preview video... + Generowanie podglądu wideo... + + + Name (required!) + Nazwa (wymagane!) + + + Description + Opis + + + Youtube URL + Adres URL YouTube + + + Abort + Przerwij + + + Save + Zapisz + + + Save Wallpaper... + Zapisz tapetę... + + + + ImportWebmInit + + Import a .webm video + Importuj film .webm + + + When importing webm we can skip the long conversion. When you get unsatisfying results with the ScreenPlay importer from 'ideo import and convert (all types)' you can also convert via the free and open source HandBrake! + Importowanie pliku webm pozwala na ominięcie czasochłonnej konwersji. Jeśli rezultat importera ScreenPlay po użyciu opcji 'importuj i konwertuj film (dowolny typ)' nie będzie dla Ciebie satysfakcjonujący, możesz przekonwertować film korzystając z bezpłatnego programu o otwartym źródle o nazwie HandBrake! + + + Invalid file type. Must be valid VP8 or VP9 (*.webm)! + Nieprawidłowy typ pliku. Należy wybrać plik VP8 lub VP9 (*.webm)! + + + Drop a *.webm file here or use 'Select file' below. + Przeciągnij tutaj plik *.webm lub naciśnij 'Wybierz plik'. + + + Open Documentation + Otwórz dokumentację + + + Select file + Wybierz plik + + + + Importh264Convert + + AnalyseVideo... + Analizowanie filmu... + + + Generating preview image... + Generowanie obrazu podglądu... + + + Generating preview thumbnail image... + Generowanie miniaturki podglądu... + + + Generating 5 second preview video... + Generowanie 5-sekundowego podglądu wideo... + + + Generating preview gif... + Generowanie podglądu gif... + + + Converting Audio... + Konwertowanie dźwięku... + + + Converting Video... This can take some time! + Konwertowanie wideo... Może to zająć trochę czasu! + + + Converting Video ERROR! + BŁĄD konwertowania wideo! + + + Analyse Video ERROR! + BŁĄD analizowania filmu! + + + Import a video to a wallpaper + Importowanie filmu jako tapetę + + + Generating preview video... + Generowanie podglądu wideo... + + + Name (required!) + Nazwa (wymagane!) + + + Description + Opis + + + Youtube URL + Adres URL YouTube + + + Abort + Przerwij + + + Save + Zapisz + + + Save Wallpaper... + Zapisz tapetę... + + + + Importh264Init + + Import a .mp4 video + Importuj film .mp4 + + + ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. + ScreenPlay V0.15 i nowsze mogą odtwarzać pliki *.mp4 (znane również jako h264). Może to poprawić wydajność na starszych systemach. + + + Invalid file type. Must be valid h264 (*.mp4)! + Nieprawidłowy typ pliku. Należy użyć prawidłowy plik h264 (*.mp4)! + + + Drop a *.mp4 file here or use 'Select file' below. + Przeciągnij tutaj plik *.mp4 lub naciśnij 'Wybierz plik'. + + + Open Documentation + Otwórz dokumentację + + + Select file + Wybierz plik + + + + Installed + + + + + + Refreshing! + Odświeżanie! + + + Pull to refresh! + Przesuń, aby odświeżyć! + + + Get more Wallpaper & Widgets via the Steam workshop! + Więcej tapet oraz widżetów dostępne przez Warsztat Steam! + + + Open containing folder + Otwórz lokalizację pliku + + + Remove Item + Usuń element + + + Remove via Workshop + Usuń poprzez Warsztat + + + Open Workshop Page + Otwórz stronę Warsztatu + + + Are you sure you want to delete this item? + Czy na pewno chcesz usunąć ten element? + + + + InstalledWelcomeScreen + + Get free Widgets and Wallpaper via the Steam Workshop + Uzyskaj bezpłatne widżety i tapety poprzez Warsztat Steam + + + Browse the Steam Workshop + Przeglądaj Warsztat Steam + + + + LicenseSelector + + License + Licencja + + + Share — copy and redistribute the material in any medium or format. Adapt — remix, transform, and build upon the material for any purpose, even commercially. + Udostępnianie — możesz kopiować i rozpowszechniać ten materiał w dowolnym formacie na dowolnym nośniku danych. Dostosowywanie — możesz poprawiać, przekształcać oraz używać tego materiału jako bazy pod inne prace w dowolnym celu, nawet komercyjnie. + + + You grant other to remix your work and change the license to their liking. + Pozwalasz innym osobom na przekształcanie Twojej treści oraz zmienianie licencji w razie potrzeby. + + + Share — copy and redistribute the material in any medium or format. Adapt — remix, transform, and build upon the material. You are not allowed to use it commercially! + Udostępnianie — możesz kopiować i rozpowszechniać ten materiał w dowolnym formacie na dowolnym nośniku danych. Dostosowywanie — możesz poprawiać, przekształcać oraz używać tego materiału jako bazy pod inne prace. Nie możesz używać tego materiału komercyjnie! + + + You allow everyone to do anything with your work. + Pozwalasz każdemu robić cokolwiek chce z Twoją treścią. + + + You grant other to remix your work but it must remain under the GPLv3. We recommend this license for all code wallpaper! + Pozwalasz innym osobom na przekształcanie Twojej treści, ale musi pozostać na licencji GPLv3. Zalecamy wybranie tej licencji dla wszystkich tapet napisanych kodem! + + + You do not share any rights and nobody is allowed to use or remix it (Not recommended). Can also used to credit work others. + Zastrzegasz sobie wszystkie prawa i nie pozwalasz nikomu na przekształcanie tej treści (nie zalecane). Możesz użyć tej opcji, aby uznać prawa innych osób. + + + + MonitorConfiguration + + Your monitor setup changed! + Please configure your wallpaper again. + Konfiguracja Twojego monitora uległa zmianie! + Należy ponownie skonfigurować tapetę. + + + + Monitors + + Wallpaper Configuration + Konfiguracja tapety + + + Remove selected + Usuń wybrane + + + Wallpapers + Tapety + + + Widgets + Widżety + + + Remove all + + + + + MonitorsProjectSettingItem + + Set color + Ustaw kolor + + + Please choose a color + Należy wybrać kolor + + + + Navigation + + All + Wszystko + + + Scenes + Sceny + + + Videos + Filmy + + + Widgets + Widżety + + + Install Date Ascending + Data instalacji: rosnąco + + + Install Date Descending + Data instalacji: malejąco + + + Subscribed items: + Subskrybowane: + + + Upload to the Steam Workshop + Prześlij do Warsztatu Steam + + + Create + Utwórz + + + Workshop + Warsztat + + + Installed + Zainstalowane + + + Community + Społeczność + + + Settings + Ustawienia + + + Mute/Unmute all Wallpaper + Wycisz/Anuluj wyciszenie wszystkich tapet + + + Pause/Play all Wallpaper + Wstrzymaj/Odtwórz wszystkie tapety + + + Configure Wallpaper + Konfiguruj tapetę + + + Minimize to Tray + Minimalizuj do paska zadań + + + Exit + Wyjdź + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. + Czy na pewno chcesz zamknąć ScreenPlay? +Spowoduje to wyłączenie wszystkich tapet oraz widżetów. + + + + PopupOffline + + You need to run Steam for this. steamErrorRestart: %1 - steamErrorAPIInit: %2 + Ta funkcja wymaga uruchomienia Steam. steamErrorRestart: %1 - steamErrorAPIInit: %2 + + + Back + Wstecz + + + + PopupSteamWorkshopAgreement + + You Need to Agree To The Steam Subscriber Agreement First + Należy zaakceptować Umowę użytkownika Steam + + + REQUIRES INTERNET CONNECTION AND FREE STEAM ACCOUNT TO ACTIVATE. Notice: Product offered subject to your acceptance of the Steam Subscriber Agreement (SSA). You must activate this product via the Internet by registering for a Steam account and accepting the SSA. Please see https://store.steampowered.com/subscriber_agreement/ to view the SSA prior to purchase. If you do not agree with the provisions of the SSA, you should return this game unopened to your retailer in accordance with their return policy. + DO AKTYWACJI WYMAGANE JEST POŁĄCZENIE Z INTERNETEM ORAZ BEZPŁATNE KONTO STEAM. Uwaga: Oferowany produkt podlega Twojej akceptacji Umowy użytkownika Steam (dalej "Umowa"). Należy aktywować ten produkt przez Internet rejestrując konto Steam oraz akceptująć Umowę. Odwiedź https://store.steampowered.com/subscriber_agreement/, aby zapoznać się z Umową przed zakupem. Jeśli nie zgadzasz się z warunkami Umowy, należy zwrócić tę grę w stanie nieotwartym do Twojego sprzedawcy zgodnie z jego warunkami zwrotów. + + + View The Steam Subscriber Agreement + Wyświetl Umowę użytkownika Steam + + + Accept Steam Workshop Agreement + Zaakceptuj Umowę użytkownika Warsztatu Steam + + + + QMLWallpaper + + Create a QML Wallpaper + Utwórz tapetę QML + + + General + Ogólne + + + Wallpaper name + Nazwa tapety + + + Created By + Utworzone przez + + + Description + Opis + + + License & Tags + Licencja i znaczniki + + + Preview Image + Obraz podglądu + + + + QMLWidget + + Create a QML widget + Utwórz widżet QML + + + General + Ogólne + + + Widget name + Nazwa widżetu + + + Created by + Utworzone przez + + + Tags + Znaczniki + + + + SaveNotification + + Profile saved successfully! + Profil zapisany pomyślnie! + + + + ScreenPlayItem + + NEW + NOWE + + + + Search + + Search for Wallpaper & Widgets + Szukaj tapet i widżetów + + + + Settings + + General + Ogólne + + + Autostart + Autostart + + + ScreenPlay will start with Windows and will setup your Desktop every time for you. + ScreenPlay zostanie uruchomione przy starcie systemu Windows i ustawi dla Ciebie tapetę za każdym razem. + + + High priority Autostart + Wysoki priorytet autostartu + + + This options grants ScreenPlay a higher autostart priority than other apps. + Ta opcja nadaje ScreenPlay wyższy priorytet autostartu w porównaniu do innych aplikacji. + + + Send anonymous crash reports and statistics + Wysyłaj anonimowe raporty o awariach oraz statystyki + + + Help us make ScreenPlay faster and more stable. All collected data is purely anonymous and only used for development purposes! We use <a href="https://sentry.io">sentry.io</a> to collect and analyze this data. A <b>big thanks to them</b> for providing us with free premium support for open source projects! + Help us make ScreenPlay faster and more stable. All collected data is purely anonymous and only used for development purposes! We use <a href="https://sentry.io">sentry.io</a> to collect and analyze this data. A <b>big thanks to them</b> for providing us with free premium support for open source projects! + + + Set save location + Ustaw lokalizację zapisu + + + Set location + Ustaw lokalizację + + + Your storage path is empty! + Ścieżka do pamięci jest pusta! + + + Important: Changing this directory has no effect on the workshop download path. ScreenPlay only supports having one content folder! + Uwaga: Zmiana tego katalogu nie ma wpływu na ścieżkę pobierania z warsztatu. ScreenPlay wspiera posiadanie tylko jednego folderu na treść! + + + Language + Język + + + Set the ScreenPlay UI Language + Ustaw język interfejsu ScreenPlay + + + Theme + Motyw + + + Switch dark/light theme + Zmień motyw na jasny/ciemny + + + System Default + Systemowy + + + Dark + Ciemny + + + Light + Jasny + + + Performance + Wydajność + + + Pause wallpaper video rendering while another app is in the foreground + Pause wallpaper video rendering while another app is in the foreground + + + We disable the video rendering (not the audio!) for the best performance. If you have problem you can disable this behaviour here. Wallpaper restart required! + We disable the video rendering (not the audio!) for the best performance. If you have problem you can disable this behaviour here. Wallpaper restart required! + + + Default Fill Mode + Domyślny tryb wypełniania + + + Set this property to define how the video is scaled to fit the target area. + To ustawienie określa, w jaki sposób film jest skalowany, aby dopasować go do obszaru docelowego. + + + Stretch + Rozciągnięcie + + + Fill + Wypełnienie + + + Contain + Contain + + + Cover + Cover + + + Scale-Down + Scale-Down + + + About + Informacje + + + Thank you for using ScreenPlay + Dziękujemy za wypróbowanie ScreenPlay + + + Hi, I'm Elias Steurer also known as Kelteseth and I'm the developer of ScreenPlay. Thank you for using my software. You can follow me to receive updates about ScreenPlay here: + Cześć, nazywam się Elias Steurer znany również jako Kelteseth i jestem programistą ScreenPlay. Dziękuję Ci za wypróbowanie mojego oprogramowania. Obserwuj mnie, aby być na bieżąco z aktualizacjami ScreenPlay: + + + Version + Wersja + + + Open Changelog + Wyświetl listę zmian + + + Third Party Software + Oprogramowanie zewnętrzne + + + ScreenPlay would not be possible without the work of others. A big thank you to: + ScreenPlay would not be possible without the work of others. A big thank you to: + + + Licenses + Licencje + + + Logs + Rejestry + + + If your ScreenPlay missbehaves this is a good way to look for answers. This shows all logs and warning during runtime. + Tutaj znajdziesz wyjaśnienie, jeśli ScreenPlay nie działa poprawnie. Wyświetla wszystkie rejestry oraz ostrzeżenia podczas działania. + + + Show Logs + Pokaż rejestry + + + Data Protection + Ochrona danych + + + We use you data very carefully to improve ScreenPlay. We do not sell or share this (anonymous) information with others! + Bardzo ostrożnie używamy danych w celu rozwoju ScreenPlay. Nie sprzedajemy oraz nie udostępniamy tych (anonimowych) informacji osobom trzecim! + + + Privacy + Prywatność + + + ScreenPlay Build Version + + Wersja kompilacji ScreenPlay + + + + + SettingsExpander + + Copy text to clipboard + Kopiuj tekst do schowka + + + + Sidebar + + Tools Overview + Przegląd narzędzi + + + Video Import h264 (.mp4) + Importuj film h264 (.mp4) + + + Video Import VP8 & VP9 (.webm) + Importuj film VP8 lub VP9 (.webm) + + + Video import (all types) + Importuj film (dowolny typ) + + + GIF Wallpaper + Tapeta GIF + + + QML Wallpaper + Tapeta QML + + + HTML5 Wallpaper + Tapeta HTML5 + + + Website Wallpaper + Website Wallpaper + + + QML Widget + Widżet QML + + + HTML Widget + Widżet HTML + + + Set Wallpaper + Ustaw tapetę + + + Set Widget + Ustaw widżet + + + Headline + Nagłówek + + + Select a Monitor to display the content + Wybierz monitor do wyświetlania treści + + + Set Volume + Ustaw głośność + + + Fill Mode + Tryb wypełnienia + + + Stretch + Rozciągnięcie + + + Fill + Wypełnienie + + + Contain + Contain + + + Cover + Cover + + + Scale-Down + Scale-Down + + + Size: + Rozmiar: + + + No description... + Brak opisu... + + + Click here if you like the content + Naciśnij tutaj, jeśli lubisz tę treść + + + Click here if you do not like the content + Naciśnij tutaj, jeśli nie lubisz tej treści + + + Subscribtions: + Subskrypcje: + + + Open In Steam + Otwórz w Steam + + + Subscribed! + Subskrybujesz! + + + Subscribe + Subskrybuj + + + + StartInfo + + Free tools to help you to create wallpaper + Bezpłatne narzędzia ułatwiające tworzenie tapety + + + Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! + Poniżej znajdziesz dodatkowe narzędzia do tworzenia tapety poza tymi, które oferuje dla Ciebie ScreenPlay! + + + + SteamNotAvailable + + Could not load steam integration! + Błąd wczytywania integracji Steam! + + + + SteamProfile + + Back + Wstecz + + + Forward + Dalej + + + + SteamWorkshopStartPage + + Loading + Wczytywanie + + + Download now! + Pobierz teraz! + + + Downloading... + Pobieranie... + + + Details + Szczegóły + + + Open In Steam + Otwórz w Steam + + + Profile + Profil + + + Upload + Prześlij + + + Search for Wallpaper and Widgets... + Szukaj tapet i widżetów... + + + Open Workshop in Steam + Otwórz Warsztat Steam + + + Ranked By Vote + Ilość głosów + + + Publication Date + Data publikacji + + + Ranked By Trend + Popularność + + + Favorited By Friends + Lubiane przez znajomych + + + Created By Friends + Utworzone przez znajomych + + + Created By Followed Users + Utworzone przez obserwowane osoby + + + Not Yet Rated + Bez ocen + + + Total VotesAsc + Ilość głosów: rosnąco + + + Votes Up + Głosy pozytywne + + + Total Unique Subscriptions + Łącznie unikalnych subskrypcji + + + Back + Wstecz + + + Forward + Dalej + + + + TagSelector + + Save + Zapisz + + + Add tag + Dodaj znacznik + + + Cancel + Anuluj + + + Add Tag + Dodaj znacznik + + + + TextField + + Label + Etykieta + + + *Required + *Wymagane + + + + TrayIcon + + ScreenPlay - Double click to change you settings. + ScreenPlay - naciśnij dwukrotnie, aby zmienić ustawienia. + + + Open ScreenPlay + Otwórz ScreenPlay + + + Mute all + Wycisz wszystkie + + + Unmute all + Unmute all + + + Pause all + Wstrzymaj wszystkie + + + Play all + Odtwórz wszystkie + + + Quit + Wyjdź + + + + UploadProject + + Upload Wallpaper/Widgets to Steam + Prześlij tapetę/widżet do Steam + + + Abort + Przerwij + + + Upload Selected Projects + Prześlij wybrane projekty + + + Finish + Zakończ + + + + UploadProjectBigItem + + Type: + Typ: + + + Open Folder + Otwórz folder + + + Invalid Project! + Nieprawidłowy projekt! + + + + UploadProjectItem + + Fail + Niepowodzenie + + + No Connection + Brak połączenia + + + Invalid Password + Nieprawidłowe hasło + + + Logged In Elsewhere + Zalogowano w innym miejscu + + + Invalid Protocol Version + Nieprawidłowa wersja protokołu + + + Invalid Param + Nieprawidłowy parametr + + + File Not Found + Nie znaleziono pliku + + + Busy + Zajęte + + + Invalid State + Invalid State + + + Invalid Name + Nieprawidłowa nazwa + + + Invalid Email + Nieprawidłowy adres e-mail + + + Duplicate Name + Duplikat nazwy + + + Access Denied + Odmowa dostępu + + + Timeout + Upłynął limit czasu + + + Banned + Zbanowano + + + Account Not Found + Nie znaleziono konta + + + Invalid SteamID + Nieprawidłowe SteamID + + + Service Unavailable + Usługa jest niedostępna + + + Not Logged On + Nie zalogowano + + + Pending + Pending + + + Encryption Failure + Błąd szyfrowania + + + Insufficient Privilege + Brak uprawnień + + + Limit Exceeded + Limit Exceeded + + + Revoked + Revoked + + + Expired + Expired + + + Already Redeemed + Already Redeemed + + + Duplicate Request + Duplicate Request + + + Already Owned + Already Owned + + + IP Not Found + IP Not Found + + + Persist Failed + Persist Failed + + + Locking Failed + Locking Failed + + + Logon Session Replaced + Logon Session Replaced + + + Connect Failed + Connect Failed + + + Handshake Failed + Handshake Failed + + + IO Failure + IO Failure + + + Remote Disconnect + Remote Disconnect + + + Shopping Cart Not Found + Shopping Cart Not Found + + + Blocked + Zablokowane + + + Ignored + Ignorowane + + + No Match + No Match + + + Account Disabled + Account Disabled + + + Service ReadOnly + Service ReadOnly + + + Account Not Featured + Account Not Featured + + + Administrator OK + Administrator OK + + + Content Version + Wersja treści + + + Try Another CM + Try Another CM + + + Password Required To Kick Session + Password Required To Kick Session + + + Already Logged In Elsewhere + Already Logged In Elsewhere + + + Suspended + Wstrzymane + + + Cancelled + Anulowane + + + Data Corruption + Data Corruption + + + Disk Full + Disk Full + + + Remote Call Failed + Remote Call Failed + + + Password Unset + Nie ustawiono hasła + + + External Account Unlinked + Odłączone konto zewnętrzne + + + PSN Ticket Invalid + PSN Ticket Invalid + + + External Account Already Linked + Konto zewnętrzne już połączone + + + Remote File Conflict + Remote File Conflict + + + Illegal Password + Niedopuszczalne hasło + + + Same As Previous Value + Same As Previous Value + + + Account Logon Denied + Account Logon Denied + + + Cannot Use Old Password + Nie można użyć poprzedniego hasła + + + Invalid Login AuthCode + Nieprawidłowe logowanie AuthCode + + + Account Logon Denied No Mail + Account Logon Denied No Mail + + + Hardware Not Capable Of IPT + Hardware Not Capable Of IPT + + + IPT Init Error + IPT Init Error + + + Parental Control Restricted + Parental Control Restricted + + + Facebook Query Error + Facebook Query Error + + + Expired Login Auth Code + Expired Login Auth Code + + + IP Login Restriction Failed + IP Login Restriction Failed + + + Account Locked Down + Account Locked Down + + + Account Logon Denied Verified Email Required + Account Logon Denied Verified Email Required + + + No MatchingURL + No MatchingURL + + + Bad Response + Bad Response + + + Require Password ReEntry + Require Password ReEntry + + + Value Out Of Range + Value Out Of Range + + + Unexpecte Error + Unexpecte Error + + + Disabled + Disabled + + + Invalid CEG Submission + Invalid CEG Submission + + + Restricted Device + Restricted Device + + + Region Locked + Region Locked + + + Rate Limit Exceeded + Rate Limit Exceeded + + + Account Login Denied Need Two Factor + Account Login Denied Need Two Factor + + + Item Deleted + Item Deleted + + + Account Login Denied Throttle + Account Login Denied Throttle + + + Two Factor Code Mismatch + Błędny kod uwierzytelniania dwuskładnikowego + + + Two Factor Activation Code Mismatch + Błędny kod aktywacyjny uwierzytelniania dwuskładnikowego + + + Account Associated To Multiple Partners + Account Associated To Multiple Partners + + + Not Modified + Not Modified + + + No Mobile Device + Brak urządzenia mobilnego + + + Time Not Synced + Time Not Synced + + + Sms Code Failed + Błąd wysyłania kodu SMS + + + Account Limit Exceeded + Account Limit Exceeded + + + Account Activity Limit Exceeded + Account Activity Limit Exceeded + + + Phone Activity Limit Exceeded + Phone Activity Limit Exceeded + + + Refund To Wallet + Refund To Wallet + + + Email Send Failure + Email Send Failure + + + Not Settled + Not Settled + + + Need Captcha + Wymagana Captcha + + + GSLT Denied + GSLT Denied + + + GS Owner Denied + GS Owner Denied + + + Invalid Item Type + Invalid Item Type + + + IP Banned + Zbanowany adres IP + + + GSLT Expired + GSLT Expired + + + Insufficient Funds + Insufficient Funds + + + Too Many Pending + Too Many Pending + + + No Site Licenses Found + No Site Licenses Found + + + WG Network Send Exceeded + WG Network Send Exceeded + + + Account Not Friends + Account Not Friends + + + Limited User Account + Limited User Account + + + Cant Remove Item + Cant Remove Item + + + Account Deleted + Account Deleted + + + Existing User Cancelled License + Existing User Cancelled License + + + Community Cooldown + Community Cooldown + + + Status: + Status: + + + Upload Progress: + Postęp przesyłania: + + + + WebsiteWallpaper + + Create a Website Wallpaper + Create a Website Wallpaper + + + General + Ogólne + + + Wallpaper name + Nazwa tapety + + + Created By + Utworzone przez + + + Description + Opis + + + Tags + Znaczniki + + + Preview Image + Obraz podglądu + + + + WizardPage + + Save + Zapisz + + + Saving... + Zapisywanie... + + + + WorkshopItem + + Successfully subscribed to Workshop Item! + Pomyślnie subskrybujesz element z Warsztatu! + + + Download complete! + Pobieranie ukończone! + + + + XMLNewsfeed + + News & Patchnotes + Aktualności i lista zmian + + + diff --git a/ScreenPlay/translations/ScreenPlay_pt_BR.qm b/ScreenPlay/translations/ScreenPlay_pt_BR.qm index 0831bef6..39ffdd8e 100644 Binary files a/ScreenPlay/translations/ScreenPlay_pt_BR.qm and b/ScreenPlay/translations/ScreenPlay_pt_BR.qm differ diff --git a/ScreenPlay/translations/ScreenPlay_pt_BR.ts b/ScreenPlay/translations/ScreenPlay_pt_BR.ts index 474356e9..94149b02 100644 --- a/ScreenPlay/translations/ScreenPlay_pt_BR.ts +++ b/ScreenPlay/translations/ScreenPlay_pt_BR.ts @@ -70,10 +70,6 @@ Forum Fórum - - Issue List - Lista de Issues - Contribute Contribuir @@ -82,6 +78,10 @@ Steam Workshop Oficina Steam + + Issue Tracker + + CommunityNavItem @@ -493,35 +493,35 @@ Generating preview image... - + Generating preview image... Generating preview thumbnail image... - + Generating preview thumbnail image... Generating 5 second preview video... - + Generating 5 second preview video... Generating preview gif... - + Generating preview gif... Converting Audio... - + Converting Audio... Converting Video... This can take some time! - + Converting Video... This can take some time! Converting Video ERROR! - + Converting Video ERROR! Analyse Video ERROR! - + Analyse Video ERROR! Import a video to a wallpaper @@ -529,58 +529,58 @@ Generating preview video... - + Generating preview video... Name (required!) - + Name (required!) Description - + Description Youtube URL - + Youtube URL Abort - + Abort Save - + Save Save Wallpaper... - + Save Wallpaper... Importh264Init Import a .mp4 video - + Import a .mp4 video ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. - + ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. Invalid file type. Must be valid h264 (*.mp4)! - + Invalid file type. Must be valid h264 (*.mp4)! Drop a *.mp4 file here or use 'Select file' below. - + Drop a *.mp4 file here or use 'Select file' below. Open Documentation - + Open Documentation Select file - Selecionar arquivo + Select file @@ -683,10 +683,6 @@ Remove selected Remove selected - - Remove - Remove - Wallpapers Wallpapers @@ -695,6 +691,10 @@ Widgets Widgets + + Remove all + + MonitorsProjectSettingItem @@ -761,16 +761,31 @@ Settings Settings - - - NavigationWallpaperConfiguration - Configurate active Wallpaper or Widgets - Configurate active Wallpaper or Widgets + Mute/Unmute all Wallpaper + Mute/Unmute all Wallpaper - No active Wallpaper or Widgets - No active Wallpaper or Widgets + Pause/Play all Wallpaper + Pause/Play all Wallpaper + + + Configure Wallpaper + Configure Wallpaper + + + Minimize to Tray + Minimize to Tray + + + Exit + Exit + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. @@ -1008,10 +1023,6 @@ Version Version - - ScreenPlay Build Version - ScreenPlay Build Version - Open Changelog Open Changelog @@ -1052,6 +1063,12 @@ Privacy Privacy + + ScreenPlay Build Version + + ScreenPlay Build Version + + SettingsExpander @@ -1068,15 +1085,15 @@ Video Import h264 (.mp4) - + Video Import h264 (.mp4) Video Import VP8 & VP9 (.webm) - + Video Import VP8 & VP9 (.webm) Video import (all types) - + Video import (all types) GIF Wallpaper @@ -1183,11 +1200,11 @@ StartInfo Free tools to help you to create wallpaper - + Free tools to help you to create wallpaper Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! - + Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! @@ -1578,7 +1595,7 @@ Password Required To Kick Session - + Password Required To Kick Session Already Logged In Elsewhere diff --git a/ScreenPlay/translations/ScreenPlay_ru_RU.qm b/ScreenPlay/translations/ScreenPlay_ru_RU.qm index 006ec077..39ee6f7c 100644 Binary files a/ScreenPlay/translations/ScreenPlay_ru_RU.qm and b/ScreenPlay/translations/ScreenPlay_ru_RU.qm differ diff --git a/ScreenPlay/translations/ScreenPlay_ru_RU.ts b/ScreenPlay/translations/ScreenPlay_ru_RU.ts index 7d702092..58ac2f26 100644 --- a/ScreenPlay/translations/ScreenPlay_ru_RU.ts +++ b/ScreenPlay/translations/ScreenPlay_ru_RU.ts @@ -70,10 +70,6 @@ Forum Форум - - Issue List - Список проблем - Contribute Внести вклад @@ -82,6 +78,10 @@ Steam Workshop Мастерская Steam + + Issue Tracker + + CommunityNavItem @@ -493,35 +493,35 @@ Generating preview image... - + Generating preview image... Generating preview thumbnail image... - + Generating preview thumbnail image... Generating 5 second preview video... - + Generating 5 second preview video... Generating preview gif... - + Generating preview gif... Converting Audio... - + Converting Audio... Converting Video... This can take some time! - + Converting Video... This can take some time! Converting Video ERROR! - + Converting Video ERROR! Analyse Video ERROR! - + Analyse Video ERROR! Import a video to a wallpaper @@ -529,58 +529,58 @@ Generating preview video... - + Generating preview video... Name (required!) - + Name (required!) Description - + Description Youtube URL - + Youtube URL Abort - + Abort Save - + Save Save Wallpaper... - + Save Wallpaper... Importh264Init Import a .mp4 video - + Import a .mp4 video ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. - + ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. Invalid file type. Must be valid h264 (*.mp4)! - + Invalid file type. Must be valid h264 (*.mp4)! Drop a *.mp4 file here or use 'Select file' below. - + Drop a *.mp4 file here or use 'Select file' below. Open Documentation - + Open Documentation Select file - + Select file @@ -683,10 +683,6 @@ Remove selected Remove selected - - Remove - Remove - Wallpapers Wallpapers @@ -695,6 +691,10 @@ Widgets Widgets + + Remove all + + MonitorsProjectSettingItem @@ -761,16 +761,31 @@ Settings Settings - - - NavigationWallpaperConfiguration - Configurate active Wallpaper or Widgets - Configurate active Wallpaper or Widgets + Mute/Unmute all Wallpaper + Mute/Unmute all Wallpaper - No active Wallpaper or Widgets - No active Wallpaper or Widgets + Pause/Play all Wallpaper + Pause/Play all Wallpaper + + + Configure Wallpaper + Configure Wallpaper + + + Minimize to Tray + Minimize to Tray + + + Exit + Exit + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. @@ -1008,10 +1023,6 @@ Version Version - - ScreenPlay Build Version - ScreenPlay Build Version - Open Changelog Open Changelog @@ -1052,6 +1063,12 @@ Privacy Privacy + + ScreenPlay Build Version + + ScreenPlay Build Version + + SettingsExpander @@ -1068,15 +1085,15 @@ Video Import h264 (.mp4) - + Video Import h264 (.mp4) Video Import VP8 & VP9 (.webm) - + Video Import VP8 & VP9 (.webm) Video import (all types) - + Video import (all types) GIF Wallpaper @@ -1183,11 +1200,11 @@ StartInfo Free tools to help you to create wallpaper - + Free tools to help you to create wallpaper Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! - + Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! @@ -1578,7 +1595,7 @@ Password Required To Kick Session - + Password Required To Kick Session Already Logged In Elsewhere diff --git a/ScreenPlay/translations/ScreenPlay_tr_TR.qm b/ScreenPlay/translations/ScreenPlay_tr_TR.qm index 437f059b..d23bfbd4 100644 Binary files a/ScreenPlay/translations/ScreenPlay_tr_TR.qm and b/ScreenPlay/translations/ScreenPlay_tr_TR.qm differ diff --git a/ScreenPlay/translations/ScreenPlay_tr_TR.ts b/ScreenPlay/translations/ScreenPlay_tr_TR.ts index e618cd0f..f9578eca 100644 --- a/ScreenPlay/translations/ScreenPlay_tr_TR.ts +++ b/ScreenPlay/translations/ScreenPlay_tr_TR.ts @@ -70,10 +70,6 @@ Forum Forum - - Issue List - Sorun Listesi - Contribute Bağış yap @@ -82,6 +78,10 @@ Steam Workshop Steam Atölyesi + + Issue Tracker + + CommunityNavItem @@ -489,98 +489,98 @@ Importh264Convert AnalyseVideo... - VideoAnaliz... + AnalyseVideo... Generating preview image... - Önizleme oluşturuluyor... + Generating preview image... Generating preview thumbnail image... - Önizleme küçük resmi oluşturuluyor... + Generating preview thumbnail image... Generating 5 second preview video... - 5 saniyelik önizleme videosu oluşturuluyor... + Generating 5 second preview video... Generating preview gif... - Özizleme gifi oluşturuluyor... + Generating preview gif... Converting Audio... - Ses Dönüştürülüyor... + Converting Audio... Converting Video... This can take some time! - Video dönüştürülüyor... Biraz zaman alabilir! + Converting Video... This can take some time! Converting Video ERROR! - Video Dönüştürülürken Hata Oluştu! + Converting Video ERROR! Analyse Video ERROR! - Video Hatasını Analiz Edin! + Analyse Video ERROR! Import a video to a wallpaper - Bir videoyu duvar kağıdına aktarın + Import a video to a wallpaper Generating preview video... - Önizleme videosu oluşturuluyor... + Generating preview video... Name (required!) - İsim (gerekli) + Name (required!) Description - + Description Youtube URL - YouTube URL + Youtube URL Abort - + Abort Save - + Save Save Wallpaper... - Duvar kağıdını kaydet... + Save Wallpaper... Importh264Init Import a .mp4 video - + Import a .mp4 video ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. - + ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. Invalid file type. Must be valid h264 (*.mp4)! - + Invalid file type. Must be valid h264 (*.mp4)! Drop a *.mp4 file here or use 'Select file' below. - + Drop a *.mp4 file here or use 'Select file' below. Open Documentation - Belgeyi Aç + Open Documentation Select file - Dosya seç + Select file @@ -683,10 +683,6 @@ Remove selected Seçilenleri kaldır - - Remove - Kaldır - Wallpapers Duvar kağıtları @@ -695,6 +691,10 @@ Widgets Widget’lar + + Remove all + + MonitorsProjectSettingItem @@ -761,16 +761,31 @@ Settings Settings - - - NavigationWallpaperConfiguration - Configurate active Wallpaper or Widgets - Aktif Duvar Kağıdını veya Widget'ları yapılandırın + Mute/Unmute all Wallpaper + Mute/Unmute all Wallpaper - No active Wallpaper or Widgets - Aktif Duvar Kağıdı veya Widget yok + Pause/Play all Wallpaper + Pause/Play all Wallpaper + + + Configure Wallpaper + Configure Wallpaper + + + Minimize to Tray + Minimize to Tray + + + Exit + Exit + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. @@ -1008,10 +1023,6 @@ Version Version - - ScreenPlay Build Version - ScreenPlay Build Version - Open Changelog Open Changelog @@ -1052,6 +1063,12 @@ Privacy Privacy + + ScreenPlay Build Version + + ScreenPlay Build Version + + SettingsExpander @@ -1068,15 +1085,15 @@ Video Import h264 (.mp4) - + Video Import h264 (.mp4) Video Import VP8 & VP9 (.webm) - + Video Import VP8 & VP9 (.webm) Video import (all types) - + Video import (all types) GIF Wallpaper @@ -1183,11 +1200,11 @@ StartInfo Free tools to help you to create wallpaper - + Free tools to help you to create wallpaper Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! - + Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! @@ -1578,7 +1595,7 @@ Password Required To Kick Session - + Password Required To Kick Session Already Logged In Elsewhere diff --git a/ScreenPlay/translations/ScreenPlay_vi_VN.qm b/ScreenPlay/translations/ScreenPlay_vi_VN.qm index 905f9b6e..a699f1b4 100644 Binary files a/ScreenPlay/translations/ScreenPlay_vi_VN.qm and b/ScreenPlay/translations/ScreenPlay_vi_VN.qm differ diff --git a/ScreenPlay/translations/ScreenPlay_vi_VN.ts b/ScreenPlay/translations/ScreenPlay_vi_VN.ts index d7c1187a..1bcec9c9 100644 --- a/ScreenPlay/translations/ScreenPlay_vi_VN.ts +++ b/ScreenPlay/translations/ScreenPlay_vi_VN.ts @@ -70,10 +70,6 @@ Forum Diễn đàn - - Issue List - D.sách lỗi - Contribute Đóng góp @@ -82,6 +78,10 @@ Steam Workshop Steam Workshop + + Issue Tracker + + CommunityNavItem @@ -489,98 +489,98 @@ Importh264Convert AnalyseVideo... - Đang xử lý video... + AnalyseVideo... Generating preview image... - Đang tạo ra ảnh xem trước... + Generating preview image... Generating preview thumbnail image... - Đang tạo ra hình thu nhỏ xem trước... + Generating preview thumbnail image... Generating 5 second preview video... - Đang tao ra video 5 giây xem trước... + Generating 5 second preview video... Generating preview gif... - Đang tạo ra gif xem trước... + Generating preview gif... Converting Audio... - Đang chuyển đổi dạng âm thanh... + Converting Audio... Converting Video... This can take some time! - Đang chuyển đổi dạng video... Việc này có thể tốn kha khá thời gian! + Converting Video... This can take some time! Converting Video ERROR! - Đã có lỗi xảy ra khi chuyển đổi dạng video! + Converting Video ERROR! Analyse Video ERROR! - Đã có lỗi xảy ra khi đang xử lý video! + Analyse Video ERROR! Import a video to a wallpaper - Nhập một video vào hình nền + Import a video to a wallpaper Generating preview video... - Đang tạo ra video xem trước... + Generating preview video... Name (required!) - Tên (bắt buộc!) + Name (required!) Description - Mô tả + Description Youtube URL - Link YouTube + Youtube URL Abort - Hủy bỏ + Abort Save - Lưu + Save Save Wallpaper... - Lưu hình nền... + Save Wallpaper... Importh264Init Import a .mp4 video - + Import a .mp4 video ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. - + ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. Invalid file type. Must be valid h264 (*.mp4)! - + Invalid file type. Must be valid h264 (*.mp4)! Drop a *.mp4 file here or use 'Select file' below. - + Drop a *.mp4 file here or use 'Select file' below. Open Documentation - Mở tài liệu tham khảo + Open Documentation Select file - + Select file @@ -683,10 +683,6 @@ Remove selected Xóa mục đã chọn - - Remove - Xóa - Wallpapers Ảnh động @@ -695,6 +691,10 @@ Widgets Widgets + + Remove all + + MonitorsProjectSettingItem @@ -761,16 +761,31 @@ Settings Settings - - - NavigationWallpaperConfiguration - Configurate active Wallpaper or Widgets - Thiết lập hình nền hoặc widgets đang hoạt động + Mute/Unmute all Wallpaper + Mute/Unmute all Wallpaper - No active Wallpaper or Widgets - Không có hình nền hoặc widgets đang hoạt động + Pause/Play all Wallpaper + Pause/Play all Wallpaper + + + Configure Wallpaper + Configure Wallpaper + + + Minimize to Tray + Minimize to Tray + + + Exit + Exit + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. @@ -1008,10 +1023,6 @@ Version Phiên bản - - ScreenPlay Build Version - Bản dựng của ScreenPlay - Open Changelog Mở nhật kí thay đổi @@ -1052,6 +1063,12 @@ Privacy Quyền riêng tư + + ScreenPlay Build Version + + ScreenPlay Build Version + + SettingsExpander @@ -1068,15 +1085,15 @@ Video Import h264 (.mp4) - + Video Import h264 (.mp4) Video Import VP8 & VP9 (.webm) - + Video Import VP8 & VP9 (.webm) Video import (all types) - + Video import (all types) GIF Wallpaper @@ -1183,11 +1200,11 @@ StartInfo Free tools to help you to create wallpaper - + Free tools to help you to create wallpaper Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! - + Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! @@ -1578,7 +1595,7 @@ Password Required To Kick Session - + Password Required To Kick Session Already Logged In Elsewhere diff --git a/ScreenPlay/translations/ScreenPlay_zh_CN.qm b/ScreenPlay/translations/ScreenPlay_zh_CN.qm index a0aec754..c91bb1b0 100644 Binary files a/ScreenPlay/translations/ScreenPlay_zh_CN.qm and b/ScreenPlay/translations/ScreenPlay_zh_CN.qm differ diff --git a/ScreenPlay/translations/ScreenPlay_zh_CN.ts b/ScreenPlay/translations/ScreenPlay_zh_CN.ts index e7b2daa0..8d50def9 100644 --- a/ScreenPlay/translations/ScreenPlay_zh_CN.ts +++ b/ScreenPlay/translations/ScreenPlay_zh_CN.ts @@ -70,10 +70,6 @@ Forum 论坛 - - Issue List - 议题列表 - Contribute 贡献 @@ -82,6 +78,10 @@ Steam Workshop Steam 创意工坊 + + Issue Tracker + + CommunityNavItem @@ -138,10 +138,6 @@ CreateWallpaperVideoImportConvert - - - - Generating preview image... 生成预览图... @@ -265,15 +261,15 @@ Forum Download Wallpaper and Widgets from our forums manually. If you want to download Steam Workshop content you have to install ScreenPlay via Steam. - Download Wallpaper and Widgets from our forums manually. If you want to download Steam Workshop content you have to install ScreenPlay via Steam. + 从我们的社区手动下载壁纸与部件 如果您想要下载Steam创意工坊内容,您须要通过Steam安装ScreemPlay。 Install Steam Version - Install Steam Version + 安装Steam版本 Open In Browser - Open In Browser + 浏览器中打开 @@ -385,10 +381,6 @@ ImportWebmConvert - - - - AnalyseVideo... 分析视频... @@ -489,106 +481,102 @@ Importh264Convert AnalyseVideo... - 分析视频... + 分析视频... Generating preview image... - 生成预览图... + 生成预览图... Generating preview thumbnail image... - 生成预览缩略图... + 生成预览缩略图... Generating 5 second preview video... - 生成5秒预览视频... + 生成5秒预览视频... Generating preview gif... - + 生成预览GIF... Converting Audio... - 转换音频... + 转换音频... Converting Video... This can take some time! - 转换视频... 这可能需要一些时间! + 转换视频... 这可能需要一些时间! Converting Video ERROR! - 转换视频出错! + 转换视频出错! Analyse Video ERROR! - 分析视频出错! + 分析视频出错! Import a video to a wallpaper - 将视频导入为壁纸 + 将视频导入为壁纸 Generating preview video... - 生成预览视频... + 生成预览视频... Name (required!) - 名称(必选) + 名称(必选) Description - 简介 + 简介 Youtube URL - Youtube 链接 + Youtube 链接 Abort - + 中止 Save - 保存 + 保存 Save Wallpaper... - 保存壁纸... + 保存壁纸... Importh264Init Import a .mp4 video - + 导入.mp4视频 ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems. - + ScreenPlay V0.15以上可播放.mp4(通常称为h264)。这将提升在旧的系统上的性能. Invalid file type. Must be valid h264 (*.mp4)! - + 无效文件类型,必须为合法的h264(.mp4)! Drop a *.mp4 file here or use 'Select file' below. - + 拖入.mp4文件到此处,或者使用下方的“选择文件” Open Documentation - 打开文档 + 打开文档 Select file - 选择文件 + 选择文件 Installed - - - - Refreshing! 刷新中! @@ -645,7 +633,7 @@ You grant other to remix your work and change the license to their liking. - You grant other to remix your work and change the license to their liking. + 您允许他人重制您的作品及改变许可证 Share — copy and redistribute the material in any medium or format. Adapt — remix, transform, and build upon the material. You are not allowed to use it commercially! @@ -683,10 +671,6 @@ Remove selected 移除已选择 - - Remove - 移除 - Wallpapers 壁纸 @@ -695,6 +679,10 @@ Widgets 物件 + + Remove all + + MonitorsProjectSettingItem @@ -743,41 +731,55 @@ Create - Create + 创建 Workshop - Workshop + 创意工坊 Installed - Installed + 已安装 Community - Community + 社区 Settings - Settings - - - - NavigationWallpaperConfiguration - - Configurate active Wallpaper or Widgets - 设置活动壁纸或物件 + 设置 - No active Wallpaper or Widgets - 没有活动壁纸或物件 + Mute/Unmute all Wallpaper + + + + Pause/Play all Wallpaper + + + + Configure Wallpaper + + + + Minimize to Tray + + + + Exit + + + + Are you sure you want to exit ScreenPlay? +This will shut down all Wallpaper and Widgets. + PopupOffline You need to run Steam for this. steamErrorRestart: %1 - steamErrorAPIInit: %2 - You need to run Steam for this. steamErrorRestart: %1 - steamErrorAPIInit: %2 + 此功能需要启动Steam。 steamErrorRestart: %1 - steamErrorAPIInit: %2 Back @@ -868,7 +870,7 @@ ScreenPlayItem NEW - NEW + @@ -1009,8 +1011,10 @@ 版本 - ScreenPlay Build Version - ScreenPlay编译版本 + ScreenPlay Build Version + + ScreenPlay编译版本 + Open Changelog @@ -1068,15 +1072,15 @@ Video Import h264 (.mp4) - + 视频导入 h264(.mp4) Video Import VP8 & VP9 (.webm) - + 视频导入 VP8 & VP9 (.webm) Video import (all types) - + 视频导入 (所有类型) GIF Wallpaper @@ -1183,11 +1187,11 @@ StartInfo Free tools to help you to create wallpaper - + 免费的壁纸创建工具 Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! - + 在下面有一些创建壁纸的工具,功能比ScreenPlay所提供的更为强大! @@ -1212,87 +1216,87 @@ SteamWorkshopStartPage Loading - Loading + 正在加载 Download now! - Download now! + 开始下载 Downloading... - Downloading... + 下载中... Details - Details + 查看详情 Open In Steam - Open In Steam + Steam中打开 Profile - Profile + 配置 Upload - Upload + 上传 Search for Wallpaper and Widgets... - Search for Wallpaper and Widgets... + 搜索壁纸和物件... Open Workshop in Steam - Open Workshop in Steam + 在Steam中打开创意工坊 Ranked By Vote - Ranked By Vote + 评分最好 Publication Date - Publication Date + 发布日期 Ranked By Trend - Ranked By Trend + 评分趋势 Favorited By Friends - Favorited By Friends + 好友收藏 Created By Friends - Created By Friends + 好友创建 Created By Followed Users - Created By Followed Users + 已关注的 Not Yet Rated - Not Yet Rated + 尚无评分 Total VotesAsc - Total VotesAsc + 按总票数升序 Votes Up - Votes Up + 评分上升 Total Unique Subscriptions - Total Unique Subscriptions + 订阅总数 Back - Back + 后退 Forward - Forward + 前进 @@ -1578,7 +1582,7 @@ Password Required To Kick Session - + 需要密码以启动会话 Already Logged In Elsewhere diff --git a/ScreenPlaySDK/inc/screenplaysdk.h b/ScreenPlaySDK/inc/screenplaysdk.h index 991c7143..db72753a 100644 --- a/ScreenPlaySDK/inc/screenplaysdk.h +++ b/ScreenPlaySDK/inc/screenplaysdk.h @@ -49,33 +49,19 @@ #include #include -class ScreenPlaySDK : public QQuickItem { +class ScreenPlaySDK : public QObject { Q_OBJECT - Q_DISABLE_COPY(ScreenPlaySDK) public: - ScreenPlaySDK(QQuickItem* parent = nullptr); - ScreenPlaySDK(const QString& appID, const QString& type, QQuickItem* parent = nullptr); + ScreenPlaySDK(const QString& appID, const QString& type); ~ScreenPlaySDK(); - Q_PROPERTY(QString type READ type WRITE setType NOTIFY typeChanged) Q_PROPERTY(bool isConnected READ isConnected WRITE setIsConnected NOTIFY isConnectedChanged) Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged) - QString type() const - { - return m_type; - } - - bool isConnected() const - { - return m_isConnected; - } - - QString appID() const - { - return m_appID; - } + QString type() const { return m_type; } + bool isConnected() const { return m_isConnected; } + QString appID() const { return m_appID; } public slots: void sendMessage(const QJsonObject& obj); @@ -140,7 +126,7 @@ signals: private: QLocalSocket m_socket; - QString m_type = "undefined"; + QString m_type; bool m_isConnected = false; QString m_appID; diff --git a/ScreenPlaySDK/src/screenplaysdk.cpp b/ScreenPlaySDK/src/screenplaysdk.cpp index 619960a1..bb5b4e3a 100644 --- a/ScreenPlaySDK/src/screenplaysdk.cpp +++ b/ScreenPlaySDK/src/screenplaysdk.cpp @@ -15,16 +15,8 @@ static ScreenPlaySDK* global_sdkPtr = nullptr; \brief . */ -ScreenPlaySDK::ScreenPlaySDK(QQuickItem* parent) - : QQuickItem(parent) -{ -} - -ScreenPlaySDK::ScreenPlaySDK( - const QString& appID, - const QString& type, - QQuickItem* parent) - : QQuickItem(parent) +ScreenPlaySDK::ScreenPlaySDK(const QString& appID, const QString& type) + : QObject(nullptr) , m_type { type } , m_appID { appID } { diff --git a/ScreenPlaySysInfo/CMakeLists.txt b/ScreenPlaySysInfo/CMakeLists.txt index 5c43fb69..6026ab85 100644 --- a/ScreenPlaySysInfo/CMakeLists.txt +++ b/ScreenPlaySysInfo/CMakeLists.txt @@ -34,7 +34,14 @@ set(HEADER add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADER}) -qt_add_qml_module(${PROJECT_NAME} URI ${PROJECT_NAME} VERSION 1.0) +qt_add_qml_module( + ${PROJECT_NAME} + OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/bin/SysInfo + URI + ${PROJECT_NAME} + VERSION + 1.0) target_compile_definitions(${PROJECT_NAME} PRIVATE $<$,$>:QT_QML_DEBUG>) diff --git a/ScreenPlayUtil/CMakeLists.txt b/ScreenPlayUtil/CMakeLists.txt index 3047e2dc..2d66b427 100644 --- a/ScreenPlayUtil/CMakeLists.txt +++ b/ScreenPlayUtil/CMakeLists.txt @@ -12,8 +12,10 @@ find_package( set(SOURCES # cmake-format: sortable src/util.cpp src/contenttypes.cpp inc/public/ScreenPlayUtil/httpfileserver.cpp) -set(HEADER # cmake-format: sortable - inc/public/ScreenPlayUtil/util.h inc/public/ScreenPlayUtil/httpfileserver.h inc/public/ScreenPlayUtil/contenttypes.h inc/public/ScreenPlayUtil/projectfile.h) +set(HEADER + # cmake-format: sortable + inc/public/ScreenPlayUtil/util.h inc/public/ScreenPlayUtil/httpfileserver.h inc/public/ScreenPlayUtil/contenttypes.h + inc/public/ScreenPlayUtil/projectfile.h) add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADER}) diff --git a/ScreenPlayUtil/inc/public/ScreenPlayUtil/util.h b/ScreenPlayUtil/inc/public/ScreenPlayUtil/util.h index 6005a462..0448a21a 100644 --- a/ScreenPlayUtil/inc/public/ScreenPlayUtil/util.h +++ b/ScreenPlayUtil/inc/public/ScreenPlayUtil/util.h @@ -54,12 +54,11 @@ namespace ScreenPlayUtil { #if defined(Q_OS_WIN) struct WinMonitorStats { - std::vector iMonitors; - std::vector hMonitors; - std::vector hdcMonitors; - std::vector rcMonitors; - std::vector scaleFactor; - std::vector> sizes; + + WinMonitorStats() + { + EnumDisplayMonitors(NULL, NULL, MonitorEnum, (LPARAM)this); + } static BOOL CALLBACK MonitorEnum(HMONITOR hMon, HDC hdc, LPRECT lprcMonitor, LPARAM pData) @@ -77,10 +76,19 @@ struct WinMonitorStats { pThis->hdcMonitors.push_back(hdc); pThis->rcMonitors.push_back(*lprcMonitor); pThis->iMonitors.push_back(pThis->hdcMonitors.size()); + + //qInfo() << std::abs(lprcMonitor->right - lprcMonitor->left) << std::abs(lprcMonitor->top - lprcMonitor->bottom); + return TRUE; } - WinMonitorStats() { EnumDisplayMonitors(0, 0, MonitorEnum, (LPARAM)this); } + std::vector iMonitors; + std::vector hMonitors; + std::vector hdcMonitors; + std::vector rcMonitors; + std::vector scaleFactor; + std::vector> sizes; + int index = 0; }; #endif QJsonArray fillArray(const QVector& items); diff --git a/ScreenPlayWallpaper/CMakeLists.txt b/ScreenPlayWallpaper/CMakeLists.txt index 71bd41ce..f3ea021c 100644 --- a/ScreenPlayWallpaper/CMakeLists.txt +++ b/ScreenPlayWallpaper/CMakeLists.txt @@ -68,7 +68,7 @@ target_link_libraries( Qt6::WebEngineCore Qt6::WebEngineQuick) -if (UNIX AND NOT APPLE) +if(UNIX AND NOT APPLE) include(CopyRecursive) copy_recursive(${CMAKE_CURRENT_SOURCE_DIR}/kde/ScreenPlay ${CMAKE_BINARY_DIR}/bin/kde/ScreenPlay "*") endif() @@ -76,6 +76,7 @@ endif() if(APPLE) set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE TRUE MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist) target_link_libraries(${PROJECT_NAME} PRIVATE "-framework Cocoa") + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/${PROJECT_NAME}.app/Contents/MacOS/) add_custom_command( TARGET ${PROJECT_NAME} POST_BUILD diff --git a/ScreenPlayWallpaper/main.cpp b/ScreenPlayWallpaper/main.cpp index f2d6512c..899fe96d 100644 --- a/ScreenPlayWallpaper/main.cpp +++ b/ScreenPlayWallpaper/main.cpp @@ -32,8 +32,8 @@ int main(int argc, char* argv[]) // For testing purposes when starting the ScreenPlayWallpaper directly. if (argumentList.length() == 1) { #if defined(Q_OS_WIN) - //WinWindow window1({ 0 }, "test", "appID=test", "1", "fill", "videoWallpaper", true, true); - WinWindow window1({ 0 }, "C:/Program Files (x86)/Steam/steamapps/workshop/content/672870/2453869686", "appID=test", "1", "fill", "videoWallpaper", true, true); + // WinWindow window1({ 0 }, "test", "appID=test", "1", "fill", "videoWallpaper", true, true); + WinWindow window1({ 0, 1, 2 }, "C:/Program Files (x86)/Steam/steamapps/workshop/content/672870/hordemp4", "appID=test", "1", "fill", "videoWallpaper", true, true); #elif defined(Q_OS_LINUX) LinuxWindow window({ 0 }, "test", "appID=test", "1", "fill", "videoWallpaper", false, true); #elif defined(Q_OS_OSX) diff --git a/ScreenPlayWallpaper/qml/MultimediaView.qml b/ScreenPlayWallpaper/qml/MultimediaView.qml index 113dd832..341865fe 100644 --- a/ScreenPlayWallpaper/qml/MultimediaView.qml +++ b/ScreenPlayWallpaper/qml/MultimediaView.qml @@ -6,12 +6,15 @@ Item { id: root anchors.fill: parent property bool loops: Wallpaper.loops + property bool isPlaying: Wallpaper.isPlaying + onIsPlayingChanged: isPlaying ? mediaPlayer.play() : mediaPlayer.pause() property bool isWindows: Qt.platform.os === "windows" signal requestFadeIn MediaPlayer { id: mediaPlayer + source: Wallpaper.projectSourceFileAbsolute Component.onCompleted: { mediaPlayer.play() @@ -35,10 +38,35 @@ Item { VideoOutput { id: vo anchors.fill: parent + } AudioOutput { id: ao volume: Wallpaper.volume + muted: Wallpaper.muted + } + + Connections { + function onFillModeChanged(fillMode) { + if(fillMode === "stretch"){ + vo.fillMode = VideoOutput.Stretch + return + } + if(fillMode === "fill"){ + vo.fillMode = VideoOutput.PreserveAspectFit + return + } + if(fillMode === "contain" || fillMode === "cover" || fillMode === "scale-down"){ + vo.fillMode = VideoOutput.PreserveAspectCrop + } + } + + function onCurrentTimeChanged(currentTime) { + mediaPlayer.position = currentTime * mediaPlayer.duration + } + + + target: Wallpaper } } diff --git a/ScreenPlayWallpaper/qml/Wallpaper.qml b/ScreenPlayWallpaper/qml/Wallpaper.qml index 6e870c77..55df1635 100644 --- a/ScreenPlayWallpaper/qml/Wallpaper.qml +++ b/ScreenPlayWallpaper/qml/Wallpaper.qml @@ -31,13 +31,16 @@ Rectangle { if (Qt.platform.os === "windows") { loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml" } + + print(loader.source) fadeIn() break case InstalledType.HTMLWallpaper: - loader.setSource("qrc:/ScreenPlayWallpaper/qml/WebsiteWallpaper.qml", { - "url": Qt.resolvedUrl( - Wallpaper.projectSourceFileAbsolute) - }) + loader.setSource( + "qrc:/ScreenPlayWallpaper/qml/WebsiteWallpaper.qml", { + "url": Qt.resolvedUrl( + Wallpaper.projectSourceFileAbsolute) + }) break case InstalledType.QMLWallpaper: loader.source = Qt.resolvedUrl(Wallpaper.projectSourceFileAbsolute) @@ -61,49 +64,50 @@ Rectangle { } function fadeIn() { - Wallpaper.setVisible(true); + Wallpaper.setVisible(true) if (canFadeByWallpaperFillMode && Wallpaper.canFade) - imgCover.state = "hideDefaultBackgroundImage"; + imgCover.state = "hideDefaultBackgroundImage" else - imgCover.opacity = 0; + imgCover.opacity = 0 } anchors.fill: parent color: { if (Qt.platform.os !== "windows") - return "black"; + return "black" else - return Wallpaper.windowsDesktopProperties.color; + return Wallpaper.windowsDesktopProperties.color } Component.onCompleted: { - init(); + init() } Connections { function onQmlExit() { if (canFadeByWallpaperFillMode && Wallpaper.canFade) - imgCover.state = "exit"; + imgCover.state = "exit" else - Wallpaper.terminate(); + Wallpaper.terminate() } function onQmlSceneValueReceived(key, value) { - var obj2 = 'import QtQuick; Item {Component.onCompleted: loader.item.' + key + ' = ' + value + '; }'; - var newObject = Qt.createQmlObject(obj2.toString(), root, "err"); - newObject.destroy(10000); + var obj2 = 'import QtQuick; Item {Component.onCompleted: loader.item.' + + key + ' = ' + value + '; }' + var newObject = Qt.createQmlObject(obj2.toString(), root, "err") + newObject.destroy(10000) } // Replace wallpaper with QML Scene function onReloadQML(oldType) { - loader.sourceComponent = undefined; - loader.source = ""; - Wallpaper.clearComponentCache(); - loader.source = Qt.resolvedUrl(Wallpaper.projectSourceFileAbsolute); + loader.sourceComponent = undefined + loader.source = "" + Wallpaper.clearComponentCache() + loader.source = Qt.resolvedUrl(Wallpaper.projectSourceFileAbsolute) } // Replace wallpaper with GIF function onReloadGIF(oldType) { - init(); + init() } // This function only gets called here (the same function @@ -113,9 +117,9 @@ Rectangle { // We need to check if the old type // was also Video not get called twice if (oldType === InstalledType.VideoWallpaper) - return ; + return - loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml"; + loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml" } target: Wallpaper @@ -130,20 +134,19 @@ Rectangle { //asynchronous: true onStatusChanged: { if (loader.status === Loader.Error) { - loader.source = ""; - // Wallpaper.terminate(); + loader.source = "" + // Wallpaper.terminate(); } } Connections { function onRequestFadeIn() { - fadeIn(); + fadeIn() } ignoreUnknownSignals: true target: loader.item } - } Image { @@ -154,40 +157,41 @@ Rectangle { sourceSize.height: Wallpaper.height source: { if (Qt.platform.os === "windows") - return Qt.resolvedUrl("file:///" + Wallpaper.windowsDesktopProperties.wallpaperPath); + return Qt.resolvedUrl( + "file:///" + Wallpaper.windowsDesktopProperties.wallpaperPath) else return "" } - + Component.onCompleted: { if (Qt.platform.os !== "windows") { - root.canFadeByWallpaperFillMode = false; - return ; + root.canFadeByWallpaperFillMode = false + return } switch (Wallpaper.windowsDesktopProperties.wallpaperStyle) { case 10: - imgCover.fillMode = Image.PreserveAspectCrop; - break; + imgCover.fillMode = Image.PreserveAspectCrop + break case 6: - imgCover.fillMode = Image.PreserveAspectFit; - break; + imgCover.fillMode = Image.PreserveAspectFit + break case 2: - break; + break case 0: if (desktopProperties.isTiled) { // Tiled - imgCover.fillMode = Image.Tile; + imgCover.fillMode = Image.Tile } else { // Center - imgCover.fillMode = Image.PreserveAspectFit; - imgCover.anchors.centerIn = parent; - imgCover.width = sourceSize.width; - imgCover.height = sourceSize.height; + imgCover.fillMode = Image.PreserveAspectFit + imgCover.anchors.centerIn = parent + imgCover.width = sourceSize.width + imgCover.height = sourceSize.height } - break; + break case 22: - root.canFadeByWallpaperFillMode = false; - break; + root.canFadeByWallpaperFillMode = false + break } } @@ -206,7 +210,6 @@ Rectangle { target: imgCover opacity: 1 } - }, State { name: "hideDefaultBackgroundImage" @@ -215,7 +218,6 @@ Rectangle { target: imgCover opacity: 0 } - }, State { name: "exit" @@ -224,7 +226,6 @@ Rectangle { target: imgCover opacity: 1 } - } ] transitions: [ @@ -243,9 +244,7 @@ Rectangle { duration: 600 property: "opacity" } - } - }, Transition { from: "hideDefaultBackgroundImage" @@ -262,9 +261,7 @@ Rectangle { ScriptAction { script: Wallpaper.terminate() } - } - } ] } @@ -294,7 +291,12 @@ Rectangle { } Text { - text: "projectSourceFileAbsolute " + Wallpaper.projectSourceFileAbsolute + text: "getApplicationPath " + Wallpaper.getApplicationPath() + font.pointSize: 14 + } + + Text { + text: "projectSourceFileAbsolute " + Qt.resolvedUrl(Wallpaper.projectSourceFileAbsolute) font.pointSize: 14 } @@ -331,9 +333,10 @@ Rectangle { Text { text: { if (Qt.platform.os === "windows") - return "imgCover.source " + Qt.resolvedUrl("file:///" + Wallpaper.windowsDesktopProperties.wallpaperPath) - else - return "" + return "imgCover.source " + Qt.resolvedUrl( + "file:///" + Wallpaper.windowsDesktopProperties.wallpaperPath) + else + return "" } font.pointSize: 14 } @@ -342,13 +345,10 @@ Rectangle { text: "imgCover.status " + imgCover.status font.pointSize: 14 } - } background: Rectangle { opacity: 0.5 } - } - } diff --git a/ScreenPlayWallpaper/src/basewindow.cpp b/ScreenPlayWallpaper/src/basewindow.cpp index de9d2ecb..396e782a 100644 --- a/ScreenPlayWallpaper/src/basewindow.cpp +++ b/ScreenPlayWallpaper/src/basewindow.cpp @@ -85,7 +85,13 @@ BaseWindow::BaseWindow( if (auto typeOpt = ScreenPlayUtil::getInstalledTypeFromString(project.value("type").toString())) { setType(typeOpt.value()); - if (!project.contains("videoCodec")) { + if (this->type() == ScreenPlay::InstalledType::InstalledType::VideoWallpaper) { + if (auto videoCodecOpt = ScreenPlayUtil::getVideoCodecFromString(project.value("videoCodec").toString())) { + setVideoCodec(videoCodecOpt.value()); + } else { + qCritical() << "Cannot parse Wallpaper video codec from value" << project.value("type"); + } + } else if (!project.contains("videoCodec") && this->type() == ScreenPlay::InstalledType::InstalledType::VideoWallpaper) { qWarning("No videoCodec was specified inside the json object!"); const QString filename = project.value("file").toString(); if (filename.endsWith(".mp4")) { @@ -93,14 +99,6 @@ BaseWindow::BaseWindow( } else if (filename.endsWith(".webm")) { setVideoCodec(ScreenPlay::VideoCodec::VideoCodec::VP8); } - } else { - if (this->type() == ScreenPlay::InstalledType::InstalledType::VideoWallpaper) { - if (auto videoCodecOpt = ScreenPlayUtil::getVideoCodecFromString(project.value("videoCodec").toString())) { - setVideoCodec(videoCodecOpt.value()); - } else { - qCritical() << "Cannot parse Wallpaper video codec from value" << project.value("type"); - } - } } } else { diff --git a/ScreenPlayWallpaper/src/winwindow.cpp b/ScreenPlayWallpaper/src/winwindow.cpp index 2ee42195..9f3935ad 100644 --- a/ScreenPlayWallpaper/src/winwindow.cpp +++ b/ScreenPlayWallpaper/src/winwindow.cpp @@ -285,20 +285,43 @@ void WinWindow::setupWallpaperForOneScreen(int activeScreen) */ void WinWindow::setupWallpaperForAllScreens() { + ScreenPlayUtil::WinMonitorStats monitors; QRect rect; - for (int i = 0; i < QApplication::screens().count(); i++) { - QScreen* screenTmp = QApplication::screens().at(i); - rect.setWidth(rect.width() + screenTmp->geometry().width()); - rect.setHeight(rect.height() + screenTmp->geometry().height()); + for (int i = 0; i < monitors.iMonitors.size(); i++) { + const int width = std::abs(monitors.rcMonitors[i].right - monitors.rcMonitors[i].left); + const int height = std::abs(monitors.rcMonitors[i].top - monitors.rcMonitors[i].bottom); + qInfo() << width << height; + rect.setWidth(rect.width() + width); + rect.setHeight(rect.height() + height); } - m_window.setHeight(rect.height()); - m_window.setWidth(rect.width()); - if (!SetWindowPos(m_windowHandle, HWND_TOPMOST, 0, 0, rect.width(), rect.height(), SWP_NOSIZE | SWP_NOMOVE)) { + int offsetX = 0; + int offsetY = 0; + for (int i = 0; i < monitors.iMonitors.size(); i++) { + const int x = monitors.rcMonitors[i].left; + const int y = monitors.rcMonitors[i].top; + qInfo() << x << y; + if (x < offsetX) { + offsetX = x; + } + if (y < offsetY) { + offsetY += y; + } + } + if (!SetWindowPos(m_windowHandle, nullptr, offsetX, offsetY, rect.width(), rect.height(), SWP_NOSIZE | SWP_NOMOVE)) { + qFatal("Could not set window pos: "); + } + if (!SetWindowPos(m_windowHandle, nullptr, offsetX, offsetY, rect.width(), rect.height(), SWP_NOSIZE | SWP_NOMOVE)) { qFatal("Could not set window pos: "); } if (SetParent(m_windowHandle, m_windowHandleWorker) == nullptr) { qFatal("Could not attach to parent window"); } + qInfo() << rect.width() << rect.height() << offsetX << offsetY; + m_window.setHeight(rect.height()); + m_window.setWidth(rect.width()); + m_window.setY(offsetY); + m_window.setX(offsetX + 1920); + qInfo() << m_window.geometry(); } /*! diff --git a/ScreenPlayWorkshop/CMakeLists.txt b/ScreenPlayWorkshop/CMakeLists.txt index 3d61322f..00211656 100644 --- a/ScreenPlayWorkshop/CMakeLists.txt +++ b/ScreenPlayWorkshop/CMakeLists.txt @@ -42,6 +42,7 @@ if(WIN32) set(STEAM_BIN "${STEAM_LIB_PATH}/win64/steam_api64.dll") elseif(APPLE) set(WORKSHOP_PLUGIN_DIR ${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/MacOS/Workshop) + set(MACOS_FRAMEWORKS_DIR ${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/Frameworks/) set(STEAM_LIB "${STEAM_LIB_PATH}/osx/libsteam_api.dylib") set(STEAM_BIN ${STEAM_LIB}) elseif(UNIX) @@ -50,38 +51,37 @@ elseif(UNIX) set(STEAM_BIN ${STEAM_LIB}) endif() +add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADER}) +target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Quick ${STEAM_LIB} ScreenPlayUtil SteamSDK) + qt_add_qml_module( ${PROJECT_NAME} - OUTPUT_DIRECTORY ${WORKSHOP_PLUGIN_DIR} - URI "Workshop" - SOURCES ${SOURCES} ${HEADER} + OUTPUT_DIRECTORY + ${WORKSHOP_PLUGIN_DIR} + URI + "Workshop" + SOURCES + ${SOURCES} + ${HEADER} VERSION 1.0) -if(APPLE) - if(${SCREENPLAY_STEAM}) - add_custom_command( - TARGET ${PROJECT_NAME} - POST_BUILD - COMMENT "Copying steam_appid.txt into ScreenPlay.app bundle. This is for development only!" - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/steam_appid.txt - ${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/MacOS/) +if(${SCREENPLAY_STEAM}) + if(APPLE) + file(MAKE_DIRECTORY ${WORKSHOP_PLUGIN_DIR}) + file(MAKE_DIRECTORY ${MACOS_FRAMEWORKS_DIR}) - add_custom_command( - TARGET ${PROJECT_NAME} - POST_BUILD - COMMENT "Copying libsteam_api.dylib into ScreenPlay.app bundle." - COMMAND ${CMAKE_COMMAND} -E copy ${STEAM_LIB} - ${WORKSHOP_PLUGIN_DIR}) - endif() -else() - if(${SCREENPLAY_STEAM}) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/steam_appid.txt ${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/MacOS/ COPYONLY) + configure_file(${STEAM_BIN} ${WORKSHOP_PLUGIN_DIR} COPYONLY) + + set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/MacOS/Workshop) + else() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/steam_appid.txt ${CMAKE_BINARY_DIR}/bin/steam_appid.txt COPYONLY) configure_file(${STEAM_BIN} ${CMAKE_BINARY_DIR}/bin/ COPYONLY) endif() endif() - # Needed by the automatic generated target missing includes # https://github.com/qt/qtdeclarative/blob/7a7064e14f094e843e1ee832cc927e86f887621a/src/qml/Qt6QmlMacros.cmake#L2042 target_include_directories(${PROJECT_NAME} PUBLIC src/) diff --git a/ScreenPlayWorkshop/SteamSDK/CMakeLists.txt b/ScreenPlayWorkshop/SteamSDK/CMakeLists.txt index 74e908c4..ea23c2fc 100644 --- a/ScreenPlayWorkshop/SteamSDK/CMakeLists.txt +++ b/ScreenPlayWorkshop/SteamSDK/CMakeLists.txt @@ -49,9 +49,7 @@ set(HEADER public/steam/steamnetworkingtypes.h public/steam/steamps3params.h public/steam/steamtypes.h - public/steam/steamuniverse.h -) - + public/steam/steamuniverse.h) if(${SCREENPLAY_STEAM}) add_library(${PROJECT_NAME} STATIC ${HEADER}) @@ -59,8 +57,8 @@ if(${SCREENPLAY_STEAM}) target_link_libraries(${PROJECT_NAME}) endif() -# We allaways need the generated enums as a workaround to register these enums in app.cpp. -# Registering in the ScreenPlayWorkshop plugin does not work for some reason. +# We allaways need the generated enums as a workaround to register these enums in app.cpp. Registering in the ScreenPlayWorkshop plugin does +# not work for some reason. add_library(SteamSDKQtEnums STATIC public/steam/steam_qt_enums_generated.h) target_include_directories(SteamSDKQtEnums PUBLIC public/) target_link_libraries(SteamSDKQtEnums PRIVATE Qt6::Core) diff --git a/ScreenPlayWorkshop/src/installedlistmodel.cpp b/ScreenPlayWorkshop/src/installedlistmodel.cpp index 112f7ef7..b7d22c69 100644 --- a/ScreenPlayWorkshop/src/installedlistmodel.cpp +++ b/ScreenPlayWorkshop/src/installedlistmodel.cpp @@ -88,8 +88,10 @@ void InstalledListModel::append(const QJsonObject& obj, const QString& folderNam void InstalledListModel::loadInstalledContent() { + if (m_loadContentFutureWatcher.isRunning()) + return; - QtConcurrent::run([this]() { + m_loadContentFuture = QtConcurrent::run([this]() { QFileInfoList list = QDir(m_absoluteStoragePath.toLocalFile()).entryInfoList(QDir::NoDotAndDotDot | QDir::AllDirs); for (const auto& item : list) { @@ -117,6 +119,7 @@ void InstalledListModel::loadInstalledContent() emit installedLoadingFinished(); }); + m_loadContentFutureWatcher.setFuture(m_loadContentFuture); } QVariantMap InstalledListModel::get(QString folderId) diff --git a/ScreenPlayWorkshop/src/installedlistmodel.h b/ScreenPlayWorkshop/src/installedlistmodel.h index 90cb1712..b4c90454 100644 --- a/ScreenPlayWorkshop/src/installedlistmodel.h +++ b/ScreenPlayWorkshop/src/installedlistmodel.h @@ -89,6 +89,8 @@ signals: private: QVector m_screenPlayFiles; QUrl m_absoluteStoragePath; + QFuture m_loadContentFuture; + QFutureWatcher m_loadContentFutureWatcher; }; } diff --git a/ScreenPlayWorkshop/src/uploadlistmodel.h b/ScreenPlayWorkshop/src/uploadlistmodel.h index 4ba07d80..2da372ae 100644 --- a/ScreenPlayWorkshop/src/uploadlistmodel.h +++ b/ScreenPlayWorkshop/src/uploadlistmodel.h @@ -103,16 +103,16 @@ public slots: emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::UploadProgressRole) }); }); QObject::connect(item.get(), &SteamWorkshopItem::nameChanged, this, [this]() { - emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::NameRole) }); + emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::NameRole) }); }); QObject::connect(item.get(), &SteamWorkshopItem::absolutePreviewImagePathChanged, this, [this]() { - emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::AbsolutePreviewImagePath) }); + emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::AbsolutePreviewImagePath) }); }); QObject::connect(item.get(), &SteamWorkshopItem::uploadComplete, this, [this](bool successful) { - emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::AbsolutePreviewImagePath) }); + emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::AbsolutePreviewImagePath) }); }); QObject::connect(item.get(), &SteamWorkshopItem::statusChanged, this, [this](ScreenPlayWorkshopSteamEnums::EResult status) { - emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::Status) }); + emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::Status) }); // Check if all items are diff --git a/Tools/CMakeLists.txt b/Tools/CMakeLists.txt index 74329d96..7cbb9ccf 100644 --- a/Tools/CMakeLists.txt +++ b/Tools/CMakeLists.txt @@ -2,10 +2,8 @@ project(Tools LANGUAGES CXX) file(GLOB PYTHON *.py) -set(FILES - # cmake-format: sortable - Installer/package.xml - Installer/installscript.qs) +set(FILES # cmake-format: sortable + Installer/package.xml Installer/installscript.qs) add_custom_target( ${PROJECT_NAME} diff --git a/Tools/build.py b/Tools/build.py index bc552c02..43bb0b39 100644 --- a/Tools/build.py +++ b/Tools/build.py @@ -23,6 +23,8 @@ def vs_env_dict(): return dict((e[0].upper(), e[1]) for e in [p.rstrip().split("=", 1) for p in output] if len(e) == 2) # Based on https://stackoverflow.com/questions/7207309/how-to-run-functions-in-parallel + + def run_io_tasks_in_parallel(tasks): with ThreadPoolExecutor() as executor: running_tasks = [executor.submit(task) for task in tasks] @@ -30,13 +32,12 @@ def run_io_tasks_in_parallel(tasks): running_task.result() - # MAIN parser = argparse.ArgumentParser(description='Build and Package ScreenPlay') parser.add_argument('-t', action="store", dest="build_type", help="Build type. This is either debug or release.") parser.add_argument('-sign', action="store", dest="sign_build", - help="Enable if you want to sign the apps. This is macos only for now.") + help="Enable if you want to sign the apps. This is macos only for now.") parser.add_argument('-steam', action="store", dest="steam_build", help="Enable if you want to build the Steam workshop plugin.") parser.add_argument('-tests', action="store", dest="build_tests", @@ -85,7 +86,7 @@ if platform == "win32": cmake_prefix_path = "c:/Qt/" + qt_version + "/" + windows_msvc cmake_target_triplet = "x64-windows" elif platform == "darwin": - cmake_prefix_path = "~/Qt/" + qt_version + "/clang_64" + cmake_prefix_path = "~/Qt/" + qt_version + "/macos" deploy_command = "{prefix_path}/bin/macdeployqt {app}.app -qmldir=../../{app}/qml -executable={app}.app/Contents/MacOS/{app}" cmake_target_triplet = "x64-osx" elif platform == "linux": @@ -101,7 +102,8 @@ cmake_toolchain_file = ( "'{root_path}/../ScreenPlay-vcpkg/scripts/buildsystems/vcpkg.cmake'").format(root_path=root_path) print("cmake_toolchain_file: %s " % cmake_toolchain_file) -build_folder = root_path + "/build-" + cmake_target_triplet + "-" + args.build_type +build_folder = root_path + "/build-" + \ + cmake_target_triplet + "-" + args.build_type if os.path.isdir(build_folder): print("Remove previous build folder: " + build_folder) @@ -153,9 +155,6 @@ execute(deploy_command.format( executable_file_ending=executable_file_ending)) if platform == "darwin" and args.sign_build: - print("Remove workshop build folder (macos only).") - shutil.rmtree(build_folder + "/bin/workshop") - execute("codesign --deep -f -s \"Developer ID Application: Elias Steurer (V887LHYKRH)\" --timestamp --options \"runtime\" -f --entitlements \"../../ScreenPlay/entitlements.plist\" --deep \"ScreenPlay.app/\"") execute("codesign --deep -f -s \"Developer ID Application: Elias Steurer (V887LHYKRH)\" --timestamp --options \"runtime\" -f --deep \"ScreenPlayWallpaper.app/\"") execute("codesign --deep -f -s \"Developer ID Application: Elias Steurer (V887LHYKRH)\" --timestamp --options \"runtime\" -f --deep \"ScreenPlayWidget.app/\"") @@ -165,9 +164,12 @@ if platform == "darwin" and args.sign_build: execute("codesign --verify --verbose=4 \"ScreenPlayWidget.app/\"") run_io_tasks_in_parallel([ - lambda: execute("xcnotary notarize ScreenPlay.app -d kelteseth@gmail.com -k ScreenPlay"), - lambda: execute("xcnotary notarize ScreenPlayWallpaper.app -d kelteseth@gmail.com -k ScreenPlay"), - lambda: execute("xcnotary notarize ScreenPlayWidget.app -d kelteseth@gmail.com -k ScreenPlay") + lambda: execute( + "xcnotary notarize ScreenPlay.app -d kelteseth@gmail.com -k ScreenPlay"), + lambda: execute( + "xcnotary notarize ScreenPlayWallpaper.app -d kelteseth@gmail.com -k ScreenPlay"), + lambda: execute( + "xcnotary notarize ScreenPlayWidget.app -d kelteseth@gmail.com -k ScreenPlay") ]) execute("spctl --assess --verbose \"ScreenPlay.app/\"") @@ -177,7 +179,8 @@ if platform == "darwin" and args.sign_build: # Some dlls like openssl do no longer get copied automatically. # Lets just copy all of them into bin. if platform == "win32": - vcpkg_bin_path = os.path.abspath(("{root_path}/../ScreenPlay-vcpkg/installed/x64-windows/bin").format(root_path=root_path)) + vcpkg_bin_path = os.path.abspath( + ("{root_path}/../ScreenPlay-vcpkg/installed/x64-windows/bin").format(root_path=root_path)) print(vcpkg_bin_path) for basename in os.listdir(vcpkg_bin_path): if basename.endswith('.dll'):