shift-shell/containments/homescreen/contents/ui/main.qml

208 lines
6.6 KiB
QML
Raw Normal View History

/*
* Copyright 2015 Marco Martin <mart@kde.org>
*
* This program 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 2 of the License, or
* (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA.
*/
import QtQuick 2.1
2015-02-25 18:38:34 +00:00
import QtQuick.Layouts 1.1
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.satellite.components 0.1 as SatelliteComponents
Item {
id: root
2015-02-26 10:34:33 +00:00
width: 480
height: 640
property Item toolBox
property alias appletsSpace: applicationsView.headerItem
property int buttonHeight: width/4
2015-03-05 13:02:32 +00:00
property bool reorderingApps: false
SatelliteComponents.ApplicationListModel {
id: appListModel
}
Timer {
id: autoScrollTimer
property bool scrollDown: true
repeat: true
interval: 10
onTriggered: {
applicationsView.contentY += scrollDown ? 8 : -8;
if (applicationsView.draggingItem) {
applicationsView.draggingItem.y += scrollDown ? 8 : -8;
applicationsView.draggingItem.updateRow();
}
}
}
Containment.onAppletAdded: {
2015-02-25 18:38:34 +00:00
var container = appletContainerComponent.createObject(appletsSpace.layout)
container.visible = true
print("Applet added: " + applet)
applet.parent = container
container.applet = applet
applet.anchors.fill = applet.parent
applet.visible = true
container.width = 500
container.height = 500
}
Component {
id: appletContainerComponent
Item {
property Item applet
2015-02-25 18:38:34 +00:00
Layout.fillWidth: true
Layout.fillHeight: applet && applet.Layout.fillHeight
Layout.onFillHeightChanged: {
if (plasmoid.formFactor == PlasmaCore.Types.Vertical) {
checkLastSpacer();
}
}
Layout.minimumWidth: root.width
2015-03-05 10:46:50 +00:00
Layout.minimumHeight: Math.max(applet.Layout.minimumHeight, root.height / 2)
2015-02-25 18:38:34 +00:00
Layout.preferredWidth: root.width
2015-02-26 10:34:33 +00:00
Layout.preferredHeight: Layout.minimumHeight
2015-02-25 18:38:34 +00:00
Layout.maximumWidth: root.width
2015-02-26 10:34:33 +00:00
Layout.maximumHeight: Layout.minimumHeight
}
}
Rectangle {
color: Qt.rgba(0, 0, 0, 0.9 * (Math.min(applicationsView.contentY + root.height, root.height) / root.height))
anchors.fill: parent
}
PlasmaCore.ColorScope {
anchors.fill: parent
colorGroup: PlasmaCore.Theme.ComplementaryColorGroup
2015-03-05 16:28:24 +00:00
GridView {
id: applicationsView
anchors {
top: parent.top
bottom: parent.bottom
left: parent.left
right: parent.right
}
2015-02-25 18:38:34 +00:00
property Item draggingItem
cellWidth: root.buttonHeight
cellHeight: cellWidth
model: appListModel
2015-03-05 15:53:58 +00:00
snapMode: GridView.SnapToRow
//clip: true
delegate: HomeLauncher {}
header: MouseArea {
z: 999
2015-02-25 18:38:34 +00:00
property Item layout: mainLayout
width: root.width
height: Math.max(root.height, ((root.height - units.gridUnit * 2)/2) * mainLayout.children.length)
onPressAndHold: {
2015-02-26 10:25:00 +00:00
plasmoid.action("configure").trigger();
}
2015-02-25 18:38:34 +00:00
ColumnLayout {
id: mainLayout
2015-03-05 15:53:58 +00:00
anchors {
fill: parent
bottomMargin: stripe.height + units.gridUnit * 2
2015-03-05 15:53:58 +00:00
}
2015-03-05 10:46:50 +00:00
Item {
Layout.fillWidth: true
Layout.fillHeight: true
}
2015-02-25 18:38:34 +00:00
}
SatelliteStripe {
id: stripe
z: 99
2015-02-25 18:38:34 +00:00
y: Math.max(applicationsView.contentY + parent.height, parent.height - height)
PlasmaCore.Svg {
id: stripeIcons
imagePath: Qt.resolvedUrl("../images/homescreenicons.svg")
}
Row {
anchors.fill: parent
property int columns: 4
property alias buttonHeight: stripe.height
HomeLauncherSvg {
id: phoneIcon
svg: stripeIcons
elementId: "phone"
callback: function() {
2015-02-26 10:25:00 +00:00
console.log("Start phone")
}
}
HomeLauncherSvg {
id: messagingIcon
svg: stripeIcons
elementId: "messaging"
callback: function() { console.log("Start messaging") }
}
HomeLauncherSvg {
id: emailIcon
svg: stripeIcons
elementId: "email"
callback: function() { console.log("Start email") }
}
HomeLauncherSvg {
id: webIcon
svg: stripeIcons
elementId: "web"
callback: function() { console.log("Start web") }
}
}
2015-02-25 18:38:34 +00:00
}
}
2015-03-05 10:41:01 +00:00
footer: Item {
width: units. gridUnit * 4
height: width
}
}
2015-03-05 16:28:24 +00:00
PlasmaComponents.ScrollBar {
flickableItem: applicationsView
opacity: applicationsView.flicking ? 1 : 0
Behavior on opacity {
NumberAnimation {
duration: units.shortDuration
easing.type: Easing.InOutQuad
}
}
}
}
Component.onCompleted: {
print("root Containment loaded")
}
}