diff --git a/ScreenPlay/Resources.qrc b/ScreenPlay/Resources.qrc index e677a2db..b14f0361 100644 --- a/ScreenPlay/Resources.qrc +++ b/ScreenPlay/Resources.qrc @@ -115,5 +115,6 @@ legal/OFL.txt legal/OpenSSL.txt legal/Qt LGPLv3.txt + qml/Controls/Slider.qml diff --git a/ScreenPlay/main.qml b/ScreenPlay/main.qml index 95115f72..1ab4ea1b 100644 --- a/ScreenPlay/main.qml +++ b/ScreenPlay/main.qml @@ -113,11 +113,11 @@ ApplicationWindow { if (miMuteAll.isMuted) { isMuted = false miMuteAll.text = qsTr("Mute all") - screenPlay.setWallpaperValue(0, "volume", "1") + screenPlay.setAllWallpaperValue("volume", "1") } else { isMuted = true miMuteAll.text = qsTr("Unmute all") - screenPlay.setWallpaperValue(0, "volume", "0") + screenPlay.setAllWallpaperValue("volume", "0") } } } @@ -129,11 +129,11 @@ ApplicationWindow { if (miStopAll.isPlaying) { isPlaying = false miStopAll.text = qsTr("Pause all") - screenPlay.setWallpaperValue(0, "isPlaying", "false") + screenPlay.setAllWallpaperValue("isPlaying", "false") } else { isPlaying = true miStopAll.text = qsTr("Play all") - screenPlay.setWallpaperValue(0, "isPlaying", "true") + screenPlay.setAllWallpaperValue("isPlaying", "true") } } } diff --git a/ScreenPlay/qml/Controls/Slider.qml b/ScreenPlay/qml/Controls/Slider.qml new file mode 100644 index 00000000..4401a00e --- /dev/null +++ b/ScreenPlay/qml/Controls/Slider.qml @@ -0,0 +1,70 @@ +import QtQuick 2.9 +import QtQuick.Controls 2.2 + +Item { + id: sliderVolumeWrapperBottom + height: 70 + + anchors { + left: parent.left + right: parent.right + } + + property string headline: "dummyHeandline" + property string iconSource: "qrc:/assets/icons/icon_volume.svg" + property alias value: slider.value + + Text { + id: txtHeadline + text: headline + height: 20 + font.pixelSize: 14 + font.family: "Roboto" + color: "#5D5D5D" + renderType: Text.NativeRendering + anchors { + top: parent.top + right: parent.right + left: parent.left + } + } + + Row { + spacing: 30 + anchors { + top: txtHeadline.bottom + right: parent.right + bottom: parent.bottom + left: parent.left + } + + Image { + id: imgIcon + width: 20 + height: 20 + anchors.verticalCenter: parent.verticalCenter + source: iconSource + sourceSize: Qt.size(20, 20) + } + + Slider { + id: slider + stepSize: 0.01 + from: 0 + value: 1 + to: 1 + anchors.verticalCenter: parent.verticalCenter + } + + Text { + id: txtValue + color: "#818181" + text: Math.round(slider.value * 100) / 100 + anchors.verticalCenter: parent.verticalCenter + font.family: "Libre Baskerville" + font.pointSize: 12 + font.italic: true + verticalAlignment: Text.AlignVCenter + } + } +} diff --git a/ScreenPlay/qml/Installed/Sidebar.qml b/ScreenPlay/qml/Installed/Sidebar.qml index cd16b588..cf3e9c9d 100644 --- a/ScreenPlay/qml/Installed/Sidebar.qml +++ b/ScreenPlay/qml/Installed/Sidebar.qml @@ -355,7 +355,8 @@ Item { installedListModel.absoluteStoragePath + "/" + activeScreen, installedListModel.get(activeScreen).screenPreview, (Math.round(sliderVolume.value * 100) / 100), - settingsComboBox.model.get(settingsComboBox.currentIndex).text.toString()) + settingsComboBox.model.get(settingsComboBox.currentIndex).text.toString(), + type) sidebar.state = "inactive" } else if (type === "widget") { screenPlay.createWidget( diff --git a/ScreenPlay/qml/Monitors.qml b/ScreenPlay/qml/Monitors.qml index 527daf7c..6820f3ed 100644 --- a/ScreenPlay/qml/Monitors.qml +++ b/ScreenPlay/qml/Monitors.qml @@ -4,16 +4,19 @@ import QtGraphicalEffects 1.0 import QtQuick.Controls.Material 2.2 import QtQuick.Layouts 1.3 +import "Controls/" as SP + Item { id: monitors state: "inactive" focus: true property string activeMonitorName: "" + property int activeMonitorIndex onStateChanged: { bgMouseArea.focus = monitors.state == "active" ? true : false - if(monitors.state === "active"){ + if (monitors.state === "active") { screenPlay.requestProjectSettingsListModelAt(0) } } @@ -85,17 +88,27 @@ Item { availableHeight: 150 onRequestProjectSettings: { // This will return in the connection with target: screenPlay - print(at) screenPlay.requestProjectSettingsListModelAt(at) + activeMonitorIndex = at } Connections { target: screenPlay onProjectSettingsListModelFound: { - print("found") gridView.model = li + // TODO via states + if (type == "video") { + videoControlWrapper.z = 10 + gridView.z = 0 + videoControlWrapper.visible = true + gridView.visible = false + } else { + videoControlWrapper.visible = false + gridView.visible = true + videoControlWrapper.z = 0 + gridView.z = 10 + } } onProjectSettingsListModelNotFound: { - print("not found") gridView.model = null } } @@ -118,8 +131,26 @@ Item { } } } + Column { + id: videoControlWrapper + anchors { + top: parent.top + topMargin: 60 + right: parent.right + bottom: parent.bottom + margins: 30 + left: itmLeftWrapper.right + } - + SP.Slider { + headline: qsTr("Volume") + onValueChanged: screenPlay.setWallpaperValue(activeMonitorIndex,"volume", value) + } + SP.Slider { + headline: qsTr("Playback rate") + onValueChanged: screenPlay.setWallpaperValue(activeMonitorIndex,"playbackRate", value) + } + } GridView { id: gridView @@ -246,3 +277,8 @@ Item { } ] } + +/*##^## Designer { + D{i:0;autoSize:true;height:500;width:1000} +} + ##^##*/ diff --git a/ScreenPlay/src/screenplay.cpp b/ScreenPlay/src/screenplay.cpp index 6f62d1a7..5ca3422b 100644 --- a/ScreenPlay/src/screenplay.cpp +++ b/ScreenPlay/src/screenplay.cpp @@ -8,10 +8,9 @@ ScreenPlay::ScreenPlay(InstalledListModel* ilm, Settings* set, MonitorListModel* m_mlm = mlm; m_qGuiApplication = qGuiApplication; m_sdkc = sdkc; - } -void ScreenPlay::createWallpaper(int monitorIndex, QUrl absoluteStoragePath, QString previewImage, float volume, QString fillMode) +void ScreenPlay::createWallpaper(int monitorIndex, QUrl absoluteStoragePath, QString previewImage, float volume, QString fillMode, QString type) { ProjectFile project; @@ -25,7 +24,7 @@ void ScreenPlay::createWallpaper(int monitorIndex, QUrl absoluteStoragePath, QSt m_settings->increaseActiveWallpaperCounter(); QVector tmpMonitorIndex; tmpMonitorIndex.append(monitorIndex); - m_screenPlayWallpaperList.append(QSharedPointer(new ScreenPlayWallpaper(tmpMonitorIndex, absoluteStoragePath.toString(), previewImage, volume, fillMode, this))); + m_screenPlayWallpaperList.append(QSharedPointer(new ScreenPlayWallpaper(tmpMonitorIndex, absoluteStoragePath.toString(), previewImage, volume, fillMode, type, this))); m_mlm->setWallpaperActiveMonitor(m_qGuiApplication->screens().at(monitorIndex), absoluteStoragePath.toString() + "/" + previewImage); } @@ -54,7 +53,8 @@ void ScreenPlay::requestProjectSettingsListModelAt(int index) { for (int i = 0; i < m_screenPlayWallpaperList.count(); ++i) { if (m_screenPlayWallpaperList.at(i).data()->screenNumber().at(0) == index) { - emit projectSettingsListModelFound(m_screenPlayWallpaperList.at(i).data()->projectSettingsListModel().data()); + emit projectSettingsListModelFound(m_screenPlayWallpaperList.at(i).data()->projectSettingsListModel().data(), + m_screenPlayWallpaperList.at(i).get()->type()); return; } } @@ -80,13 +80,19 @@ void ScreenPlay::setWallpaperValue(int at, QString key, QString value) for (int i = 0; i < m_screenPlayWallpaperList.count(); ++i) { if (m_screenPlayWallpaperList.at(i).data()->screenNumber().at(0) == at) { - m_sdkc->setWallpaperValue(m_screenPlayWallpaperList.at(i).data()->appID(), key, value); return; } } } +void ScreenPlay::setAllWallpaperValue(QString key, QString value) +{ + for (int i = 0; i < m_screenPlayWallpaperList.count(); ++i) { + m_sdkc->setWallpaperValue(m_screenPlayWallpaperList.at(i).data()->appID(), key, value); + } +} + void ScreenPlay::removeWallpaperAt(int at) { for (int i = 0; i < m_screenPlayWallpaperList.length(); ++i) { @@ -102,7 +108,7 @@ void ScreenPlay::removeWallpaperAt(int at) QVector ScreenPlay::getMonitorByAppID(QString appID) { for (int i = 0; i < m_screenPlayWallpaperList.length(); ++i) { - if(m_screenPlayWallpaperList.at(i).data()->appID() == appID){ + if (m_screenPlayWallpaperList.at(i).data()->appID() == appID) { return m_screenPlayWallpaperList.at(i).data()->screenNumber(); } } diff --git a/ScreenPlay/src/screenplay.h b/ScreenPlay/src/screenplay.h index a2856916..39ba3301 100644 --- a/ScreenPlay/src/screenplay.h +++ b/ScreenPlay/src/screenplay.h @@ -39,15 +39,16 @@ public: signals: void allWallpaperRemoved(); - void projectSettingsListModelFound(ProjectSettingsListModel* li); + void projectSettingsListModelFound(ProjectSettingsListModel* li,QString type); void projectSettingsListModelNotFound(); public slots: - void createWallpaper(int monitorIndex, QUrl absoluteStoragePath, QString previewImage, float volume, QString fillMode); + void createWallpaper(int monitorIndex, QUrl absoluteStoragePath, QString previewImage, float volume, QString fillMode, QString type); void createWidget(QUrl absoluteStoragePath, QString previewImage); void removeAllWallpaper(); void requestProjectSettingsListModelAt(int index); void setWallpaperValue(int at, QString key, QString value); + void setAllWallpaperValue(QString key, QString value); void removeWallpaperAt(int at); QVector getMonitorByAppID(QString appID); QString generateID(); @@ -64,13 +65,15 @@ class ScreenPlayWallpaper : public QObject { Q_PROPERTY(QString projectPath READ projectPath WRITE setProjectPath NOTIFY projectPathChanged) Q_PROPERTY(QString previewImage READ previewImage WRITE setPreviewImage NOTIFY previewImageChanged) Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged) + Q_PROPERTY(QString type READ type WRITE setType NOTIFY typeChanged) public: - explicit ScreenPlayWallpaper(QVector screenNumber, QString projectPath, QString previewImage, float volume, QString fillMode, ScreenPlay* parent) + explicit ScreenPlayWallpaper(QVector screenNumber, QString projectPath, QString previewImage, float volume, QString fillMode, QString type, ScreenPlay* parent) { m_screenNumber = screenNumber; m_projectPath = projectPath; m_previewImage = previewImage; + m_type = type; // We do not want to parent the QProcess because the // Process manages its lifetime and destructing (animation) itself @@ -88,7 +91,7 @@ public: proArgs.append(QString::number(m_screenNumber.at(0))); proArgs.append(m_projectPath); m_appID = parent->generateID(); - proArgs.append("appID="+m_appID); + proArgs.append("appID=" + m_appID); proArgs.append(parent->m_settings->decoder()); proArgs.append(QString::number(volume)); proArgs.append(fillMode); @@ -98,6 +101,11 @@ public: m_projectSettingsListModel = QSharedPointer(new ProjectSettingsListModel(projectPath + "/project.json")); } + ~ScreenPlayWallpaper() + { + qDebug() << "Destructing wallpaper " << m_appID; + } + QSharedPointer projectSettingsListModel() const; QVector screenNumber() const @@ -120,6 +128,11 @@ public: return m_appID; } + QString type() const + { + return m_type; + } + signals: void screenNumberChanged(QVector screenNumber); void projectPathChanged(QString projectPath); @@ -127,6 +140,8 @@ signals: void projectSettingsListModelAt(ProjectSettingsListModel* li); void appIDChanged(QString appID); + void typeChanged(QString type); + public slots: void setScreenNumber(QVector screenNumber) @@ -165,14 +180,25 @@ public slots: emit appIDChanged(m_appID); } + void setType(QString type) + { + if (m_type == type) + return; + + m_type = type; + emit typeChanged(m_type); + } + private: QVector m_screenNumber; QString m_projectPath; QString m_previewImage; QProcess* m_process; + QSharedPointer m_projectSettingsListModel; QString m_appID; + QString m_type; }; class ScreenPlayWidget : public QObject { @@ -198,7 +224,6 @@ public: proArgs.append(m_appID); m_process->setArguments(proArgs); - if (fullPath.endsWith(".exe")) { m_process->setProgram(fullPath); } else if (fullPath.endsWith(".qml")) { diff --git a/ScreenPlaySDK/screenplaysdk.cpp b/ScreenPlaySDK/screenplaysdk.cpp index e0b90f52..9964525d 100644 --- a/ScreenPlaySDK/screenplaysdk.cpp +++ b/ScreenPlaySDK/screenplaysdk.cpp @@ -17,7 +17,7 @@ void redirectMessageOutputToMainWindow(QtMsgType type, const QMessageLogContext& switch (type) { case QtDebugMsg: - localMsg = "Debug " /*+ QByteArray::fromStdString(global_sdkPtr->contentType().toStdString()) + " "*/ + localMsg; + localMsg = "SDK START: " /*+ QByteArray::fromStdString(global_sdkPtr->contentType().toStdString()) + " "*/ + localMsg + " SDK END!"; global_sdkPtr->redirectMessage(localMsg); break; case QtInfoMsg: @@ -74,6 +74,7 @@ void ScreenPlaySDK::bytesWritten(qint64 bytes) void ScreenPlaySDK::readyRead() { QString tmp = m_socket.readAll(); + qDebug() << "SDK MESSAGE RECEIVED: " << tmp; QJsonParseError err; auto doc = QJsonDocument::fromJson(QByteArray::fromStdString(tmp.toStdString()), &err); @@ -101,5 +102,6 @@ void ScreenPlaySDK::redirectMessage(QByteArray& msg) if (isConnected()) { m_socket.write(msg); m_socket.waitForBytesWritten(); + } } diff --git a/ScreenPlaySDK/screenplaysdk.h b/ScreenPlaySDK/screenplaysdk.h index c23423c3..e3bc36c5 100644 --- a/ScreenPlaySDK/screenplaysdk.h +++ b/ScreenPlaySDK/screenplaysdk.h @@ -41,14 +41,13 @@ public: return m_appID; } - public slots: void connected(); void disconnected(); void bytesWritten(qint64 bytes); void readyRead(); void error(QLocalSocket::LocalSocketError socketError); - void redirectMessage(QByteArray &msg); + void redirectMessage(QByteArray& msg); void setContentType(QString contentType) { @@ -86,9 +85,6 @@ public slots: m_socket.waitForBytesWritten(); } -private: - //qint64 writeData(const char *data, qint64 c) override; - signals: void incommingMessage(QString key, QString value); void incommingMessageError(QString msg); @@ -100,7 +96,7 @@ signals: void isConnectedChanged(bool isConnected); void appIDChanged(QString appID); - void newRedirectMessage(QByteArray &msg); + void newRedirectMessage(QByteArray& msg); private: QLocalSocket m_socket; diff --git a/ScreenPlayWindow/main.qml b/ScreenPlayWindow/main.qml index 5a43f0ee..74803506 100644 --- a/ScreenPlayWindow/main.qml +++ b/ScreenPlayWindow/main.qml @@ -11,7 +11,7 @@ Rectangle { //TODO } - onMessageReceived: { + onQmlSceneValueReceived: { var obj2 = 'import QtQuick 2.9; Item {Component.onCompleted: loader.item.' + key + ' = ' + value + '; }' var newObject = Qt.createQmlObject(obj2.toString(), root, "err") diff --git a/ScreenPlayWindow/src/SPWmainwindow.cpp b/ScreenPlayWindow/src/SPWmainwindow.cpp index 398dd82c..73697617 100644 --- a/ScreenPlayWindow/src/SPWmainwindow.cpp +++ b/ScreenPlayWindow/src/SPWmainwindow.cpp @@ -141,6 +141,59 @@ void MainWindow::init() #endif } +void MainWindow::messageReceived(QString key, QString value) +{ + if (key == "decoder") { + setDecoder(value); + return; + } + + if (key == "volume") { + bool ok = false; + auto tmp = value.toFloat(&ok); + + if (ok) + setVolume(tmp); + else + qDebug() << "ERROR with " << key << " " << value; + + return; + } + + if (key == "fillmode") { + setFillMode(value); + return; + } + + if (key == "isPlaying") { + if (value == "true") + setIsPlaying(true); + else + setIsPlaying(false); + return; + } + + if (key == "playbackRate") { + bool ok = false; + auto tmp = value.toFloat(&ok); + + if (ok) + setPlaybackRate(tmp); + else + qDebug() << "ERROR with " << key << " " << value; + return; + } + + if (key == "loops") { + if (value == "true") + setLoops(true); + else + setLoops(false); + return; + } + + emit qmlSceneValueReceived(key, value); +} void MainWindow::destroyThis() { diff --git a/ScreenPlayWindow/src/SPWmainwindow.h b/ScreenPlayWindow/src/SPWmainwindow.h index 5ddfa944..19283ce8 100644 --- a/ScreenPlayWindow/src/SPWmainwindow.h +++ b/ScreenPlayWindow/src/SPWmainwindow.h @@ -101,6 +101,7 @@ public: public slots: void destroyThis(); void init(); + void messageReceived(QString key, QString value); QString getApplicationPath() { @@ -220,10 +221,9 @@ signals: void loopsChanged(bool loops); void volumeChanged(float volume); void fullContentPathChanged(QString fullContentPath); - void messageReceived(QString key, QString value); void isPlayingChanged(bool isPlaying); void playbackRateChanged(float playbackRate); - + void qmlSceneValueReceived(QString key, QString value); void decoderChanged(QString decoder); private: