Warning, /frameworks/qqc2-desktop-style/org.kde.desktop/TabButton.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2017 Marco Martin <mart@kde.org>
0003     SPDX-FileCopyrightText: 2017 The Qt Company Ltd.
0004     SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk>
0005 
0006     SPDX-License-Identifier: LGPL-3.0-only OR GPL-2.0-or-later
0007 */
0008 
0009 
0010 import QtQuick 2.6
0011 import QtQml.Models 2.1
0012 //for TabBar.*
0013 import QtQuick.Controls 2.15
0014 import org.kde.qqc2desktopstyle.private 1.0 as StylePrivate
0015 import QtQuick.Templates 2.15 as T
0016 import org.kde.kirigami 2.4 as Kirigami
0017 
0018 T.TabButton {
0019     id: controlRoot
0020 
0021     palette: Kirigami.Theme.inherit ? Kirigami.Theme.palette : undefined
0022     Kirigami.Theme.colorSet: Kirigami.Theme.Button
0023     Kirigami.Theme.inherit: false
0024 
0025     //Some qstyles like fusion don't have correct pixel metrics here and just return 0
0026     implicitWidth: Math.max(styleitem.implicitWidth, textMetrics.width + Kirigami.Units.gridUnit * 2)
0027     implicitHeight: styleitem.implicitHeight || Kirigami.Units.gridUnit * 2
0028     baselineOffset: contentItem.y + contentItem.baselineOffset
0029 
0030     //This width: is important to make the tabbar internals not assume
0031     //all tabs have the same width
0032     width: implicitWidth
0033     padding: 0
0034 
0035     hoverEnabled: true
0036 
0037     contentItem: Item {}
0038 
0039     Kirigami.MnemonicData.enabled: controlRoot.enabled && controlRoot.visible
0040     Kirigami.MnemonicData.controlType: Kirigami.MnemonicData.SecondaryControl
0041     Kirigami.MnemonicData.label: controlRoot.text
0042     Shortcut {
0043         //in case of explicit & the button manages it by itself
0044         enabled: !(RegExp(/\&[^\&]/).test(controlRoot.text))
0045         sequence: controlRoot.Kirigami.MnemonicData.sequence
0046         onActivated: controlRoot.checked = true;
0047     }
0048     background: StylePrivate.StyleItem {
0049         id: styleitem
0050 
0051         TextMetrics {
0052             id: textMetrics
0053             font.capitalization: Kirigami.Theme.defaultFont.capitalization
0054             font.family: Kirigami.Theme.defaultFont.family
0055             font.italic: Kirigami.Theme.defaultFont.italic
0056             font.letterSpacing: Kirigami.Theme.defaultFont.letterSpacing
0057             font.pointSize: Kirigami.Theme.defaultFont.pointSize
0058             font.strikeout: Kirigami.Theme.defaultFont.strikeout
0059             font.underline: Kirigami.Theme.defaultFont.underline
0060             font.weight: Kirigami.Theme.defaultFont.weight
0061             font.wordSpacing: Kirigami.Theme.defaultFont.wordSpacing
0062             text: controlRoot.text
0063         }
0064 
0065         control: controlRoot
0066         anchors.fill: parent
0067         elementType: "tab"
0068         paintMargins: 0
0069 
0070         readonly property TabBar tabBar: controlRoot.TabBar.tabBar
0071 
0072         property string orientation: controlRoot.TabBar.position === TabBar.Header ? "Top" : "Bottom"
0073         property string selectedpos: {
0074             if (tabBar) {
0075                 switch (tabBar.currentIndex) {
0076                 case (controlRoot.TabBar.index + 1): return "next";
0077                 case (controlRoot.TabBar.index - 1): return "previous";
0078                 }
0079             }
0080             return "";
0081         }
0082         property string tabpos: {
0083             if (tabBar) {
0084                 if (tabBar.count === 1) {
0085                     return "only";
0086                 }
0087                 switch (controlRoot.TabBar.index) {
0088                 case 0: return "beginning";
0089                 case (tabBar.count - 1): return "end";
0090                 }
0091             }
0092             return "middle";
0093         }
0094 
0095         properties: {
0096             "icon": controlRoot.display !== T.AbstractButton.TextOnly
0097                 ? (controlRoot.icon.name !== "" ? controlRoot.icon.name : controlRoot.icon.source) : null,
0098             "iconColor": Qt.colorEqual(controlRoot.icon.color, "transparent") ? Kirigami.Theme.textColor : controlRoot.icon.color,
0099             "iconWidth": controlRoot.icon.width,
0100             "iconHeight": controlRoot.icon.height,
0101 
0102             "hasFrame" : true,
0103             "orientation": orientation,
0104             "tabpos": tabpos,
0105             "selectedpos": selectedpos,
0106         }
0107 
0108         enabled: controlRoot.enabled
0109         selected: controlRoot.checked
0110         text: controlRoot.Kirigami.MnemonicData.mnemonicLabel
0111         hover: controlRoot.hovered
0112         hasFocus: controlRoot.activeFocus
0113     }
0114 }