Warning, /plasma/plasma-desktop/applets/kickoff/package/contents/ui/SectionView.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2022 Fushan Wen <qydwhotmail@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 import QtQuick 2.15
0008 
0009 import org.kde.plasma.components 3.0 as PC3
0010 import org.kde.plasma.plasmoid 2.0
0011 
0012 KickoffGridView {
0013     id: root
0014 
0015     property string currentSection
0016     property KickoffListView parentView
0017 
0018     /**
0019      * Request hiding the section view
0020      */
0021     signal hideSectionViewRequested(int index)
0022 
0023     // prevent binding loops and preserve minimum popup size
0024     view.implicitWidth: parentView.view.implicitWidth
0025     view.implicitHeight: parentView.view.implicitHeight
0026 
0027     // Using implicitWidth instead of width so that delegates don't
0028     // become super big when using the new popup resizing feature.
0029     view.cellWidth: Math.floor((view.implicitWidth - view.leftMargin - view.rightMargin) / (kickoff.minimumGridRowCount * 1.75))
0030     view.cellHeight: view.cellWidth
0031 
0032     delegate: PC3.AbstractButton {
0033         width: view.cellWidth
0034         height: view.cellHeight
0035 
0036         hoverEnabled: true
0037         onHoveredChanged: if (hovered) {
0038             root.view.currentIndex = index;
0039         }
0040 
0041         padding: fontMetrics.descent / 2
0042 
0043         contentItem: PC3.Label {
0044             horizontalAlignment: Text.AlignHCenter
0045             verticalAlignment: Text.AlignVCenter
0046             maximumLineCount: 1
0047             elide: Text.ElideRight
0048 
0049             // Sets max size for fontSizeMode, not true size.
0050             // Also affects implicit size,
0051             // so do not rely on this Label's implicit size.
0052             font.pixelSize: fontMetrics.font.pixelSize
0053             fontSizeMode: Text.VerticalFit
0054 
0055             text: model.section
0056             textFormat: Text.PlainText
0057         }
0058 
0059         onClicked: {
0060             const isGridView = Plasmoid.configuration.applicationsDisplay === 0
0061             const destinationIndex = isGridView ? index : model.firstIndex
0062             root.hideSectionViewRequested(destinationIndex)
0063         }
0064     }
0065 
0066     FontMetrics {
0067         id: fontMetrics
0068         // This size doesn't actually fill the cell height perfectly.
0069         // It goes out of bounts and is slightly below center with Noto Sans.
0070         // It's close enough for the calculations this will be used for.
0071         // The calculations seem to work fairly well with other fonts too.
0072         font.pixelSize: root.view.cellHeight
0073     }
0074 
0075     Component.onCompleted: {
0076         for (let i = 0; i < model.count; i++) {
0077             if (model.data(model.index([i], 0), Qt.DisplayRole) === root.currentSection) {
0078                 view.positionViewAtIndex(i, ListView.Beginning);
0079                 view.currentIndex = i;
0080                 return;
0081             }
0082         }
0083     }
0084 }