Add an (experimental) QML view for the grid

Already works better than the C++ version.
This commit is contained in:
Luca Beltrame 2015-02-05 00:30:26 +01:00
parent b0185c136b
commit 719ef7ecaa

View file

@ -0,0 +1,175 @@
/*
* Copyright 2015 Luca Beltrame <lbeltrame@kde.org>
*
* 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 <http://www.gnu.org/licenses/>.
*/
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
}
}