Warning, /maui/mauikit/src/controls.5/AppViews.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * Copyright 2020 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.15 0021 import QtQml 2.15 0022 import QtQuick.Controls 2.15 0023 import QtQuick.Layouts 1.3 0024 import QtQuick.Templates 2.15 as T 0025 0026 import org.mauikit.controls 1.2 as Maui 0027 0028 import "private" as Private 0029 0030 /*! 0031 * \since org.mauikit.controls 1.2 0032 * \inqmlmodule org.mauikit.controls 0033 * \brief View switcher component 0034 * 0035 * Lists the different views declared into a swipe view, that does not jump around 0036 * when resizing the application window and that takes care of different gestures for switching the views. 0037 * 0038 * This component takes care of creating the app views port as buttons in the application main header 0039 * for switching the views. 0040 * 0041 * By default this component is not interactive when using touch gesture, to not steal fcous from other horizontal 0042 * flickable gestures. 0043 */ 0044 Maui.Page 0045 { 0046 id: control 0047 0048 default property alias content: _swipeView.contentData 0049 0050 property alias currentIndex : _swipeView.currentIndex 0051 property alias currentItem : _swipeView.currentItem 0052 property alias count : _swipeView.count 0053 property alias interactive : _swipeView.interactive 0054 0055 focus: true 0056 0057 /*! 0058 * Maximum number of views to be shown in the app* view port in the header. 0059 * The rest of views buttons will be collapsed into a menu button. 0060 */ 0061 property int maxViews : 4 0062 0063 /*! 0064 * The toolbar where the app view buttons will be* added. 0065 */ 0066 headBar.forceCenterMiddleContent: !isWide 0067 headBar.middleContent: Loader 0068 { 0069 asynchronous: true 0070 Layout.alignment: Qt.AlignCenter 0071 0072 sourceComponent: Private.ActionGroup 0073 { 0074 id: _actionGroup 0075 currentIndex : _swipeView.currentIndex 0076 display: ToolButton.TextUnderIcon 0077 Binding on currentIndex 0078 { 0079 value: _swipeView.currentIndex 0080 restoreMode: Binding.RestoreValue 0081 } 0082 0083 onCurrentIndexChanged: 0084 { 0085 _swipeView.currentIndex = currentIndex 0086 // _actionGroup.currentIndex = control.currentIndex 0087 } 0088 0089 Component.onCompleted: 0090 { 0091 for(var i in _swipeView.contentChildren) 0092 { 0093 const obj = _swipeView.contentChildren[i] 0094 0095 if(obj.Maui.AppView.title || obj.Maui.AppView.iconName) 0096 { 0097 if(_actionGroup.items.length < control.maxViews) 0098 { 0099 _actionGroup.items.push(obj) 0100 }else 0101 { 0102 _actionGroup.hiddenItems.push(obj) 0103 } 0104 } 0105 } 0106 } 0107 } 0108 } 0109 0110 T.SwipeView 0111 { 0112 id:_swipeView 0113 anchors.fill: parent 0114 interactive: false 0115 0116 onCurrentItemChanged: 0117 { 0118 currentItem.forceActiveFocus() 0119 _listView.positionViewAtIndex(control.currentIndex , ListView.SnapPosition) 0120 history.push(_swipeView.currentIndex) 0121 } 0122 0123 Keys.onBackPressed: 0124 { 0125 control.goBack() 0126 } 0127 0128 Shortcut 0129 { 0130 sequence: StandardKey.Back 0131 onActivated: control.goBack() 0132 } 0133 0134 background: null 0135 0136 contentItem: ListView 0137 { 0138 id: _listView 0139 model: _swipeView.contentModel 0140 interactive: _swipeView.interactive 0141 currentIndex: _swipeView.currentIndex 0142 spacing: _swipeView.spacing 0143 orientation: _swipeView.orientation 0144 snapMode: ListView.SnapOneItem 0145 boundsBehavior: Flickable.StopAtBounds 0146 clip: _swipeView.clip 0147 0148 preferredHighlightBegin: 0 0149 preferredHighlightEnd: width 0150 0151 highlightRangeMode: ListView.StrictlyEnforceRange 0152 highlightMoveDuration: 0 0153 highlightFollowsCurrentItem: true 0154 highlightResizeDuration: 0 0155 highlightMoveVelocity: -1 0156 highlightResizeVelocity: -1 0157 0158 maximumFlickVelocity: 4 * (_swipeView.orientation === Qt.Horizontal ? width : height) 0159 0160 property int lastPos: 0 0161 0162 onCurrentIndexChanged: 0163 { 0164 _listView.lastPos = _listView.contentX 0165 } 0166 0167 } 0168 0169 Keys.enabled: true 0170 // Keys.forwardTo:_listView 0171 Keys.onPressed: 0172 { 0173 if((event.key == Qt.Key_1) && (event.modifiers & Qt.ControlModifier)) 0174 { 0175 if(_swipeView.count > -1 ) 0176 { 0177 _swipeView.currentIndex = 0 0178 } 0179 } 0180 0181 if((event.key == Qt.Key_2) && (event.modifiers & Qt.ControlModifier)) 0182 { 0183 if(_swipeView.count > 0 ) 0184 { 0185 _swipeView.currentIndex = 1 0186 } 0187 } 0188 0189 if((event.key == Qt.Key_3) && (event.modifiers & Qt.ControlModifier)) 0190 { 0191 if(_swipeView.count > 1 ) 0192 { 0193 _swipeView.currentIndex = 2 0194 } 0195 } 0196 0197 if((event.key == Qt.Key_4) && (event.modifiers & Qt.ControlModifier)) 0198 { 0199 if(_swipeView.count > 2 ) 0200 { 0201 _swipeView.currentIndex = 3 0202 } 0203 } 0204 } 0205 0206 } 0207 0208 0209 property QtObject history : QtObject 0210 { 0211 property var historyIndexes : [] 0212 0213 function pop() 0214 { 0215 historyIndexes.pop() 0216 return historyIndexes.pop() 0217 } 0218 0219 function push(index) 0220 { 0221 historyIndexes.push(index) 0222 } 0223 0224 function indexes() 0225 { 0226 return historyIndexes 0227 } 0228 } 0229 0230 /** 0231 * 0232 */ 0233 function goBack() 0234 { 0235 _swipeView.setCurrentIndex(history.pop()) 0236 } 0237 0238 }