Warning, /multimedia/elisa/src/qml/MediaTrackMetadataView.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 
0005    SPDX-License-Identifier: LGPL-3.0-or-later
0006  */
0007 
0008 import QtQuick 2.7
0009 import QtQuick.Controls 2.2
0010 import QtQuick.Window 2.2
0011 import QtQml.Models 2.2
0012 import QtQuick.Layouts 1.2
0013 import org.kde.kirigami 2.5 as Kirigami
0014 import org.kde.elisa 1.0
0015 
0016 Window {
0017     id: trackMetadata
0018 
0019     property url fileName
0020     property bool editableMetadata
0021     property bool showTrackFileName
0022 
0023     property alias modelType: metadataForm.modelType
0024     property alias isModifying: metadataForm.isModifying
0025     property alias isCreating: metadataForm.isCreating
0026     property alias canAddMoreMetadata: metadataForm.canAddMoreMetadata
0027     property alias showImage: metadataForm.showImage
0028     property alias showDeleteButton: metadataForm.showDeleteButton
0029 
0030     signal rejected()
0031 
0032     LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft
0033     LayoutMirroring.childrenInherit: true
0034 
0035     title: isCreating ? i18nc("@title:window", "Create a Radio") :
0036                         i18nc("@title:window", "View details")
0037 
0038     EditableTrackMetadataModel {
0039         id: realModel
0040 
0041         manager: ElisaApplication.musicManager
0042     }
0043 
0044     modality: Qt.NonModal
0045     flags: Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint
0046            | Qt.WindowCloseButtonHint | Qt.WindowMinimizeButtonHint | Qt.WindowMaximizeButtonHint
0047 
0048     color: myPalette.window
0049 
0050     minimumHeight: elisaTheme.metaDataDialogHeight
0051     minimumWidth: elisaTheme.metaDataDialogWidth
0052 
0053     // Close when pressing Esc key
0054     Shortcut {
0055         sequence: StandardKey.Cancel
0056         onActivated: close()
0057     }
0058 
0059     onClosing: close => {
0060         if (realModel.isDirty) {
0061             metadataForm.dirtyClosingDialog.open()
0062             close.accepted = false
0063         }
0064     }
0065 
0066     Kirigami.ScrollablePage {
0067         anchors.fill: parent
0068 
0069         MediaTrackMetadataForm {
0070             id: metadataForm
0071 
0072             metadataModel: realModel
0073             imageItem.anchors.horizontalCenter: horizontalCenter
0074 
0075             onClose: trackMetadata.close()
0076         }
0077 
0078         footer: ColumnLayout {
0079             anchors.left: parent.left
0080             anchors.right: parent.right
0081 
0082             Kirigami.Separator { Layout.fillWidth: true }
0083 
0084             // file location
0085             RowLayout {
0086                 id: fileNameRow
0087                 visible: showTrackFileName
0088                 Layout.topMargin: Kirigami.Units.largeSpacing
0089                 Layout.leftMargin: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
0090                 Layout.rightMargin: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
0091 
0092                 Kirigami.Icon {
0093                     readonly property int size: Kirigami.Units.iconSizes.roundedIconSize(fileNameLabel.height)
0094 
0095                     implicitWidth: size
0096                     implicitHeight: size
0097 
0098                     source: elisaTheme.folderIcon
0099                 }
0100 
0101                 LabelWithToolTip {
0102                     id: fileNameLabel
0103 
0104                     Layout.fillWidth: true
0105                     text: realModel.fileUrl
0106                     wrapMode: Text.Wrap
0107                     elide: Text.ElideRight
0108                 }
0109             }
0110 
0111             RowLayout {
0112                 Layout.topMargin: Kirigami.Units.largeSpacing
0113                 Layout.leftMargin: Kirigami.Units.smallSpacing
0114                 Layout.rightMargin: Kirigami.Units.smallSpacing
0115                 Layout.bottomMargin: Kirigami.Units.smallSpacing
0116                 spacing: Kirigami.Units.smallSpacing
0117 
0118                 DialogButtonBox {
0119                     id: deleteButtonBox
0120 
0121                     Layout.minimumHeight: implicitHeight
0122                     alignment: Qt.AlignLeft
0123 
0124                     visible: showDeleteButton && !isCreating
0125 
0126                     Button {
0127                         text: i18nc("@action:button", "Delete")
0128                         icon.name: 'delete'
0129                         DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole
0130                         onClicked: metadataForm.deleteItem()
0131                     }
0132                 }
0133 
0134                 DialogButtonBox {
0135                     Layout.fillWidth: true
0136                     Layout.minimumHeight: implicitHeight
0137                     alignment: Qt.AlignRight
0138 
0139                     visible: !isModifying && !isCreating
0140                     standardButtons: DialogButtonBox.Ok
0141 
0142                     onAccepted: metadataForm.close()
0143 
0144                     Button {
0145                         text: i18nc("@action:button", "Modify")
0146                         icon.name: 'document-edit'
0147                         DialogButtonBox.buttonRole: DialogButtonBox.ActionRole
0148                         onClicked: metadataForm.isModifying = true
0149                     }
0150                 }
0151 
0152                 DialogButtonBox {
0153                     Layout.fillWidth: true
0154                     Layout.minimumHeight: implicitHeight
0155                     alignment: Qt.AlignRight
0156 
0157                     visible: metadataForm.isModifying
0158                     standardButtons: DialogButtonBox.Apply | DialogButtonBox.Ok | DialogButtonBox.Cancel
0159 
0160                     onApplied: metadataForm.apply()
0161                     onAccepted: metadataForm.applyAndClose()
0162                     onRejected: metadataForm.cancel()
0163                 }
0164 
0165                 DialogButtonBox {
0166                     Layout.fillWidth: true
0167                     Layout.minimumHeight: implicitHeight
0168                     alignment: Qt.AlignRight
0169 
0170                     visible: metadataForm.isCreating
0171                     standardButtons: DialogButtonBox.Ok | DialogButtonBox.Cancel
0172 
0173                     onAccepted: metadataForm.applyAndClose()
0174                     onRejected: metadataForm.cancelAndClose()
0175                 }
0176             }
0177         }
0178     }
0179 
0180     Connections {
0181         target: ElisaApplication
0182 
0183         function onMusicManagerChanged() {
0184             if (isCreating) {
0185                 realModel.initializeForNewRadio()
0186             } else {
0187                 realModel.initializeByUrl(modelType, fileName)
0188             }
0189         }
0190     }
0191 
0192     Component.onCompleted: {
0193         if (ElisaApplication.musicManager) {
0194             if (isCreating) {
0195                 realModel.initializeForNewRadio()
0196             } else {
0197                 realModel.initializeByUrl(modelType, fileName)
0198             }
0199         }
0200     }
0201 }