1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-09-14 22:42:34 +02:00

Merge remote-tracking branch 'origin/HEAD'

This commit is contained in:
Elias Steurer 2021-12-18 13:24:18 +01:00
commit 429a5b231d
70 changed files with 4192 additions and 1924 deletions

View File

@ -32,6 +32,7 @@ endif()
set(VCPKG_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../ScreenPlay-vcpkg")
set(VCPKG_INSTALLED_PATH "${VCPKG_PATH}/installed/${VCPKG_ARCH}")
find_package(Git REQUIRED)
if(WIN32)
set(date_command "CMD")
@ -56,7 +57,7 @@ execute_process(
OUTPUT_VARIABLE GIT_COMMIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE)
add_compile_definitions(COMPILE_INFO="${BUILD_DATE} + ${GIT_COMMIT_HASH}")
add_compile_definitions(COMPILE_INFO="Build Date: ${BUILD_DATE}. Git Hash: ${GIT_COMMIT_HASH}. ")
add_compile_definitions(SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
add_compile_definitions(SCREENPLAY_STEAM="${SCREENPLAY_STEAM}")
@ -76,6 +77,9 @@ add_subdirectory(CMake)
if(${SCREENPLAY_STEAM})
add_subdirectory(ScreenPlayWorkshop)
else()
# Only add target SteamSDKQtEnums
add_subdirectory(ScreenPlayWorkshop/SteamSDK)
endif()
if(WIN32)

View File

@ -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
@ -204,7 +204,7 @@ target_link_libraries(
Qt6::Svg
Qt6::WebEngineQuick
Qt6::WebEngineCore
SteamSDK)
SteamSDKQtEnums)
if(${TESTS_ENABLED})
add_executable(tst_ScreenPlay tests/tst_main.cpp)

View File

@ -148,5 +148,11 @@
<file>translations/ScreenPlay_it_IT.ts</file>
<file>qml/Create/WizardsFiles/HTMLWallpaperMain.html</file>
<file>qml/Create/WizardsFiles/HTMLWidgetMain.html</file>
<file>assets/icons/icon_minimize.svg</file>
<file>assets/icons/icon_video_settings_black_24dp.svg</file>
<file>qml/Create/WizardsFiles/QMLWallpaperMain.qml</file>
<file>qml/Create/WizardsFiles/QMLWidgetMain.qml</file>
<file>translations/ScreenPlay_pl_PL.qm</file>
<file>translations/ScreenPlay_pl_PL.ts</file>
</qresource>
</RCC>

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>

After

Width:  |  Height:  |  Size: 258 B

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<rect x="0" y="0" width="24" height="24" style="fill:none;fill-rule:nonzero;"/>
<g transform="matrix(6.12323e-17,1,-1,6.12323e-17,24,0)">
<path d="M19,19L5,19L5,5L12,5L12,3L5,3C3.89,3 3,3.9 3,5L3,19C3,20.1 3.89,21 5,21L19,21C20.1,21 21,20.1 21,19L21,12L19,12L19,19ZM14,3L14,5L17.59,5L7.76,14.83L9.17,16.24L19,6.41L19,10L21,10L21,3L14,3Z" style="fill-rule:nonzero;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 842 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><rect fill="none" height="24" width="24"/></g><g><g><path d="M3,6h18v5h2V6c0-1.1-0.9-2-2-2H3C1.9,4,1,4.9,1,6v12c0,1.1,0.9,2,2,2h9v-2H3V6z"/><polygon points="15,12 9,8 9,16"/><path d="M22.71,18.43c0.03-0.29,0.04-0.58,0.01-0.86l1.07-0.85c0.1-0.08,0.12-0.21,0.06-0.32l-1.03-1.79 c-0.06-0.11-0.19-0.15-0.31-0.11L21.23,15c-0.23-0.17-0.48-0.31-0.75-0.42l-0.2-1.36C20.26,13.09,20.16,13,20.03,13h-2.07 c-0.12,0-0.23,0.09-0.25,0.21l-0.2,1.36c-0.26,0.11-0.51,0.26-0.74,0.42l-1.28-0.5c-0.12-0.05-0.25,0-0.31,0.11l-1.03,1.79 c-0.06,0.11-0.04,0.24,0.06,0.32l1.07,0.86c-0.03,0.29-0.04,0.58-0.01,0.86l-1.07,0.85c-0.1,0.08-0.12,0.21-0.06,0.32l1.03,1.79 c0.06,0.11,0.19,0.15,0.31,0.11l1.27-0.5c0.23,0.17,0.48,0.31,0.75,0.42l0.2,1.36c0.02,0.12,0.12,0.21,0.25,0.21h2.07 c0.12,0,0.23-0.09,0.25-0.21l0.2-1.36c0.26-0.11,0.51-0.26,0.74-0.42l1.28,0.5c0.12,0.05,0.25,0,0.31-0.11l1.03-1.79 c0.06-0.11,0.04-0.24-0.06-0.32L22.71,18.43z M19,19.5c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5s1.5,0.67,1.5,1.5 S19.83,19.5,19,19.5z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -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
@ -59,15 +59,23 @@ ApplicationWindow {
// 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();
}
@ -89,7 +97,7 @@ ApplicationWindow {
Connections {
function onRequestRaise() {
window.show();
root.show();
}
target: ScreenPlay.screenPlayManager
@ -103,10 +111,11 @@ ApplicationWindow {
}
Dialogs.CriticalError {
mainWindow: window
window: root
}
Common.TrayIcon {
window: root
}
StackView {
@ -192,6 +201,7 @@ ApplicationWindow {
Navigation.Navigation {
id: nav
window: root
onChangePage: (name)=> {
monitors.close();

View File

@ -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();
}

View File

@ -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.")

View File

@ -114,7 +114,7 @@ ColumnLayout {
"text": qsTr("Scale_Down")
}]
onActivated: {
ScreenPlay.screenPlayManager.setWallpaperValueAtMonitorIndex(activeMonitorIndex, "fillmode", settingsComboBox.currentText);
ScreenPlay.screenPlayManager.setWallpaperFillModeAtMonitorIndex(activeMonitorIndex,settingsComboBox.currentValue);
}
}

View File

@ -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,18 +135,10 @@ 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
@ -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
}

View File

@ -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

View File

@ -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;

View File

@ -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,57 @@ 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 {
}
MouseHoverBlocker {}
Connections {
function onRequestNavigationActive(isActive) {
setActive(isActive);
setActive(isActive)
}
function onRequestNavigation(nav) {
onPageChanged(nav);
onPageChanged(nav)
}
target: ScreenPlay.util
@ -128,10 +131,145 @@ 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()
}
}
layer.effect: ElevationEffect {
@ -149,7 +287,6 @@ Rectangle {
target: row
opacity: 0.3
}
}
]
transitions: [
@ -161,7 +298,6 @@ Rectangle {
target: row
duration: 300
}
}
]
}

View File

@ -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

View File

@ -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()
}
}
}
}

View File

@ -169,6 +169,9 @@ Item {
}, {
"value": Settings.De_DE,
"text": "German"
}, {
"value": Settings.Pl_PL,
"text": "Polish"
}, {
"value": Settings.It_IT,
"text": "Italian"

View File

@ -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;
});
}

View File

@ -124,7 +124,7 @@ private:
QFileSystemWatcher m_fileSystemWatcher;
QVector<ProjectFile> m_screenPlayFiles;
int m_count { 0 };
QFuture<void> m_loadContentFuture;
std::atomic_bool m_isLoading { false };
const std::shared_ptr<GlobalVariables>& m_globalVariables;
};

View File

@ -37,15 +37,8 @@ QHash<int, QByteArray> MonitorListModel::roleNames() const
{
static const QHash<int, QByteArray> roles {
{ static_cast<int>(MonitorRole::AppID), "m_appID" },
{ static_cast<int>(MonitorRole::MonitorID), "m_monitorID" },
{ static_cast<int>(MonitorRole::Name), "m_name" },
{ static_cast<int>(MonitorRole::Size), "m_size" },
{ static_cast<int>(MonitorRole::AvailableGeometry), "m_availableGeometry" },
{ static_cast<int>(MonitorRole::AvailableVirtualGeometry), "m_availableVirtualGeometry" },
{ static_cast<int>(MonitorRole::Number), "m_number" },
{ static_cast<int>(MonitorRole::Index), "m_index" },
{ static_cast<int>(MonitorRole::Geometry), "m_geometry" },
{ static_cast<int>(MonitorRole::Model), "m_model" },
{ static_cast<int>(MonitorRole::Manufacturer), "m_manufacturer" },
{ static_cast<int>(MonitorRole::PreviewImage), "m_previewImage" },
{ static_cast<int>(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<int>(m_monitorList.at(row).m_activeWallpaper->type());
@ -135,6 +106,43 @@ QVariant MonitorListModel::data(const QModelIndex& index, int role) const
*/
void MonitorListModel::loadMonitors()
{
#ifdef Q_OS_WIN
QModelIndex index;
ScreenPlayUtil::WinMonitorStats monitors;
// This offset lets us center the monitor selection view in the center
int offsetX = 0;
int offsetY = 0;
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) {
offsetX += (x * -1);
}
if (y < 0) {
offsetY += (y * -1);
}
}
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 geometry(
x + offsetX,
y + offsetY,
width,
height);
beginInsertRows(index, m_monitorList.size(), m_monitorList.size());
m_monitorList.append(Monitor { i, geometry });
endInsertRows();
}
#else
QModelIndex index;
int offsetX = 0;
int offsetY = 0;
@ -148,7 +156,6 @@ void MonitorListModel::loadMonitors()
}
}
QModelIndex index;
for (int i = 0; i < QApplication::screens().count(); i++) {
QScreen* screen = QApplication::screens().at(i);
@ -166,6 +173,7 @@ void MonitorListModel::loadMonitors()
m_monitorList.append(Monitor { i, availableVirtualGeometry, screen });
endInsertRows();
}
#endif
emit monitorReloadCompleted();
}
@ -216,7 +224,7 @@ void MonitorListModel::closeWallpaper(const QString& appID)
* \brief MonitorListModel::getAbsoluteDesktopSize
* \return
*/
QRect MonitorListModel::getAbsoluteDesktopSize() const
QRect MonitorListModel::absoluteDesktopSize() const
{
auto* app = static_cast<QApplication*>(QGuiApplication::instance());
return app->screens().at(0)->availableVirtualGeometry();
@ -248,7 +256,7 @@ void MonitorListModel::setWallpaperMonitor(const std::shared_ptr<ScreenPlayWallp
std::optional<QString> 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() };
}
}

View File

