Warning, /plasma/kdeplasma-addons/applets/weather/package/contents/ui/IconAndTextItem.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2018 Friedrich W. H. Kossebau <kossebau@kde.org>
0003 *
0004 * SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006
0007 import QtQuick
0008
0009 import QtQuick.Layouts
0010
0011 import org.kde.kirigami as Kirigami
0012 import org.kde.plasma.components as PlasmaComponents
0013
0014 GridLayout {
0015 id: iconAndTextRoot
0016
0017 property alias iconSource: icon.source
0018 property alias text: label.text
0019 property bool vertical: false // too bad we cannot make this an enum
0020 property alias active: icon.active
0021
0022 readonly property int minimumIconSize: Kirigami.Units.iconSizes.small
0023 readonly property int iconSize: iconAndTextRoot.vertical ? width : height
0024
0025 columns: iconAndTextRoot.vertical ? 1 : 2
0026 rows: iconAndTextRoot.vertical ? 2 : 1
0027
0028 columnSpacing: 0
0029 rowSpacing: 0
0030
0031 Kirigami.Icon {
0032 id: icon
0033
0034 readonly property int implicitMinimumIconSize: Math.max(iconSize, minimumIconSize)
0035 // reset implicit size, so layout in free dimension does not stop at the default one
0036 implicitWidth: minimumIconSize
0037 implicitHeight: minimumIconSize
0038
0039 Layout.fillWidth: iconAndTextRoot.vertical
0040 Layout.fillHeight: !iconAndTextRoot.vertical
0041 Layout.minimumWidth: iconAndTextRoot.vertical ? minimumIconSize : implicitMinimumIconSize
0042 Layout.minimumHeight: iconAndTextRoot.vertical ? implicitMinimumIconSize : minimumIconSize
0043 }
0044
0045 Item {
0046 id: text
0047
0048 // Otherwise it takes up too much space while loading
0049 visible: label.text.length > 0
0050
0051 Layout.fillWidth: iconAndTextRoot.vertical
0052 Layout.fillHeight: !iconAndTextRoot.vertical
0053 Layout.minimumWidth: iconAndTextRoot.vertical ? 0 : sizehelper.paintedWidth
0054 Layout.maximumWidth: iconAndTextRoot.vertical ? Infinity : Layout.minimumWidth
0055
0056 Layout.minimumHeight: iconAndTextRoot.vertical ? sizehelper.paintedHeight : 0
0057 Layout.maximumHeight: iconAndTextRoot.vertical ? Layout.minimumHeight : Infinity
0058
0059 Text {
0060 id: sizehelper
0061
0062 font {
0063 family: label.font.family
0064 weight: label.font.weight
0065 italic: label.font.italic
0066 pixelSize: iconAndTextRoot.vertical ? Kirigami.Units.gridUnit * 2 : 1024 // random "big enough" size - this is used as a max pixelSize by the fontSizeMode
0067 }
0068 minimumPixelSize: Math.round(Kirigami.Units.gridUnit / 2)
0069 fontSizeMode: iconAndTextRoot.vertical ? Text.HorizontalFit : Text.VerticalFit
0070 wrapMode: Text.NoWrap
0071
0072 horizontalAlignment: Text.AlignHCenter
0073 verticalAlignment: Text.AlignVCenter
0074 anchors {
0075 leftMargin: Kirigami.Units.smallSpacing
0076 rightMargin: Kirigami.Units.smallSpacing
0077 }
0078 // These magic values are taken from the digital clock, so that the
0079 // text sizes here are identical with various clock text sizes
0080 height: {
0081 const textHeightScaleFactor = (parent.height > 26) ? 0.7 : 0.9;
0082 return Math.min (parent.height * textHeightScaleFactor, 3 * Kirigami.Theme.defaultFont.pixelSize);
0083 }
0084 visible: false
0085
0086 // pattern to reserve some constant space TODO: improve and take formatting/i18n into account
0087 text: "888° X"
0088 textFormat: Text.PlainText
0089 }
0090
0091 PlasmaComponents.Label {
0092 id: label
0093
0094 font {
0095 weight: Font.Normal
0096 pixelSize: 1024
0097 pointSize: 0 // we need to unset pointSize otherwise it breaks the Text.Fit size mode
0098 }
0099 minimumPixelSize: Math.round(Kirigami.Units.gridUnit / 2)
0100 fontSizeMode: Text.Fit
0101 textFormat: Text.PlainText
0102 wrapMode: Text.NoWrap
0103
0104 height: 0
0105 width: 0
0106 verticalAlignment: Text.AlignVCenter
0107 horizontalAlignment: Text.AlignHCenter
0108 anchors {
0109 fill: parent
0110 leftMargin: Kirigami.Units.smallSpacing
0111 rightMargin: Kirigami.Units.smallSpacing
0112 }
0113 }
0114 }
0115 }