Warning, /plasma/plasma-desktop/desktoppackage/contents/activitymanager/ActivityList.qml is written in an unsupported language. File is not indexed.

0001 /*   vim:set foldmethod=marker:
0002 
0003     SPDX-FileCopyrightText: 2014 Ivan Cukic <ivan.cukic(at)kde.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 import QtQuick 2.2
0009 import org.kde.kirigami 2.20 as Kirigami
0010 import org.kde.activities 0.1 as Activities
0011 
0012 import org.kde.plasma.activityswitcher as ActivitySwitcher
0013 
0014 Flickable {
0015     id: root
0016 
0017     // contentWidth: content.width
0018     contentHeight: content.height
0019 
0020     property var    model: ActivitySwitcher.Backend.runningActivitiesModel()
0021     property string filterString: ""
0022     property bool   showSwitcherOnly: false
0023 
0024     property int itemsWidth: 0
0025 
0026     property int selectedIndex: -1
0027 
0028     function _selectRelativeToCurrent(distance)
0029     {
0030         var startingWithSelected = selectedIndex;
0031 
0032         do {
0033             selectedIndex += distance;
0034 
0035             if (selectedIndex >= activitiesList.count) {
0036                 selectedIndex = 0;
0037             }
0038 
0039             if (selectedIndex < 0) {
0040                 selectedIndex = activitiesList.count - 1;
0041             }
0042 
0043             // Searching for the first item that is visible, or back to the one
0044             // that we started with
0045         } while (!activitiesList.itemAt(selectedIndex).visible
0046                         && startingWithSelected !== selectedIndex);
0047 
0048         _updateSelectedItem();
0049 
0050     }
0051 
0052     function selectNext()
0053     {
0054         _selectRelativeToCurrent(1);
0055     }
0056 
0057     function selectPrevious()
0058     {
0059         _selectRelativeToCurrent(-1);
0060     }
0061 
0062     function _updateSelectedItem()
0063     {
0064         for (var i = 0; i < activitiesList.count; i++) {
0065             activitiesList.itemAt(i).selected = (i === selectedIndex);
0066         }
0067     }
0068 
0069     function openSelected()
0070     {
0071         var selectedItem = null;
0072 
0073         if (selectedIndex >= 0 && selectedIndex < activitiesList.count) {
0074             selectedItem = activitiesList.itemAt(selectedIndex);
0075 
0076         } else if (root.filterString != "") {
0077             // If we have only one item shown, activate it. It doesn't matter
0078             // that it is not really selected
0079 
0080             for (var i = 0; i < activitiesList.count; i++) {
0081                 var item = activitiesList.itemAt(i);
0082 
0083                 if (item.visible) {
0084                     selectedItem = item;
0085                     break;
0086                 }
0087             }
0088         }
0089 
0090         if (selectedItem !== null) {
0091             ActivitySwitcher.Backend.setCurrentActivity(selectedItem.activityId);
0092         }
0093     }
0094 
0095     Column {
0096         id: content
0097 
0098         // width: root.width - (root.width % 10)
0099         width: root.itemsWidth
0100         spacing: Kirigami.Units.smallSpacing * 2
0101 
0102         // Running activities
0103 
0104         Repeater {
0105             id: activitiesList
0106 
0107             model: ActivitySwitcher.Backend.runningActivitiesModel()
0108 
0109             ActivityItem {
0110 
0111                 width:  content.width
0112 
0113                 visible      : (root.filterString == "") ||
0114                                (title.toLowerCase().indexOf(root.filterString) != -1)
0115 
0116                 activityId   : model.id
0117                 title        : model.name
0118                 icon         : model.iconSource
0119                 background   : model.background
0120                 current      : model.isCurrent
0121                 hasWindows   : model.hasWindows
0122                 innerPadding : 2 * Kirigami.Units.smallSpacing
0123                 stoppable    : activitiesList.count > 1
0124 
0125                 onClicked    : {
0126                     ActivitySwitcher.Backend.setCurrentActivity(model.id);
0127                 }
0128             }
0129         }
0130 
0131         // Stopped activities
0132 
0133         Item {
0134             // spacer
0135             width  : parent.width
0136             height : Kirigami.Units.gridUnit
0137         }
0138 
0139         Kirigami.Heading {
0140             id: stoppedActivitiesHeading
0141 
0142             text: i18nd("plasma_shell_org.kde.plasma.desktop", "Stopped activities:")
0143             textFormat: Text.PlainText
0144             level: 3
0145             visible: !root.showSwitcherOnly && stoppedActivitiesList.count > 0
0146         }
0147 
0148         Repeater {
0149             id: stoppedActivitiesList
0150 
0151             model: root.showSwitcherOnly ? null : ActivitySwitcher.Backend.stoppedActivitiesModel()
0152 
0153             delegate: StoppedActivityItem {
0154                 id: stoppedActivityItem
0155 
0156                 width:  parent.width
0157 
0158                 visible      : (root.filterString == "") ||
0159                                (title.toLowerCase().indexOf(root.filterString) != -1)
0160 
0161                 activityId   : model.id
0162                 title        : model.name
0163                 icon         : model.iconSource
0164                 innerPadding : 2 * Kirigami.Units.smallSpacing
0165 
0166                 onClicked: {
0167                     ActivitySwitcher.Backend.setCurrentActivity(model.id)
0168                 }
0169             }
0170         }
0171 
0172         Item {
0173             // spacer
0174             width  : parent.width
0175             height : Kirigami.Units.gridUnit * 2
0176 
0177             visible: stoppedActivitiesHeading.visible
0178         }
0179 
0180         add: Transition {
0181             NumberAnimation {
0182                 properties: "x"
0183                 from: -100
0184                 duration: Kirigami.Units.shortDuration
0185             }
0186         }
0187 
0188         move: Transition {
0189             NumberAnimation {
0190                 id: animation
0191                 properties: "y"
0192                 duration: Kirigami.Units.longDuration
0193             }
0194         }
0195     }
0196 }
0197