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 }