shift-shell/containments/taskpanel/package/contents/ui/main.qml

210 lines
7.5 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.4
import QtQuick.Layouts 1.1
import QtQuick.Window 2.2
2020-02-05 19:25:52 +00:00
import QtGraphicalEffects 1.12
import org.kde.taskmanager 0.1 as TaskManager
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.kquickcontrolsaddons 2.0
2015-06-18 23:31:26 +00:00
PlasmaCore.ColorScope {
id: root
width: 600
2015-06-18 23:31:26 +00:00
height: 480
2020-02-05 19:25:52 +00:00
colorGroup: showingApp ? PlasmaCore.Theme.NormalColorGroup : PlasmaCore.Theme.ComplementaryColorGroup
2015-06-18 23:31:26 +00:00
Plasmoid.backgroundHints: PlasmaCore.Types.NoBackground
readonly property bool showingApp: tasksModel.activeTask && tasksModel.activeTask.valid && !tasksModel.data(tasksModel.activeTask, TaskManager.AbstractTasksModel.IsFullScreen)
property QtObject taskSwitcher: taskSwitcherLoader.item ? taskSwitcherLoader.item : null
Loader {
id: taskSwitcherLoader
2015-06-18 23:31:26 +00:00
}
//FIXME: why it crashes on startup if TaskSwitcher is loaded immediately?
Timer {
running: true
interval: 200
onTriggered: taskSwitcherLoader.source = Qt.resolvedUrl("TaskSwitcher.qml")
}
TaskManager.TasksModel {
id: tasksModel
sortMode: TaskManager.TasksModel.SortVirtualDesktop
groupMode: TaskManager.TasksModel.GroupDisabled
screenGeometry: plasmoid.screenGeometry
filterByScreen: plasmoid.configuration.showForCurrentScreenOnly
}
MouseArea {
id: mainMouseArea
2015-06-18 23:31:26 +00:00
anchors.fill: parent
property int oldMouseY: 0
property int startMouseY: 0
property bool isDragging: false
drag.filterChildren: true
function managePressed(mouse) {
startMouseY = oldMouseY = mouse.y;
taskSwitcher.offset = -taskSwitcher.height
}
onPressed: managePressed(mouse);
onPositionChanged: {
if (!isDragging && Math.abs(startMouseY - oldMouseY) < root.height) {
oldMouseY = mouse.y;
return;
} else {
isDragging = true;
}
taskSwitcher.offset = taskSwitcher.offset - (mouse.y - oldMouseY);
oldMouseY = mouse.y;
2015-10-01 15:40:26 +00:00
if (taskSwitcher.visibility == Window.Hidden && taskSwitcher.offset > -taskSwitcher.height + units.gridUnit && taskSwitcher.tasksCount) {
taskSwitcher.visible = true;
}
}
onReleased: {
if (!isDragging) {
return;
}
if (taskSwitcher.visibility == Window.Hidden) {
return;
}
if (taskSwitcher.offset > -taskSwitcher.height/2) {
taskSwitcher.currentTaskIndex = -1
taskSwitcher.show();
} else {
taskSwitcher.hide();
taskSwitcher.setSingleActiveWindow(taskSwitcher.currentTaskIndex);
}
}
2015-06-18 23:31:26 +00:00
2020-02-05 19:25:52 +00:00
DropShadow {
anchors.fill: icons
visible: !showinApp
2020-02-12 08:57:40 +00:00
cached: true
2020-02-05 19:25:52 +00:00
horizontalOffset: 0
verticalOffset: 1
radius: 4.0
samples: 17
color: Qt.rgba(0,0,0,0.8)
source: icons
}
Item {
2020-02-05 19:25:52 +00:00
id: icons
anchors.fill: parent
2015-06-18 23:31:26 +00:00
visible: plasmoid.configuration.PanelButtonsVisible
2020-02-06 14:39:25 +00:00
/*
Rectangle {
anchors.fill: parent
color: root.backgroundColor
2020-02-05 19:25:52 +00:00
opacity: showingApp ? 1 : 0
Rectangle {
anchors {
left: parent.left
right: parent.right
top: parent.top
}
height: 1
color: PlasmaCore.ColorScope.textColor
opacity: 0.2
}
2020-02-06 14:39:25 +00:00
}*/
Rectangle {
anchors.fill: parent
gradient: Gradient {
GradientStop {
position: 0
color: showingApp ? PlasmaCore.ColorScope.backgroundColor : "transparent"
}
GradientStop {
position: 1
2020-02-12 08:59:18 +00:00
color: showingApp ? PlasmaCore.ColorScope.backgroundColor : Qt.rgba(0, 0, 0, 0.05)
2020-02-06 14:39:25 +00:00
}
}
}
2015-06-18 23:31:26 +00:00
Button {
anchors.left: parent.left
height: parent.height
width: parent.width/3
2020-02-07 12:38:02 +00:00
enabled: taskSwitcher && taskSwitcher.tasksCount > 0;
iconSource: "box"
onClicked: {
plasmoid.nativeInterface.showDesktop = false;
taskSwitcher.visible ? taskSwitcher.hide() : taskSwitcher.show();
}
onPressed: mainMouseArea.managePressed(mouse);
onPositionChanged: mainMouseArea.positionChanged(mouse);
onReleased: mainMouseArea.released(mouse);
2015-06-18 23:31:26 +00:00
}
Button {
id: showDesktopButton
height: parent.height
width: parent.width/3
anchors.horizontalCenter: parent.horizontalCenter
iconSource: "start-here-kde"
2020-02-07 12:38:02 +00:00
enabled: taskSwitcher && taskSwitcher.tasksCount > 0
checkable: true
onCheckedChanged: {
taskSwitcher.hide();
plasmoid.nativeInterface.showDesktop = checked;
}
onPressed: mainMouseArea.managePressed(mouse);
onPositionChanged: mainMouseArea.positionChanged(mouse);
onReleased: mainMouseArea.released(mouse);
Connections {
target: root.taskSwitcher
onCurrentTaskIndexChanged: {
if (root.taskSwitcher.currentTaskIndex < 0) {
showDesktopButton.checked = false;
}
}
}
}
2015-06-11 22:50:38 +00:00
Button {
height: parent.height
width: parent.width/3
anchors.right: parent.right
iconSource: "paint-none"
2016-06-28 12:37:41 +00:00
//FIXME:Qt.UserRole+9 is IsWindow Qt.UserRole+15 is IsClosable. We can't reach that enum from QML
enabled: plasmoid.nativeInterface.hasCloseableActiveWindow
2016-06-28 12:37:41 +00:00
onClicked: {
var index = taskSwitcher.model.activeTask;
if (index) {
taskSwitcher.model.requestClose(index);
}
}
onPressed: mainMouseArea.managePressed(mouse);
onPositionChanged: mainMouseArea.positionChanged(mouse);
onReleased: mainMouseArea.released(mouse);
}
2015-06-18 23:31:26 +00:00
}
}
}