Warning, /maui/mauikit/src/controls.5/ItemDelegate.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * Copyright 2018 Camilo Higuita <milo.h@aol.com>
0003 *
0004 * This program is free software; you can redistribute it and/or modify
0005 * it under the terms of the GNU Library General Public License as
0006 * published by the Free Software Foundation; either version 2, 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 Library General Public
0015 * License along with this program; if not, write to the
0016 * Free Software Foundation, Inc.,
0017 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0018 */
0019
0020 import QtQuick 2.14
0021 import QtQuick.Controls 2.14
0022
0023 import org.mauikit.controls 1.3 as Maui
0024 import QtQuick.Templates 2.15 as T
0025
0026 /**
0027 * ItemDelegate
0028 * A global sidebar for the application window that can be collapsed.
0029 *
0030 *
0031 *
0032 *
0033 *
0034 *
0035 */
0036 T.Control
0037 {
0038 id: control
0039
0040 hoverEnabled: !Maui.Handy.isMobile
0041
0042 padding: 0
0043
0044 focus: true
0045
0046 ToolTip.delay: 1000
0047 ToolTip.timeout: 5000
0048 ToolTip.visible: control.hovered && control.tooltipText
0049 ToolTip.text: control.tooltipText
0050
0051 /**
0052 * tooltipText : string
0053 */
0054 property string tooltipText
0055
0056
0057 /**
0058 * content :
0059 */
0060 default property alias content : _content.data
0061
0062 /**
0063 * mouseArea :
0064 */
0065 property alias mouseArea : _mouseArea
0066
0067 /**
0068 * draggable :
0069 */
0070 property bool draggable: false
0071
0072 /**
0073 * isCurrentItem :
0074 */
0075 property alias isCurrentItem : control.highlighted
0076
0077 /**
0078 * containsPress :
0079 */
0080 property alias containsPress: _mouseArea.containsPress
0081
0082 /**
0083 * highlighted :
0084 */
0085 property bool highlighted: control.isCurrentItem
0086
0087 property int radius: Maui.Style.radiusV
0088
0089 property bool flat : !Maui.Handy.isMobile
0090
0091 /**
0092 * pressed :
0093 */
0094 signal pressed(var mouse)
0095
0096 /**
0097 * pressAndHold :
0098 */
0099 signal pressAndHold(var mouse)
0100
0101 /**
0102 * clicked :
0103 */
0104 signal clicked(var mouse)
0105
0106 /**
0107 * rightClicked :
0108 */
0109 signal rightClicked(var mouse)
0110
0111 /**
0112 * doubleClicked :
0113 */
0114 signal doubleClicked(var mouse)
0115
0116 Drag.active: mouseArea.drag.active && control.draggable
0117 Drag.dragType: Drag.Automatic
0118 // Drag.supportedActions: Qt.MoveAction
0119 Drag.hotSpot.x: control.width / 2
0120 Drag.hotSpot.y: control.height / 2
0121
0122 contentItem : MouseArea
0123 {
0124 id: _mouseArea
0125
0126 propagateComposedEvents: false
0127 acceptedButtons: Qt.RightButton | Qt.LeftButton
0128
0129 property bool pressAndHoldIgnored : false
0130
0131 onClicked:
0132 {
0133 if(mouse.button === Qt.RightButton)
0134 {
0135 control.rightClicked(mouse)
0136 }
0137 else
0138 {
0139 control.clicked(mouse)
0140 }
0141 }
0142
0143 onDoubleClicked:
0144 {
0145 control.doubleClicked(mouse)
0146 }
0147
0148 onPressed:
0149 {
0150 if(control.draggable && mouse.source !== Qt.MouseEventSynthesizedByQt)
0151 {
0152 drag.target = _content
0153 control.grabToImage(function(result)
0154 {
0155 control.Drag.imageSource = result.url
0156 })
0157 }else
0158 {
0159 // drag.target = null
0160 }
0161 //
0162 _mouseArea.pressAndHoldIgnored = false
0163 control.pressed(mouse)
0164 }
0165
0166 onReleased :
0167 {
0168 _content.x = 0
0169 _content.y = 0
0170 // if(control.draggable)
0171 // {
0172 // drag.target = null
0173 // }
0174 console.log("DROPPING DRAG", _mouseArea.pressAndHoldIgnored)
0175
0176 if(!mouseArea.drag.active && _mouseArea.pressAndHoldIgnored)
0177 {
0178 control.pressAndHold(mouse)
0179 _mouseArea.pressAndHoldIgnored = false
0180 }
0181 }
0182
0183 onPressAndHold :
0184 {
0185 xAnim.running = control.draggable || mouse.source === Qt.MouseEventSynthesizedByQt
0186
0187 _mouseArea.pressAndHoldIgnored = true
0188
0189 if(control.draggable && mouse.source === Qt.MouseEventSynthesizedByQt)
0190 {
0191 drag.target = _content
0192 console.log("GETTING DRAG", _mouseArea.pressAndHoldIgnored)
0193 control.grabToImage(function(result)
0194 {
0195 control.Drag.imageSource = result.url
0196 })
0197
0198 }else
0199 {
0200 // drag.target = null
0201 control.pressAndHold(mouse)
0202 }
0203 }
0204
0205 onPositionChanged:
0206 {
0207 if(control.draggable)
0208 {
0209 console.log("MOVING DRAG", _mouseArea.pressAndHoldIgnored)
0210 _mouseArea.pressAndHoldIgnored = false
0211 mouse.accepted = true
0212 }
0213 }
0214
0215 Item
0216 {
0217 id: _content
0218
0219 height: parent.height
0220 width: parent.width
0221
0222 SequentialAnimation on y
0223 {
0224 id: xAnim
0225 // Animations on properties start running by default
0226 running: false
0227 loops: 3
0228 NumberAnimation { from: 0; to: -10; duration: 200; easing.type: Easing.InBack }
0229 NumberAnimation { from: -10; to: 0; duration: 200; easing.type: Easing.OutBack }
0230 PauseAnimation { duration: 50 } // This puts a bit of time between the loop
0231 }
0232 }
0233 }
0234
0235 background: Rectangle
0236 {
0237 color: control.isCurrentItem || control.containsPress ? Maui.Theme.highlightColor : ( control.hovered ? Maui.Theme.hoverColor : "transparent")
0238
0239 radius: control.radius
0240 }
0241 }
0242