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 }