Warning, /maui/mauikit/src/style.5/Tumbler.qml is written in an unsupported language. File is not indexed.

0001 /****************************************************************************
0002 **
0003 ** Copyright (C) 2017 The Qt Company Ltd.
0004 ** Contact: http://www.qt.io/licensing/
0005 **
0006 ** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit.
0007 **
0008 ** $QT_BEGIN_LICENSE:LGPL3$
0009 ** Commercial License Usage
0010 ** Licensees holding valid commercial Qt licenses may use this file in
0011 ** accordance with the commercial license agreement provided with the
0012 ** Software or, alternatively, in accordance with the terms contained in
0013 ** a written agreement between you and The Qt Company. For licensing terms
0014 ** and conditions see http://www.qt.io/terms-conditions. For further
0015 ** information use the contact form at http://www.qt.io/contact-us.
0016 **
0017 ** GNU Lesser General Public License Usage
0018 ** Alternatively, this file may be used under the terms of the GNU Lesser
0019 ** General Public License version 3 as published by the Free Software
0020 ** Foundation and appearing in the file LICENSE.LGPLv3 included in the
0021 ** packaging of this file. Please review the following information to
0022 ** ensure the GNU Lesser General Public License version 3 requirements
0023 ** will be met: https://www.gnu.org/licenses/lgpl.html.
0024 **
0025 ** GNU General Public License Usage
0026 ** Alternatively, this file may be used under the terms of the GNU
0027 ** General Public License version 2.0 or later as published by the Free
0028 ** Software Foundation and appearing in the file LICENSE.GPL included in
0029 ** the packaging of this file. Please review the following information to
0030 ** ensure the GNU General Public License version 2.0 requirements will be
0031 ** met: http://www.gnu.org/licenses/gpl-2.0.html.
0032 **
0033 ** $QT_END_LICENSE$
0034 **
0035 ****************************************************************************/
0036 
0037 import QtQuick 2.12
0038 import QtQuick.Controls.impl 2.12
0039 import QtQuick.Templates 2.12 as T
0040 import org.mauikit.controls 1.3 as Maui
0041 
0042 T.Tumbler 
0043 {
0044     id: control
0045     
0046     padding: Maui.Style.space.medium
0047 
0048     implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
0049                             implicitContentWidth + leftPadding + rightPadding) || 60 // ### remove 60 in Qt 6
0050     implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
0051                              implicitContentHeight + topPadding + bottomPadding) || 200 // ### remove 200 in Qt 6
0052 
0053     delegate: Text
0054     {
0055         text: modelData
0056         color: Maui.Theme.textColor
0057         font: control.font
0058         opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6)
0059         horizontalAlignment: Text.AlignHCenter
0060         verticalAlignment: Text.AlignVCenter
0061     }
0062 
0063     contentItem: TumblerView
0064     {
0065         implicitWidth: 60
0066         implicitHeight: 200
0067         model: control.model
0068         delegate: control.delegate
0069         path: Path
0070         {
0071             
0072             startX: control.contentItem.width / 2
0073             startY: -control.contentItem.delegateHeight / 2
0074             PathLine
0075             {
0076                 x: control.contentItem.width / 2
0077                 y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2
0078             }
0079         }
0080 
0081         property real delegateHeight: control.availableHeight / control.visibleItemCount
0082     }
0083     
0084     background: Rectangle
0085     {
0086         color: Maui.Theme.backgroundColor
0087         radius: Maui.Style.radiusV
0088         
0089         MouseArea
0090         {
0091             property int wheelDelta: 0
0092             
0093             anchors
0094             {
0095                 fill: parent
0096                 leftMargin: control.leftPadding
0097                 rightMargin: control.rightPadding
0098             }
0099             
0100             acceptedButtons: Qt.NoButton
0101             
0102             onWheel:
0103             {
0104                 var delta = wheel.angleDelta.y || wheel.angleDelta.x
0105                 wheelDelta += delta;
0106                 // magic number 120 for common "one click"
0107                 // See: https://doc.qt.io/qt-5/qml-qtquick-wheelevent.html#angleDelta-prop
0108                 while (wheelDelta >= 120) {
0109                     wheelDelta -= 120;
0110                     control.currentIndex = Math.min(control.count-1, control.currentIndex + 1);
0111                 }
0112                 while (wheelDelta <= -120) {
0113                     wheelDelta += 120;
0114                     control.currentIndex = Math.max(0, control.currentIndex -1);
0115                 }
0116             }
0117         }
0118     }
0119 }