From 719ef7ecaa7fc4abe0c24838fe9fe486452291b9 Mon Sep 17 00:00:00 2001 From: Luca Beltrame Date: Thu, 5 Feb 2015 00:30:26 +0100 Subject: [PATCH] Add an (experimental) QML view for the grid Already works better than the C++ version. --- src/qml/danbooruimageview.qml | 175 ++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 src/qml/danbooruimageview.qml diff --git a/src/qml/danbooruimageview.qml b/src/qml/danbooruimageview.qml new file mode 100644 index 0000000..3290fea --- /dev/null +++ b/src/qml/danbooruimageview.qml @@ -0,0 +1,175 @@ +/* + * Copyright 2015 Luca Beltrame + * + * This file is part of Danbooru Client. + * + * Danbooru Client is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version version of the License, or + * (at your option) any later version. + * + * Danbooru Client is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Danbooru Client. If not, see . + */ + +import QtQuick 2.4 +import QtQuick.Controls 1.3 +import QtQuick.Dialogs 1.2 + +import org.kde.kquickcontrolsaddons 2.0 +import org.kde.kcoreaddons 1.0 as KCoreAddons +import org.kde.kio 1.0 + +import DanbooruClient 1.0 + + + +Rectangle { + id: rootObj + width: 500 + height: 500 + + KRun { + id: runner + } + + signal downloadRequested(url url) + + FileDialog { + id: saveFileDialog + title: "Select a file to save to" + selectExisting: false + nameFilters: [ "Image files (*.jpg *.png *.tiff *.gif)", "All files (*)" ] + } + + Component { + id: viewDelegate + Item { + + width: grid.cellWidth + height: grid.cellHeight + + + Column { + id: postElement + anchors.fill: parent + + QPixmapItem { + id: pixItem + pixmap: thumbPix + anchors.horizontalCenter: parent.horizontalCenter + smooth: true + fillMode: QPixmapItem.PreserveAspectFit + height: grid.cellHeight * 0.75 + width: grid.cellWidth * 0.9 + + + MouseArea { + id: mouseArea + anchors.fill: parent + hoverEnabled: true + onClicked: { + grid.currentIndex = index + console.log(fileUrl) + } + + onEntered: { + viewButton.visible = mouseArea.containsMouse ? true: false + downloadButton.visible = mouseArea.containsMouse ? true: false + } + + onExited: { + viewButton.visible = mouseArea.containsMouse ? true: false + downloadButton.visible = mouseArea.containsMouse ? true: false + } + + Button { + id: viewButton + iconName: "view-preview" + visible: false + anchors.top: parent.top + anchors.left: parent.left + anchors.topMargin: (pixItem.height - pixItem.paintedHeight) / 2 + anchors.leftMargin: (pixItem.width - pixItem.paintedWidth) / 2 + height: pixItem.height * 0.15 + width: pixItem.height * 0.15 + z: 1 + onClicked: { + runner.openUrl(fileUrl) + } + } + + Button { + + + + id: downloadButton + iconName: "download" + visible: false + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.bottomMargin: (pixItem.height - pixItem.paintedHeight) / 2 + anchors.leftMargin: (pixItem.width - pixItem.paintedWidth) / 2 + height: pixItem.height * 0.15 + width: pixItem.height * 0.15 + z: 1 + onClicked: { + console.log("AA" + pixItem.paintedHeight) + rootObj.downloadRequested(fileUrl) + } + } + + + } + + } + Text { + id: sizeText + text: i18n("File size: %1", KCoreAddons.Format.formatByteSize(fileSize)) +// anchors.horizontalCenter: parent.horizontalCenter + } + Text { + id: resolutionText + text: i18n("Resolution: %1 x %2", resolution.width, resolution.height) + } + + Text { + id: ratingText + text: { + + if (rating == DanbooruPost.Safe) { + return i18n("Rating: %1", "Safe") + } else if (rating == DanbooruPost.Questionable) { + return i18n("Rating: %1", "Questionable") + } else if (rating == DanbooruPost.Explicit) { + return i18n("Rating: %1", "Explicit") + } + } + } + + } + + } + } + + GridView { + id: grid + cellWidth: 230 + cellHeight: 230 + + flow: GridView.FlowLeftToRight + anchors.fill: parent + + model: danbooruModel + delegate: viewDelegate + focus: true + Component.onCompleted: currentIndex = -1 + + } + +} \ No newline at end of file