@ -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<ScreenPlayWallpaper> 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)
{

View File

@ -335,13 +335,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::FillMode>(fillmode);
if (auto appID = m_monitorListModel->getAppIDByMonitorIndex(index)) {
return setWallpaperValue(*appID, "fillmode", QVariant::fromValue<FillMode::FillMode>(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;
}

View File

@ -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;

View File

@ -174,6 +174,11 @@ void ScreenPlayWallpaper::processError(QProcess::ProcessError error)
*/
bool ScreenPlayWallpaper::setWallpaperValue(const QString& key, const QString& value, const bool save)
{
if (!m_connection) {
qWarning() << "Cannot set value for unconnected wallpaper!";
return false;
}
QJsonObject obj;
obj.insert(key, value);
@ -203,7 +208,13 @@ void ScreenPlayWallpaper::setSDKConnection(std::unique_ptr<SDKConnection> connec
{
m_connection = std::move(connection);
qInfo() << "[3/3] 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);
@ -234,8 +245,10 @@ void ScreenPlayWallpaper::replace(
const InstalledType::InstalledType type,
const bool checkWallpaperVisible)
{
if (!m_connection)
if (!m_connection) {
qWarning() << "Cannot replace for unconnected wallpaper!";
return;
}
m_previewImage = previewImage;
m_type = type;

View File

@ -51,6 +51,8 @@ namespace ScreenPlay {
class ScreenPlayWallpaper : public QObject {
Q_OBJECT
Q_PROPERTY(bool isConnected READ isConnected WRITE setIsConnected NOTIFY isConnectedChanged)
Q_PROPERTY(QVector<int> screenNumber READ screenNumber WRITE setScreenNumber NOTIFY screenNumberChanged)
Q_PROPERTY(float volume READ volume WRITE setVolume NOTIFY volumeChanged)
@ -108,6 +110,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<int> screenNumber);
@ -126,6 +129,8 @@ signals:
void requestClose(const QString& appID);
void error(const QString& msg);
void isConnectedChanged(bool isConnected);
public slots:
void messageQuit();
void processExit(int exitCode, QProcess::ExitStatus exitStatus);
@ -225,6 +230,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<GlobalVariables> m_globalVariables;
std::unique_ptr<SDKConnection> m_connection;
@ -243,5 +256,6 @@ private:
float m_playbackRate { 1.0f };
QTimer m_pingAliveTimer;
QStringList m_appArgumentsList;
bool m_isConnected;
};
}

View File

@ -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;

View File

@ -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<int> monitor);

View File

@ -117,6 +117,7 @@ public:
enum class Language {
En_US,
De_DE,
Pl_PL,
It_IT,
Ru_RU,
Fr_FR,

View File

@ -270,7 +270,7 @@ void Wizards::createGifWallpaper(
const QString& file,
const QVector<QString>& tags)
{
QtConcurrent::run([=]() {
auto con = QtConcurrent::run([=]() {
std::optional<QString> folderName = createTemporaryFolder();
if (!folderName.has_value()) {

View File

@ -758,15 +758,29 @@
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NavigationWallpaperConfiguration</name>
<message>
<source>Configurate active Wallpaper or Widgets</source>
<source>Mute/Unmute all Wallpaper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No active Wallpaper or Widgets</source>
<source>Pause/Play all Wallpaper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Configure Wallpaper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Minimize to Tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Exit</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -1005,10 +1019,6 @@
<source>Version</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ScreenPlay Build Version </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open Changelog</source>
<translation type="unfinished"></translation>
@ -1049,6 +1059,11 @@
<source>Privacy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ScreenPlay Build Version
</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsExpander</name>

View File

@ -488,98 +488,98 @@
<name>Importh264Convert</name>
<message>
<source>AnalyseVideo...</source>
<translation type="unfinished">Analysiere Video...</translation>
<translation type="unfinished">AnalyseVideo...</translation>
</message>
<message>
<source>Generating preview image...</source>
<translation type="unfinished">Erzeuge Vorschaubild...</translation>
<translation type="unfinished">Generating preview image...</translation>
</message>
<message>
<source>Generating preview thumbnail image...</source>
<translation type="unfinished">Erzeuge Vorschau-Miniaturbild...</translation>
<translation type="unfinished">Generating preview thumbnail image...</translation>
</message>
<message>
<source>Generating 5 second preview video...</source>
<translation type="unfinished">Generiere ein 5-Sekunden-Vorschau-Video...</translation>
<translation type="unfinished">Generating 5 second preview video...</translation>
</message>
<message>
<source>Generating preview gif...</source>
<translation type="unfinished">Generiere Vorschau-Gif...</translation>
<translation type="unfinished">Generating preview gif...</translation>
</message>
<message>
<source>Converting Audio...</source>
<translation type="unfinished">Konvertiere Audio...</translation>
<translation type="unfinished">Converting Audio...</translation>
</message>
<message>
<source>Converting Video... This can take some time!</source>
<translation type="unfinished">Video wird umgewandelt... Das kann etwas dauern!</translation>
<translation type="unfinished">Converting Video... This can take some time!</translation>
</message>
<message>
<source>Converting Video ERROR!</source>
<translation type="unfinished">Konvertieren nicht erfolgreich!</translation>
<translation type="unfinished">Converting Video ERROR!</translation>
</message>
<message>
<source>Analyse Video ERROR!</source>
<translation type="unfinished">Analyse des Videos schlug Fehl!</translation>
<translation type="unfinished">Analyse Video ERROR!</translation>
</message>
<message>
<source>Import a video to a wallpaper</source>
<translation type="unfinished">Importiere ein Video zu ein Wallpaper</translation>
<translation type="unfinished">Import a video to a wallpaper</translation>
</message>
<message>
<source>Generating preview video...</source>
<translation type="unfinished">Generiere Vorschau-Video...</translation>
<translation type="unfinished">Generating preview video...</translation>
</message>
<message>
<source>Name (required!)</source>
<translation type="unfinished">Name (erforderlich!)</translation>
<translation type="unfinished">Name (required!)</translation>
</message>
<message>
<source>Description</source>
<translation type="unfinished">Beschreibung</translation>
<translation type="unfinished">Description</translation>
</message>
<message>
<source>Youtube URL</source>
<translation type="unfinished">YouTube-URL</translation>
<translation type="unfinished">Youtube URL</translation>
</message>
<message>
<source>Abort</source>
<translation type="unfinished">Abbrechen</translation>
<translation type="unfinished">Abort</translation>
</message>
<message>
<source>Save</source>
<translation type="unfinished">Speichern</translation>
<translation type="unfinished">Save</translation>
</message>
<message>
<source>Save Wallpaper...</source>
<translation type="unfinished">Speicher Wallpaper...</translation>
<translation type="unfinished">Save Wallpaper...</translation>
</message>
</context>
<context>
<name>Importh264Init</name>
<message>
<source>Import a .mp4 video</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Import a .mp4 video</translation>
</message>
<message>
<source>ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</translation>
</message>
<message>
<source>Invalid file type. Must be valid h264 (*.mp4)!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Invalid file type. Must be valid h264 (*.mp4)!</translation>
</message>
<message>
<source>Drop a *.mp4 file here or use &apos;Select file&apos; below.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Drop a *.mp4 file here or use &apos;Select file&apos; below.</translation>
</message>
<message>
<source>Open Documentation</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Open Documentation</translation>
</message>
<message>
<source>Select file</source>
<translation type="unfinished">Datei auswählen</translation>
<translation type="unfinished">Select file</translation>
</message>
</context>
<context>
@ -760,16 +760,31 @@ Bitte Konfiguriere deine Wallpaper noch erneut</translation>
<source>Settings</source>
<translation>Einstellungen</translation>
</message>
</context>
<context>
<name>NavigationWallpaperConfiguration</name>
<message>
<source>Configurate active Wallpaper or Widgets</source>
<translation>Konfiguriere aktive Wallpaper oder Widgets</translation>
<source>Mute/Unmute all Wallpaper</source>
<translation type="unfinished">Mute/Unmute all Wallpaper</translation>
</message>
<message>
<source>No active Wallpaper or Widgets</source>
<translation>Keine aktiven Wallpaper oder Widgets</translation>
<source>Pause/Play all Wallpaper</source>
<translation type="unfinished">Pause/Play all Wallpaper</translation>
</message>
<message>
<source>Configure Wallpaper</source>
<translation type="unfinished">Configure Wallpaper</translation>
</message>
<message>
<source>Minimize to Tray</source>
<translation type="unfinished">Minimize to Tray</translation>
</message>
<message>
<source>Exit</source>
<translation type="unfinished">Exit</translation>
</message>
<message>
<source>Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</source>
<translation type="unfinished">Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</translation>
</message>
</context>
<context>
@ -1007,10 +1022,6 @@ Bitte Konfiguriere deine Wallpaper noch erneut</translation>
<source>Version</source>
<translation>Version</translation>
</message>
<message>
<source>ScreenPlay Build Version </source>
<translation>ScreenPlay-Build-Version </translation>
</message>
<message>
<source>Open Changelog</source>
<translation>Changelog öffnen</translation>
@ -1051,6 +1062,12 @@ Bitte Konfiguriere deine Wallpaper noch erneut</translation>
<source>Privacy</source>
<translation>Datenschutz</translation>
</message>
<message>
<source>ScreenPlay Build Version
</source>
<translation type="unfinished">ScreenPlay Build Version
</translation>
</message>
</context>
<context>
<name>SettingsExpander</name>
@ -1067,15 +1084,15 @@ Bitte Konfiguriere deine Wallpaper noch erneut</translation>
</message>
<message>
<source>Video Import h264 (.mp4)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import h264 (.mp4)</translation>
</message>
<message>
<source>Video Import VP8 &amp; VP9 (.webm)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import VP8 &amp; VP9 (.webm)</translation>
</message>
<message>
<source>Video import (all types)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video import (all types)</translation>
</message>
<message>
<source>GIF Wallpaper</source>
@ -1182,11 +1199,11 @@ Bitte Konfiguriere deine Wallpaper noch erneut</translation>
<name>StartInfo</name>
<message>
<source>Free tools to help you to create wallpaper</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Free tools to help you to create wallpaper</translation>
</message>
<message>
<source>Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</translation>
</message>
</context>
<context>
@ -1577,7 +1594,7 @@ Bitte Konfiguriere deine Wallpaper noch erneut</translation>
</message>
<message>
<source>Password Required To Kick Session</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Password Required To Kick Session</translation>
</message>
<message>
<source>Already Logged In Elsewhere</source>

View File

@ -5,15 +5,15 @@
<name>ColorPicker</name>
<message>
<source>Red</source>
<translation type="unfinished">Red</translation>
<translation>Rojo</translation>
</message>
<message>
<source>Green</source>
<translation type="unfinished">Green</translation>
<translation>Verde</translation>
</message>
<message>
<source>Blue</source>
<translation type="unfinished">Blue</translation>
<translation>Azul</translation>
</message>
<message>
<source>RGB</source>
@ -45,7 +45,7 @@
</message>
<message>
<source>V:</source>
<translation type="unfinished">V:</translation>
<translation>V:</translation>
</message>
<message>
<source>Alpha:</source>
@ -60,7 +60,7 @@
<name>Community</name>
<message>
<source>News</source>
<translation type="unfinished">News</translation>
<translation>Noticias</translation>
</message>
<message>
<source>Wiki</source>
@ -68,15 +68,15 @@
</message>
<message>
<source>Forum</source>
<translation type="unfinished">Forum</translation>
<translation>Foro</translation>
</message>
<message>
<source>Issue List</source>
<translation type="unfinished">Issue List</translation>
<translation>Lista de Problemas</translation>
</message>
<message>
<source>Contribute</source>
<translation type="unfinished">Contribute</translation>
<translation>Contribuir</translation>
</message>
<message>
<source>Steam Workshop</source>
@ -87,14 +87,14 @@
<name>CommunityNavItem</name>
<message>
<source>Open in browser</source>
<translation type="unfinished">Open in browser</translation>
<translation>Abrir en el navegador</translation>
</message>
</context>
<context>
<name>CreateWallpaperInit</name>
<message>
<source>Import any video type</source>
<translation type="unfinished">Import any video type</translation>
<translation>Importar cualquier tipo de vídeo</translation>
</message>
<message>
<source>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 @@
</message>
<message>
<source>Set your preffered video codec:</source>
<translation type="unfinished">Set your preffered video codec:</translation>
<translation>Establezca su códec de vídeo predeterminado:</translation>
</message>
<message>
<source>Quality slider. Lower value means better quality.</source>
<translation type="unfinished">Quality slider. Lower value means better quality.</translation>
<translation>Deslizador de calidad. Un valor más bajo significa una mejor calidad.</translation>
</message>
<message>
<source>Open Documentation</source>
<translation type="unfinished">Open Documentation</translation>
<translation>Abrir documentación</translation>
</message>
<message>
<source>Select file</source>
<translation type="unfinished">Select file</translation>
<translation>Seleccionar archivo</translation>
</message>
</context>
<context>
@ -164,7 +164,7 @@
</message>
<message>
<source>Converting Video... This can take some time!</source>
<translation type="unfinished">Converting Video... This can take some time!</translation>
<translation>Convirtiendo vídeo... ¡Esto puede tardar un poco!</translation>
</message>
<message>
<source>Converting Video ERROR!</source>
@ -192,7 +192,7 @@
</message>
<message>
<source>Youtube URL</source>
<translation type="unfinished">Youtube URL</translation>
<translation>URL de YouTube</translation>
</message>
<message>
<source>Abort</source>
@ -200,7 +200,7 @@
</message>
<message>
<source>Save</source>
<translation type="unfinished">Save</translation>
<translation>Guardar</translation>
</message>
<message>
<source>Save Wallpaper...</source>
@ -215,7 +215,7 @@
</message>
<message>
<source>Playback rate</source>
<translation type="unfinished">Playback rate</translation>
<translation>Velocidad de reproducción</translation>
</message>
<message>
<source>Current Video Time</source>
@ -292,7 +292,7 @@
</message>
<message>
<source>General</source>
<translation type="unfinished">General</translation>
<translation>General</translation>
</message>
<message>
<source>Wallpaper name</source>
@ -300,11 +300,11 @@
</message>
<message>
<source>Created By</source>
<translation type="unfinished">Created By</translation>
<translation>Creado por</translation>
</message>
<message>
<source>Tags</source>
<translation type="unfinished">Tags</translation>
<translation>Etiquetas</translation>
</message>
</context>
<context>
@ -315,11 +315,11 @@
</message>
<message>
<source>General</source>
<translation type="unfinished">General</translation>
<translation>General</translation>
</message>
<message>
<source>Wallpaper name</source>
<translation type="unfinished">Wallpaper name</translation>
<translation>Nombre del fondo</translation>
</message>
<message>
<source>Created By</source>
@ -335,14 +335,14 @@
</message>
<message>
<source>Preview Image</source>
<translation type="unfinished">Preview Image</translation>
<translation>Imagen de previsualización</translation>
</message>
</context>
<context>
<name>HTMLWidget</name>
<message>
<source>Create a HTML widget</source>
<translation type="unfinished">Create a HTML widget</translation>
<translation>Crear un widget HTML</translation>
</message>
<message>
<source>General</source>
@ -350,7 +350,7 @@
</message>
<message>
<source>Widget name</source>
<translation type="unfinished">Widget name</translation>
<translation>Nombre del widget</translation>
</message>
<message>
<source>Created by</source>
@ -451,7 +451,7 @@
</message>
<message>
<source>Save</source>
<translation type="unfinished">Save</translation>
<translation>Guardar</translation>
</message>
<message>
<source>Save Wallpaper...</source>
@ -462,7 +462,7 @@
<name>ImportWebmInit</name>
<message>
<source>Import a .webm video</source>
<translation type="unfinished">Import a .webm video</translation>
<translation>Importar un vídeo .webm</translation>
</message>
<message>
<source>When importing webm we can skip the long conversion. When you get unsatisfying results with the ScreenPlay importer from &apos;ideo import and convert (all types)&apos; you can also convert via the free and open source HandBrake!</source>
@ -509,7 +509,7 @@
</message>
<message>
<source>Converting Audio...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Converting Audio...</translation>
</message>
<message>
<source>Converting Video... This can take some time!</source>
@ -533,11 +533,11 @@
</message>
<message>
<source>Name (required!)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Name (required!)</translation>
</message>
<message>
<source>Description</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Description</translation>
</message>
<message>
<source>Youtube URL</source>
@ -545,7 +545,7 @@
</message>
<message>
<source>Abort</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Abort</translation>
</message>
<message>
<source>Save</source>
@ -560,19 +560,19 @@
<name>Importh264Init</name>
<message>
<source>Import a .mp4 video</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Import a .mp4 video</translation>
</message>
<message>
<source>ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</translation>
</message>
<message>
<source>Invalid file type. Must be valid h264 (*.mp4)!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Invalid file type. Must be valid h264 (*.mp4)!</translation>
</message>
<message>
<source>Drop a *.mp4 file here or use &apos;Select file&apos; below.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Drop a *.mp4 file here or use &apos;Select file&apos; below.</translation>
</message>
<message>
<source>Open Documentation</source>
@ -637,7 +637,7 @@
<name>LicenseSelector</name>
<message>
<source>License</source>
<translation type="unfinished">License</translation>
<translation>Licencia</translation>
</message>
<message>
<source>Share copy and redistribute the material in any medium or format. Adapt remix, transform, and build upon the material for any purpose, even commercially.</source>
@ -761,16 +761,31 @@
<source>Settings</source>
<translation type="unfinished">Settings</translation>
</message>
</context>
<context>
<name>NavigationWallpaperConfiguration</name>
<message>
<source>Configurate active Wallpaper or Widgets</source>
<translation type="unfinished">Configurate active Wallpaper or Widgets</translation>
<source>Mute/Unmute all Wallpaper</source>
<translation type="unfinished">Mute/Unmute all Wallpaper</translation>
</message>
<message>
<source>No active Wallpaper or Widgets</source>
<translation type="unfinished">No active Wallpaper or Widgets</translation>
<source>Pause/Play all Wallpaper</source>
<translation type="unfinished">Pause/Play all Wallpaper</translation>
</message>
<message>
<source>Configure Wallpaper</source>
<translation type="unfinished">Configure Wallpaper</translation>
</message>
<message>
<source>Minimize to Tray</source>
<translation type="unfinished">Minimize to Tray</translation>
</message>
<message>
<source>Exit</source>
<translation type="unfinished">Exit</translation>
</message>
<message>
<source>Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</source>
<translation type="unfinished">Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</translation>
</message>
</context>
<context>
@ -1008,10 +1023,6 @@
<source>Version</source>
<translation type="unfinished">Version</translation>
</message>
<message>
<source>ScreenPlay Build Version </source>
<translation type="unfinished">ScreenPlay Build Version </translation>
</message>
<message>
<source>Open Changelog</source>
<translation type="unfinished">Open Changelog</translation>
@ -1052,6 +1063,12 @@
<source>Privacy</source>
<translation type="unfinished">Privacy</translation>
</message>
<message>
<source>ScreenPlay Build Version
</source>
<translation type="unfinished">ScreenPlay Build Version
</translation>
</message>
</context>
<context>
<name>SettingsExpander</name>
@ -1068,15 +1085,15 @@
</message>
<message>
<source>Video Import h264 (.mp4)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import h264 (.mp4)</translation>
</message>
<message>
<source>Video Import VP8 &amp; VP9 (.webm)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import VP8 &amp; VP9 (.webm)</translation>
</message>
<message>
<source>Video import (all types)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video import (all types)</translation>
</message>
<message>
<source>GIF Wallpaper</source>
@ -1183,11 +1200,11 @@
<name>StartInfo</name>
<message>
<source>Free tools to help you to create wallpaper</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Free tools to help you to create wallpaper</translation>
</message>
<message>
<source>Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</translation>
</message>
</context>
<context>
@ -1578,7 +1595,7 @@
</message>
<message>
<source>Password Required To Kick Session</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Password Required To Kick Session</translation>
</message>
<message>
<source>Already Logged In Elsewhere</source>

View File

@ -21,7 +21,7 @@
</message>
<message>
<source>HSV</source>
<translation type="unfinished">HSV</translation>
<translation>TSV</translation>
</message>
<message>
<source>R:</source>
@ -265,15 +265,15 @@
<name>Forum</name>
<message>
<source>Download Wallpaper and Widgets from our forums manually. If you want to download Steam Workshop content you have to install ScreenPlay via Steam.</source>
<translation type="unfinished">Download Wallpaper and Widgets from our forums manually. If you want to download Steam Workshop content you have to install ScreenPlay via Steam.</translation>
<translation>Téléchargez manuellement des fond d&apos;écran et des widgets depuis notre forum. Si vous voulez télécharger du contenu Steam Workshop, vous devez installer ScreenPlay via Steam.</translation>
</message>
<message>
<source>Install Steam Version</source>
<translation type="unfinished">Install Steam Version</translation>
<translation>Installer la version Steam</translation>
</message>
<message>
<source>Open In Browser</source>
<translation type="unfinished">Open In Browser</translation>
<translation>Ouvrir dans le navigateur</translation>
</message>
</context>
<context>
@ -365,7 +365,7 @@
<name>HeadlineSection</name>
<message>
<source>Headline Section</source>
<translation type="unfinished">Headline Section</translation>
<translation>Section de titre</translation>
</message>
</context>
<context>
@ -427,7 +427,7 @@
</message>
<message>
<source>Import a video to a wallpaper</source>
<translation type="unfinished">Import a video to a wallpaper</translation>
<translation>Convertir une vidéo en fond d&apos;écran</translation>
</message>
<message>
<source>Generating preview video...</source>
@ -466,15 +466,15 @@
</message>
<message>
<source>When importing webm we can skip the long conversion. When you get unsatisfying results with the ScreenPlay importer from &apos;ideo import and convert (all types)&apos; you can also convert via the free and open source HandBrake!</source>
<translation type="unfinished">When importing webm we can skip the long conversion. When you get unsatisfying results with the ScreenPlay importer from &apos;ideo import and convert (all types)&apos; you can also convert via the free and open source HandBrake!</translation>
<translation>Lors de l&apos;importation de webm, vous pouvez ignorer l&apos;étape de conversion. Lorsque vous obtenez des résultats insatisfaisants avec l&apos;importateur de ScreenPlay via &apos;import et conversion de vidéo (tous types)&apos; vous pouvez convertir au format webm via le logiciel HandBrake. Il est gratuit et open source!</translation>
</message>
<message>
<source>Invalid file type. Must be valid VP8 or VP9 (*.webm)!</source>
<translation type="unfinished">Invalid file type. Must be valid VP8 or VP9 (*.webm)!</translation>
<translation>Type de fichier invalide. Doit être un VP8 ou VP9 (*.webm)!</translation>
</message>
<message>
<source>Drop a *.webm file here or use &apos;Select file&apos; below.</source>
<translation type="unfinished">Drop a *.webm file here or use &apos;Select file&apos; below.</translation>
<translation>Déposez un fichier *.webm ici ou utilisez &apos;Sélectionner un fichier&apos; ci-dessous.</translation>
</message>
<message>
<source>Open Documentation</source>
@ -489,39 +489,39 @@
<name>Importh264Convert</name>
<message>
<source>AnalyseVideo...</source>
<translation type="unfinished">AnalyseVidéo...</translation>
<translation type="unfinished">AnalyseVideo...</translation>
</message>
<message>
<source>Generating preview image...</source>
<translation type="unfinished">Génération de l&apos;image d&apos;aperçu...</translation>
<translation type="unfinished">Generating preview image...</translation>
</message>
<message>
<source>Generating preview thumbnail image...</source>
<translation type="unfinished">Génération de la miniature de laperçu...</translation>
<translation type="unfinished">Generating preview thumbnail image...</translation>
</message>
<message>
<source>Generating 5 second preview video...</source>
<translation type="unfinished">Génération dune vidéo daperçu de 5 secondes...</translation>
<translation type="unfinished">Generating 5 second preview video...</translation>
</message>
<message>
<source>Generating preview gif...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview gif...</translation>
</message>
<message>
<source>Converting Audio...</source>
<translation type="unfinished">Conversion de laudio...</translation>
<translation type="unfinished">Converting Audio...</translation>
</message>
<message>
<source>Converting Video... This can take some time!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Converting Video... This can take some time!</translation>
</message>
<message>
<source>Converting Video ERROR!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Converting Video ERROR!</translation>
</message>
<message>
<source>Analyse Video ERROR!</source>
<translation type="unfinished">Erreur d&apos;Analyse Vidéo !</translation>
<translation type="unfinished">Analyse Video ERROR!</translation>
</message>
<message>
<source>Import a video to a wallpaper</source>
@ -529,11 +529,11 @@
</message>
<message>
<source>Generating preview video...</source>
<translation type="unfinished">Génération de la vidéo d&apos;aperçu...</translation>
<translation type="unfinished">Generating preview video...</translation>
</message>
<message>
<source>Name (required!)</source>
<translation type="unfinished">Nom (requis!)</translation>
<translation type="unfinished">Name (required!)</translation>
</message>
<message>
<source>Description</source>
@ -541,46 +541,46 @@
</message>
<message>
<source>Youtube URL</source>
<translation type="unfinished">URL Youtube&#xa0;</translation>
<translation type="unfinished">Youtube URL</translation>
</message>
<message>
<source>Abort</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Abort</translation>
</message>
<message>
<source>Save</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Save</translation>
</message>
<message>
<source>Save Wallpaper...</source>
<translation type="unfinished">Enregistrer le fond d&apos;écran</translation>
<translation type="unfinished">Save Wallpaper...</translation>
</message>
</context>
<context>
<name>Importh264Init</name>
<message>
<source>Import a .mp4 video</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Import a .mp4 video</translation>
</message>
<message>
<source>ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</translation>
</message>
<message>
<source>Invalid file type. Must be valid h264 (*.mp4)!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Invalid file type. Must be valid h264 (*.mp4)!</translation>
</message>
<message>
<source>Drop a *.mp4 file here or use &apos;Select file&apos; below.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Drop a *.mp4 file here or use &apos;Select file&apos; below.</translation>
</message>
<message>
<source>Open Documentation</source>
<translation type="unfinished">Ouvrir la documentation</translation>
<translation type="unfinished">Open Documentation</translation>
</message>
<message>
<source>Select file</source>
<translation type="unfinished">Sélectionner un fichier</translation>
<translation type="unfinished">Select file</translation>
</message>
</context>
<context>
@ -595,7 +595,7 @@
</message>
<message>
<source>Pull to refresh!</source>
<translation type="unfinished">Pull to refresh!</translation>
<translation>Faire glisser pour actualiser!</translation>
</message>
<message>
<source>Get more Wallpaper &amp; Widgets via the Steam workshop!</source>
@ -645,7 +645,7 @@
</message>
<message>
<source>You grant other to remix your work and change the license to their liking.</source>
<translation type="unfinished">You grant other to remix your work and change the license to their liking.</translation>
<translation>Vous permettez aux autres utilisateurs de réutiliser et altérer votre travail et de changer la licence selon leur souhait.</translation>
</message>
<message>
<source>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! </source>
@ -657,7 +657,7 @@
</message>
<message>
<source>You grant other to remix your work but it must remain under the GPLv3. We recommend this license for all code wallpaper!</source>
<translation type="unfinished">You grant other to remix your work but it must remain under the GPLv3. We recommend this license for all code wallpaper!</translation>
<translation>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&apos;écrans codé.</translation>
</message>
<message>
<source>You do not share any rights and nobody is allowed to use or remix it (Not recommended). Can also used to credit work others.</source>
@ -669,224 +669,239 @@
<message>
<source>Your monitor setup changed!
Please configure your wallpaper again.</source>
<translation type="unfinished">Your monitor setup changed!
Please configure your wallpaper again.</translation>
<translation>La configuration de votre écran a changé!
Veuillez configurer votre fond d&apos;écran à nouveau.</translation>
</message>
</context>
<context>
<name>Monitors</name>
<message>
<source>Wallpaper Configuration</source>
<translation type="unfinished">Wallpaper Configuration</translation>
<translation>Configuration du fond d&apos;écran</translation>
</message>
<message>
<source>Remove selected</source>
<translation type="unfinished">Remove selected</translation>
<translation>Retirer l&apos;écran sélectionné</translation>
</message>
<message>
<source>Remove </source>
<translation type="unfinished">Remove </translation>
<translation>Retirer </translation>
</message>
<message>
<source>Wallpapers</source>
<translation type="unfinished">Wallpapers</translation>
<translation>Fonds décran</translation>
</message>
<message>
<source>Widgets</source>
<translation type="unfinished">Widgets</translation>
<translation>Widgets</translation>
</message>
</context>
<context>
<name>MonitorsProjectSettingItem</name>
<message>
<source>Set color</source>
<translation type="unfinished">Set color</translation>
<translation>Définir la couleur</translation>
</message>
<message>
<source>Please choose a color</source>
<translation type="unfinished">Please choose a color</translation>
<translation>Veuillez choisir une couleur</translation>
</message>
</context>
<context>
<name>Navigation</name>
<message>
<source>All</source>
<translation type="unfinished">All</translation>
<translation>Tout</translation>
</message>
<message>
<source>Scenes</source>
<translation type="unfinished">Scenes</translation>
<translation>Scènes</translation>
</message>
<message>
<source>Videos</source>
<translation type="unfinished">Videos</translation>
<translation>Vidéos</translation>
</message>
<message>
<source>Widgets</source>
<translation type="unfinished">Widgets</translation>
<translation>Widgets</translation>
</message>
<message>
<source>Install Date Ascending</source>
<translation type="unfinished">Install Date Ascending</translation>
<translation>Date d&apos;installation croissante</translation>
</message>
<message>
<source>Install Date Descending</source>
<translation type="unfinished">Install Date Descending</translation>
<translation>Date d&apos;installation décroissante</translation>
</message>
<message>
<source> Subscribed items: </source>
<translation type="unfinished"> Subscribed items: </translation>
<translation> Éléments souscrits : </translation>
</message>
<message>
<source>Upload to the Steam Workshop</source>
<translation type="unfinished">Upload to the Steam Workshop</translation>
<translation>Uploader sur le Steam Workshop</translation>
</message>
<message>
<source>Create</source>
<translation type="unfinished">Create</translation>
<translation>Créer</translation>
</message>
<message>
<source>Workshop</source>
<translation type="unfinished">Workshop</translation>
<translation>Workshop</translation>
</message>
<message>
<source>Installed</source>
<translation type="unfinished">Installed</translation>
<translation>Installé</translation>
</message>
<message>
<source>Community</source>
<translation type="unfinished">Community</translation>
<translation>Communauté</translation>
</message>
<message>
<source>Settings</source>
<translation type="unfinished">Settings</translation>
</message>
</context>
<context>
<name>NavigationWallpaperConfiguration</name>
<message>
<source>Configurate active Wallpaper or Widgets</source>
<translation type="unfinished">Configurate active Wallpaper or Widgets</translation>
<translation>Paramètres</translation>
</message>
<message>
<source>No active Wallpaper or Widgets</source>
<translation type="unfinished">No active Wallpaper or Widgets</translation>
<source>Mute/Unmute all Wallpaper</source>
<translation type="unfinished">Mute/Unmute all Wallpaper</translation>
</message>
<message>
<source>Pause/Play all Wallpaper</source>
<translation type="unfinished">Pause/Play all Wallpaper</translation>
</message>
<message>
<source>Configure Wallpaper</source>
<translation type="unfinished">Configure Wallpaper</translation>
</message>
<message>
<source>Minimize to Tray</source>
<translation type="unfinished">Minimize to Tray</translation>
</message>
<message>
<source>Exit</source>
<translation type="unfinished">Exit</translation>
</message>
<message>
<source>Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</source>
<translation type="unfinished">Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</translation>
</message>
</context>
<context>
<name>PopupOffline</name>
<message>
<source>You need to run Steam for this. steamErrorRestart: %1 - steamErrorAPIInit: %2</source>
<translation type="unfinished">You need to run Steam for this. steamErrorRestart: %1 - steamErrorAPIInit: %2</translation>
<translation>Vous devez exécuter Steam pour cela. steamErrorRestart: %1 - steamErrorAPIInit: %2</translation>
</message>
<message>
<source>Back</source>
<translation type="unfinished">Back</translation>
<translation>Précédent</translation>
</message>
</context>
<context>
<name>PopupSteamWorkshopAgreement</name>
<message>
<source>You Need to Agree To The Steam Subscriber Agreement First</source>
<translation type="unfinished">You Need to Agree To The Steam Subscriber Agreement First</translation>
<translation>Vous devez d&apos;abord accepter l&apos;Accord de Souscription Steam</translation>
</message>
<message>
<source>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.</source>
<translation type="unfinished">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.</translation>
<translation>REQUIÈRE UNE CONNEXION INTERNET ET UN COMPTE STEAM GRATUIT POUR L&apos;ACTIVATION. Avertissement: Produit offert sous réserve de votre acceptation de l&apos;Accord de Souscription Steam (ASS). Vous devez activer ce produit via Internet en vous enregistrant sur un compte Steam et en acceptant l&apos;ASS. Veuillez consulter https://store.steampowered.com/subscriber_agreement/ pour consulter l&apos;ASS avant l&apos;achat. Si vous n&apos;êtes pas d&apos;accord avec les dispositions de l&apos;ASS, vous devriez retourner ce jeu non ouvert à votre détaillant conformément à leur politique de retour.</translation>
</message>
<message>
<source>View The Steam Subscriber Agreement</source>
<translation type="unfinished">View The Steam Subscriber Agreement</translation>
<translation>Voir l&apos;Accord de Souscription Steam</translation>
</message>
<message>
<source>Accept Steam Workshop Agreement</source>
<translation type="unfinished">Accept Steam Workshop Agreement</translation>
<translation>Accepter l&apos;Accord de Souscription Steam</translation>
</message>
</context>
<context>
<name>QMLWallpaper</name>
<message>
<source>Create a QML Wallpaper</source>
<translation type="unfinished">Create a QML Wallpaper</translation>
<translation>Créer un fond d&apos;écran QML</translation>
</message>
<message>
<source>General</source>
<translation type="unfinished">General</translation>
<translation>Général</translation>
</message>
<message>
<source>Wallpaper name</source>
<translation type="unfinished">Wallpaper name</translation>
<translation>Nom du fond d&apos;écran</translation>
</message>
<message>
<source>Created By</source>
<translation type="unfinished">Created By</translation>
<translation>Créé par</translation>
</message>
<message>
<source>Description</source>
<translation type="unfinished">Description</translation>
<translation>Description</translation>
</message>
<message>
<source>License &amp; Tags</source>
<translation type="unfinished">License &amp; Tags</translation>
<translation>Licence &amp; Tags</translation>
</message>
<message>
<source>Preview Image</source>
<translation type="unfinished">Preview Image</translation>
<translation>Image d&apos;aperçu</translation>
</message>
</context>
<context>
<name>QMLWidget</name>
<message>
<source>Create a QML widget</source>
<translation type="unfinished">Create a QML widget</translation>
<translation>Créer un widget QML</translation>
</message>
<message>
<source>General</source>
<translation type="unfinished">General</translation>
<translation>Général</translation>
</message>
<message>
<source>Widget name</source>
<translation type="unfinished">Widget name</translation>
<translation>Nom du Widget</translation>
</message>
<message>
<source>Created by</source>
<translation type="unfinished">Created by</translation>
<translation>Créé par</translation>
</message>
<message>
<source>Tags</source>
<translation type="unfinished">Tags</translation>
<translation>Tags</translation>
</message>
</context>
<context>
<name>SaveNotification</name>
<message>
<source>Profile saved successfully!</source>
<translation type="unfinished">Profile saved successfully!</translation>
<translation>Profil enregistré avec succès!</translation>
</message>
</context>
<context>
<name>ScreenPlayItem</name>
<message>
<source>NEW</source>
<translation type="unfinished">NEW</translation>
<translation>NOUVEAU</translation>
</message>
</context>
<context>
<name>Search</name>
<message>
<source>Search for Wallpaper &amp; Widgets</source>
<translation type="unfinished">Search for Wallpaper &amp; Widgets</translation>
<translation>Recherche de fond d&apos;écran et de widgets</translation>
</message>
</context>
<context>
<name>Settings</name>
<message>
<source>General</source>
<translation type="unfinished">General</translation>
<translation>Général</translation>
</message>
<message>
<source>Autostart</source>
<translation type="unfinished">Autostart</translation>
<translation>Démarrage automatique</translation>
</message>
<message>
<source>ScreenPlay will start with Windows and will setup your Desktop every time for you.</source>
@ -1008,10 +1023,6 @@
<source>Version</source>
<translation type="unfinished">Version</translation>
</message>
<message>
<source>ScreenPlay Build Version </source>
<translation type="unfinished">ScreenPlay Build Version </translation>
</message>
<message>
<source>Open Changelog</source>
<translation type="unfinished">Open Changelog</translation>
@ -1034,30 +1045,36 @@
</message>
<message>
<source>If your ScreenPlay missbehaves this is a good way to look for answers. This shows all logs and warning during runtime.</source>
<translation type="unfinished">If your ScreenPlay missbehaves this is a good way to look for answers. This shows all logs and warning during runtime.</translation>
<translation>Si ScreenPlay ne fonctionne pas correctement, c&apos;est une bonne façon de chercher des réponses. Cela montre tous les logs et les avertissements émis pendant l&apos;exécution.</translation>
</message>
<message>
<source>Show Logs</source>
<translation type="unfinished">Show Logs</translation>
<translation>Afficher les logs</translation>
</message>
<message>
<source>Data Protection</source>
<translation type="unfinished">Data Protection</translation>
<translation>Protection des données</translation>
</message>
<message>
<source>We use you data very carefully to improve ScreenPlay. We do not sell or share this (anonymous) information with others!</source>
<translation type="unfinished">We use you data very carefully to improve ScreenPlay. We do not sell or share this (anonymous) information with others!</translation>
<translation>Nous utilisons vos données exclusivement pour améliorer ScreenPlay. Nous ne vendons pas ou ne partageons pas ces données (anonyme) avec d&apos;autres !</translation>
</message>
<message>
<source>Privacy</source>
<translation type="unfinished">Privacy</translation>
<translation>Confidentialité</translation>
</message>
<message>
<source>ScreenPlay Build Version
</source>
<translation type="unfinished">ScreenPlay Build Version
</translation>
</message>
</context>
<context>
<name>SettingsExpander</name>
<message>
<source>Copy text to clipboard</source>
<translation type="unfinished">Copy text to clipboard</translation>
<translation>Copier le texte dans le presse-papiers</translation>
</message>
</context>
<context>
@ -1068,47 +1085,47 @@
</message>
<message>
<source>Video Import h264 (.mp4)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import h264 (.mp4)</translation>
</message>
<message>
<source>Video Import VP8 &amp; VP9 (.webm)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import VP8 &amp; VP9 (.webm)</translation>
</message>
<message>
<source>Video import (all types)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video import (all types)</translation>
</message>
<message>
<source>GIF Wallpaper</source>
<translation type="unfinished">GIF Wallpaper</translation>
<translation>Fond d&apos;écran GIF</translation>
</message>
<message>
<source>QML Wallpaper</source>
<translation type="unfinished">QML Wallpaper</translation>
<translation>Fond d&apos;écran QML</translation>
</message>
<message>
<source>HTML5 Wallpaper</source>
<translation type="unfinished">HTML5 Wallpaper</translation>
<translation>Fond d&apos;écran HTML5</translation>
</message>
<message>
<source>Website Wallpaper</source>
<translation type="unfinished">Website Wallpaper</translation>
<translation>Fond d&apos;écran Site web</translation>
</message>
<message>
<source>QML Widget</source>
<translation type="unfinished">QML Widget</translation>
<translation>Widget QML</translation>
</message>
<message>
<source>HTML Widget</source>
<translation type="unfinished">HTML Widget</translation>
<translation>Widget HTML</translation>
</message>
<message>
<source>Set Wallpaper</source>
<translation type="unfinished">Set Wallpaper</translation>
<translation>Définir le fond d&apos;écran</translation>
</message>
<message>
<source>Set Widget</source>
<translation type="unfinished">Set Widget</translation>
<translation>Définir le Widget</translation>
</message>
<message>
<source>Headline</source>
@ -1116,139 +1133,139 @@
</message>
<message>
<source>Select a Monitor to display the content</source>
<translation type="unfinished">Select a Monitor to display the content</translation>
<translation>Sélectionnez un écran pour afficher le contenu</translation>
</message>
<message>
<source>Set Volume</source>
<translation type="unfinished">Set Volume</translation>
<translation>Régler le volume</translation>
</message>
<message>
<source>Fill Mode</source>
<translation type="unfinished">Fill Mode</translation>
<translation>Mode de remplissage</translation>
</message>
<message>
<source>Stretch</source>
<translation type="unfinished">Stretch</translation>
<translation>Étirer</translation>
</message>
<message>
<source>Fill</source>
<translation type="unfinished">Fill</translation>
<translation>Remplir</translation>
</message>
<message>
<source>Contain</source>
<translation type="unfinished">Contain</translation>
<translation>Contenir</translation>
</message>
<message>
<source>Cover</source>
<translation type="unfinished">Cover</translation>
<translation>Couvrir</translation>
</message>
<message>
<source>Scale-Down</source>
<translation type="unfinished">Scale-Down</translation>
<translation>Réduire</translation>
</message>
<message>
<source>Size: </source>
<translation type="unfinished">Size: </translation>
<translation>Taille : </translation>
</message>
<message>
<source>No description...</source>
<translation type="unfinished">No description...</translation>
<translation>Pas de description ...</translation>
</message>
<message>
<source>Click here if you like the content</source>
<translation type="unfinished">Click here if you like the content</translation>
<translation>Cliquez ici si vous aimez le contenu</translation>
</message>
<message>
<source>Click here if you do not like the content</source>
<translation type="unfinished">Click here if you do not like the content</translation>
<translation>Cliquez ici si vous n&apos;aimez pas le contenu</translation>
</message>
<message>
<source>Subscribtions: </source>
<translation type="unfinished">Subscribtions: </translation>
<translation>Abonnements : </translation>
</message>
<message>
<source>Open In Steam</source>
<translation type="unfinished">Open In Steam</translation>
<translation>Ouvrir dans Steam</translation>
</message>
<message>
<source>Subscribed!</source>
<translation type="unfinished">Subscribed!</translation>
<translation>Abonné!</translation>
</message>
<message>
<source>Subscribe</source>
<translation type="unfinished">Subscribe</translation>
<translation>S&apos;abonner</translation>
</message>
</context>
<context>
<name>StartInfo</name>
<message>
<source>Free tools to help you to create wallpaper</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Free tools to help you to create wallpaper</translation>
</message>
<message>
<source>Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</translation>
</message>
</context>
<context>
<name>SteamNotAvailable</name>
<message>
<source>Could not load steam integration!</source>
<translation type="unfinished">Could not load steam integration!</translation>
<translation>Impossible de charger l&apos;intégration Steam!</translation>
</message>
</context>
<context>
<name>SteamProfile</name>
<message>
<source>Back</source>
<translation type="unfinished">Back</translation>
<translation>Précédent</translation>
</message>
<message>
<source>Forward</source>
<translation type="unfinished">Forward</translation>
<translation>Suivant</translation>
</message>
</context>
<context>
<name>SteamWorkshopStartPage</name>
<message>
<source>Loading</source>
<translation type="unfinished">Loading</translation>
<translation>Chargement</translation>
</message>
<message>
<source>Download now!</source>
<translation type="unfinished">Download now!</translation>
<translation>Télécharger maintenant!</translation>
</message>
<message>
<source>Downloading...</source>
<translation type="unfinished">Downloading...</translation>
<translation>Téléchargement...</translation>
</message>
<message>
<source>Details</source>
<translation type="unfinished">Details</translation>
<translation>tails</translation>
</message>
<message>
<source>Open In Steam</source>
<translation type="unfinished">Open In Steam</translation>
<translation>Ouvrir dans Steam</translation>
</message>
<message>
<source>Profile</source>
<translation type="unfinished">Profile</translation>
<translation>Profil</translation>
</message>
<message>
<source>Upload</source>
<translation type="unfinished">Upload</translation>
<translation>Uploader</translation>
</message>
<message>
<source>Search for Wallpaper and Widgets...</source>
<translation type="unfinished">Search for Wallpaper and Widgets...</translation>
<translation>Recherche de fond d&apos;écran et de widgets...</translation>
</message>
<message>
<source>Open Workshop in Steam</source>
<translation type="unfinished">Open Workshop in Steam</translation>
<translation>Ouvrir le Workshop dans Steam</translation>
</message>
<message>
<source>Ranked By Vote</source>
<translation type="unfinished">Ranked By Vote</translation>
<translation>Classé par vote</translation>
</message>
<message>
<source>Publication Date</source>
@ -1578,7 +1595,7 @@
</message>
<message>
<source>Password Required To Kick Session</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Password Required To Kick Session</translation>
</message>
<message>
<source>Already Logged In Elsewhere</source>

View File

@ -489,98 +489,98 @@
<name>Importh264Convert</name>
<message>
<source>AnalyseVideo...</source>
<translation type="unfinished">Analizza Video...</translation>
<translation type="unfinished">AnalyseVideo...</translation>
</message>
<message>
<source>Generating preview image...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview image...</translation>
</message>
<message>
<source>Generating preview thumbnail image...</source>
<translation type="unfinished">Generazione miniatura di anteprima...</translation>
<translation type="unfinished">Generating preview thumbnail image...</translation>
</message>
<message>
<source>Generating 5 second preview video...</source>
<translation type="unfinished">Generazione anteprima video di 5 secondi...</translation>
<translation type="unfinished">Generating 5 second preview video...</translation>
</message>
<message>
<source>Generating preview gif...</source>
<translation type="unfinished">Generazione gif di anteprima...</translation>
<translation type="unfinished">Generating preview gif...</translation>
</message>
<message>
<source>Converting Audio...</source>
<translation type="unfinished">Conversione Audio...</translation>
<translation type="unfinished">Converting Audio...</translation>
</message>
<message>
<source>Converting Video... This can take some time!</source>
<translation type="unfinished">Conversione Video... Potrebbe richiedere un po&apos; di tempo!</translation>
<translation type="unfinished">Converting Video... This can take some time!</translation>
</message>
<message>
<source>Converting Video ERROR!</source>
<translation type="unfinished">Conversione Video ERRORE!</translation>
<translation type="unfinished">Converting Video ERROR!</translation>
</message>
<message>
<source>Analyse Video ERROR!</source>
<translation type="unfinished">Analisi Video ERRORE!</translation>
<translation type="unfinished">Analyse Video ERROR!</translation>
</message>
<message>
<source>Import a video to a wallpaper</source>
<translation type="unfinished">Importa un video in uno sfondo</translation>
<translation type="unfinished">Import a video to a wallpaper</translation>
</message>
<message>
<source>Generating preview video...</source>
<translation type="unfinished">Generazione video di anteprima...</translation>
<translation type="unfinished">Generating preview video...</translation>
</message>
<message>
<source>Name (required!)</source>
<translation type="unfinished">Nome (obbligatorio)</translation>
<translation type="unfinished">Name (required!)</translation>
</message>
<message>
<source>Description</source>
<translation type="unfinished">Descrizione</translation>
<translation type="unfinished">Description</translation>
</message>
<message>
<source>Youtube URL</source>
<translation type="unfinished">URL Youtube</translation>
<translation type="unfinished">Youtube URL</translation>
</message>
<message>
<source>Abort</source>
<translation type="unfinished">Interrompi</translation>
<translation type="unfinished">Abort</translation>
</message>
<message>
<source>Save</source>
<translation type="unfinished">Salva</translation>
<translation type="unfinished">Save</translation>
</message>
<message>
<source>Save Wallpaper...</source>
<translation type="unfinished">Salva sfondo...</translation>
<translation type="unfinished">Save Wallpaper...</translation>
</message>
</context>
<context>
<name>Importh264Init</name>
<message>
<source>Import a .mp4 video</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Import a .mp4 video</translation>
</message>
<message>
<source>ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</translation>
</message>
<message>
<source>Invalid file type. Must be valid h264 (*.mp4)!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Invalid file type. Must be valid h264 (*.mp4)!</translation>
</message>
<message>
<source>Drop a *.mp4 file here or use &apos;Select file&apos; below.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Drop a *.mp4 file here or use &apos;Select file&apos; below.</translation>
</message>
<message>
<source>Open Documentation</source>
<translation type="unfinished">Apri documentazione</translation>
<translation type="unfinished">Open Documentation</translation>
</message>
<message>
<source>Select file</source>
<translation type="unfinished">Seleziona file</translation>
<translation type="unfinished">Select file</translation>
</message>
</context>
<context>
@ -761,16 +761,31 @@
<source>Settings</source>
<translation>Impostazioni</translation>
</message>
</context>
<context>
<name>NavigationWallpaperConfiguration</name>
<message>
<source>Configurate active Wallpaper or Widgets</source>
<translation>Configura Sfondi o Widgets attivi</translation>
<source>Mute/Unmute all Wallpaper</source>
<translation type="unfinished">Mute/Unmute all Wallpaper</translation>
</message>
<message>
<source>No active Wallpaper or Widgets</source>
<translation>Nessuno Sfondo o Widget attivi</translation>
<source>Pause/Play all Wallpaper</source>
<translation type="unfinished">Pause/Play all Wallpaper</translation>
</message>
<message>
<source>Configure Wallpaper</source>
<translation type="unfinished">Configure Wallpaper</translation>
</message>
<message>
<source>Minimize to Tray</source>
<translation type="unfinished">Minimize to Tray</translation>
</message>
<message>
<source>Exit</source>
<translation type="unfinished">Exit</translation>
</message>
<message>
<source>Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</source>
<translation type="unfinished">Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</translation>
</message>
</context>
<context>
@ -1008,10 +1023,6 @@
<source>Version</source>
<translation>Versione</translation>
</message>
<message>
<source>ScreenPlay Build Version </source>
<translation>Versione Build di ScreenPlay </translation>
</message>
<message>
<source>Open Changelog</source>
<translation>Apri Changelog</translation>
@ -1052,6 +1063,12 @@
<source>Privacy</source>
<translation>Privacy</translation>
</message>
<message>
<source>ScreenPlay Build Version
</source>
<translation type="unfinished">ScreenPlay Build Version
</translation>
</message>
</context>
<context>
<name>SettingsExpander</name>
@ -1068,15 +1085,15 @@
</message>
<message>
<source>Video Import h264 (.mp4)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import h264 (.mp4)</translation>
</message>
<message>
<source>Video Import VP8 &amp; VP9 (.webm)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import VP8 &amp; VP9 (.webm)</translation>
</message>
<message>
<source>Video import (all types)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video import (all types)</translation>
</message>
<message>
<source>GIF Wallpaper</source>
@ -1183,11 +1200,11 @@
<name>StartInfo</name>
<message>
<source>Free tools to help you to create wallpaper</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Free tools to help you to create wallpaper</translation>
</message>
<message>
<source>Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</translation>
</message>
</context>
<context>
@ -1578,7 +1595,7 @@
</message>
<message>
<source>Password Required To Kick Session</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Password Required To Kick Session</translation>
</message>
<message>
<source>Already Logged In Elsewhere</source>

View File

@ -493,27 +493,27 @@
</message>
<message>
<source>Generating preview image...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview image...</translation>
</message>
<message>
<source>Generating preview thumbnail image...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview thumbnail image...</translation>
</message>
<message>
<source>Generating 5 second preview video...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating 5 second preview video...</translation>
</message>
<message>
<source>Generating preview gif...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview gif...</translation>
</message>
<message>
<source>Converting Audio...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Converting Audio...</translation>
</message>
<message>
<source>Converting Video... This can take some time!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Converting Video... This can take some time!</translation>
</message>
<message>
<source>Converting Video ERROR!</source>
@ -541,15 +541,15 @@
</message>
<message>
<source>Youtube URL</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Youtube URL</translation>
</message>
<message>
<source>Abort</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Abort</translation>
</message>
<message>
<source>Save</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Save</translation>
</message>
<message>
<source>Save Wallpaper...</source>
@ -560,27 +560,27 @@
<name>Importh264Init</name>
<message>
<source>Import a .mp4 video</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Import a .mp4 video</translation>
</message>
<message>
<source>ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</translation>
</message>
<message>
<source>Invalid file type. Must be valid h264 (*.mp4)!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Invalid file type. Must be valid h264 (*.mp4)!</translation>
</message>
<message>
<source>Drop a *.mp4 file here or use &apos;Select file&apos; below.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Drop a *.mp4 file here or use &apos;Select file&apos; below.</translation>
</message>
<message>
<source>Open Documentation</source>
<translation type="unfinished"> </translation>
<translation type="unfinished">Open Documentation</translation>
</message>
<message>
<source>Select file</source>
<translation type="unfinished"> </translation>
<translation type="unfinished">Select file</translation>
</message>
</context>
<context>
@ -761,16 +761,31 @@
<source>Settings</source>
<translation type="unfinished">Settings</translation>
</message>
</context>
<context>
<name>NavigationWallpaperConfiguration</name>
<message>
<source>Configurate active Wallpaper or Widgets</source>
<translation type="unfinished">Configurate active Wallpaper or Widgets</translation>
<source>Mute/Unmute all Wallpaper</source>
<translation type="unfinished">Mute/Unmute all Wallpaper</translation>
</message>
<message>
<source>No active Wallpaper or Widgets</source>
<translation type="unfinished">No active Wallpaper or Widgets</translation>
<source>Pause/Play all Wallpaper</source>
<translation type="unfinished">Pause/Play all Wallpaper</translation>
</message>
<message>
<source>Configure Wallpaper</source>
<translation type="unfinished">Configure Wallpaper</translation>
</message>
<message>
<source>Minimize to Tray</source>
<translation type="unfinished">Minimize to Tray</translation>
</message>
<message>
<source>Exit</source>
<translation type="unfinished">Exit</translation>
</message>
<message>
<source>Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</source>
<translation type="unfinished">Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</translation>
</message>
</context>
<context>
@ -1008,10 +1023,6 @@
<source>Version</source>
<translation type="unfinished">Version</translation>
</message>
<message>
<source>ScreenPlay Build Version </source>
<translation type="unfinished">ScreenPlay Build Version </translation>
</message>
<message>
<source>Open Changelog</source>
<translation type="unfinished">Open Changelog</translation>
@ -1052,6 +1063,12 @@
<source>Privacy</source>
<translation type="unfinished">Privacy</translation>
</message>
<message>
<source>ScreenPlay Build Version
</source>
<translation type="unfinished">ScreenPlay Build Version
</translation>
</message>
</context>
<context>
<name>SettingsExpander</name>
@ -1068,15 +1085,15 @@
</message>
<message>
<source>Video Import h264 (.mp4)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import h264 (.mp4)</translation>
</message>
<message>
<source>Video Import VP8 &amp; VP9 (.webm)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import VP8 &amp; VP9 (.webm)</translation>
</message>
<message>
<source>Video import (all types)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video import (all types)</translation>
</message>
<message>
<source>GIF Wallpaper</source>
@ -1183,11 +1200,11 @@
<name>StartInfo</name>
<message>
<source>Free tools to help you to create wallpaper</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Free tools to help you to create wallpaper</translation>
</message>
<message>
<source>Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</translation>
</message>
</context>
<context>
@ -1578,7 +1595,7 @@
</message>
<message>
<source>Password Required To Kick Session</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Password Required To Kick Session</translation>
</message>
<message>
<source>Already Logged In Elsewhere</source>

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -493,35 +493,35 @@
</message>
<message>
<source>Generating preview image...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview image...</translation>
</message>
<message>
<source>Generating preview thumbnail image...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview thumbnail image...</translation>
</message>
<message>
<source>Generating 5 second preview video...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating 5 second preview video...</translation>
</message>
<message>
<source>Generating preview gif...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview gif...</translation>
</message>
<message>
<source>Converting Audio...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Converting Audio...</translation>
</message>
<message>
<source>Converting Video... This can take some time!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Converting Video... This can take some time!</translation>
</message>
<message>
<source>Converting Video ERROR!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Converting Video ERROR!</translation>
</message>
<message>
<source>Analyse Video ERROR!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Analyse Video ERROR!</translation>
</message>
<message>
<source>Import a video to a wallpaper</source>
@ -529,58 +529,58 @@
</message>
<message>
<source>Generating preview video...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview video...</translation>
</message>
<message>
<source>Name (required!)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Name (required!)</translation>
</message>
<message>
<source>Description</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Description</translation>
</message>
<message>
<source>Youtube URL</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Youtube URL</translation>
</message>
<message>
<source>Abort</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Abort</translation>
</message>
<message>
<source>Save</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Save</translation>
</message>
<message>
<source>Save Wallpaper...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Save Wallpaper...</translation>
</message>
</context>
<context>
<name>Importh264Init</name>
<message>
<source>Import a .mp4 video</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Import a .mp4 video</translation>
</message>
<message>
<source>ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</translation>
</message>
<message>
<source>Invalid file type. Must be valid h264 (*.mp4)!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Invalid file type. Must be valid h264 (*.mp4)!</translation>
</message>
<message>
<source>Drop a *.mp4 file here or use &apos;Select file&apos; below.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Drop a *.mp4 file here or use &apos;Select file&apos; below.</translation>
</message>
<message>
<source>Open Documentation</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Open Documentation</translation>
</message>
<message>
<source>Select file</source>
<translation type="unfinished">Selecionar arquivo</translation>
<translation type="unfinished">Select file</translation>
</message>
</context>
<context>
@ -761,16 +761,31 @@
<source>Settings</source>
<translation type="unfinished">Settings</translation>
</message>
</context>
<context>
<name>NavigationWallpaperConfiguration</name>
<message>
<source>Configurate active Wallpaper or Widgets</source>
<translation type="unfinished">Configurate active Wallpaper or Widgets</translation>
<source>Mute/Unmute all Wallpaper</source>
<translation type="unfinished">Mute/Unmute all Wallpaper</translation>
</message>
<message>
<source>No active Wallpaper or Widgets</source>
<translation type="unfinished">No active Wallpaper or Widgets</translation>
<source>Pause/Play all Wallpaper</source>
<translation type="unfinished">Pause/Play all Wallpaper</translation>
</message>
<message>
<source>Configure Wallpaper</source>
<translation type="unfinished">Configure Wallpaper</translation>
</message>
<message>
<source>Minimize to Tray</source>
<translation type="unfinished">Minimize to Tray</translation>
</message>
<message>
<source>Exit</source>
<translation type="unfinished">Exit</translation>
</message>
<message>
<source>Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</source>
<translation type="unfinished">Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</translation>
</message>
</context>
<context>
@ -1008,10 +1023,6 @@
<source>Version</source>
<translation type="unfinished">Version</translation>
</message>
<message>
<source>ScreenPlay Build Version </source>
<translation type="unfinished">ScreenPlay Build Version </translation>
</message>
<message>
<source>Open Changelog</source>
<translation type="unfinished">Open Changelog</translation>
@ -1052,6 +1063,12 @@
<source>Privacy</source>
<translation type="unfinished">Privacy</translation>
</message>
<message>
<source>ScreenPlay Build Version
</source>
<translation type="unfinished">ScreenPlay Build Version
</translation>
</message>
</context>
<context>
<name>SettingsExpander</name>
@ -1068,15 +1085,15 @@
</message>
<message>
<source>Video Import h264 (.mp4)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import h264 (.mp4)</translation>
</message>
<message>
<source>Video Import VP8 &amp; VP9 (.webm)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import VP8 &amp; VP9 (.webm)</translation>
</message>
<message>
<source>Video import (all types)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video import (all types)</translation>
</message>
<message>
<source>GIF Wallpaper</source>
@ -1183,11 +1200,11 @@
<name>StartInfo</name>
<message>
<source>Free tools to help you to create wallpaper</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Free tools to help you to create wallpaper</translation>
</message>
<message>
<source>Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</translation>
</message>
</context>
<context>
@ -1578,7 +1595,7 @@
</message>
<message>
<source>Password Required To Kick Session</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Password Required To Kick Session</translation>
</message>
<message>
<source>Already Logged In Elsewhere</source>

View File

@ -493,35 +493,35 @@
</message>
<message>
<source>Generating preview image...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview image...</translation>
</message>
<message>
<source>Generating preview thumbnail image...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview thumbnail image...</translation>
</message>
<message>
<source>Generating 5 second preview video...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating 5 second preview video...</translation>
</message>
<message>
<source>Generating preview gif...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview gif...</translation>
</message>
<message>
<source>Converting Audio...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Converting Audio...</translation>
</message>
<message>
<source>Converting Video... This can take some time!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Converting Video... This can take some time!</translation>
</message>
<message>
<source>Converting Video ERROR!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Converting Video ERROR!</translation>
</message>
<message>
<source>Analyse Video ERROR!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Analyse Video ERROR!</translation>
</message>
<message>
<source>Import a video to a wallpaper</source>
@ -529,58 +529,58 @@
</message>
<message>
<source>Generating preview video...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview video...</translation>
</message>
<message>
<source>Name (required!)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Name (required!)</translation>
</message>
<message>
<source>Description</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Description</translation>
</message>
<message>
<source>Youtube URL</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Youtube URL</translation>
</message>
<message>
<source>Abort</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Abort</translation>
</message>
<message>
<source>Save</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Save</translation>
</message>
<message>
<source>Save Wallpaper...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Save Wallpaper...</translation>
</message>
</context>
<context>
<name>Importh264Init</name>
<message>
<source>Import a .mp4 video</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Import a .mp4 video</translation>
</message>
<message>
<source>ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</translation>
</message>
<message>
<source>Invalid file type. Must be valid h264 (*.mp4)!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Invalid file type. Must be valid h264 (*.mp4)!</translation>
</message>
<message>
<source>Drop a *.mp4 file here or use &apos;Select file&apos; below.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Drop a *.mp4 file here or use &apos;Select file&apos; below.</translation>
</message>
<message>
<source>Open Documentation</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Open Documentation</translation>
</message>
<message>
<source>Select file</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Select file</translation>
</message>
</context>
<context>
@ -761,16 +761,31 @@
<source>Settings</source>
<translation type="unfinished">Settings</translation>
</message>
</context>
<context>
<name>NavigationWallpaperConfiguration</name>
<message>
<source>Configurate active Wallpaper or Widgets</source>
<translation type="unfinished">Configurate active Wallpaper or Widgets</translation>
<source>Mute/Unmute all Wallpaper</source>
<translation type="unfinished">Mute/Unmute all Wallpaper</translation>
</message>
<message>
<source>No active Wallpaper or Widgets</source>
<translation type="unfinished">No active Wallpaper or Widgets</translation>
<source>Pause/Play all Wallpaper</source>
<translation type="unfinished">Pause/Play all Wallpaper</translation>
</message>
<message>
<source>Configure Wallpaper</source>
<translation type="unfinished">Configure Wallpaper</translation>
</message>
<message>
<source>Minimize to Tray</source>
<translation type="unfinished">Minimize to Tray</translation>
</message>
<message>
<source>Exit</source>
<translation type="unfinished">Exit</translation>
</message>
<message>
<source>Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</source>
<translation type="unfinished">Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</translation>
</message>
</context>
<context>
@ -1008,10 +1023,6 @@
<source>Version</source>
<translation type="unfinished">Version</translation>
</message>
<message>
<source>ScreenPlay Build Version </source>
<translation type="unfinished">ScreenPlay Build Version </translation>
</message>
<message>
<source>Open Changelog</source>
<translation type="unfinished">Open Changelog</translation>
@ -1052,6 +1063,12 @@
<source>Privacy</source>
<translation type="unfinished">Privacy</translation>
</message>
<message>
<source>ScreenPlay Build Version
</source>
<translation type="unfinished">ScreenPlay Build Version
</translation>
</message>
</context>
<context>
<name>SettingsExpander</name>
@ -1068,15 +1085,15 @@
</message>
<message>
<source>Video Import h264 (.mp4)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import h264 (.mp4)</translation>
</message>
<message>
<source>Video Import VP8 &amp; VP9 (.webm)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import VP8 &amp; VP9 (.webm)</translation>
</message>
<message>
<source>Video import (all types)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video import (all types)</translation>
</message>
<message>
<source>GIF Wallpaper</source>
@ -1183,11 +1200,11 @@
<name>StartInfo</name>
<message>
<source>Free tools to help you to create wallpaper</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Free tools to help you to create wallpaper</translation>
</message>
<message>
<source>Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</translation>
</message>
</context>
<context>
@ -1578,7 +1595,7 @@
</message>
<message>
<source>Password Required To Kick Session</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Password Required To Kick Session</translation>
</message>
<message>
<source>Already Logged In Elsewhere</source>

View File

@ -489,98 +489,98 @@
<name>Importh264Convert</name>
<message>
<source>AnalyseVideo...</source>
<translation type="unfinished">VideoAnaliz...</translation>
<translation type="unfinished">AnalyseVideo...</translation>
</message>
<message>
<source>Generating preview image...</source>
<translation type="unfinished">Önizleme oluşturuluyor...</translation>
<translation type="unfinished">Generating preview image...</translation>
</message>
<message>
<source>Generating preview thumbnail image...</source>
<translation type="unfinished">Önizleme küçük resmi oluşturuluyor...</translation>
<translation type="unfinished">Generating preview thumbnail image...</translation>
</message>
<message>
<source>Generating 5 second preview video...</source>
<translation type="unfinished">5 saniyelik önizleme videosu oluşturuluyor...</translation>
<translation type="unfinished">Generating 5 second preview video...</translation>
</message>
<message>
<source>Generating preview gif...</source>
<translation type="unfinished">Özizleme gifi oluşturuluyor...</translation>
<translation type="unfinished">Generating preview gif...</translation>
</message>
<message>
<source>Converting Audio...</source>
<translation type="unfinished">Ses Dönüştürülüyor...</translation>
<translation type="unfinished">Converting Audio...</translation>
</message>
<message>
<source>Converting Video... This can take some time!</source>
<translation type="unfinished">Video dönüştürülüyor... Biraz zaman alabilir!</translation>
<translation type="unfinished">Converting Video... This can take some time!</translation>
</message>
<message>
<source>Converting Video ERROR!</source>
<translation type="unfinished">Video Dönüştürülürken Hata Oluştu!</translation>
<translation type="unfinished">Converting Video ERROR!</translation>
</message>
<message>
<source>Analyse Video ERROR!</source>
<translation type="unfinished">Video Hatasını Analiz Edin!</translation>
<translation type="unfinished">Analyse Video ERROR!</translation>
</message>
<message>
<source>Import a video to a wallpaper</source>
<translation type="unfinished">Bir videoyu duvar kağıdına aktarın</translation>
<translation type="unfinished">Import a video to a wallpaper</translation>
</message>
<message>
<source>Generating preview video...</source>
<translation type="unfinished">Önizleme videosu oluşturuluyor...</translation>
<translation type="unfinished">Generating preview video...</translation>
</message>
<message>
<source>Name (required!)</source>
<translation type="unfinished">İsim (gerekli)</translation>
<translation type="unfinished">Name (required!)</translation>
</message>
<message>
<source>Description</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Description</translation>
</message>
<message>
<source>Youtube URL</source>
<translation type="unfinished">YouTube URL</translation>
<translation type="unfinished">Youtube URL</translation>
</message>
<message>
<source>Abort</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Abort</translation>
</message>
<message>
<source>Save</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Save</translation>
</message>
<message>
<source>Save Wallpaper...</source>
<translation type="unfinished">Duvar kağıdını kaydet...</translation>
<translation type="unfinished">Save Wallpaper...</translation>
</message>
</context>
<context>
<name>Importh264Init</name>
<message>
<source>Import a .mp4 video</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Import a .mp4 video</translation>
</message>
<message>
<source>ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</translation>
</message>
<message>
<source>Invalid file type. Must be valid h264 (*.mp4)!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Invalid file type. Must be valid h264 (*.mp4)!</translation>
</message>
<message>
<source>Drop a *.mp4 file here or use &apos;Select file&apos; below.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Drop a *.mp4 file here or use &apos;Select file&apos; below.</translation>
</message>
<message>
<source>Open Documentation</source>
<translation type="unfinished">Belgeyi </translation>
<translation type="unfinished">Open Documentation</translation>
</message>
<message>
<source>Select file</source>
<translation type="unfinished">Dosya seç</translation>
<translation type="unfinished">Select file</translation>
</message>
</context>
<context>
@ -761,16 +761,31 @@
<source>Settings</source>
<translation type="unfinished">Settings</translation>
</message>
</context>
<context>
<name>NavigationWallpaperConfiguration</name>
<message>
<source>Configurate active Wallpaper or Widgets</source>
<translation>Aktif Duvar Kağıdını veya Widget&apos;ları yapılandırın</translation>
<source>Mute/Unmute all Wallpaper</source>
<translation type="unfinished">Mute/Unmute all Wallpaper</translation>
</message>
<message>
<source>No active Wallpaper or Widgets</source>
<translation>Aktif Duvar Kağıdı veya Widget yok</translation>
<source>Pause/Play all Wallpaper</source>
<translation type="unfinished">Pause/Play all Wallpaper</translation>
</message>
<message>
<source>Configure Wallpaper</source>
<translation type="unfinished">Configure Wallpaper</translation>
</message>
<message>
<source>Minimize to Tray</source>
<translation type="unfinished">Minimize to Tray</translation>
</message>
<message>
<source>Exit</source>
<translation type="unfinished">Exit</translation>
</message>
<message>
<source>Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</source>
<translation type="unfinished">Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</translation>
</message>
</context>
<context>
@ -1008,10 +1023,6 @@
<source>Version</source>
<translation type="unfinished">Version</translation>
</message>
<message>
<source>ScreenPlay Build Version </source>
<translation type="unfinished">ScreenPlay Build Version </translation>
</message>
<message>
<source>Open Changelog</source>
<translation type="unfinished">Open Changelog</translation>
@ -1052,6 +1063,12 @@
<source>Privacy</source>
<translation type="unfinished">Privacy</translation>
</message>
<message>
<source>ScreenPlay Build Version
</source>
<translation type="unfinished">ScreenPlay Build Version
</translation>
</message>
</context>
<context>
<name>SettingsExpander</name>
@ -1068,15 +1085,15 @@
</message>
<message>
<source>Video Import h264 (.mp4)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import h264 (.mp4)</translation>
</message>
<message>
<source>Video Import VP8 &amp; VP9 (.webm)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import VP8 &amp; VP9 (.webm)</translation>
</message>
<message>
<source>Video import (all types)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video import (all types)</translation>
</message>
<message>
<source>GIF Wallpaper</source>
@ -1183,11 +1200,11 @@
<name>StartInfo</name>
<message>
<source>Free tools to help you to create wallpaper</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Free tools to help you to create wallpaper</translation>
</message>
<message>
<source>Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</translation>
</message>
</context>
<context>
@ -1578,7 +1595,7 @@
</message>
<message>
<source>Password Required To Kick Session</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Password Required To Kick Session</translation>
</message>
<message>
<source>Already Logged In Elsewhere</source>

View File

@ -489,98 +489,98 @@
<name>Importh264Convert</name>
<message>
<source>AnalyseVideo...</source>
<translation type="unfinished">Đang xử video...</translation>
<translation type="unfinished">AnalyseVideo...</translation>
</message>
<message>
<source>Generating preview image...</source>
<translation type="unfinished">Đang tạo ra nh xem trước...</translation>
<translation type="unfinished">Generating preview image...</translation>
</message>
<message>
<source>Generating preview thumbnail image...</source>
<translation type="unfinished">Đang tạo ra hình thu nhỏ xem trước...</translation>
<translation type="unfinished">Generating preview thumbnail image...</translation>
</message>
<message>
<source>Generating 5 second preview video...</source>
<translation type="unfinished">Đang tao ra video 5 giây xem trước...</translation>
<translation type="unfinished">Generating 5 second preview video...</translation>
</message>
<message>
<source>Generating preview gif...</source>
<translation type="unfinished">Đang tạo ra gif xem trước...</translation>
<translation type="unfinished">Generating preview gif...</translation>
</message>
<message>
<source>Converting Audio...</source>
<translation type="unfinished">Đang chuyển đi dạng âm thanh...</translation>
<translation type="unfinished">Converting Audio...</translation>
</message>
<message>
<source>Converting Video... This can take some time!</source>
<translation type="unfinished">Đang chuyển đi dạng video... Việc này thể tốn kha khá thời gian!</translation>
<translation type="unfinished">Converting Video... This can take some time!</translation>
</message>
<message>
<source>Converting Video ERROR!</source>
<translation type="unfinished">Đã lỗi xảy ra khi chuyển đi dạng video!</translation>
<translation type="unfinished">Converting Video ERROR!</translation>
</message>
<message>
<source>Analyse Video ERROR!</source>
<translation type="unfinished">Đã lỗi xảy ra khi đang xử video!</translation>
<translation type="unfinished">Analyse Video ERROR!</translation>
</message>
<message>
<source>Import a video to a wallpaper</source>
<translation type="unfinished">Nhập một video vào hình nền</translation>
<translation type="unfinished">Import a video to a wallpaper</translation>
</message>
<message>
<source>Generating preview video...</source>
<translation type="unfinished">Đang tạo ra video xem trước...</translation>
<translation type="unfinished">Generating preview video...</translation>
</message>
<message>
<source>Name (required!)</source>
<translation type="unfinished">Tên (bắt buộc!)</translation>
<translation type="unfinished">Name (required!)</translation>
</message>
<message>
<source>Description</source>
<translation type="unfinished">tả</translation>
<translation type="unfinished">Description</translation>
</message>
<message>
<source>Youtube URL</source>
<translation type="unfinished">Link YouTube</translation>
<translation type="unfinished">Youtube URL</translation>
</message>
<message>
<source>Abort</source>
<translation type="unfinished">Hủy bỏ</translation>
<translation type="unfinished">Abort</translation>
</message>
<message>
<source>Save</source>
<translation type="unfinished">Lưu</translation>
<translation type="unfinished">Save</translation>
</message>
<message>
<source>Save Wallpaper...</source>
<translation type="unfinished">Lưu hình nền...</translation>
<translation type="unfinished">Save Wallpaper...</translation>
</message>
</context>
<context>
<name>Importh264Init</name>
<message>
<source>Import a .mp4 video</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Import a .mp4 video</translation>
</message>
<message>
<source>ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</translation>
</message>
<message>
<source>Invalid file type. Must be valid h264 (*.mp4)!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Invalid file type. Must be valid h264 (*.mp4)!</translation>
</message>
<message>
<source>Drop a *.mp4 file here or use &apos;Select file&apos; below.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Drop a *.mp4 file here or use &apos;Select file&apos; below.</translation>
</message>
<message>
<source>Open Documentation</source>
<translation type="unfinished">Mở tài liệu tham khảo</translation>
<translation type="unfinished">Open Documentation</translation>
</message>
<message>
<source>Select file</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Select file</translation>
</message>
</context>
<context>
@ -761,16 +761,31 @@
<source>Settings</source>
<translation type="unfinished">Settings</translation>
</message>
</context>
<context>
<name>NavigationWallpaperConfiguration</name>
<message>
<source>Configurate active Wallpaper or Widgets</source>
<translation>Thiết lập hình nền hoặc widgets đang hoạt đng</translation>
<source>Mute/Unmute all Wallpaper</source>
<translation type="unfinished">Mute/Unmute all Wallpaper</translation>
</message>
<message>
<source>No active Wallpaper or Widgets</source>
<translation>Không hình nền hoặc widgets đang hoạt đng</translation>
<source>Pause/Play all Wallpaper</source>
<translation type="unfinished">Pause/Play all Wallpaper</translation>
</message>
<message>
<source>Configure Wallpaper</source>
<translation type="unfinished">Configure Wallpaper</translation>
</message>
<message>
<source>Minimize to Tray</source>
<translation type="unfinished">Minimize to Tray</translation>
</message>
<message>
<source>Exit</source>
<translation type="unfinished">Exit</translation>
</message>
<message>
<source>Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</source>
<translation type="unfinished">Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</translation>
</message>
</context>
<context>
@ -1008,10 +1023,6 @@
<source>Version</source>
<translation>Phiên bản</translation>
</message>
<message>
<source>ScreenPlay Build Version </source>
<translation>Bản dựng của ScreenPlay </translation>
</message>
<message>
<source>Open Changelog</source>
<translation>Mở nhật thay đi</translation>
@ -1052,6 +1063,12 @@
<source>Privacy</source>
<translation>Quyền riêng </translation>
</message>
<message>
<source>ScreenPlay Build Version
</source>
<translation type="unfinished">ScreenPlay Build Version
</translation>
</message>
</context>
<context>
<name>SettingsExpander</name>
@ -1068,15 +1085,15 @@
</message>
<message>
<source>Video Import h264 (.mp4)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import h264 (.mp4)</translation>
</message>
<message>
<source>Video Import VP8 &amp; VP9 (.webm)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import VP8 &amp; VP9 (.webm)</translation>
</message>
<message>
<source>Video import (all types)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video import (all types)</translation>
</message>
<message>
<source>GIF Wallpaper</source>
@ -1183,11 +1200,11 @@
<name>StartInfo</name>
<message>
<source>Free tools to help you to create wallpaper</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Free tools to help you to create wallpaper</translation>
</message>
<message>
<source>Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</translation>
</message>
</context>
<context>
@ -1578,7 +1595,7 @@
</message>
<message>
<source>Password Required To Kick Session</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Password Required To Kick Session</translation>
</message>
<message>
<source>Already Logged In Elsewhere</source>

View File

@ -489,98 +489,98 @@
<name>Importh264Convert</name>
<message>
<source>AnalyseVideo...</source>
<translation type="unfinished">...</translation>
<translation type="unfinished">AnalyseVideo...</translation>
</message>
<message>
<source>Generating preview image...</source>
<translation type="unfinished">...</translation>
<translation type="unfinished">Generating preview image...</translation>
</message>
<message>
<source>Generating preview thumbnail image...</source>
<translation type="unfinished">...</translation>
<translation type="unfinished">Generating preview thumbnail image...</translation>
</message>
<message>
<source>Generating 5 second preview video...</source>
<translation type="unfinished">5...</translation>
<translation type="unfinished">Generating 5 second preview video...</translation>
</message>
<message>
<source>Generating preview gif...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Generating preview gif...</translation>
</message>
<message>
<source>Converting Audio...</source>
<translation type="unfinished">...</translation>
<translation type="unfinished">Converting Audio...</translation>
</message>
<message>
<source>Converting Video... This can take some time!</source>
<translation type="unfinished">... </translation>
<translation type="unfinished">Converting Video... This can take some time!</translation>
</message>
<message>
<source>Converting Video ERROR!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Converting Video ERROR!</translation>
</message>
<message>
<source>Analyse Video ERROR!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Analyse Video ERROR!</translation>
</message>
<message>
<source>Import a video to a wallpaper</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Import a video to a wallpaper</translation>
</message>
<message>
<source>Generating preview video...</source>
<translation type="unfinished">...</translation>
<translation type="unfinished">Generating preview video...</translation>
</message>
<message>
<source>Name (required!)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Name (required!)</translation>
</message>
<message>
<source>Description</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Description</translation>
</message>
<message>
<source>Youtube URL</source>
<translation type="unfinished">Youtube </translation>
<translation type="unfinished">Youtube URL</translation>
</message>
<message>
<source>Abort</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Abort</translation>
</message>
<message>
<source>Save</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Save</translation>
</message>
<message>
<source>Save Wallpaper...</source>
<translation type="unfinished">...</translation>
<translation type="unfinished">Save Wallpaper...</translation>
</message>
</context>
<context>
<name>Importh264Init</name>
<message>
<source>Import a .mp4 video</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Import a .mp4 video</translation>
</message>
<message>
<source>ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.</translation>
</message>
<message>
<source>Invalid file type. Must be valid h264 (*.mp4)!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Invalid file type. Must be valid h264 (*.mp4)!</translation>
</message>
<message>
<source>Drop a *.mp4 file here or use &apos;Select file&apos; below.</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Drop a *.mp4 file here or use &apos;Select file&apos; below.</translation>
</message>
<message>
<source>Open Documentation</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Open Documentation</translation>
</message>
<message>
<source>Select file</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Select file</translation>
</message>
</context>
<context>
@ -761,16 +761,31 @@
<source>Settings</source>
<translation type="unfinished">Settings</translation>
</message>
</context>
<context>
<name>NavigationWallpaperConfiguration</name>
<message>
<source>Configurate active Wallpaper or Widgets</source>
<translation></translation>
<source>Mute/Unmute all Wallpaper</source>
<translation type="unfinished">Mute/Unmute all Wallpaper</translation>
</message>
<message>
<source>No active Wallpaper or Widgets</source>
<translation></translation>
<source>Pause/Play all Wallpaper</source>
<translation type="unfinished">Pause/Play all Wallpaper</translation>
</message>
<message>
<source>Configure Wallpaper</source>
<translation type="unfinished">Configure Wallpaper</translation>
</message>
<message>
<source>Minimize to Tray</source>
<translation type="unfinished">Minimize to Tray</translation>
</message>
<message>
<source>Exit</source>
<translation type="unfinished">Exit</translation>
</message>
<message>
<source>Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</source>
<translation type="unfinished">Are you sure you want to exit ScreenPlay?
This will shut down all Wallpaper and Widgets.</translation>
</message>
</context>
<context>
@ -1008,10 +1023,6 @@
<source>Version</source>
<translation></translation>
</message>
<message>
<source>ScreenPlay Build Version </source>
<translation>ScreenPlay编译版本 </translation>
</message>
<message>
<source>Open Changelog</source>
<translation></translation>
@ -1052,6 +1063,12 @@
<source>Privacy</source>
<translation></translation>
</message>
<message>
<source>ScreenPlay Build Version
</source>
<translation type="unfinished">ScreenPlay Build Version
</translation>
</message>
</context>
<context>
<name>SettingsExpander</name>
@ -1068,15 +1085,15 @@
</message>
<message>
<source>Video Import h264 (.mp4)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import h264 (.mp4)</translation>
</message>
<message>
<source>Video Import VP8 &amp; VP9 (.webm)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video Import VP8 &amp; VP9 (.webm)</translation>
</message>
<message>
<source>Video import (all types)</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Video import (all types)</translation>
</message>
<message>
<source>GIF Wallpaper</source>
@ -1183,11 +1200,11 @@
<name>StartInfo</name>
<message>
<source>Free tools to help you to create wallpaper</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Free tools to help you to create wallpaper</translation>
</message>
<message>
<source>Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!</translation>
</message>
</context>
<context>
@ -1578,7 +1595,7 @@
</message>
<message>
<source>Password Required To Kick Session</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Password Required To Kick Session</translation>
</message>
<message>
<source>Already Logged In Elsewhere</source>

View File

@ -49,33 +49,19 @@
#include <QTimer>
#include <QtGlobal>
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;

View File

@ -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 }
{

View File

@ -34,7 +34,10 @@ 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 $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)

View File

@ -26,3 +26,8 @@ target_include_directories(
PRIVATE src/)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core)
if(WIN32)
# Used for query windows monitor data
target_link_libraries(${PROJECT_NAME} PUBLIC shcore.lib)
endif()

View File

@ -33,6 +33,17 @@
****************************************************************************/
#pragma once
#include <QtGlobal>
#if defined(Q_OS_WIN)
// Must be first!
#include <qt_windows.h>
#include "WinUser.h"
#include <ShellScalingApi.h>
#endif
#include "ScreenPlayUtil/contenttypes.h"
#include <QJsonArray>
#include <QJsonObject>
@ -41,6 +52,37 @@
#include <optional>
namespace ScreenPlayUtil {
#if defined(Q_OS_WIN)
struct WinMonitorStats {
std::vector<int> iMonitors;
std::vector<HMONITOR> hMonitors;
std::vector<HDC> hdcMonitors;
std::vector<RECT> rcMonitors;
std::vector<DEVICE_SCALE_FACTOR> scaleFactor;
std::vector<std::pair<UINT, UINT>> sizes;
static BOOL CALLBACK MonitorEnum(HMONITOR hMon, HDC hdc, LPRECT lprcMonitor,
LPARAM pData)
{
WinMonitorStats* pThis = reinterpret_cast<WinMonitorStats*>(pData);
auto scaleFactor = DEVICE_SCALE_FACTOR::DEVICE_SCALE_FACTOR_INVALID;
GetScaleFactorForMonitor(hMon, &scaleFactor);
UINT x = 0;
UINT y = 0;
GetDpiForMonitor(hMon, MONITOR_DPI_TYPE::MDT_RAW_DPI, &x, &y);
pThis->sizes.push_back({ x, y });
pThis->scaleFactor.push_back(scaleFactor);
pThis->hMonitors.push_back(hMon);
pThis->hdcMonitors.push_back(hdc);
pThis->rcMonitors.push_back(*lprcMonitor);
pThis->iMonitors.push_back(pThis->hdcMonitors.size());
return TRUE;
}
WinMonitorStats() { EnumDisplayMonitors(0, 0, MonitorEnum, (LPARAM)this); }
};
#endif
QJsonArray fillArray(const QVector<QString>& items);
ScreenPlay::SearchType::SearchType getSearchTypeFromInstalledType(const ScreenPlay::InstalledType::InstalledType type);
std::optional<ScreenPlay::InstalledType::InstalledType> getInstalledTypeFromString(const QString& type);

View File

@ -233,7 +233,7 @@ std::optional<ScreenPlay::InstalledType::InstalledType> getInstalledTypeFromStri
{
using ScreenPlay::InstalledType::InstalledType;
if (type.endsWith("Wallpaper")) {
if (type.endsWith("Wallpaper", Qt::CaseInsensitive)) {
if (type.startsWith("video", Qt::CaseInsensitive)) {
return InstalledType::VideoWallpaper;
}
@ -254,7 +254,7 @@ std::optional<ScreenPlay::InstalledType::InstalledType> getInstalledTypeFromStri
}
}
if (type.endsWith("Widget")) {
if (type.endsWith("Widget", Qt::CaseInsensitive)) {
if (type.startsWith("qml", Qt::CaseInsensitive)) {
return InstalledType::QMLWidget;
}
@ -266,28 +266,27 @@ std::optional<ScreenPlay::InstalledType::InstalledType> getInstalledTypeFromStri
return std::nullopt;
}
/*!
\brief Maps the video codec type from a QString to an enum. Used for parsing the project.json.
*/
std::optional<ScreenPlay::VideoCodec::VideoCodec> getVideoCodecFromString(const QString &type)
std::optional<ScreenPlay::VideoCodec::VideoCodec> getVideoCodecFromString(const QString& type)
{
if(type.isEmpty())
if (type.isEmpty())
return std::nullopt;
if(type.contains("vp8",Qt::CaseInsensitive))
if (type.contains("vp8", Qt::CaseInsensitive))
return ScreenPlay::VideoCodec::VideoCodec::VP8;
if(type.contains("vp9",Qt::CaseInsensitive))
if (type.contains("vp9", Qt::CaseInsensitive))
return ScreenPlay::VideoCodec::VideoCodec::VP9;
if(type.contains("av1",Qt::CaseInsensitive))
if (type.contains("av1", Qt::CaseInsensitive))
return ScreenPlay::VideoCodec::VideoCodec::AV1;
if(type.contains("h264",Qt::CaseInsensitive))
if (type.contains("h264", Qt::CaseInsensitive))
return ScreenPlay::VideoCodec::VideoCodec::H264;
if(type.contains("h265",Qt::CaseInsensitive))
if (type.contains("h265", Qt::CaseInsensitive))
return ScreenPlay::VideoCodec::VideoCodec::H264;
return std::nullopt;
@ -395,5 +394,4 @@ std::optional<QVector<int>> parseStringToIntegerList(const QString string)
return list;
}
}

View File

@ -84,6 +84,5 @@ if(WIN32)
# Disable console window on Windows
# https://stackoverflow.com/questions/8249028/how-do-i-keep-my-qt-c-program-from-opening-a-console-in-windows
set_property(TARGET ${PROJECT_NAME} PROPERTY WIN32_EXECUTABLE true)
target_link_libraries(${PROJECT_NAME} PRIVATE shcore.lib)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/index.html ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/index.html COPYONLY)
endif()

View File

@ -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)

View File

@ -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
}
}

View File

@ -17,20 +17,30 @@ Rectangle {
if (Wallpaper.videoCodec === VideoCodec.Unknown) {
Wallpaper.terminate()
}
// macOS only supports h264 via the native Qt MM
if (Qt.platform.os === "osx" && (Wallpaper.videoCodec === VideoCodec.VP8
|| Wallpaper.videoCodec === VideoCodec.VP9)) {
loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaWebView.qml"
} else {
if (Qt.platform.os === "osx") {
if ((Wallpaper.videoCodec === VideoCodec.VP8
|| Wallpaper.videoCodec === VideoCodec.VP9)) {
loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaWebView.qml"
} else {
loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml"
}
}
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)
@ -54,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
@ -106,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
@ -123,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 {
@ -147,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
}
}
@ -199,7 +210,6 @@ Rectangle {
target: imgCover
opacity: 1
}
},
State {
name: "hideDefaultBackgroundImage"
@ -208,7 +218,6 @@ Rectangle {
target: imgCover
opacity: 0
}
},
State {
name: "exit"
@ -217,7 +226,6 @@ Rectangle {
target: imgCover
opacity: 1
}
}
]
transitions: [
@ -236,9 +244,7 @@ Rectangle {
duration: 600
property: "opacity"
}
}
},
Transition {
from: "hideDefaultBackgroundImage"
@ -255,9 +261,7 @@ Rectangle {
ScriptAction {
script: Wallpaper.terminate()
}
}
}
]
}
@ -287,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
}
@ -324,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
}
@ -335,13 +345,10 @@ Rectangle {
text: "imgCover.status " + imgCover.status
font.pointSize: 14
}
}
background: Rectangle {
opacity: 0.5
}
}
}

