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

0001 // Copyright 2018-2020 Camilo Higuita <milo.h@aol.com>
0002 // Copyright 2018-2020 Nitrux Latinoamericana S.C.
0003 //
0004 // SPDX-License-Identifier: GPL-3.0-or-later
0005 
0006 
0007 import QtQuick 2.15
0008 import QtQuick.Controls 2.15
0009 import QtQml.Models 2.3
0010 import QtGraphicalEffects 1.0
0011 
0012 import org.mauikit.controls 1.3 as Maui
0013 
0014 Pane
0015 {
0016     id: control
0017     
0018     Maui.Theme.colorSet: Maui.Theme.Window
0019     Maui.Theme.inherit: false
0020     
0021     default property alias content: _container.data
0022         
0023         // the index of the item in the split view layout
0024         readonly property int splitIndex : ObjectModel.index
0025         
0026         property int minimumWidth : 200
0027         property int minimumHeight : 100
0028         
0029         SplitView.fillHeight: true
0030         SplitView.fillWidth: true
0031         
0032         SplitView.preferredHeight: SplitView.view.orientation === Qt.Vertical ? SplitView.view.height / (SplitView.view.count) :  SplitView.view.height
0033         SplitView.minimumHeight: SplitView.view.orientation === Qt.Vertical ?  minimumHeight : 0
0034         
0035         SplitView.preferredWidth: SplitView.view.orientation === Qt.Horizontal ? SplitView.view.width / (SplitView.view.count) : SplitView.view.width
0036         SplitView.minimumWidth: SplitView.view.orientation === Qt.Horizontal ? minimumWidth :  0
0037         
0038         clip: SplitView.view.orientation === Qt.Vertical && SplitView.view.count === 2 && splitIndex > 0
0039         
0040         padding: compact ? 0 : Maui.Style.contentMargins
0041         
0042         Behavior on padding
0043         {
0044             NumberAnimation
0045             {
0046                 duration: Maui.Style.units.shortDuration
0047                 easing.type: Easing.InQuad
0048             }
0049         }
0050         
0051         property bool compact : Maui.Handy.isMobile || SplitView.view.count === 1
0052         
0053         contentItem: Item
0054         {
0055             
0056             Item
0057             {
0058                 id:  _container
0059                 anchors.fill: parent
0060             }               
0061             
0062             Loader
0063             {
0064                 asynchronous: true
0065                 anchors.fill: parent
0066                 active: control.SplitView.view.resizing
0067                 visible: active
0068                 sourceComponent: Rectangle
0069                 {
0070                     color: Maui.Theme.backgroundColor
0071                     opacity: (control.minimumWidth) / control.width
0072                 }
0073             }
0074             
0075             Loader
0076             {
0077                 asynchronous: true
0078                 anchors.bottom: parent.bottom
0079                 anchors.left: parent.left
0080                 anchors.right: parent.right
0081                 height: 2
0082                 active: control.SplitView.view.currentIndex === splitIndex && control.SplitView.view.count > 1
0083                 visible: active
0084                 sourceComponent: Rectangle
0085                 {
0086                     color: Maui.Theme.highlightColor
0087                 }
0088             }
0089             
0090             Loader
0091             {
0092                 asynchronous: true
0093                 anchors.centerIn: parent
0094                 active: control.SplitView.view.resizing && control.width < control.minimumWidth + 60
0095                 visible: active
0096                 sourceComponent: Maui.Chip
0097                 {
0098                     opacity: (control.minimumWidth) / control.width
0099                     
0100                     Maui.Theme.backgroundColor: Maui.Theme.negativeTextColor
0101                     label.text: i18nd("mauikit", "Close Split")
0102                 }
0103             }
0104             
0105             Loader
0106             {
0107                 asynchronous: true
0108                 anchors.centerIn: parent
0109                 active: control.SplitView.view.resizing && control.height < control.minimumHeight + 60
0110                 visible: active
0111                 sourceComponent: Maui.Chip
0112                 {
0113                     opacity: (control.minimumHeight) / control.height
0114                     
0115                     Maui.Theme.backgroundColor: Maui.Theme.negativeTextColor
0116                     label.text: i18nd("mauikit", "Close Split")
0117                 }
0118                 
0119             }
0120             
0121             MouseArea
0122             {
0123                 anchors.fill: parent
0124                 propagateComposedEvents: true
0125                 preventStealing: false
0126                 cursorShape: undefined
0127                 
0128                 onPressed: (mouse) =>
0129                 {
0130                     control.SplitView.view.currentIndex = control.splitIndex
0131                     mouse.accepted = false
0132                 }
0133             }      
0134             
0135             layer.enabled: !control.compact   
0136             layer.smooth: true
0137             layer.effect: OpacityMask
0138             {
0139                 cached: true
0140                 maskSource: Rectangle
0141                 {
0142                     width: _container.width
0143                     height: _container.height
0144                     radius: Maui.Style.radiusV
0145                 }
0146             }     
0147         }
0148         
0149         Connections
0150         {
0151             target: control.SplitView.view
0152             function onResizingChanged()
0153             {
0154                 if(control.width === control.minimumWidth && !control.SplitView.view.resizing)
0155                 {
0156                     control.SplitView.view.closeSplit(control.splitIndex)
0157                 }
0158                 
0159                 if(control.height === control.minimumHeight && !control.SplitView.view.resizing)
0160                 {
0161                     control.SplitView.view.closeSplit(control.splitIndex)
0162                 }
0163             }
0164         }
0165         
0166         function focusSplitItem()
0167         {
0168             control.SplitView.view.currentIndex = control.splitIndex
0169         }
0170 }