Warning, /multimedia/kid3/src/qml/app/StringListEditPage.qml is written in an unsupported language. File is not indexed.
0001 /**
0002 * \file StringListEditPage.qml
0003 * Page to edit a list of strings.
0004 *
0005 * \b Project: Kid3
0006 * \author Urs Fleisch
0007 * \date 21 Feb 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
0028 Page {
0029 id: page
0030
0031 property alias model: listView.model
0032 property alias currentIndex: listView.currentIndex
0033 property alias count: listView.count
0034 property Dialog editDialog: textEditDialog
0035
0036 property var onAddClicked: function() {
0037 function modifyIfCompleted(ok) {
0038 editDialog.completed.disconnect(modifyIfCompleted)
0039 if (ok) {
0040 addElement(editDialog.getElement())
0041 }
0042 }
0043
0044 editDialog.setElement({name: ""})
0045 editDialog.completed.connect(modifyIfCompleted)
0046 editDialog.open()
0047 }
0048
0049 property var onEditClicked: function() {
0050 var idx = listView.currentIndex
0051 if (idx >= 0) {
0052 function modifyIfCompleted(ok) {
0053 editDialog.completed.disconnect(modifyIfCompleted)
0054 if (ok) {
0055 listView.model.set(idx, editDialog.getElement())
0056 }
0057 }
0058
0059 editDialog.setElement(listView.model.get(idx))
0060 editDialog.completed.connect(modifyIfCompleted)
0061 editDialog.open()
0062 }
0063 }
0064
0065 function addElement(element) {
0066 model.append(element)
0067 currentIndex = count - 1
0068 }
0069
0070 function setElements(lst) {
0071 listView.model.clear()
0072 for (var i = 0; i < lst.length; i++) {
0073 listView.model.append({"name": lst[i]})
0074 }
0075 }
0076
0077 function getElements() {
0078 var lst = []
0079 for (var i = 0; i < listView.model.count; i++) {
0080 lst.push(listView.model.get(i).name)
0081 }
0082 return lst
0083 }
0084
0085 title: qsTr("Edit")
0086
0087 Dialog {
0088 id: textEditDialog
0089
0090 signal completed(bool ok)
0091
0092 function setElement(element) {
0093 textLineEdit.text = element.name
0094 }
0095
0096 function getElement() {
0097 return {name: textLineEdit.text}
0098 }
0099
0100 modal: true
0101 width: Math.min(parent.width, constants.gu(70))
0102 x: (parent.width - width) / 2
0103 y: 0
0104 standardButtons: Dialog.Ok | Dialog.Cancel
0105
0106 TextField {
0107 id: textLineEdit
0108 width: parent.width
0109 selectByMouse: true
0110 }
0111
0112 onAccepted: completed(true)
0113 onRejected: completed(false)
0114 }
0115
0116 header: ToolBar {
0117 IconButton {
0118 id: prevButton
0119 anchors.left: parent.left
0120 anchors.verticalCenter: parent.verticalCenter
0121 iconName: "go-previous"
0122 color: titleLabel.color
0123 width: visible ? height : 0
0124 visible: page.StackView.view && page.StackView.view.depth > 1
0125 onClicked: page.StackView.view.pop()
0126 }
0127 Label {
0128 id: titleLabel
0129 anchors.left: prevButton.right
0130 anchors.right: parent.right
0131 anchors.verticalCenter: parent.verticalCenter
0132 clip: true
0133 text: page.title
0134 }
0135 }
0136
0137 RowLayout {
0138 anchors {
0139 fill: parent
0140 margins: constants.margins
0141 }
0142 ListView {
0143 id: listView
0144 Layout.fillWidth: true
0145 Layout.fillHeight: true
0146 clip: true
0147 model: ListModel {}
0148 delegate: Standard {
0149 text: name
0150 highlighted: ListView.view.currentIndex === index
0151 onClicked: ListView.view.currentIndex = index
0152 background: Rectangle {
0153 color: highlighted ? constants.highlightColor : "transparent"
0154 }
0155 }
0156 }
0157 ColumnLayout {
0158 Layout.alignment: Qt.AlignTop
0159 Label {
0160 id: invisibleLabel
0161 visible: false
0162 }
0163 IconButton {
0164 iconName: "add"
0165 color: invisibleLabel.color
0166 onClicked: onAddClicked()
0167 }
0168 IconButton {
0169 iconName: "go-up"
0170 color: invisibleLabel.color
0171 onClicked: {
0172 var idx = listView.currentIndex
0173 if (idx > 0) {
0174 listView.model.move(idx, idx - 1, 1)
0175 listView.currentIndex = idx - 1
0176 }
0177 }
0178 }
0179 IconButton {
0180 iconName: "go-down"
0181 color: invisibleLabel.color
0182 onClicked: {
0183 var idx = listView.currentIndex
0184 if (idx >= 0 && idx < listView.model.count - 1) {
0185 listView.model.move(idx, idx + 1, 1)
0186 listView.currentIndex = idx + 1
0187 }
0188 }
0189 }
0190 IconButton {
0191 iconName: "edit"
0192 color: invisibleLabel.color
0193 onClicked: onEditClicked()
0194 }
0195 IconButton {
0196 iconName: "remove"
0197 color: invisibleLabel.color
0198 onClicked: {
0199 var idx = listView.currentIndex
0200 if (idx >= 0) {
0201 listView.model.remove(idx, 1)
0202 }
0203 }
0204 }
0205 }
0206 }
0207 }