mirror of
https://gitlab.com/kelteseth/ScreenPlay.git
synced 2024-09-15 06:52:34 +02:00
Add more video controls
This commit is contained in:
parent
c4c24a1ae8
commit
a500911ad7
@ -115,5 +115,6 @@
|
||||
<file>legal/OFL.txt</file>
|
||||
<file>legal/OpenSSL.txt</file>
|
||||
<file>legal/Qt LGPLv3.txt</file>
|
||||
<file>qml/Controls/Slider.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
70
ScreenPlay/qml/Controls/Slider.qml
Normal file
70
ScreenPlay/qml/Controls/Slider.qml
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
}
|
@ -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(
|
||||
|
@ -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}
|
||||
}
|
||||
##^##*/
|
||||
|
@ -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<int> tmpMonitorIndex;
|
||||
tmpMonitorIndex.append(monitorIndex);
|
||||
m_screenPlayWallpaperList.append(QSharedPointer<ScreenPlayWallpaper>(new ScreenPlayWallpaper(tmpMonitorIndex, absoluteStoragePath.toString(), previewImage, volume, fillMode, this)));
|
||||
m_screenPlayWallpaperList.append(QSharedPointer<ScreenPlayWallpaper>(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<int> 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();
|
||||
}
|
||||
}
|
||||
|
@ -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<int> 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<int> screenNumber, QString projectPath, QString previewImage, float volume, QString fillMode, ScreenPlay* parent)
|
||||
explicit ScreenPlayWallpaper(QVector<int> 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<ProjectSettingsListModel>(new ProjectSettingsListModel(projectPath + "/project.json"));
|
||||
}
|
||||
|
||||
~ScreenPlayWallpaper()
|
||||
{
|
||||
qDebug() << "Destructing wallpaper " << m_appID;
|
||||
}
|
||||
|
||||
QSharedPointer<ProjectSettingsListModel> projectSettingsListModel() const;
|
||||
|
||||
QVector<int> screenNumber() const
|
||||
@ -120,6 +128,11 @@ public:
|
||||
return m_appID;
|
||||
}
|
||||
|
||||
QString type() const
|
||||
{
|
||||
return m_type;
|
||||
}
|
||||
|
||||
signals:
|
||||
void screenNumberChanged(QVector<int> 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<int> 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<int> m_screenNumber;
|
||||
QString m_projectPath;
|
||||
QString m_previewImage;
|
||||
QProcess* m_process;
|
||||
|
||||
QSharedPointer<ProjectSettingsListModel> 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")) {
|
||||
|
@ -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();
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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")
|
||||
|
@ -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()
|
||||
{
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user