Warning, /multimedia/elisa/src/qml/MediaTrackMetadataForm.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2017 (c) Alexander Stippich <a.stippich@gmx.net>
0003 SPDX-FileCopyrightText: 2018 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
0004 SPDX-FileCopyrightText: 2020 (c) Devin Lin <espidev@gmail.com>
0005
0006 SPDX-License-Identifier: LGPL-3.0-or-later
0007 */
0008
0009
0010 import QtQuick 2.7
0011 import QtQuick.Controls 2.2
0012 import QtQuick.Window 2.2
0013 import QtQml.Models 2.2
0014 import QtQuick.Layouts 1.2
0015 import QtQuick.Dialogs as Dialogs
0016
0017 import org.kde.kirigami 2.13 as Kirigami
0018 import org.kde.elisa 1.0
0019
0020 Kirigami.FormLayout {
0021 id: form
0022 property var metadataModel
0023
0024 property var modelType
0025 property bool showDeleteButton
0026 property bool isCreating
0027 property bool isModifying
0028 property bool canAddMoreMetadata
0029 property alias imageItem: imageParent
0030 property alias showImage: imageParent.visible
0031
0032 signal close()
0033
0034 function apply() {
0035 metadataModel.saveData()
0036 isCreating = false
0037 isModifying = false
0038 }
0039
0040 function applyAndClose() {
0041 apply()
0042 close()
0043 }
0044
0045 function cancel() {
0046 metadataModel.resetData()
0047 isCreating = false
0048 isModifying = false
0049 }
0050
0051 function cancelAndClose() {
0052 cancel()
0053 close()
0054 }
0055
0056 function deleteItem() {
0057 ElisaApplication.musicManager.deleteElementById(modelType, metadataModel.databaseId)
0058 metadataModel.resetData() // Need this otherwise the closing dialog appears if the data has been modified
0059 close()
0060 }
0061
0062 readonly property Dialogs.MessageDialog dirtyClosingDialog: Dialogs.MessageDialog {
0063 id: dirtyClosingDialog
0064
0065 title: i18nc("@title:window", "Warning")
0066 text: i18nc("@info", 'You have unsaved changes. Do you want to apply the changes or discard them?')
0067 buttons: Dialogs.MessageDialog.Save | Dialogs.MessageDialog.Discard | Dialogs.MessageDialog.Cancel
0068
0069 onButtonClicked: (button, role) => {
0070 switch(button) {
0071 case Dialogs.MessageDialog.Save: {
0072 form.metadataModel.saveData()
0073 form.close()
0074 }
0075 case Dialogs.MessageDialog.Discard: {
0076 form.metadataModel.resetData()
0077 form.close()
0078 }
0079 }
0080 close()
0081 }
0082 }
0083
0084 Kirigami.InlineMessage {
0085 id: formInvalidNotification
0086
0087 text: i18nc("@label", "Data is not valid. %1", metadataModel.errorMessage)
0088 type: Kirigami.MessageType.Error
0089 showCloseButton: false
0090 visible: !metadataModel.isDataValid && metadataModel.isDirty
0091
0092 Layout.topMargin: Kirigami.Units.largeSpacing
0093 Layout.fillWidth: true
0094 Layout.rightMargin: Kirigami.Units.largeSpacing
0095 Layout.leftMargin: Kirigami.Units.largeSpacing
0096 }
0097
0098 Item {
0099 id: imageParent
0100 implicitHeight: elisaTheme.coverImageSize
0101 implicitWidth: elisaTheme.coverImageSize
0102
0103 ImageWithFallback {
0104 id: metadataImage
0105
0106 source: metadataModel.coverUrl
0107 fallback: Qt.resolvedUrl(elisaTheme.defaultAlbumImage)
0108
0109 sourceSize.width: elisaTheme.coverImageSize * Screen.devicePixelRatio
0110 sourceSize.height: elisaTheme.coverImageSize * Screen.devicePixelRatio
0111
0112 fillMode: Image.PreserveAspectFit
0113 anchors.fill: parent
0114 }
0115 }
0116
0117 // metadata rows
0118 Repeater {
0119 model: metadataModel
0120
0121 delegate: RowLayout {
0122 readonly property string formLabelText: i18nc("Track metadata form label, e.g. 'Artist:'", "%1:", model.name)
0123 // Make labels bold on mobile read-only mode to help differentiate label from metadata
0124 readonly property bool singleColumnPlainText: !form.wideMode && !form.isCreating && !form.isModifying
0125 Kirigami.FormData.label: singleColumnPlainText ? "<b>" + formLabelText + "</b>" : formLabelText
0126
0127 MediaTrackMetadataDelegate {
0128 index: model.index
0129 name: model.name
0130 display: model.display
0131 type: model.type
0132 isRemovable: model.isRemovable
0133
0134 onEdited: model.display = display
0135 readOnly: (!isModifying && !isCreating) || (metadataModel.isReadOnly || model.isReadOnly)
0136
0137 onDeleteField: metadataModel.removeData(model.index)
0138 Layout.minimumHeight: Kirigami.Units.gridUnit * 1.5
0139 }
0140 }
0141 }
0142
0143 // add tag row
0144 ComboBox {
0145 id: selectedField
0146 Kirigami.FormData.label: i18nc("@label:listbox", "Add new tag:")
0147 visible: isModifying && !metadataModel.isReadOnly && canAddMoreMetadata
0148
0149 textRole: "modelData"
0150 valueRole: "modelData"
0151
0152 model: metadataModel.extraMetadata
0153 enabled: metadataModel.extraMetadata.length
0154
0155 onActivated: metadataModel.addData(selectedField.currentValue)
0156 }
0157 }