diff options
Diffstat (limited to 'examples/multimedia/video/mediaplayer/controls/SettingsPopup.qml')
-rw-r--r-- | examples/multimedia/video/mediaplayer/controls/SettingsPopup.qml | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/examples/multimedia/video/mediaplayer/controls/SettingsPopup.qml b/examples/multimedia/video/mediaplayer/controls/SettingsPopup.qml new file mode 100644 index 000000000..0f24c8503 --- /dev/null +++ b/examples/multimedia/video/mediaplayer/controls/SettingsPopup.qml @@ -0,0 +1,204 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls +import QtMultimedia + +Popup { + id: settingsController + focus: true + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside + + background: Rectangle { + color: "#F6F6F6" + } + + + required property MetadataInfo metadataInfo + required property MediaPlayer mediaPlayer + required property TracksInfo audioTracksInfo + required property TracksInfo videoTracksInfo + required property TracksInfo subtitleTracksInfo + + property int vPadding: 20 + property int hPadding: 26 + property bool landscapeSettingsPopup: root.width >= settingsLayout.width + metadataLayout.width + 2 * hPadding + 20 + 24 + + padding: { + top: vPadding + bottom: vPadding + left: hPadding + right: hPadding + } + + Flickable { + id: flickable + implicitWidth: mainLayout.width + implicitHeight: landscapeSettingsPopup ? 200 : 340 + contentWidth: mainLayout.width + contentHeight: mainLayout.height + flickableDirection: Flickable.VerticalFlick + clip: true + + GridLayout { + id: mainLayout + + columns: landscapeSettingsPopup ? 2 : 1 + columnSpacing: 24 + rowSpacing: 24 + + ColumnLayout { + id: settingsLayout + spacing: 16 + Layout.alignment: Qt.AlignTop + + Label { + id: settingsLabel + text: qsTr("Settings") + font.pixelSize: 16 + font.bold: true + } + + GridLayout { + id: gridLayout + columns: 2 + rowSpacing: 16 + columnSpacing: 16 + + component CustomComboBox: ComboBox { + required property TracksInfo tracksInfo + + model: tracksInfo.model + enabled: model.count > 0 + textRole: "data" + currentIndex: model.count > 0 ? 0 : -1 + + onActivated: { + //! [1] + settingsController.mediaPlayer.pause() + tracksInfo.selectedTrack = currentIndex + settingsController.mediaPlayer.play() + //! [1] + } + } + + Label { + text: qsTr("Playback Speed") + Layout.fillWidth: true + font.pixelSize: 14 + } + + ComboBox { + id: rateCb + model: ["0.25", "0.5", "0.75", "Normal", "1.25", "1.5", "1.75", "2"] + currentIndex: 3 + + onCurrentIndexChanged: { + //! [0] + settingsController.mediaPlayer.playbackRate = (currentIndex + 1) * 0.25 + //! [0] + } + } + + Label { + text: qsTr("Audio Tracks") + enabled: audioCb.enabled + Layout.fillWidth: true + font.pixelSize: 14 + } + + CustomComboBox { + id: audioCb + tracksInfo: settingsController.audioTracksInfo + + } + + Label { + text: qsTr("Video Tracks") + enabled: videoCb.enabled + Layout.fillWidth: true + font.pixelSize: 14 + } + + CustomComboBox { + id: videoCb + tracksInfo: settingsController.videoTracksInfo + } + + Label { + text: qsTr("Subtitle Tracks") + enabled: subtitlesCb.enabled + font.pixelSize: 14 + } + + CustomComboBox { + id: subtitlesCb + tracksInfo: settingsController.subtitleTracksInfo + } + } + } + + ColumnLayout { + id: metadataLayout + spacing: 16 + Layout.alignment: Qt.AlignTop + + Label { + id: metadataLabel + text: qsTr("Metadata") + font.pixelSize: 16 + font.bold: true + } + + Rectangle { + id: metadataRect + implicitWidth: 240 + implicitHeight: metadataList.height + border.color: "#8E8E93" + radius: 6 + + Column { + id: metadataList + visible: settingsController.metadataInfo.count > 0 + + padding: 10 + Repeater { + Row { + spacing: metadataList.padding + Text { + text: model.name + font.bold: true + width: (metadataRect.width - 3 * metadataList.padding) / 2 + horizontalAlignment: Text.AlignRight + wrapMode: Text.WordWrap + font.pixelSize: 12 + } + + Text { + text: model.value + width: (metadataRect.width - 3 * metadataList.padding) / 2 + horizontalAlignment: Text.AlignLeft + anchors.verticalCenter: parent.verticalCenter + wrapMode: Text.WrapAnywhere + font.pixelSize: 12 + } + } + model: settingsController.metadataInfo.metadata + } + } + + Text { + id: metadataNoList + visible: settingsController.metadataInfo.count === 0 + anchors.centerIn: parent + text: qsTr("No metadata present") + font.pixelSize: 14 + } + } + } + } + } + +} |