Warning, /multimedia/kid3/src/qml/app/ImportProfilesEditPage.qml is written in an unsupported language. File is not indexed.
0001 /**
0002 * \file ImportProfilesEditPage.qml
0003 * Page to edit import profiles.
0004 *
0005 * \b Project: Kid3
0006 * \author Urs Fleisch
0007 * \date 9 Mar 2019
0008 *
0009 * Copyright (C) 2019 Urs Fleisch
0010 *
0011 * This program is free software; you can redistribute it and/or modify
0012 * it under the terms of the GNU Lesser General Public License as published by
0013 * the Free Software Foundation; version 3.
0014 *
0015 * This program is distributed in the hope that it will be useful,
0016 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0018 * GNU Lesser General Public License for more details.
0019 *
0020 * You should have received a copy of the GNU Lesser General Public License
0021 * along with this program. If not, see <http://www.gnu.org/licenses/>.
0022 */
0023
0024 import QtQuick 2.11
0025 import QtQuick.Layouts 1.11
0026 import QtQuick.Controls 2.4
0027 import Kid3 1.1 as Kid3
0028
0029 StringListEditPage {
0030 id: page
0031
0032 signal finished()
0033
0034 title: qsTr("Profiles")
0035
0036 StringListEditPage {
0037 id: editProfilePage
0038
0039 property string name
0040
0041 editDialog: profileEditDialog
0042 title: qsTr("Profile") + " " + name
0043 visible: false
0044
0045 function setElements(sources) {
0046 model.clear()
0047 for (var i = 0; i < sources.length; i++) {
0048 var src = sources[i]
0049 model.append({name: sourceToString(src), sources: src})
0050 }
0051 }
0052
0053 function getElements() {
0054 var sources = []
0055 for (var i = 0; i < model.count; i++) {
0056 sources.push(model.get(i).sources)
0057 }
0058 return sources
0059 }
0060
0061 function sourceToString(source) {
0062 var parts = source.split(":")
0063 var server = parts[0] || ""
0064 var accuracy = parts[1] || ""
0065 var enabledStr = parts[2] || ""
0066 var result = server
0067 if (result) {
0068 result += ", " + qsTr("Accuracy") + " " + accuracy
0069 var enabled = []
0070 if (enabledStr.indexOf("S") !== -1) {
0071 enabled.push(qsTr("Standard Tags"))
0072 }
0073 if (enabledStr.indexOf("A") !== -1) {
0074 enabled.push(qsTr("Additional Tags"))
0075 }
0076 if (enabledStr.indexOf("C") !== -1) {
0077 enabled.push(qsTr("Cover Art"))
0078 }
0079 if (enabled.length > 0) {
0080 result += ", "
0081 result += enabled.join(", ")
0082 }
0083 }
0084 return result
0085 }
0086
0087 Dialog {
0088 id: profileEditDialog
0089
0090 signal completed(bool ok)
0091
0092 function setElement(element) {
0093 var parts = element.sources ? element.sources.split(":") : [""]
0094 serverComboBox.currentIndex = serverComboBox.find(parts[0])
0095 accuracyLineEdit.text = parts[1] || ""
0096 var enabledStr = parts[2] || ""
0097 standardTagsCheckBox.checked = enabledStr.indexOf("S") !== -1
0098 additionalTagsCheckBox.checked = enabledStr.indexOf("A") !== -1
0099 coverArtCheckBox.checked = enabledStr.indexOf("C") !== -1
0100 }
0101
0102 function getElement() {
0103 var sources = serverComboBox.currentText + ":" +
0104 accuracyLineEdit.text + ":"
0105 if (standardTagsCheckBox.checked) {
0106 sources += "S"
0107 }
0108 if (additionalTagsCheckBox.checked) {
0109 sources += "A"
0110 }
0111 if (coverArtCheckBox.checked) {
0112 sources += "C"
0113 }
0114 return {name: editProfilePage.sourceToString(sources),
0115 sources: sources}
0116 }
0117
0118 modal: true
0119 width: Math.min(parent.width, constants.gu(70))
0120 x: (parent.width - width) / 2
0121 y: 0
0122 standardButtons: Dialog.Ok | Dialog.Cancel
0123
0124 GridLayout {
0125 columns: 2
0126 width: parent.width
0127 Label {
0128 text: qsTr("Server")
0129 }
0130 ComboBox {
0131 id: serverComboBox
0132 model: app.getServerImporterNames()
0133 Layout.fillWidth: true
0134 }
0135 Label {
0136 text: qsTr("Accuracy")
0137 }
0138 TextField {
0139 id: accuracyLineEdit
0140 validator: IntValidator{
0141 bottom: 0
0142 top: 100
0143 }
0144 selectByMouse: true
0145 Layout.fillWidth: true
0146 }
0147 CheckBox {
0148 id: standardTagsCheckBox
0149 text: qsTr("Standard Tags")
0150 Layout.columnSpan: 2
0151 }
0152 CheckBox {
0153 id: additionalTagsCheckBox
0154 text: qsTr("Additional Tags")
0155 Layout.columnSpan: 2
0156 }
0157 CheckBox {
0158 id: coverArtCheckBox
0159 text: qsTr("Cover Art")
0160 Layout.columnSpan: 2
0161 }
0162 }
0163
0164 onAccepted: completed(true)
0165 onRejected: completed(false)
0166 }
0167
0168 StackView.onActivated: {
0169 var idx = page.currentIndex
0170 var srcStr = ""
0171 if (idx >= 0 && idx < page.model.count) {
0172 var element = page.model.get(idx)
0173 name = element.name || ""
0174 srcStr = element.sources || ""
0175 } else {
0176 name = ""
0177 srcStr = ""
0178 }
0179 setElements(srcStr.split(";"))
0180 }
0181 StackView.onDeactivated: {
0182 var idx = page.currentIndex
0183 if (idx >= 0 && idx < page.model.count) {
0184 var element = page.model.get(idx)
0185 if (element.name === name) {
0186 element.sources = getElements().join(";")
0187 page.model.set(idx, element)
0188 page.saveModel()
0189 }
0190 }
0191 }
0192 }
0193
0194 function setElements(namesSources) {
0195 var names = namesSources[0]
0196 var sources = namesSources[1]
0197 model.clear()
0198 for (var i = 0; i < names.length; i++) {
0199 model.append({name: names[i], sources: sources[i]})
0200 }
0201 }
0202
0203 function getElements() {
0204 var names = []
0205 var sources = []
0206 for (var i = 0; i < model.count; i++) {
0207 names.push(model.get(i).name)
0208 sources.push(model.get(i).sources)
0209 }
0210 return [names, sources]
0211 }
0212
0213 function saveModel() {
0214 var namesSources = getElements()
0215 configs.batchImportConfig().profileNames = namesSources[0]
0216 configs.batchImportConfig().profileSources = namesSources[1]
0217 }
0218
0219 onEditClicked: function() {
0220 page.StackView.view.push(editProfilePage)
0221 }
0222 StackView.onActivated: {
0223 var idx = currentIndex
0224 setElements([configs.batchImportConfig().profileNames,
0225 configs.batchImportConfig().profileSources])
0226 currentIndex = idx
0227 }
0228 StackView.onDeactivated: {
0229 saveModel()
0230 finished()
0231 }
0232 }