diff --git a/ScreenPlay/Resources.qrc b/ScreenPlay/Resources.qrc index 739b84e3..0a87e5b1 100644 --- a/ScreenPlay/Resources.qrc +++ b/ScreenPlay/Resources.qrc @@ -123,6 +123,7 @@ qml/Screen/Screen.qml assets/icons/icon_screen.svg qml/Background.qml + qml/Community/XMLNewsfeed.qml qml/Workshop/WorkshopAvailableTest.qml qml/Workshop/WorkshopLoader.qml diff --git a/ScreenPlay/main.cpp b/ScreenPlay/main.cpp index 54925a42..018744a2 100644 --- a/ScreenPlay/main.cpp +++ b/ScreenPlay/main.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #ifdef Q_OS_WIN #include @@ -52,6 +53,8 @@ int main(int argc, char* argv[]) trsl.load(":/translations/ScreenPlay_de.qm"); app.installTranslator(&trsl); + QtWebEngine::initialize(); + QFontDatabase::addApplicationFont(":/assets/fonts/LibreBaskerville-Italic.ttf"); QFontDatabase::addApplicationFont(":/assets/fonts/Roboto-Light.ttf"); QFontDatabase::addApplicationFont(":/assets/fonts/Roboto-Regular.ttf"); diff --git a/ScreenPlay/main.qml b/ScreenPlay/main.qml index 326cc287..af9cd6b6 100644 --- a/ScreenPlay/main.qml +++ b/ScreenPlay/main.qml @@ -5,6 +5,7 @@ import QtQuick.Layouts 1.3 import QtGraphicalEffects 1.0 import Qt.labs.platform 1.0 + import "qml/" import "qml/Installed" @@ -29,16 +30,23 @@ ApplicationWindow { if (name === "Create") { bg.state = "create" pageLoader.visible = false - pageLoaderCreate.setSource("qrc:/qml/Create/Create.qml") pageLoaderCreate.visible = true pageLoaderWorkshop.visible = false + pageLoaderCreate.setSource("qrc:/qml/Create/Create.qml") sidebar.state = "inactive" } else if (name === "Workshop") { bg.state = "init" pageLoader.visible = false pageLoaderCreate.visible = false - pageLoaderWorkshop.setSource("qrc:/qml/Workshop/Workshop.qml") pageLoaderWorkshop.visible = true + pageLoaderWorkshop.setSource("qrc:/qml/Workshop/Workshop.qml") + sidebar.state = "inactive" + } else if (name === "Community") { + bg.state = "community" + pageLoader.visible = true + pageLoaderCreate.visible = false + pageLoaderWorkshop.visible = false + pageLoader.setSource("qrc:/qml/Community/Community.qml") sidebar.state = "inactive" } else { bg.state = "init" @@ -50,7 +58,6 @@ ApplicationWindow { } } - Background { id: bg anchors.fill: parent diff --git a/ScreenPlay/qml/Background.qml b/ScreenPlay/qml/Background.qml index f6e5f34d..b9084a29 100644 --- a/ScreenPlay/qml/Background.qml +++ b/ScreenPlay/qml/Background.qml @@ -15,6 +15,11 @@ Item { } } + Rectangle { + id: bgCommunity + anchors.fill: parent + } + property var myDate: new Date() Timer { @@ -42,6 +47,10 @@ Item { target: colorShaderCreate shaderOpacity: 0 } + PropertyChanges { + target: bgCommunity + opacity: 0 + } }, State { name: "create" @@ -49,6 +58,21 @@ Item { target: colorShaderCreate shaderOpacity: 1 } + PropertyChanges { + target: bgCommunity + opacity: 0 + } + }, + State { + name: "community" + PropertyChanges { + target: colorShaderCreate + shaderOpacity: 0 + } + PropertyChanges { + target: bgCommunity + opacity: 1 + } } ] @@ -73,6 +97,18 @@ Item { property: "shaderOpacity" duration: 0 } + }, + + Transition { + from: "*" + to: "community" + + PropertyAnimation { + target: bgCommunity + property: "opacity" + duration: 400 + easing.type: Easing.InOutQuart + } } ] } diff --git a/ScreenPlay/qml/Community/Community.qml b/ScreenPlay/qml/Community/Community.qml index 16ea78da..8980d0cc 100644 --- a/ScreenPlay/qml/Community/Community.qml +++ b/ScreenPlay/qml/Community/Community.qml @@ -3,13 +3,13 @@ import QtQuick.Controls 2.3 import QtQuick.Controls.Material 2.2 import QtGraphicalEffects 1.0 import QtQuick.Layouts 1.3 -import QtQuick.XmlListModel 2.0 +//import QtQuick.XmlListModel 2.0 +import QtWebEngine 1.8 Item { id: community anchors.fill: parent - Rectangle { id: stomtWrapper width: 500 @@ -55,10 +55,10 @@ Item { } } Text { - id:txtStomtDescription + id: txtStomtDescription font.pointSize: 14 color: "white" - height:100 + height: 100 text: qsTr("We use Stomt because it provides quick and easy feedback via I like/I wish. So you can easily give us feedback and speak your mind. We will read these wishes on a daily basis!") font.family: "Roboto" font.weight: Font.Normal @@ -75,7 +75,7 @@ Item { } } - Component { + Component { id: component_feedback Feedback { id: feedback @@ -93,15 +93,14 @@ Item { } Timer { - interval: 200; running: true; repeat: false + interval: 200 + running: true + repeat: false onTriggered: { - feedModel.source = "https://screen-play.app/index.php?option=com_content&view=category&layout=blog&id=10&format=feed&type=rss" loader_feedback.sourceComponent = component_feedback } - } - Button { id: btnStomt text: qsTr("Open ScreenPlay Stomt page") @@ -147,179 +146,38 @@ Item { } } - XmlListModel { - id: feedModel - - query: "/rss/channel/item" - XmlRole { - name: "title" - query: "title/string()" + // XMLNewsfeed { + // id: changelogFlickableWrapper + // anchors { + // bottom: footer.top + // left: stomtWrapper.right + // leftMargin: 90 + // right: parent.right + // rightMargin: 20 + // top: parent.top + // topMargin: 20 + // } + // } + WebEngineView { + id: we + url:"https://forum.screen-play.app/" + onUrlChanged: { + var tmp = we.url.toString() + if(!tmp.includes("https://forum.screen-play.app/")) { + we.url = "https://forum.screen-play.app/" + } } - XmlRole { - name: "backgroundImage" - query: "description/string()" - } - XmlRole { - name: "link" - query: "link/string()" - } - XmlRole { - name: "pubDate" - query: "pubDate/string()" - } - XmlRole { - name: "category" - query: "category/string()" - } - } - - GridView { - id: changelogFlickableWrapper - flickableDirection: Flickable.VerticalFlick - maximumFlickVelocity: 5000 - flickDeceleration: 5000 - cellHeight: 205 - cellWidth: 360 - model: feedModel anchors { - top: parent.top - topMargin: 20 - right: parent.right - rightMargin: 20 bottom: footer.top - left: stomtWrapper.right - leftMargin: 90 + leftMargin: 0 + right: parent.right + rightMargin: 0 + top: parent.top + topMargin:0 } - header: Item { - height: 100 - width: parent.width - - Text { - id: name - text: qsTr("News & Patchnotes") - wrapMode: Text.WordWrap - color: "#626262" - renderType: Text.NativeRendering - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignLeft - font.pixelSize: 32 - font.family: "Roboto" - - anchors { - top: parent.top - topMargin: 30 - horizontalCenter: parent.horizontalCenter - } - } - } - - delegate: Item { - id: root - width: 352 - height: 197 - - RectangularGlow { - id: effectchangelogWrapper - anchors { - top: parent.top - topMargin: 3 - } - height: parent.height - width: parent.width - cached: true - glowRadius: 3 - spread: 0.2 - color: "black" - opacity: 0.2 - cornerRadius: 15 - } - - Rectangle { - anchors.fill: parent - anchors.margins: 5 - radius: 4 - - Image { - fillMode: Image.PreserveAspectCrop - anchors.fill: parent - source: { - var a = backgroundImage - var r = new RegExp(/]+src="([^">]+)"/) - var url = r.exec(a) - return url[1].toString() - } - } - - LinearGradient { - visible: true - opacity: .5 - anchors.fill: parent - start: Qt.point(0, parent.height) - end: Qt.point(0, parent.height - 150) - gradient: Gradient { - GradientStop { - position: 0.0 - color: "#BB000000" - } - GradientStop { - position: 1.0 - color: "#00000000" - } - } - } - - Text { - id: txtTitle - text: title - renderType: Text.NativeRendering - anchors { - right: parent.right - bottom: parent.bottom - left: parent.left - margins: 20 - } - color: "white" - font.family: "Roboto" - font.weight: Font.Normal - font.pixelSize: 18 - wrapMode: Text.WordWrap - } - Text { - id: txtPubDate - text: { - return pubDate.replace("+0000", "") - } - anchors { - right: parent.right - rightMargin: 20 - bottom: txtTitle.top - bottomMargin: 10 - left: parent.left - leftMargin: 20 - } - color: "white" - font.family: "Roboto" - renderType: Text.NativeRendering - font.weight: Font.Normal - font.pixelSize: 14 - wrapMode: Text.WordWrap - } - MouseArea { - anchors.fill: parent - onClicked: Qt.openUrlExternally(link) - hoverEnabled: true - cursorShape: Qt.PointingHandCursor - } - } - } - - ScrollBar.vertical: ScrollBar { - snapMode: ScrollBar.SnapOnRelease - policy: ScrollBar.AlwaysOn - } } Rectangle { @@ -338,7 +196,8 @@ Item { text: qsTr("Forums") Material.background: Material.Blue Material.foreground: "white" - onClicked: Qt.openUrlExternally("https://forum.screen-play.app/") + onClicked: Qt.openUrlExternally( + "https://forum.screen-play.app/") icon.source: "qrc:/assets/icons/icon_people.svg" icon.color: "white" icon.width: 16 @@ -352,7 +211,8 @@ Item { icon.color: "white" icon.width: 16 icon.height: 16 - onClicked: Qt.openUrlExternally("https://screen-play.app/index.php/blog") + onClicked: Qt.openUrlExternally( + "https://screen-play.app/index.php/blog") } Button { text: qsTr("Source Code") @@ -363,7 +223,8 @@ Item { icon.color: "white" icon.width: 16 icon.height: 16 - onClicked: Qt.openUrlExternally("https://gitlab.com/aimber/ScreenPlay/") + onClicked: Qt.openUrlExternally( + "https://gitlab.com/aimber/ScreenPlay/") } Button { text: qsTr("Workshop") diff --git a/ScreenPlay/qml/Community/XMLNewsfeed.qml b/ScreenPlay/qml/Community/XMLNewsfeed.qml new file mode 100644 index 00000000..fe7416d2 --- /dev/null +++ b/ScreenPlay/qml/Community/XMLNewsfeed.qml @@ -0,0 +1,179 @@ +import QtQuick 2.9 +import QtQuick.Controls 2.3 +import QtQuick.Controls.Material 2.2 +import QtGraphicalEffects 1.0 +import QtQuick.Layouts 1.3 +import QtQuick.XmlListModel 2.0 + +GridView { + id: changelogFlickableWrapper + flickableDirection: Flickable.VerticalFlick + maximumFlickVelocity: 5000 + flickDeceleration: 5000 + cellHeight: 205 + cellWidth: 360 + model: feedModel + + Timer { + interval: 200 + running: true + repeat: false + onTriggered: { + feedModel.source = "https://screen-play.app/index.php?option=com_content&view=category&layout=blog&id=10&format=feed&type=rss" + } + } + + XmlListModel { + id: feedModel + + query: "/rss/channel/item" + XmlRole { + name: "title" + query: "title/string()" + } + XmlRole { + name: "backgroundImage" + query: "description/string()" + } + XmlRole { + name: "link" + query: "link/string()" + } + XmlRole { + name: "pubDate" + query: "pubDate/string()" + } + XmlRole { + name: "category" + query: "category/string()" + } + } + + header: Item { + height: 100 + width: parent.width + + Text { + id: name + text: qsTr("News & Patchnotes") + wrapMode: Text.WordWrap + color: "#626262" + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignLeft + font.pixelSize: 32 + font.family: "Roboto" + + anchors { + top: parent.top + topMargin: 30 + horizontalCenter: parent.horizontalCenter + } + } + } + + delegate: Item { + id: root + width: 352 + height: 197 + + RectangularGlow { + id: effectchangelogWrapper + anchors { + top: parent.top + topMargin: 3 + } + height: parent.height + width: parent.width + cached: true + glowRadius: 3 + spread: 0.2 + color: "black" + opacity: 0.2 + cornerRadius: 15 + } + + Rectangle { + anchors.fill: parent + anchors.margins: 5 + radius: 4 + + Image { + fillMode: Image.PreserveAspectCrop + anchors.fill: parent + source: { + var a = backgroundImage + var r = new RegExp(/]+src="([^">]+)"/) + var url = r.exec(a) + return url[1].toString() + } + } + + LinearGradient { + visible: true + opacity: .5 + anchors.fill: parent + start: Qt.point(0, parent.height) + end: Qt.point(0, parent.height - 150) + gradient: Gradient { + GradientStop { + position: 0.0 + color: "#BB000000" + } + GradientStop { + position: 1.0 + color: "#00000000" + } + } + } + + Text { + id: txtTitle + text: title + renderType: Text.NativeRendering + anchors { + right: parent.right + bottom: parent.bottom + left: parent.left + margins: 20 + } + color: "white" + font.family: "Roboto" + font.weight: Font.Normal + font.pixelSize: 18 + wrapMode: Text.WordWrap + } + Text { + id: txtPubDate + text: { + return pubDate.replace("+0000", "") + } + anchors { + right: parent.right + rightMargin: 20 + bottom: txtTitle.top + bottomMargin: 10 + left: parent.left + leftMargin: 20 + } + color: "white" + font.family: "Roboto" + renderType: Text.NativeRendering + font.weight: Font.Normal + font.pixelSize: 14 + wrapMode: Text.WordWrap + } + MouseArea { + anchors.fill: parent + onClicked: Qt.openUrlExternally(link) + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + } + } + } + + ScrollBar.vertical: ScrollBar { + snapMode: ScrollBar.SnapOnRelease + policy: ScrollBar.AlwaysOn + } +}