Warning, /multimedia/kid3/src/qml/app/RenameDirectoryPage.qml is written in an unsupported language. File is not indexed.

0001 /**
0002  * \file RenameDirectoryPage.qml
0003  * Rename directory page.
0004  *
0005  * \b Project: Kid3
0006  * \author Urs Fleisch
0007  * \date 16 Feb 2015
0008  *
0009  * Copyright (C) 2015-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 Page {
0030   id: page
0031 
0032   property int tagMask: Kid3.Frame.TagV2V1
0033   property string format
0034   property bool create: false
0035   property variant formats
0036 
0037   title: qsTr("Rename Folder")
0038 
0039   Connections {
0040     target: app.dirRenamer
0041     onActionScheduled: {
0042       var str = ""
0043       for (var i = 0; i < actionStrs.length; ++i) {
0044         if (i > 0)
0045           str += "  "
0046         str += actionStrs[i]
0047         str += "\n"
0048       }
0049       textArea.text += str
0050       textArea.cursorPosition = textArea.text.length
0051     }
0052   }
0053 
0054   header: ToolBar {
0055     IconButton {
0056       id: prevButton
0057       anchors.left: parent.left
0058       anchors.verticalCenter: parent.verticalCenter
0059       iconName: "go-previous"
0060       color: titleLabel.color
0061       width: visible ? height : 0
0062       visible: page.StackView.view && page.StackView.view.depth > 1
0063       onClicked: page.StackView.view.pop()
0064     }
0065     Label {
0066       id: titleLabel
0067       anchors.left: prevButton.right
0068       anchors.right: startButton.left
0069       anchors.verticalCenter: parent.verticalCenter
0070       clip: true
0071       text: page.title
0072     }
0073     ToolButton {
0074       id: startButton
0075       anchors.right: parent.right
0076       anchors.margins: constants.margins
0077       text: qsTr("Start")
0078       onClicked: {
0079         var errorMsg = app.performRenameActions()
0080         if (errorMsg) {
0081           textArea.text += qsTr("Error") + ": " + errorMsg
0082           textArea.cursorPosition = textArea.text.length
0083         } else {
0084           page.refreshPreview()
0085         }
0086       }
0087     }
0088   }
0089 
0090   Grid {
0091     id: optionsGrid
0092     property int labelWidth: Math.max(actionLabel.implicitWidth,
0093                                       sourceLabel.implicitWidth,
0094                                       formatLabel.implicitWidth)
0095     property int valueWidth: width - labelWidth -spacing
0096     anchors {
0097       left: parent.left
0098       right: parent.right
0099       top: parent.top
0100       margins: constants.margins
0101     }
0102     columns: 2
0103     spacing: constants.spacing
0104     Label {
0105       id: actionLabel
0106       width: parent.labelWidth
0107       height: actionComboBox.height
0108       verticalAlignment: Text.AlignVCenter
0109       text: qsTr("Action:")
0110     }
0111     ComboBox {
0112       id: actionComboBox
0113       width: parent.valueWidth
0114       model: [ qsTr("Rename Folder"), qsTr("Create Folder") ]
0115       onCurrentIndexChanged: {
0116         page.create = currentIndex === 1
0117         page.refreshPreview()
0118       }
0119     }
0120     Label {
0121       id: sourceLabel
0122       width: parent.labelWidth
0123       height: sourceComboBox.height
0124       text: qsTr("Source:")
0125     }
0126     ComboBox {
0127       id: sourceComboBox
0128       width: parent.valueWidth
0129       model: [ qsTr("From Tag 2 and Tag 1"),
0130                qsTr("From Tag 1"),
0131                qsTr("From Tag 2"),
0132                qsTr("From Tag 3"),
0133                qsTr("All Tags")]
0134       onCurrentIndexChanged: {
0135         page.tagMask = [ Kid3.Frame.TagV2V1, Kid3.Frame.TagV1, Kid3.Frame.TagV2,
0136                          Kid3.Frame.TagV3, Kid3.Frame.TagVAll ][currentIndex] || 3
0137         page.refreshPreview()
0138       }
0139     }
0140     Label {
0141       id: formatLabel
0142       width: parent.labelWidth
0143       height: formatComboBox.height
0144       text: qsTr("Format:")
0145     }
0146     RowLayout {
0147       width: parent.valueWidth
0148       IconButton {
0149         iconName: "edit"
0150         color: formatLabel.color
0151         onClicked: page.StackView.view.push(editDirFormatsPage)
0152 
0153         StringListEditPage {
0154           id: editDirFormatsPage
0155           title: qsTr("Folder Name from Tag")
0156           visible: false
0157           StackView.onActivated: {
0158             setElements(page.formats)
0159             currentIndex = formatComboBox.currentIndex
0160           }
0161           StackView.onDeactivated: {
0162             page.formats = getElements()
0163             formatComboBox.currentIndex = currentIndex
0164             formatComboBox.currentIndexChanged()
0165           }
0166         }
0167       }
0168       ComboBox {
0169         id: formatComboBox
0170         Layout.fillWidth: true
0171         model: page.formats
0172         onCurrentIndexChanged: {
0173           page.format = model[currentIndex]
0174           page.refreshPreview()
0175         }
0176       }
0177     }
0178   }
0179 
0180   Label {
0181     id: previewLabel
0182     anchors {
0183       left: parent.left
0184       right: parent.right
0185       top: optionsGrid.bottom
0186       margins: constants.margins
0187     }
0188     text: qsTr("Preview")
0189   }
0190   ScrollView {
0191     id: flick
0192     anchors {
0193       left: parent.left
0194       right: parent.right
0195       top: previewLabel.bottom
0196       bottom: parent.bottom
0197       margins: constants.margins
0198     }
0199 
0200     TextArea {
0201       id: textArea
0202       readOnly: true
0203       selectByMouse: false
0204     }
0205   }
0206 
0207   function refreshPreview() {
0208     textArea.text = ""
0209     app.renameDirectory(script.toTagVersion(page.tagMask),
0210                         page.format, page.create)
0211   }
0212 
0213   StackView.onActivated: {
0214     refreshPreview()
0215   }
0216   StackView.onDeactivated: {
0217     app.dirRenamer.abort()
0218     configs.renDirConfig().dirFormats = formats
0219     configs.renDirConfig().dirFormat = format
0220   }
0221 
0222   Component.onCompleted: {
0223     var defaultFormats = configs.renDirConfig().dirFormats
0224     format = configs.renDirConfig().dirFormat
0225     var idx = defaultFormats.indexOf(format)
0226     if (idx === -1) {
0227       idx = defaultFormats.length
0228       defaultFormats.push(format)
0229     }
0230     formats = defaultFormats
0231     formatComboBox.currentIndex = idx
0232   }
0233 }