Warning, /plasma-mobile/qmlkonsole/src/contents/ui/Tabs.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2021 Felipe Kinoshita <kinofhek@gmail.com>
0002 // SPDX-FileCopyrightText: 2022 Devin Lin <espidev@gmail.com>
0003 //
0004 // SPDX-License-Identifier: GPL-2.0-or-later
0005
0006 import QtQuick
0007 import QtQuick.Layouts
0008 import QtQuick.Controls
0009
0010 import org.kde.konsoleqml
0011 import org.kde.kirigami as Kirigami
0012
0013 import org.kde.qmlkonsole
0014
0015 // Taken from Angelfish's desktop ListView
0016
0017 ListView {
0018 id: root
0019
0020 signal switchToTabRequested(int index)
0021 signal closeTabRequested(int index)
0022 signal addTabRequested()
0023
0024 implicitHeight: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing * 2
0025 model: TerminalTabModel
0026 orientation: ListView.Horizontal
0027
0028 Shortcut {
0029 sequence: "Ctrl+Shift+W"
0030 onActivated: {
0031 root.closeTabRequested(root.currentIndex);
0032 }
0033 }
0034
0035 Shortcut {
0036 sequences: ["Ctrl+Tab", "Ctrl+PgDown"]
0037 onActivated: {
0038 if (root.currentIndex != root.count -1) {
0039 root.switchToTabRequested(root.currentIndex + 1);
0040 } else {
0041 root.switchToTabRequested(0);
0042 }
0043 }
0044 }
0045
0046 Shortcut {
0047 sequences: ["Ctrl+Shift+Tab", "Ctrl+PgUp"]
0048 onActivated: {
0049 if (root.currentIndex === 0) {
0050 root.switchToTabRequested(root.count - 1);
0051 } else {
0052 root.switchToTabRequested(root.currentIndex - 1);
0053 }
0054 }
0055 }
0056
0057 delegate: ItemDelegate {
0058 id: control
0059
0060 highlighted: ListView.isCurrentItem
0061
0062 width: Kirigami.Units.gridUnit * 15
0063 height: tabControl.height
0064
0065 background: Rectangle {
0066 Kirigami.Theme.colorSet: Kirigami.Theme.Button
0067 Kirigami.Theme.inherit: false
0068 implicitHeight: Kirigami.Units.gridUnit * 3 + Kirigami.Units.smallSpacing * 2
0069 color: control.highlighted ? Kirigami.Theme.backgroundColor
0070 : (control.hovered ? Qt.darker(Kirigami.Theme.backgroundColor, 1.05)
0071 : Qt.darker(Kirigami.Theme.backgroundColor, 1.1))
0072 Behavior on color { ColorAnimation { duration: Kirigami.Units.shortDuration } }
0073
0074 ToolSeparator {
0075 anchors.top: parent.top
0076 anchors.bottom: parent.bottom
0077 anchors.right: parent.right
0078 orientation: Qt.Vertical
0079 }
0080
0081 ToolSeparator {
0082 visible: index === 0
0083 anchors.top: parent.top
0084 anchors.bottom: parent.bottom
0085 anchors.left: parent.left
0086 orientation: Qt.Vertical
0087 }
0088 }
0089
0090 contentItem: MouseArea {
0091 acceptedButtons: Qt.AllButtons
0092 onClicked: mouse => {
0093 if (mouse.button === Qt.LeftButton) {
0094 root.switchToTabRequested(model.index);
0095 } else if (mouse.button === Qt.MiddleButton) {
0096 root.closeTabRequested(model.index);
0097 }
0098 }
0099
0100 RowLayout {
0101 id: layout
0102 anchors.fill: parent
0103 spacing: Kirigami.Units.smallSpacing
0104
0105 Kirigami.Icon {
0106 id: tabIcon
0107 Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
0108 Layout.preferredWidth: Kirigami.Units.iconSizes.small
0109 Layout.preferredHeight: width
0110 source: "tab-detach"
0111 }
0112
0113 Label {
0114 id: titleLabel
0115 Layout.fillWidth: true
0116 Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
0117 Layout.leftMargin: Kirigami.Units.smallSpacing
0118 Layout.rightMargin: Kirigami.Units.smallSpacing
0119 text: model.name
0120 elide: Text.ElideRight
0121 horizontalAlignment: Text.AlignLeft
0122 }
0123
0124 ToolButton {
0125 Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
0126 Layout.preferredWidth: Kirigami.Units.iconSizes.small
0127 Layout.preferredHeight: width
0128 icon.name: "tab-close"
0129 onClicked: root.closeTabRequested(model.index)
0130
0131 opacity: Kirigami.Settings.tabletMode ? 1 : (control.hovered ? 1 : 0);
0132 Behavior on opacity {
0133 OpacityAnimator {
0134 duration: Kirigami.Units.shortDuration
0135 easing.type: Easing.InOutQuad
0136 }
0137 }
0138 }
0139 }
0140 }
0141 }
0142 footer: ToolButton {
0143 action: Kirigami.Action {
0144 icon.name: "list-add"
0145 onTriggered: root.addTabRequested()
0146 }
0147 }
0148 add: Transition {
0149 NumberAnimation { property: "opacity"; from: 0; to: 1; duration: Kirigami.Units.longDuration; easing.type: Easing.InQuad }
0150 }
0151 remove: Transition {
0152 NumberAnimation { property: "opacity"; to: 0; duration: Kirigami.Units.longDuration; easing.type: Easing.OutQuad }
0153 }
0154 }