View File

@ -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 {

View File

@ -1,41 +1,8 @@
#include "winwindow.h"
#include "WinUser.h"
#include "qqml.h"
#include <ShellScalingApi.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <windows.h>
struct WinMonitorStats {
std::vector<int> iMonitors;
std::vector<HMONITOR> hMonitors;
std::vector<HDC> hdcMonitors;
std::vector<RECT> rcMonitors;
std::vector<DEVICE_SCALE_FACTOR> scaleFactor;
std::vector<std::pair<UINT, UINT>> sizes;
static BOOL CALLBACK MonitorEnum(HMONITOR hMon, HDC hdc, LPRECT lprcMonitor,
LPARAM pData)
{
WinMonitorStats* pThis = reinterpret_cast<WinMonitorStats*>(pData);
auto scaleFactor = DEVICE_SCALE_FACTOR::DEVICE_SCALE_FACTOR_INVALID;
GetScaleFactorForMonitor(hMon, &scaleFactor);
UINT x = 0;
UINT y = 0;
GetDpiForMonitor(hMon, MONITOR_DPI_TYPE::MDT_RAW_DPI, &x, &y);
pThis->sizes.push_back({ x, y });
pThis->scaleFactor.push_back(scaleFactor);
pThis->hMonitors.push_back(hMon);
pThis->hdcMonitors.push_back(hdc);
pThis->rcMonitors.push_back(*lprcMonitor);
pThis->iMonitors.push_back(pThis->hdcMonitors.size());
return TRUE;
}
WinMonitorStats() { EnumDisplayMonitors(0, 0, MonitorEnum, (LPARAM)this); }
};
/*!
\brief Searches for the worker window for our window to parent to.
@ -225,11 +192,6 @@ WinWindow::WinWindow(
configureWindowGeometry();
if (hasWindowScaling()) {
qInfo() << "Monitor with scaling detected!";
configureWindowGeometry();
}
// We do not support autopause for multi monitor wallpaper
if (this->activeScreensList().length() == 1) {
if (checkWallpaperVisible) {
@ -294,13 +256,13 @@ void WinWindow::setupWallpaperForOneScreen(int activeScreen)
const QRect screenRect = QApplication::screens().at(activeScreen)->geometry();
const int boderWidth = 2;
const float scaling = getScaling(activeScreen);
const auto width = screenRect.width() * scaling + boderWidth;
const auto height = screenRect.height() * scaling + boderWidth;
const int borderOffset = -1;
const int x = screenRect.x() + m_zeroPoint.x() + borderOffset;
const int y = screenRect.y() + m_zeroPoint.y() + borderOffset;
ScreenPlayUtil::WinMonitorStats monitors;
const int width = std::abs(monitors.rcMonitors[activeScreen].right - monitors.rcMonitors[activeScreen].left);
const int height = std::abs(monitors.rcMonitors[activeScreen].top - monitors.rcMonitors[activeScreen].bottom);
const int x = monitors.rcMonitors[activeScreen].left + m_zeroPoint.x() + borderOffset;
const int y = monitors.rcMonitors[activeScreen].top + m_zeroPoint.y() + borderOffset;
qInfo() << QString("Setup window activeScreen: %1 scaling: %2 x: %3 y: %4 width: %5 height: %6").arg(activeScreen).arg(scaling).arg(x).arg(y).arg(width).arg(height);
{
@ -323,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();
}
/*!

View File

@ -60,8 +60,7 @@ qt_add_qml_module(
${WORKSHOP_PLUGIN_DIR}
URI "Workshop"
SOURCES ${SOURCES} ${HEADER}
VERSION
1.0)
VERSION 1.0)
if(${SCREENPLAY_STEAM})
@ -84,4 +83,4 @@ endif()
# https://github.com/qt/qtdeclarative/blob/7a7064e14f094e843e1ee832cc927e86f887621a/src/qml/Qt6QmlMacros.cmake#L2042
target_include_directories(${PROJECT_NAME} PUBLIC src/)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Quick ${STEAM_LIB} ScreenPlayUtil SteamSDK)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Quick ${STEAM_LIB} ScreenPlayUtil SteamSDK SteamSDKQtEnums)

View File

@ -50,11 +50,17 @@ set(HEADER
public/steam/steamps3params.h
public/steam/steamtypes.h
public/steam/steamuniverse.h
# CUSTOM
public/steam/steam_qt_enums_generated.h
# ENDCUSTOM
)
add_library(${PROJECT_NAME} STATIC ${HEADER})
target_include_directories(${PROJECT_NAME} PUBLIC public/)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core)
if(${SCREENPLAY_STEAM})
add_library(${PROJECT_NAME} STATIC ${HEADER})
target_include_directories(${PROJECT_NAME} PUBLIC public/)
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.
add_library(SteamSDKQtEnums STATIC public/steam/steam_qt_enums_generated.h)
target_include_directories(SteamSDKQtEnums PUBLIC public/)
target_link_libraries(SteamSDKQtEnums PRIVATE Qt6::Core)

View File

@ -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)

View File

@ -89,6 +89,8 @@ signals:
private:
QVector<ScreenPlay::ProjectFile> m_screenPlayFiles;
QUrl m_absoluteStoragePath;
QFuture<void> m_loadContentFuture;
QFutureWatcher<void> m_loadContentFutureWatcher;
};
}