Warning, /frameworks/kirigami/src/controls/CardsLayout.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  *  SPDX-FileCopyrightText: 2018 Marco Martin <mart@kde.org>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 import QtQuick
0008 import QtQuick.Layouts
0009 import org.kde.kirigami as Kirigami
0010 
0011 /**
0012  * @brief A GridLayout optimized for showing one or two columns of cards,
0013  * depending on the available space.
0014  *
0015  * It Should be used when the cards are not instantiated by a model or by a
0016  * model which has always very few items.
0017  *
0018  * They are presented as a grid of two columns which will remain
0019  * centered if the application is really wide, or become a single
0020  * column if there is not enough space for two columns,
0021  * such as a mobile phone screen.
0022  *
0023  * A CardsLayout should always be contained within a ColumnLayout.
0024  *
0025  * @since 2.4
0026  * @inherit QtQuick.Layouts.GridLayout
0027  */
0028 GridLayout {
0029     /**
0030      * @brief This property holds the maximum number of columns.
0031      *
0032      * This layout will never lay out the items in more columns than maximumColumns
0033      *
0034      * default: ``2``
0035      *
0036      * @since 2.5
0037      */
0038     property int maximumColumns: 2
0039 
0040     /**
0041      * @brief This property holds the maximum width the columns may have.
0042      *
0043      * The cards will never become wider than this size; when the GridLayout is wider than
0044      * maximumColumnWidth, it will switch from one to two columns.
0045      *
0046      * If the default needs to be overridden for some reason,
0047      * it is advised to express this unit as a multiple
0048      * of Kirigami.Units.gridUnit.
0049      *
0050      * default: ``20 * Kirigami.Units.gridUnit``
0051      */
0052     property int maximumColumnWidth: Kirigami.Units.gridUnit * 20
0053 
0054     /**
0055      * @brief This property holds the minimum width the columns may have.
0056      *
0057      * The layout will try to dispose of items
0058      * in a number of columns that will respect this size constraint.
0059      *
0060      * default: ``12 * Kirigami.Units.gridUnit``
0061      *
0062      * @since 2.5
0063      */
0064     property int minimumColumnWidth: Kirigami.Units.gridUnit * 12
0065 
0066     columns: Math.max(1, Math.min(maximumColumns > 0 ? maximumColumns : Infinity,
0067                                   Math.floor(width/minimumColumnWidth),
0068                                   Math.ceil(width/maximumColumnWidth)));
0069 
0070     rowSpacing: Kirigami.Units.largeSpacing
0071     columnSpacing: Kirigami.Units.largeSpacing
0072 
0073 
0074     // NOTE: this default width which defaults to 2 columns is just to remove a binding loop on columns
0075     width: maximumColumnWidth*2 + Kirigami.Units.largeSpacing
0076     // same computation of columns, but on the parent size
0077     Layout.preferredWidth: maximumColumnWidth * Math.max(1, Math.min(maximumColumns > 0 ? maximumColumns : Infinity,
0078                                   Math.floor(parent.width/minimumColumnWidth),
0079                                   Math.ceil(parent.width/maximumColumnWidth))) + Kirigami.Units.largeSpacing * (columns - 1)
0080 
0081     Layout.maximumWidth: Layout.preferredWidth
0082     Layout.alignment: Qt.AlignHCenter
0083 
0084     Component.onCompleted: childrenChanged()
0085     onChildrenChanged: {
0086         for (const child of children) {
0087             child.Layout.fillHeight = true;
0088         }
0089     }
0090 }