Warning, /education/kstars/kstars/kstarslite/qml/modules/KSListView.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2016 Artem Fedoskin <afedoskin3@gmail.com>
0002 // SPDX-License-Identifier: GPL-2.0-or-later
0003 
0004 import QtQuick 2.6
0005 import QtQuick.Layouts 1.1
0006 import QtQuick.Controls 2.0
0007 import "../constants/" 1.0
0008 
0009 ListView {
0010     id: listView
0011     clip: true
0012     property bool checkCurrent: false
0013     property bool checkable: false
0014     property bool onClickCheck: true //true if the item should be be mapped with a blue rectangle when clicked
0015 
0016     property int maxWidth: 0
0017     property bool modelIsChanged: false
0018     implicitWidth: maxWidth
0019     //To skip the case when contentItem.height equals to 99000+
0020     implicitHeight: contentItem.height >= window.height ? window.height : contentItem.height
0021 
0022     //For some reason we can't use num constant inside states so we wrap sysPalette as property
0023     property SystemPalette sysPalette: Num.sysPalette
0024 
0025     onCountChanged: {
0026         for(var child in listView.contentItem.children) {
0027             var childWidth = listView.contentItem.children[child].textWidth
0028             if(childWidth == undefined) childWidth = 0
0029             maxWidth = maxWidth > childWidth ? maxWidth : childWidth
0030         }
0031     }
0032 
0033     ScrollIndicator.vertical: ScrollIndicator { }
0034     property string textRole: ""
0035 
0036     signal clicked(var text, var index, var checked)
0037     property bool modelIsArray: false
0038 
0039     onModelChanged: {
0040         modelIsArray = !model ? model.constructor === Array : false
0041     }
0042 
0043     delegate: Rectangle {
0044         id: delegateRect
0045         width: parent.width
0046         height: objName.contentHeight + 30
0047         property int textWidth: objRow.width + objRow.anchors.leftMargin*2
0048         property bool checked: false
0049         property string visibleText: objName.text
0050         color: sysPalette.base
0051 
0052         border {
0053             color: Num.sysPalette.light//"#becad5"
0054             width: 1
0055         }
0056 
0057         Behavior on color {
0058             ColorAnimation  { duration: 200 }
0059         }
0060 
0061         states: [
0062             State {
0063                 name: "hovered"
0064                 PropertyChanges {
0065                     target: delegateRect
0066                     color: sysPalette.highlight //"#d0e8fa"
0067                 }
0068                 PropertyChanges {
0069                     target: objName
0070                     color: sysPalette.highlightedText //"#31363b"
0071                 }
0072             },
0073             State {
0074                 name: "selected"
0075                 PropertyChanges {
0076                     target: delegateRect
0077                     color: sysPalette.button//"#2196F3"
0078                 }
0079                 PropertyChanges {
0080                     target: objName
0081                     color: sysPalette.buttonText//"#eff0fa"
0082                 }
0083             },
0084             State {
0085                 name: "default"
0086                 PropertyChanges {
0087                     target: delegateRect
0088                     color: sysPalette.base//"white"
0089                 }
0090                 PropertyChanges {
0091                     target: objName
0092                     color: sysPalette.text//"black"
0093                 }
0094             }
0095         ]
0096 
0097         MouseArea {
0098             id: delMouseArea
0099             anchors.fill: parent
0100             hoverEnabled: true
0101 
0102             function hoveredColor() {
0103                 if(pressed) {
0104                     delegateRect.state = "selected"
0105                 } else {
0106                     if(containsMouse) {
0107                         delegateRect.state = "hovered"
0108                     } else {
0109                         delegateRect.state = "default"
0110                     }
0111                 }
0112             }
0113 
0114             onContainsMouseChanged: {
0115                 hoveredColor()
0116             }
0117 
0118             onPressedChanged: {
0119                 hoveredColor()
0120             }
0121 
0122             onClicked: {
0123                 if(onClickCheck) listView.currentIndex = model.index
0124                 if(checkable) delegateRect.checked = !delegateRect.checked
0125                 listView.clicked(objName.text, model.index, delegateRect.checked)
0126             }
0127         }
0128 
0129         RowLayout {
0130             id: objRow
0131 
0132             anchors {
0133                 verticalCenter: parent.verticalCenter
0134                 left: parent.left
0135                 leftMargin: 20
0136             }
0137 
0138             Rectangle {
0139                 visible: (checkCurrent && listView.currentIndex == model.index) || (checkable && delegateRect.checked)
0140                 color: objName.color //"#2173f3"
0141                 width: height
0142                 height: objName.font.pixelSize/2
0143                 radius: width * 0.5
0144             }
0145 
0146             KSText {
0147                 id: objName
0148 
0149                 text: textRole == "" ? modelData : listView.modelIsArray ? modelData[textRole] : model[textRole]
0150                 wrapMode: Text.WrapAnywhere
0151 
0152                 Behavior on color {
0153                     ColorAnimation  { duration: 200 }
0154                 }
0155             }
0156         }
0157     }
0158 }