Warning, /pim/kube/framework/qml/ComboBox.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  *  Copyright (C) 2017 Michael Bohlender, <bohlender@kolabsys.com>
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.7
0020 import QtQuick.Controls 2.0
0021 import QtQuick.Templates 2.0 as T
0022 import org.kube.framework 1.0 as Kube
0023 
0024 T.ComboBox {
0025     id: root
0026 
0027     implicitWidth: Kube.Units.gridUnit * 10
0028     implicitHeight: Kube.Units.gridUnit + Kube.Units.smallSpacing * 2
0029 
0030     baselineOffset: contentItem.y + contentItem.baselineOffset
0031 
0032     spacing: Kube.Units.largeSpacing
0033     padding: Kube.Units.smallSpacing
0034 
0035     //Autoselect the first item
0036     onCountChanged: {
0037         if (currentIndex < 0) {
0038             currentIndex = 0
0039         }
0040     }
0041 
0042     contentItem: Kube.Label {
0043         leftPadding: Kube.Units.smallSpacing
0044         rightPadding: Kube.Units.smallSpacing
0045 
0046         text: root.displayText
0047         horizontalAlignment: Text.AlignLeft
0048         verticalAlignment: Text.AlignVCenter
0049         elide: Text.ElideRight
0050     }
0051 
0052     indicator: Kube.Icon {
0053         x: root.mirrored ? root.leftPadding : root.width - width - root.rightPadding
0054         y: root.topPadding + (root.availableHeight - height) / 2
0055         iconName: Kube.Icons.goDown
0056     }
0057 
0058     background: Rectangle {
0059         border.width: 1
0060         border.color: root.activeFocus ? Kube.Colors.highlightColor : Kube.Colors.buttonColor
0061         color: Kube.Colors.viewBackgroundColor
0062     }
0063 
0064     popup: T.Popup {
0065         width: root.width
0066         implicitHeight: Math.min(Kube.Units.gridUnit * 10, contentItem.implicitHeight)
0067 
0068         contentItem: Kube.ListView {
0069             clip: true
0070             implicitHeight: contentHeight
0071             model: root.popup.visible ? root.delegateModel : null
0072             currentIndex: root.highlightedIndex
0073             ScrollBar.vertical: Kube.ScrollBar {}
0074         }
0075 
0076         background: Rectangle {
0077             color: Kube.Colors.backgroundColor
0078             border.color: Kube.Colors.buttonColor
0079             border.width: 1
0080         }
0081     }
0082 
0083     delegate: Kube.ListDelegate {
0084         width: root.popup.width
0085         height: Kube.Units.gridUnit * 1.5
0086 
0087         contentItem: Kube.Label {
0088             padding: Kube.Units.smallSpacing
0089             text: root.textRole ? (Array.isArray(root.model) ? modelData[root.textRole] : model[root.textRole]) : modelData
0090             color:  root.highlightedIndex === index ? Kube.Colors.highlightedTextColor : Kube.Colors.textColor
0091         }
0092 
0093         MouseArea {
0094             anchors.fill: parent
0095 
0096             onClicked: {
0097                 root.currentIndex = root.highlightedIndex
0098                 root.activated(root.highlightedIndex)
0099                 root.popup.close()
0100             }
0101         }
0102     }
0103 }