Warning, /multimedia/kid3/src/qml/app/FrameDelegate.qml is written in an unsupported language. File is not indexed.
0001 /** 0002 * \file FrameDelegate.qml 0003 * Delegate for frame table. 0004 * 0005 * \b Project: Kid3 0006 * \author Urs Fleisch 0007 * \date 16 Feb 2015 0008 * 0009 * Copyright (C) 2015-2018 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.Controls 2.4 0026 import Kid3 1.1 as Kid3 0027 0028 ItemDelegate { 0029 id: frameDelegate 0030 0031 property int tagNr 0032 property QtObject frameModel: app.tag(tagNr).frameModel 0033 property QtObject genreModel: app.tag(tagNr).genreModel 0034 0035 highlighted: ListView.view.currentIndex === index 0036 onClicked: ListView.view.currentIndex = index 0037 0038 Component { 0039 id: textEdit 0040 Item { 0041 TextField { 0042 anchors.left: parent.left 0043 anchors.right: parent.right 0044 anchors.verticalCenter: parent.verticalCenter 0045 text: value 0046 selectByMouse: true 0047 focus: true 0048 onAccepted: { 0049 focus = false 0050 } 0051 onActiveFocusChanged: { 0052 if (!activeFocus) { 0053 script.setRoleData(frameModel, index, "value", text) 0054 } 0055 } 0056 Component.onDestruction: { 0057 // When another frame is edited, neither activeFocusChanged() nor 0058 // editingFinished() is signaled and the changes are lost. 0059 // Use this workaround to call onActiveFocusChanged() in this case. 0060 if (activeFocus) { 0061 focus = false 0062 } 0063 } 0064 } 0065 } 0066 } 0067 0068 Component { 0069 id: differentTextEdit 0070 Item { 0071 ComboBox { 0072 anchors.left: parent.left 0073 anchors.right: parent.right 0074 anchors.verticalCenter: parent.verticalCenter 0075 editable: true 0076 model: [String.fromCharCode(0x2260)].concat( 0077 script.getRoleData(frameModel, index, "completions")) 0078 onCurrentTextChanged: script.setRoleData(frameModel, index, "value", 0079 currentIndex === -1 && editText || currentText) 0080 Component.onCompleted: { 0081 currentIndex = model.indexOf(value) 0082 if (currentIndex === -1) { 0083 editText = value; 0084 } 0085 } 0086 } 0087 } 0088 } 0089 0090 Component { 0091 id: genreEdit 0092 Item { 0093 ComboBox { 0094 anchors.left: parent.left 0095 anchors.right: parent.right 0096 anchors.verticalCenter: parent.verticalCenter 0097 editable: tagNr !== Kid3.Frame.Tag_1 0098 textRole: "display" 0099 model: genreModel 0100 onCurrentTextChanged: script.setRoleData(frameModel, index, "value", 0101 editable && currentIndex === -1 && editText || currentText) 0102 Component.onCompleted: { 0103 currentIndex = genreModel.getRowForGenre(value) 0104 if (currentIndex === -1 && editable) { 0105 editText = value; 0106 } 0107 } 0108 Component.onDestruction: { 0109 // When another frame is edited, currentTextChanged() is not signaled 0110 // and the changes are lost. 0111 if (editable && editText && editText !== currentText) { 0112 script.setRoleData(frameModel, index, "value", editText) 0113 } 0114 } 0115 } 0116 } 0117 } 0118 0119 Component { 0120 id: valueText 0121 Item { 0122 Label { 0123 anchors.leftMargin: constants.margins 0124 anchors.fill: parent 0125 text: value 0126 verticalAlignment: Text.AlignVCenter 0127 clip: true 0128 } 0129 MouseArea { 0130 anchors.fill: parent 0131 onClicked: { 0132 frameDelegate.ListView.view.currentIndex = index 0133 } 0134 } 0135 } 0136 } 0137 0138 Rectangle { 0139 anchors.fill: parent 0140 color: highlighted ? constants.highlightColor : "transparent" 0141 0142 CheckBox { 0143 id: frameEnabledCheckBox 0144 anchors.left: parent.left 0145 anchors.verticalCenter: parent.verticalCenter 0146 onClicked: { 0147 // QTBUG-7932, assigning is not possible 0148 script.setRoleData(frameModel, index, "checkState", 0149 checked ? Qt.Checked : Qt.Unchecked) 0150 } 0151 // workaround for QTBUG-31627 0152 // should work with "checked: checkState === Qt.Checked" with Qt >= 5.3 0153 Binding { 0154 target: frameEnabledCheckBox 0155 property: "checked" 0156 value: checkState === Qt.Checked 0157 } 0158 } 0159 Rectangle { 0160 id: frameModifiedImage 0161 anchors.left: frameEnabledCheckBox.right 0162 anchors.verticalCenter: parent.verticalCenter 0163 color: truncated ? constants.errorColor : "transparent" 0164 width: constants.gu(2) 0165 height: constants.gu(2) 0166 Text { 0167 font.family: materialFont.name 0168 font.pixelSize: 16 0169 text: "M" 0170 color: frameNameLabel.color 0171 visible: modified 0172 } 0173 MouseArea { 0174 id: mouseArea 0175 anchors.fill: parent 0176 } 0177 ToolTip { 0178 parent: frameNameLabel 0179 visible: mouseArea.pressed && truncated && notice 0180 text: notice 0181 } 0182 } 0183 Label { 0184 id: frameNameLabel 0185 anchors.left: frameModifiedImage.right 0186 anchors.verticalCenter: parent.verticalCenter 0187 width: Math.min(constants.gu(11), 0188 (parent.width - constants.gu(4) - 2 * constants.margins) / 2) 0189 text: name 0190 clip: true 0191 color: highlighted 0192 ? constants.highlightedTextColor : constants.textColor 0193 } 0194 0195 Loader { 0196 anchors.left: frameNameLabel.right 0197 anchors.right: parent.right 0198 anchors.rightMargin: constants.margins 0199 height: parent.height 0200 sourceComponent: !frameDelegate.ListView.isCurrentItem 0201 ? valueText : frameType === Kid3.Frame.FT_Genre 0202 ? genreEdit : value === String.fromCharCode(0x2260) 0203 ? differentTextEdit : textEdit 0204 } 0205 0206 } 0207 }