Warning, /plasma/plasma-systemmonitor/src/page/RowControl.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Arjen Hiemstra <ahiemstra@heimr.nl> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Controls 0009 import QtQuick.Layouts 0010 0011 import org.kde.kirigami as Kirigami 0012 0013 import org.kde.ksysguard.page 0014 0015 Container { 0016 id: control 0017 0018 property PageDataObject rowData 0019 property Page page 0020 0021 property string heightMode: { 0022 if (rowData.heightMode) { 0023 print("heightMode", rowData.heightMode) 0024 return rowData.heightMode 0025 } 0026 0027 if (rowData.isTitle) { 0028 return "minimum" 0029 } 0030 0031 return "balanced" 0032 } 0033 0034 implicitHeight: heading.height + topPadding + bottomPadding 0035 0036 alwaysShowBackground: true 0037 0038 function updateMinimumHeight() { 0039 if (rowData.isTitle) { 0040 minimumContentHeight = heading.implicitHeight 0041 minimumHeight = implicitHeight 0042 return 0043 } 0044 0045 let minHeight = 0; 0046 let minContentHeight = 0; 0047 for (let i = 0; i < repeater.count; ++i) { 0048 let item = repeater.itemAt(i) 0049 if (item) { 0050 minContentHeight = Math.max(minContentHeight, item.minimumContentHeight) 0051 minHeight = Math.max(minHeight, item.minimumHeight) 0052 } 0053 } 0054 0055 minimumContentHeight = minContentHeight 0056 minimumHeight = minHeight + control.topPadding + control.bottomPadding 0057 } 0058 0059 function replaceSensors(replacement) { 0060 for (let i = 0; i < repeater.count; ++i) { 0061 repeater.itemAt(i).replaceSensors(replacement) 0062 } 0063 } 0064 0065 onTopPaddingChanged: Qt.callLater(updateMinimumHeight) 0066 onBottomPaddingChanged: Qt.callLater(updateMinimumHeight) 0067 0068 contentItem: Row { 0069 anchors.fill: parent 0070 anchors.topMargin: control.topPadding 0071 anchors.leftMargin: control.leftPadding 0072 anchors.rightMargin: control.rightPadding 0073 anchors.bottomMargin: control.bottomPadding 0074 0075 spacing: Kirigami.Units.largeSpacing 0076 0077 move: Transition { 0078 NumberAnimation { properties: "x,y"; duration: Kirigami.Units.shortDuration } 0079 } 0080 0081 Kirigami.Heading { 0082 id: heading 0083 width: parent.width 0084 text: control.rowData.title ? control.rowData.title : "" 0085 visible: control.rowData.isTitle && !control.active 0086 level: 2 0087 0088 onHeightChanged: Qt.callLater(control.updateMinimumHeight) 0089 } 0090 0091 TextField { 0092 width: parent.width 0093 text: control.rowData.title ? control.rowData.title : "" 0094 visible: control.rowData.isTitle && control.active 0095 onTextEdited: control.rowData.title = text 0096 } 0097 0098 Repeater { 0099 id: repeater 0100 model: PageDataModel { data: control.rowData } 0101 0102 onItemAdded: Qt.callLater(control.updateMinimumHeight) 0103 onItemRemoved: Qt.callLater(control.updateMinimumHeight) 0104 0105 ColumnControl { 0106 height: parent.height 0107 width: (parent.width - parent.spacing * (repeater.count - 1)) / repeater.count 0108 0109 onMinimumContentHeightChanged: Qt.callLater(control.updateMinimumHeight) 0110 onMinimumHeightChanged: Qt.callLater(control.updateMinimumHeight) 0111 0112 activeItem: control.activeItem 0113 single: control.rowData.children.length == 1 0114 columnData: model.data 0115 index: model.index 0116 0117 onSelect: item => control.select(item) 0118 onRemove: control.rowData.removeChild(index) 0119 onMove: (from, to) => control.rowData.moveChild(from, to) 0120 0121 onMissingSensorsChanged: (id, title, sensors) => control.missingSensorsChanged(id, title, sensors) 0122 } 0123 } 0124 } 0125 0126 toolbar.addActions: [ 0127 Kirigami.Action { 0128 text: i18nc("@action", "Add Column") 0129 onTriggered: control.addColumn(control.rowData.children.length) 0130 } 0131 ] 0132 toolbar.addVisible: !control.rowData.isTitle 0133 toolbar.page: page 0134 0135 toolbar.extraActions: [ 0136 Kirigami.Action { 0137 text: i18nc("@action", "Height") 0138 visible: !control.rowData.isTitle 0139 0140 Kirigami.Action { 0141 text: i18nc("@action:inmenu", "Balanced") 0142 tooltip: i18nc("@info:tooltip", "Try and use the same height across different rows.") 0143 ActionGroup.group: heightGroup 0144 checkable: true 0145 checked: control.rowData.heightMode == "balanced" 0146 onTriggered: control.rowData.heightMode = "balanced" 0147 } 0148 0149 Kirigami.Action { 0150 text: i18nc("@action:inmenu", "Minimum") 0151 tooltip: i18nc("@info:tooltop", "Use the minimum amount of height needed to display contents correctly.") 0152 ActionGroup.group: heightGroup 0153 checkable: true 0154 checked: control.rowData.heightMode == "minimum" 0155 onTriggered: control.rowData.heightMode = "minimum" 0156 } 0157 0158 Kirigami.Action { 0159 text: i18nc("@action:inmenu", "Maximum") 0160 tooltip: i18nc("@info:tooltip", "Try to use as much height as possible.") 0161 ActionGroup.group: heightGroup 0162 checkable: true 0163 checked: control.rowData.heightMode == "maximum" 0164 onTriggered: control.rowData.heightMode = "maximum" 0165 } 0166 } 0167 ] 0168 0169 ActionGroup { id: heightGroup } 0170 0171 function addColumn(index) { 0172 control.rowData.insertChild(index, {"name": "column-" + index, showBackground: true}) 0173 } 0174 0175 Component.onCompleted: { 0176 if (rowData.children.length == 0 && !rowData.isTitle) { 0177 addColumn(0) 0178 } 0179 } 0180 }