Warning, /frameworks/knewstuff/src/qtquick/qml/private/entrygriddelegates/BigPreviewDelegate.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2019 Dan Leinir Turthra Jensen <admin@leinir.dk>
0003
0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006
0007 import QtQuick 2.11
0008 import QtQuick.Controls 2.11 as QtControls
0009 import QtQuick.Layouts 1.11 as QtLayouts
0010 import Qt5Compat.GraphicalEffects 6.0 as QtEffects
0011
0012 import org.kde.kirigami 2.12 as Kirigami
0013
0014 import org.kde.newstuff as NewStuff
0015
0016 import ".." as Private
0017
0018 Private.GridTileDelegate {
0019 id: component
0020 property var entry: model.entry
0021 actionsAnchors.topMargin: bigPreview.height + Kirigami.Units.smallSpacing * 2
0022 function showDetails() {
0023 pageStack.push(detailsPage, {
0024 newStuffModel: GridView.view.model,
0025 entry: model.entry,
0026 });
0027 }
0028 actions: [
0029 Kirigami.Action {
0030 text: root.useLabel
0031 icon.name: "dialog-ok-apply"
0032 onTriggered: { newStuffModel.adoptEntry(model.entry); }
0033 enabled: (entry.status === NewStuff.Entry.Installed || entry.status === NewStuff.Entry.Updateable) && newStuffEngine.hasAdoptionCommand
0034 visible: enabled
0035 },
0036 Kirigami.Action {
0037 text: model.downloadLinks.length === 1 ? i18ndc("knewstuff6", "Request installation of this item, available when there is exactly one downloadable item", "Install") : i18ndc("knewstuff6", "Show installation options, where there is more than one downloadable item", "Install…");
0038 icon.name: "install"
0039 onTriggered: {
0040 if (model.downloadLinks.length === 1) {
0041 newStuffModel.engine.install(model.entry, NewStuff.ItemsModel.FirstLinkId);
0042 } else {
0043 downloadItemsSheet.downloadLinks = model.downloadLinks;
0044 downloadItemsSheet.entry = model.entry;
0045 downloadItemsSheet.open();
0046 }
0047 }
0048 enabled: entry.status === NewStuff.Entry.Downloadable || entry.status === NewStuff.Entry.Deleted
0049 visible: enabled
0050 },
0051 Kirigami.Action {
0052 text: i18ndc("knewstuff6", "Request updating of this item", "Update");
0053 icon.name: "update-none"
0054 onTriggered: { newStuffModel.engine.install(model.index, NewStuff.ItemsModel.AutoDetectLinkId); }
0055 enabled: entry.status === NewStuff.Entry.Updateable
0056 visible: enabled
0057 },
0058 Kirigami.Action {
0059 text: root.uninstallLabel
0060 icon.name: "edit-delete"
0061 onTriggered: { newStuffModel.engine.uninstall(model.entry); }
0062 enabled: entry.status === NewStuff.Entry.Installed || entry.status === NewStuff.Entry.Updateable
0063 visible: enabled
0064 }
0065 ]
0066 thumbnailArea: bigPreview
0067 thumbnailAvailable: model.previewsSmall.length > 0
0068 tile: Item {
0069 anchors {
0070 fill: parent
0071 margins: Kirigami.Units.smallSpacing
0072 }
0073 QtLayouts.ColumnLayout {
0074 anchors.fill: parent;
0075 Item {
0076 QtLayouts.Layout.fillWidth: true
0077 QtLayouts.Layout.fillHeight: true
0078 QtLayouts.Layout.minimumHeight: width / 5
0079 QtLayouts.Layout.maximumHeight: width / 1.8
0080 Kirigami.ShadowedRectangle {
0081 visible: bigPreview.status == Image.Ready
0082 anchors.centerIn: bigPreview;
0083 width: Math.min(bigPreview.paintedWidth, bigPreview.width);
0084 height: Math.min(bigPreview.paintedHeight, bigPreview.height);
0085 Kirigami.Theme.colorSet: Kirigami.Theme.View
0086 shadow.size: 10
0087 shadow.color: Qt.rgba(0, 0, 0, 0.3)
0088 }
0089 Image {
0090 id: bigPreview
0091 asynchronous: true;
0092 fillMode: Image.PreserveAspectCrop;
0093 source: thumbnailAvailable ? model.previews[0] : "";
0094 anchors.fill: parent
0095 }
0096 Kirigami.Icon {
0097 id: updateAvailableBadge;
0098 opacity: (entry.status == NewStuff.Entry.Updateable) ? 1 : 0;
0099 Behavior on opacity { NumberAnimation { duration: Kirigami.Units.shortDuration; } }
0100 anchors {
0101 top: parent.top;
0102 left: parent.left;
0103 }
0104 height: Kirigami.Units.iconSizes.medium;
0105 width: height;
0106 source: "package-installed-outdated";
0107 }
0108 Kirigami.Icon {
0109 id: installedBadge;
0110 opacity: (entry.status === NewStuff.Entry.Installed) ? 1 : 0;
0111 Behavior on opacity { NumberAnimation { duration: Kirigami.Units.shortDuration; } }
0112 anchors {
0113 top: parent.top;
0114 left: parent.left;
0115 }
0116 height: Kirigami.Units.iconSizes.medium;
0117 width: height;
0118 source: "package-installed-updated";
0119 }
0120 }
0121 Private.Rating {
0122 QtLayouts.Layout.fillWidth: true
0123 rating: model.rating
0124 }
0125 Kirigami.Heading {
0126 QtLayouts.Layout.fillWidth: true
0127 level: 5
0128 elide: Text.ElideRight
0129 text: i18ndc("knewstuff6", "The number of times the item has been downloaded", "%1 downloads", model.downloadCount)
0130 }
0131 Kirigami.Heading {
0132 QtLayouts.Layout.fillWidth: true
0133 elide: Text.ElideRight
0134 level: 3
0135 text: model.name
0136 }
0137 Kirigami.Heading {
0138 QtLayouts.Layout.fillWidth: true
0139 elide: Text.ElideRight
0140 level: 4
0141 textFormat: Text.StyledText
0142 text: i18ndc("knewstuff6", "Subheading for the tile view, located immediately underneath the name of the item", "By <i>%1</i>", model.author.name)
0143 }
0144 QtControls.Label {
0145 QtLayouts.Layout.fillWidth: true
0146 QtLayouts.Layout.fillHeight: true
0147 QtLayouts.Layout.minimumHeight: Kirigami.Units.gridUnit
0148 QtLayouts.Layout.maximumHeight: Kirigami.Units.gridUnit * 3
0149 wrapMode: Text.Wrap
0150 text: model.shortSummary.length > 0 ? model.shortSummary : model.summary
0151 elide: Text.ElideRight
0152 }
0153 clip: true // We are dealing with content over which we have very little control. Sometimes that means being a bit abrupt.
0154 }
0155 FeedbackOverlay {
0156 anchors.fill: parent
0157 newStuffModel: component.GridView.view.model
0158 }
0159 MouseArea {
0160 anchors.fill: parent;
0161 cursorShape: Qt.PointingHandCursor;
0162 onClicked: component.showDetails();
0163 }
0164 }
0165 }