Warning, /graphics/koko/src/qml/InfoDrawerSidebarBase.qml is written in an unsupported language. File is not indexed.
0001 /* SPDX-FileCopyrightText: 2021 Carl Schwan <carlschwan@kde.org> 0002 * SPDX-FileCopyrightText: 2021 Noah Davis <noahadvs@gmail.com> 0003 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0004 */ 0005 0006 import QtQuick 2.15 0007 import QtQml 2.15 0008 import QtQuick.Window 2.15 0009 import QtQuick.Templates 2.15 as T 0010 import QtQuick.Controls 2.15 as QQC2 0011 import QtQuick.Layouts 1.15 0012 import org.kde.kirigami 2.19 as Kirigami 0013 import org.kde.koko 0.1 as Koko 0014 import org.kde.coreaddons 1.0 as KCA 0015 import org.kde.koko.private 0.1 as KokoPrivate 0016 0017 Flickable { 0018 id: flickable 0019 required property Koko.Exiv2Extractor extractor 0020 implicitWidth: column.implicitWidth + leftMargin + rightMargin 0021 implicitHeight: contentHeight + topMargin + bottomMargin 0022 contentWidth: width - leftMargin - rightMargin 0023 contentHeight: column.implicitHeight 0024 leftMargin: Kirigami.Units.largeSpacing 0025 rightMargin: Kirigami.Units.largeSpacing 0026 topMargin: Kirigami.Units.largeSpacing 0027 bottomMargin: Kirigami.Units.largeSpacing 0028 clip: true 0029 boundsBehavior: Flickable.StopAtBounds 0030 pixelAligned: true 0031 Kirigami.WheelHandler { target: flickable } 0032 ColumnLayout { 0033 id: column 0034 property real availableWidth: width - leftPadding - rightPadding 0035 spacing: Kirigami.Units.smallSpacing 0036 width: parent.width 0037 focus: true 0038 Kirigami.Heading { 0039 Layout.fillWidth: true 0040 level: 4 0041 topPadding: Kirigami.Units.smallSpacing 0042 text: i18n("File Name") 0043 } 0044 QQC2.Label { 0045 Layout.fillWidth: true 0046 text: flickable.extractor.simplifiedPath 0047 wrapMode: Text.Wrap 0048 } 0049 Kirigami.Heading { 0050 Layout.fillWidth: true 0051 level: 4 0052 text: i18n("Dimension") 0053 topPadding: Kirigami.Units.smallSpacing 0054 visible: flickable.extractor.width > 0 && flickable.extractor.height > 0 0055 } 0056 QQC2.Label { 0057 Layout.fillWidth: true 0058 text: i18nc("dimensions", "%1 x %2", flickable.extractor.width, flickable.extractor.height) 0059 visible: flickable.extractor.width > 0 && flickable.extractor.height > 0 0060 } 0061 Kirigami.Heading { 0062 Layout.fillWidth: true 0063 level: 4 0064 text: i18n("Size") 0065 topPadding: Kirigami.Units.smallSpacing 0066 visible: flickable.extractor.size !== 0 0067 } 0068 QQC2.Label { 0069 Layout.fillWidth: true 0070 text: KCA.Format.formatByteSize(flickable.extractor.size, 2) 0071 visible: flickable.extractor.size !== 0 0072 } 0073 Kirigami.Heading { 0074 Layout.fillWidth: true 0075 level: 4 0076 text: i18n("Created") 0077 topPadding: Kirigami.Units.smallSpacing 0078 visible: flickable.extractor.time.length > 0 0079 } 0080 QQC2.Label { 0081 Layout.fillWidth: true 0082 text: flickable.extractor.time 0083 visible: flickable.extractor.time.length > 0 0084 } 0085 Kirigami.Heading { 0086 Layout.fillWidth: true 0087 level: 4 0088 text: i18n("Model") 0089 topPadding: Kirigami.Units.smallSpacing 0090 visible: flickable.extractor.model.length > 0 0091 } 0092 QQC2.Label { 0093 Layout.fillWidth: true 0094 text: flickable.extractor.model 0095 visible: flickable.extractor.model.length > 0 0096 } 0097 Kirigami.Heading { 0098 Layout.fillWidth: true 0099 level: 4 0100 text: i18n("Latitude") 0101 topPadding: Kirigami.Units.smallSpacing 0102 visible: flickable.extractor.gpsLatitude !== 0 0103 } 0104 QQC2.Label { 0105 Layout.fillWidth: true 0106 text: flickable.extractor.gpsLatitude 0107 visible: flickable.extractor.gpsLatitude !== 0 0108 } 0109 Kirigami.Heading { 0110 Layout.fillWidth: true 0111 level: 4 0112 text: i18n("Longitude") 0113 topPadding: Kirigami.Units.smallSpacing 0114 visible: flickable.extractor.gpsLongitude !== 0 0115 } 0116 QQC2.Label { 0117 Layout.fillWidth: true 0118 text: flickable.extractor.gpsLongitude 0119 visible: flickable.extractor.gpsLongitude !== 0 0120 } 0121 Kirigami.Heading { 0122 Layout.fillWidth: true 0123 level: 4 0124 text: i18n("Rating") 0125 topPadding: Kirigami.Units.smallSpacing 0126 } 0127 Row { 0128 // stars look disconnected with higher spacing 0129 spacing: Kirigami.Settings.isMobile ? Kirigami.Units.smallSpacing : Math.round(Kirigami.Units.smallSpacing / 4) 0130 Accessible.role: Accessible.List 0131 Accessible.name: i18n("Current rating %1", flickable.extractor.rating) 0132 Repeater { 0133 model: [ 1, 3, 5, 7, 9 ] 0134 QQC2.AbstractButton { 0135 activeFocusOnTab: true 0136 width: height 0137 height: Kirigami.Units.iconSizes.smallMedium 0138 text: i18n("Set rating to %1", ratingTo) 0139 property int ratingTo: { 0140 if (flickable.extractor.rating == modelData + 1) { 0141 return modelData 0142 } else if (flickable.extractor.rating == modelData) { 0143 return modelData - 1 0144 } else { 0145 return modelData + 1 0146 } 0147 } 0148 contentItem: Kirigami.Icon { 0149 source: flickable.extractor.rating > modelData ? "rating" : 0150 flickable.extractor.rating < modelData ? "rating-unrated" : "rating-half" 0151 width: parent.width 0152 height: parent.height 0153 color: (parent.focusReason == Qt.TabFocusReason || parent.focusReason == Qt.BacktabFocusReason) && parent.activeFocus ? Kirigami.Theme.highlightColor : Kirigami.Theme.textColor 0154 } 0155 onClicked: { 0156 flickable.extractor.rating = ratingTo 0157 } 0158 } 0159 } 0160 } 0161 Kirigami.Heading { 0162 Layout.fillWidth: true 0163 level: 4 0164 text: i18n("Description") 0165 topPadding: Kirigami.Units.smallSpacing 0166 } 0167 QQC2.TextArea { 0168 id: imageDescription 0169 text: flickable.extractor.description 0170 Layout.fillWidth: true 0171 verticalAlignment: Qt.AlignTop 0172 placeholderText: i18n("Image description…") 0173 KeyNavigation.priority: KeyNavigation.BeforeItem 0174 Keys.onTabPressed: nextItemInFocusChain().forceActiveFocus(Qt.TabFocusReason) 0175 onEditingFinished: { 0176 flickable.extractor.description = text 0177 } 0178 } 0179 Kirigami.Heading { 0180 Layout.fillWidth: true 0181 level: 4 0182 text: i18n("Tags") 0183 topPadding: Kirigami.Units.smallSpacing 0184 } 0185 RowLayout { 0186 id: tagInputLayout 0187 spacing: Kirigami.Units.smallSpacing 0188 Layout.fillWidth: true 0189 TagInput { 0190 id: tagInput 0191 Layout.fillWidth: true 0192 extractor: flickable.extractor 0193 } 0194 QQC2.Button { 0195 enabled: tagInput.editText 0196 display: QQC2.AbstractButton.IconOnly 0197 icon.name: "list-add" 0198 text: i18n("Add Tag") 0199 onClicked: tagInput.accepted() 0200 } 0201 } 0202 Flow { 0203 Layout.preferredWidth: tagInputLayout.implicitWidth 0204 Layout.fillWidth: true 0205 spacing: Kirigami.Units.largeSpacing 0206 Repeater { 0207 model: flickable.extractor.tags 0208 Kirigami.Chip { 0209 text: modelData 0210 onRemoved: { 0211 const index = flickable.extractor.tags.indexOf(modelData) 0212 if (index > -1) { 0213 flickable.extractor.tags.splice(index, 1) 0214 } 0215 } 0216 } 0217 } 0218 } 0219 } 0220 }