Warning, /maui/mauikit/src/style.5/ComboBox.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.15
0038 import QtQuick.Window 2.15
0039 import QtQuick.Templates 2.15 as T
0040 
0041 import org.mauikit.controls 1.3 as Maui
0042 import QtGraphicalEffects 1.0
0043 
0044 T.ComboBox
0045 {
0046     id: control
0047 
0048     enabled: control.count > 0
0049     hoverEnabled: !Maui.Handy.isMobile
0050     
0051     opacity: control.enabled ? 1 : 0.5
0052     
0053     property alias popupContent: _popup.contentItem
0054     
0055     //NOTE: typeof necessary to not have warnings on Qt 5.7
0056     Maui.Theme.colorSet: typeof(editable) != "undefined" && editable ? Maui.Theme.View : Maui.Theme.Button
0057     Maui.Theme.inherit: false
0058     
0059     property alias icon : _icon
0060     
0061     readonly property bool responsive: Maui.Handy.isMobile
0062     
0063     readonly property size parentWindow : parent.Window.window ? Qt.size(parent.Window.window.width, parent.Window.window.height) : Qt.size(0,0)
0064         
0065     readonly property int preferredWidth : 200
0066     
0067     implicitWidth: Math.max(preferredWidth, implicitContentWidth + leftPadding + rightPadding)    
0068     implicitHeight: Math.max(implicitContentHeight, Maui.Style.iconSize) + topPadding + bottomPadding
0069         
0070     padding: Maui.Style.defaultPadding
0071     spacing: Maui.Style.space.small
0072     
0073     font: Maui.Style.defaultFont
0074     
0075            delegate: MenuItem
0076     {
0077         width: ListView.view.width
0078         text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData
0079         //        Material.foreground: control.currentIndex === index ? parent.Material.accent : parent.Material.foreground
0080         highlighted: control.highlightedIndex === index
0081         hoverEnabled: control.hoverEnabled
0082         Maui.Theme.colorSet: control.Maui.Theme.inherit ? control.Maui.Theme.colorSet : Maui.Theme.View
0083         Maui.Theme.inherit: control.Maui.Theme.inherit        
0084     }
0085     
0086     indicator: Maui.Icon
0087     {
0088         x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding 
0089         y: (control.topPadding + (control.availableHeight - height) / 2) - 2
0090         color: Maui.Theme.textColor
0091         source: "qrc:/assets/arrow-down.svg"
0092         height: 8
0093         width: 8
0094         
0095         Behavior on color
0096         {
0097             Maui.ColorTransition{}
0098         }    
0099     }    
0100 
0101     contentItem: T.TextField
0102     {
0103         padding: 0
0104         leftPadding : _icon.visible ? _icon.width + Maui.Style.space.medium : 0
0105         rightPadding: control.indicator ? control.indicator.width : 0
0106         text: control.editable ? control.editText : control.displayText
0107         
0108         enabled: control.editable
0109         autoScroll: control.editable
0110         readOnly: control.down
0111         inputMethodHints: control.inputMethodHints
0112         validator: control.validator
0113         renderType: Screen.devicePixelRatio % 1 !== 0 ? Text.QtRendering : Text.NativeRendering
0114         selectByMouse: !Maui.Handy.isMobile
0115         
0116         font: control.font
0117         color: Maui.Theme.textColor
0118         selectionColor:  control.Maui.Theme.highlightColor
0119         selectedTextColor: control.Maui.Theme.highlightedTextColor
0120         verticalAlignment: Text.AlignVCenter
0121         //        cursorDelegate: CursorDelegate { }
0122         
0123         Maui.Icon
0124         {
0125             id: _icon
0126             visible: source ? true : false
0127             height: visible ? Maui.Style.iconSize : 0
0128             width: height
0129             color: Maui.Theme.textColor
0130             anchors.verticalCenter: parent.verticalCenter
0131         }
0132     }
0133     
0134     background: Rectangle
0135     {        
0136         radius: Maui.Style.radiusV
0137         
0138         color: control.hovered ? Maui.Theme.hoverColor : Maui.Theme.backgroundColor
0139 
0140         
0141         MouseArea
0142         {
0143             property int wheelDelta: 0
0144             
0145             anchors
0146             {
0147                 fill: parent
0148                 leftMargin: control.leftPadding
0149                 rightMargin: control.rightPadding
0150             }
0151             
0152             acceptedButtons: Qt.NoButton
0153             
0154             onWheel:
0155             {
0156                 var delta = wheel.angleDelta.y || wheel.angleDelta.x
0157                 wheelDelta += delta;
0158                 // magic number 120 for common "one click"
0159                 // See: https://doc.qt.io/qt-5/qml-qtquick-wheelevent.html#angleDelta-prop
0160                 while (wheelDelta >= 120) {
0161                     wheelDelta -= 120;
0162                     control.decrementCurrentIndex();
0163                 }
0164                 while (wheelDelta <= -120) {
0165                     wheelDelta += 120;
0166                     control.incrementCurrentIndex();
0167                 }
0168             }
0169         }
0170         
0171         Behavior on color
0172         {
0173             Maui.ColorTransition{}
0174         }
0175         
0176     }
0177 
0178     
0179     popup: T.Popup
0180     {
0181         id: _popup
0182         
0183         Maui.Theme.colorSet: Maui.Theme.Window
0184         Maui.Theme.inherit: false
0185         
0186         parent: control.responsive ? T.Overlay.overlay : control
0187                 
0188         readonly property int finalY : control.responsive ? control.parentWindow.height - height : ( control.editable ? control.height - 5 : 0)
0189         readonly property int preferredWidth: control.width
0190         
0191         y: finalY
0192         x: control.responsive ? Math.round(control.parentWindow.width/2 - width/2) : 0
0193         
0194         implicitWidth:  Math.min(control.parentWindow.width, Math.max(preferredWidth, implicitContentWidth + leftPadding + rightPadding ))
0195         
0196         implicitHeight: Math.min(implicitContentHeight + topPadding + bottomPadding, (control.responsive ? control.parentWindow.height *0.7 : control.parentWindow.height))
0197         
0198         transformOrigin: Item.Top
0199         
0200         padding: 0
0201         spacing: Maui.Style.defaultSpacing    
0202         
0203         margins: Maui.Style.space.medium    
0204         
0205         closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
0206         
0207         enter:  Maui.Style.enableEffects ? (control.responsive ? _responsiveEnterTransition : _enterTransition) : null
0208         exit: Maui.Style.enableEffects ? (control.responsive ? _responsiveExitTransition : _exitTransition) : null
0209         
0210         Transition
0211         {
0212             id: _enterTransition
0213             enabled: Maui.Style.enableEffects
0214             // grow_fade_in
0215             NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 }
0216             NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 }
0217         }
0218         
0219         
0220         Transition
0221         {
0222             id: _exitTransition
0223             enabled: Maui.Style.enableEffects
0224             
0225             // shrink_fade_out
0226             NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 }
0227             NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 }
0228         }
0229         
0230         Transition
0231         {
0232             id: _responsiveEnterTransition
0233             enabled: Maui.Style.enableEffects
0234             
0235             ParallelAnimation
0236             {
0237                 //NumberAnimation { property: "y"; from: control.parentWindow.height; to: control.finalY; easing.type: Easing.OutQuint; duration: 220 }
0238                 NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 }
0239             }
0240         }
0241         
0242         Transition
0243         {
0244             id: _responsiveExitTransition
0245             enabled: Maui.Style.enableEffects
0246             
0247             ParallelAnimation
0248             {
0249                 //NumberAnimation { property: "y"; from: control.finalY; to: control.parentWindow.height; easing.type: Easing.OutQuint; duration: 220 }
0250                 NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 }
0251             }
0252         }
0253         
0254         contentItem: Maui.ListBrowser
0255         {
0256             clip: true
0257             
0258             implicitWidth: {
0259                 var maxWidth = 0;
0260                 for (var i = 0; i < contentItem.children.length; ++i) {
0261                     maxWidth = Math.max(maxWidth, contentItem.children[i].implicitWidth);
0262                 }
0263                 return Math.min(250, maxWidth);
0264             }
0265             
0266             model: control.delegateModel
0267             spacing: control.spacing
0268             // padding: 0
0269             currentIndex: control.highlightedIndex
0270         }
0271         
0272         background: Rectangle
0273         {
0274             color: _popup.Maui.Theme.backgroundColor
0275             radius: Maui.Style.radiusV
0276                        
0277             Behavior on color
0278             {
0279                 Maui.ColorTransition{}
0280                 
0281             }
0282               MouseArea
0283         {
0284             property int wheelDelta: 0
0285             
0286             anchors
0287             {
0288                 fill: parent
0289                 leftMargin: control.leftPadding
0290                 rightMargin: control.rightPadding
0291             }
0292             
0293             acceptedButtons: Qt.NoButton
0294             
0295             onWheel:
0296             {
0297                 var delta = wheel.angleDelta.y || wheel.angleDelta.x
0298                 wheelDelta += delta;
0299                 // magic number 120 for common "one click"
0300                 // See: https://doc.qt.io/qt-5/qml-qtquick-wheelevent.html#angleDelta-prop
0301                 while (wheelDelta >= 120) {
0302                     wheelDelta -= 120;
0303                     control.decrementCurrentIndex();
0304                 }
0305                 while (wheelDelta <= -120) {
0306                     wheelDelta += 120;
0307                     control.incrementCurrentIndex();
0308                 }
0309             }
0310         }
0311             
0312             layer.enabled: true
0313             layer.effect: DropShadow
0314             {
0315                 horizontalOffset: 0
0316                 verticalOffset: 0
0317                 radius: 8
0318                 samples: 16
0319                 color: "#80000000"
0320                 transparentBorder: true
0321             }
0322         }
0323     }
0324 }