Warning, /frameworks/kirigami/src/controls/ActionToolBar.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 QtQml
0009 import QtQuick.Layouts
0010 import QtQuick.Controls as QQC2
0011 import QtQuick.Templates as T
0012 import org.kde.kirigami as Kirigami
0013 import "private" as P
0014 
0015 /**
0016  * @brief A toolbar built out of a list of actions.
0017  *
0018  * The default representation for visible actions is a QtQuick.Controls.ToolButton, but
0019  * it can be changed by setting the `Action.displayComponent` for an action.
0020  * The default behavior of ActionToolBar is to display as many actions as possible,
0021  * placing those that will not fit into an overflow menu. This can be changed by
0022  * setting the `displayHint` property on an Action. For example, when setting the
0023  * `DisplayHint.KeepVisible` display hint, ActionToolBar will try to keep that action
0024  * in view as long as possible, using an icon-only button if a button with text
0025  * does not fit.
0026  *
0027  * @inherit QtQuick.Controls.Control
0028  * @since 2.5
0029  */
0030 QQC2.Control {
0031     id: root
0032 
0033 //BEGIN properties
0034     /**
0035      * @brief This property holds a list of visible actions.
0036      *
0037      * The ActionToolBar will try to display as many actions as possible.
0038      * Those that won't fit will go into an overflow menu.
0039      *
0040      * @property list<Action> actions
0041      */
0042     readonly property alias actions: layout.actions
0043 
0044     /**
0045      * @brief This property holds whether the buttons will have a flat appearance.
0046      *
0047      * default: ``true``
0048      */
0049     property bool flat: true
0050 
0051     /**
0052      * @brief This property determines how the icon and text are displayed within the button.
0053      *
0054      * Permitted values are:
0055      * * ``Button.IconOnly``
0056      * * ``Button.TextOnly``
0057      * * ``Button.TextBesideIcon``
0058      * * ``Button.TextUnderIcon``
0059      *
0060      * default: ``Controls.Button.TextBesideIcon``
0061      *
0062      * @see QtQuick.Controls.AbstractButton
0063      * @property int display
0064      */
0065     property int display: QQC2.Button.TextBesideIcon
0066 
0067     /**
0068      * @brief This property holds the alignment of the buttons.
0069      *
0070      * When there is more space available than required by the visible delegates,
0071      * we need to determine how to place the delegates.
0072      *
0073      * When there is more space available than required by the visible action delegates,
0074      * we need to determine where to position them.
0075      *
0076      * default: ``Qt.AlignRight``
0077      *
0078      * @see Qt::AlignmentFlag
0079      * @property int alignment
0080      */
0081     property alias alignment: layout.alignment
0082 
0083     /**
0084      * @brief This property holds the position of the toolbar.
0085      *
0086      * If this ActionToolBar is the contentItem of a QQC2 Toolbar, the position is bound to the ToolBar's position
0087      *
0088      * Permitted values are:
0089      * * ``ToolBar.Header``: The toolbar is at the top, as a window or page header.
0090      * * ``ToolBar.Footer``: The toolbar is at the bottom, as a window or page footer.
0091      *
0092      * @property int position
0093      */
0094     property int position: parent instanceof T.ToolBar ? parent.position : QQC2.ToolBar.Header
0095 
0096     /**
0097      * @brief This property holds the maximum width of the content of this ToolBar.
0098      *
0099      * If the toolbar's width is larger than this value, empty space will
0100      * be added on the sides, according to the Alignment property.
0101      *
0102      * The value of this property is derived from the ToolBar's actions and their properties.
0103      *
0104      * @property int maximumContentWidth
0105      */
0106     readonly property alias maximumContentWidth: layout.implicitWidth
0107 
0108     /**
0109      * @brief This property holds the name of the icon to use for the overflow menu button.
0110      *
0111      * default: ``"overflow-menu"``
0112      *
0113      * @since 5.65
0114      * @since 2.12
0115      */
0116     property string overflowIconName: "overflow-menu"
0117 
0118     /**
0119      * @brief This property holds the combined width of all visible delegates.
0120      * @property int visibleWidth
0121      */
0122     readonly property alias visibleWidth: layout.visibleWidth
0123 
0124     /**
0125      * @brief This property sets the handling method for items that do not match the toolbar's height.
0126      *
0127      * When toolbar items do not match the height of the toolbar, there are
0128      * several ways we can deal with this. This property sets the preferred way.
0129      *
0130      * Permitted values are:
0131      * * ``HeightMode.AlwaysCenter``
0132      * * ``HeightMode.AlwaysFill``
0133      * * ``AlwaysFill.ConstrainIfLarger``
0134      *
0135      * default: ``HeightMode::ConstrainIfLarger``
0136      *
0137      * @see ToolBarLayout::heightMode
0138      * @see ToolBarLayout::HeightMode
0139      * @property ToolBarLayout::HeightMode heightMode
0140      */
0141     property alias heightMode: layout.heightMode
0142 //END properties
0143 
0144     implicitHeight: layout.implicitHeight
0145     implicitWidth: layout.implicitWidth
0146 
0147     Layout.minimumWidth: layout.minimumWidth
0148     Layout.preferredWidth: 0
0149     Layout.fillWidth: true
0150 
0151     leftPadding: 0
0152     rightPadding: 0
0153     topPadding: 0
0154     bottomPadding: 0
0155 
0156     contentItem: Kirigami.ToolBarLayout {
0157         id: layout
0158         spacing: Kirigami.Units.smallSpacing
0159         layoutDirection: root.mirrored ? Qt.RightToLeft : Qt.LeftToRight
0160 
0161         fullDelegate: P.PrivateActionToolButton {
0162             flat: root.flat
0163             display: root.display
0164             action: Kirigami.ToolBarLayout.action
0165         }
0166 
0167         iconDelegate: P.PrivateActionToolButton {
0168             flat: root.flat
0169             display: QQC2.Button.IconOnly
0170             action: Kirigami.ToolBarLayout.action
0171 
0172             showMenuArrow: false
0173 
0174             menuActions: {
0175                 if (action.displayComponent) {
0176                     return [action]
0177                 }
0178 
0179                 if (action instanceof Kirigami.Action) {
0180                     return action.children;
0181                 }
0182 
0183                 return []
0184             }
0185         }
0186 
0187         moreButton: P.PrivateActionToolButton {
0188             flat: root.flat
0189 
0190             action: Kirigami.Action {
0191                 tooltip: qsTr("More Actions")
0192                 icon.name: root.overflowIconName
0193                 displayHint: Kirigami.DisplayHint.IconOnly | Kirigami.DisplayHint.HideChildIndicator
0194             }
0195 
0196             Accessible.name: action.tooltip
0197 
0198             menuActions: root.actions
0199 
0200             menuComponent: P.ActionsMenu {
0201                 submenuComponent: P.ActionsMenu {
0202                     Binding {
0203                         target: parentItem
0204                         property: "visible"
0205                         value: layout.hiddenActions.includes(parentAction)
0206                                && (!(parentAction instanceof Kirigami.Action) || parentAction.visible)
0207                         restoreMode: Binding.RestoreBinding
0208                     }
0209                 }
0210 
0211                 itemDelegate: P.ActionMenuItem {
0212                     visible: layout.hiddenActions.includes(action)
0213                              && (!(action instanceof Kirigami.Action) || action.visible)
0214                 }
0215 
0216                 loaderDelegate: Loader {
0217                     property T.Action action
0218                     height: visible ? implicitHeight : 0
0219                     visible: layout.hiddenActions.includes(action)
0220                              && (!(action instanceof Kirigami.Action) || action.visible)
0221                 }
0222 
0223                 separatorDelegate: QQC2.MenuSeparator {
0224                     property T.Action action
0225                     visible: layout.hiddenActions.includes(action)
0226                              && (!(action instanceof Kirigami.Action) || action.visible)
0227                 }
0228             }
0229         }
0230     }
0231 }