Index: sources/gui/qml/components/MainMenu.qml =================================================================== diff -u -re28183bddebf7383c1bd113e7b8ef4ea11f494fb -r6c6f1f5d466badd9b4fd67be7c907234c342b2a2 --- sources/gui/qml/components/MainMenu.qml (.../MainMenu.qml) (revision e28183bddebf7383c1bd113e7b8ef4ea11f494fb) +++ sources/gui/qml/components/MainMenu.qml (.../MainMenu.qml) (revision 6c6f1f5d466badd9b4fd67be7c907234c342b2a2) @@ -1,15 +1,15 @@ /*! * - * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. + * Copyright (c) 2019-2023 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * - * \file MainMenu.qml - * \author (last) Behrouz NematiPour - * \date (last) 16-Oct-2020 - * \author (original) Behrouz NematiPour - * \date (original) 17-Oct-2019 + * \file MainMenu.qml + * \author (last) Behrouz NematiPour + * \date (last) 27-Apr-2023 + * \author (original) Behrouz NematiPour + * \date (original) 17-Oct-2019 * */ @@ -30,14 +30,16 @@ Bottom } - property var titles : [] - property bool hidden : false - property int position : MainMenu.Position.Bottom - property bool hasRightText : false - property int rightTextGaps : 20 - property bool hasLogo : false - property int currentIndex : 0 - property string currentTitle : titles[currentIndex] + property var titles : [] + property var visibleItems : [] + property bool hidden : false + property int position : MainMenu.Position.Bottom + property bool hasRightText : false + property int rightTextGaps : 20 + property bool hasLogo : false + property int currentIndex : 0 + property string currentTitle : titles[currentIndex] + property bool disable : false /*! * \brief Emits when a menu item pressed @@ -46,11 +48,25 @@ signal itemPressed(int vIndex) onItemPressed: { currentIndex = vIndex - _highlightRect.x = _repeater.itemAt(vIndex).x + let itemAt = _repeater.itemAt(vIndex) + if (itemAt) + _highlightRect.x = itemAt.x + else { + _highlightRect.x = _rightTouchRect.x + } } - onCurrentIndexChanged: itemPressed(currentIndex) + function isItemVisible ( vIndex ) { + return visibleItems [ vIndex ] !== false // used "!== false" to cover undefined as true. + } + function emit_itemPressed ( vIndex ) { + if ( isItemVisible ( vIndex ) ) + itemPressed ( vIndex ) + } + + onCurrentIndexChanged: emit_itemPressed(currentIndex) + /*! * this section olds somkind of the private sections of the object * this section is used as the calculation section whcih soppose not to be changed by user. @@ -104,34 +120,36 @@ animated : false width : partitionWidth height : parent.height - text.text : modelData + text.text : isItemVisible(index) ? modelData : "" // didn't change the visibility to preserve the button location and just didn't display the title and highlihgt bar. border.width: 0 onPressed: { - itemPressed(index) + emit_itemPressed(index) } } } } // the right outer most text with vertical line as a separator Line { - visible: hasRightText + visible: hasRightText && isItemVisible(_rightTouchRect.index) orientation: Line.Orientation.Vertical length: parent.height - rightTextGaps anchors.right: _rightTouchRect.left anchors.verticalCenter: parent.verticalCenter } TouchRect { id : _rightTouchRect + property int index: titles.length ? titles.length - 1 : -1 animated : false visible : hasRightText width : partitionWidth + rightTextGaps height : parent.height - text.text : _private.rightText + text.text : isItemVisible(index) ? _private.rightText : "" // didn't change the visibility to preserve the button location and just didn't display the title and highlihgt bar. border.width: 0 onPressed: { - itemPressed( titles.length ? titles.length - 1 : -1 ) + emit_itemPressed(index) } anchors.right: parent.right + anchors.rightMargin: parent.rightPdding anchors.verticalCenter: parent.verticalCenter } @@ -143,17 +161,18 @@ height: 10 radius: 10 anchors.bottom: parent.bottom - anchors.bottomMargin: -5 + anchors.bottomMargin: -(height / 2) Behavior on x { PropertyAnimation { /*duration: 500; easing.type: Easing.OutBounce*/ } } } // hidden animation to hide the menu nicely. Behavior on y { PropertyAnimation { /*duration: 500; easing.type: Easing.OutBounce*/ } } onHiddenChanged: { + let isHidden = hidden || disable if ( position === MainMenu.Position.Top ) { - y = hidden ? - Variables.mainMenuHeight : 0 + y = isHidden ? - Variables.mainMenuHeight : 0 } else { - y = Variables.applicationHeight - (hidden ? 0 : Variables.mainMenuHeight) + y = Variables.applicationHeight - (isHidden ? 0 : Variables.mainMenuHeight) } } }