Warning, /pim/kube/framework/qml/GenericListDelegate.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 Copyright (C) 2021 Christian Mollekopf, <christian@mkpf.ch>
0003
0004 This program is free software; you can redistribute it and/or modify
0005 it under the terms of the GNU General Public License as published by
0006 the Free Software Foundation; either version 2 of the License, or
0007 (at your option) any later version.
0008
0009 This program is distributed in the hope that it will be useful,
0010 but WITHOUT ANY WARRANTY; without even the implied warranty of
0011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0012 GNU General Public License for more details.
0013
0014 You should have received a copy of the GNU General Public License along
0015 with this program; if not, write to the Free Software Foundation, Inc.,
0016 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0017 */
0018
0019 import QtQuick 2.9
0020 import QtQuick.Controls 2.0
0021 import QtQuick.Layouts 1.1
0022
0023 import org.kube.framework 1.0 as Kube
0024
0025 Kube.ListDelegate {
0026 id: delegateRoot
0027 property bool buttonsVisible: delegateRoot.hovered
0028
0029 property var mainText
0030 property var subText: null
0031 property var disabled: false
0032 property var active: false
0033 property var strikeout: false
0034 property var bold: false
0035 property var dateText
0036 property var dotColor: null
0037 property var counter: 0
0038 property var subtextVisible: delegateRoot.hovered
0039 property var subtextDisabled: false
0040 property Component buttonDelegate: null
0041 property Component statusDelegate: null
0042
0043
0044 signal dropped(var dropAction, var dropTarget)
0045
0046 height: Kube.Units.gridUnit * 3 + 2 * Kube.Units.smallSpacing
0047
0048 color: Kube.Colors.viewBackgroundColor
0049 border.color: Kube.Colors.backgroundColor
0050 border.width: 1
0051
0052 MouseArea {
0053 id: mouseArea
0054 anchors.fill: parent
0055 hoverEnabled: true
0056 drag.target: parent
0057 drag.filterChildren: true
0058 onReleased: {
0059 var dropAction = parent.Drag.drop()
0060 delegateRoot.dropped(dropAction, parent.Drag.target)
0061 }
0062 onClicked: delegateRoot.clicked()
0063 }
0064
0065 states: [
0066 State {
0067 name: "dnd"
0068 when: mouseArea.drag.active
0069
0070 PropertyChanges {target: mouseArea; cursorShape: Qt.ClosedHandCursor}
0071 PropertyChanges {target: delegateRoot; opacity: 0.5}
0072 ParentChange {target: delegateRoot; parent: root; x: x; y: y}
0073 }
0074 ]
0075
0076 Drag.active: mouseArea.drag.active
0077 Drag.hotSpot.x: mouseArea.mouseX
0078 Drag.hotSpot.y: mouseArea.mouseY
0079 Drag.source: delegateRoot
0080
0081 Item {
0082 id: content
0083
0084 anchors {
0085 fill: parent
0086 margins: Kube.Units.smallSpacing
0087 }
0088
0089 property color unreadColor: delegateRoot.disabled ? delegateRoot.disabledTextColor : ((delegateRoot.active && !delegateRoot.highlighted) ? Kube.Colors.highlightColor : delegateRoot.textColor)
0090
0091 Rectangle {
0092 id: colorDot
0093 anchors {
0094 verticalCenter: parent.verticalCenter
0095 left: parent.left
0096 }
0097 visible: delegateRoot.dotColor
0098 width: Kube.Units.smallSpacing
0099 height: width
0100 radius: width / 2
0101
0102 color: delegateRoot.dotColor ? delegateRoot.dotColor : ""
0103 }
0104 Column {
0105 anchors {
0106 verticalCenter: parent.verticalCenter
0107 left: parent.left
0108 leftMargin: colorDot.visible ? Kube.Units.largeSpacing : Kube.Units.smallSpacing
0109 }
0110
0111 Kube.Label{
0112 id: mainLabel
0113 width: content.width - Kube.Units.gridUnit * 3
0114 text: delegateRoot.mainText
0115 color: content.unreadColor
0116 font.strikeout: delegateRoot.strikeout
0117 font.bold: delegateRoot.bold
0118 maximumLineCount: 2
0119 wrapMode: Text.WordWrap
0120 elide: Text.ElideRight
0121 }
0122 Kube.Label {
0123 id: subLabel
0124 visible: delegateRoot.subtextVisible
0125 text: delegateRoot.subText ? delegateRoot.subText : ""
0126 color: delegateRoot.subtextDisabled ? delegateRoot.disabledTextColor : delegateRoot.textColor
0127 font.italic: true
0128 width: delegateRoot.width - Kube.Units.gridUnit * 3
0129 elide: Text.ElideRight
0130 }
0131 }
0132
0133 Kube.Label {
0134 id: dateLabel
0135 anchors {
0136 right: parent.right
0137 bottom: parent.bottom
0138 }
0139
0140 visible: delegateRoot.dateText && !delegateRoot.buttonsVisible
0141 text: delegateRoot.dateText
0142 font.italic: true
0143 color: delegateRoot.disabledTextColor
0144 font.pointSize: Kube.Units.tinyFontSize
0145 }
0146 Kube.Label {
0147 id: counter
0148 anchors {
0149 right: parent.right
0150 margins: Kube.Units.smallSpacing
0151 }
0152 text: delegateRoot.counter ? delegateRoot.counter : ""
0153 color: content.unreadColor
0154 visible: delegateRoot.counter > 1 && !delegateRoot.buttonsVisible
0155
0156 }
0157 }
0158
0159 Loader {
0160 anchors {
0161 right: parent.right
0162 verticalCenter: parent.verticalCenter
0163 // We use twice the margin to compensate for button padding
0164 margins: delegateRoot.buttonsVisible ? Kube.Units.smallSpacing : 2 * Kube.Units.smallSpacing
0165 }
0166 active: delegateRoot.buttonsVisible && delegateRoot.buttonDelegate || delegateRoot.statusDelegate
0167 opacity: delegateRoot.buttonsVisible ? 0.7 : 1
0168 sourceComponent: delegateRoot.buttonsVisible ? delegateRoot.buttonDelegate : delegateRoot.statusDelegate
0169 }
0170 }