mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-18 11:58:11 +00:00
86 lines
2 KiB
QML
86 lines
2 KiB
QML
import QtQuick 2.7
|
|
|
|
import Common 1.0
|
|
import Utils 1.0
|
|
|
|
// =============================================================================
|
|
|
|
Item {
|
|
id: menu
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
property alias relativeTo: popup.relativeTo
|
|
property alias relativeX: popup.relativeX
|
|
property alias relativeY: popup.relativeY
|
|
|
|
// Can be computed, but for performance usage, it must be given in attribute.
|
|
property int entryHeight
|
|
property int maxMenuHeight
|
|
|
|
default property alias _content: menuContent.data
|
|
property alias popup : popup
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
signal closed
|
|
signal opened
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function open () {
|
|
popup.open()
|
|
}
|
|
|
|
function close () {
|
|
popup.close()
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function _computeHeight () {
|
|
Utils.assert(_content != null && _content.length > 0, '`_content` cannot be null and must exists.')
|
|
|
|
var list = _content[0]
|
|
Utils.assert(list != null, 'No list found.')
|
|
|
|
var height = list.count * entryHeight
|
|
|
|
if (list.headerPositioning === ListView.OverlayHeader) {
|
|
// Workaround to force header layout.
|
|
list.headerItem.z = Constants.zMax
|
|
|
|
height += list.headerItem.height
|
|
}
|
|
|
|
return (maxMenuHeight !== undefined && height > maxMenuHeight)
|
|
? maxMenuHeight
|
|
: height
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
visible: false
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
Popup {
|
|
id: popup
|
|
|
|
onOpened: menu.opened()
|
|
onClosed: menu.closed()
|
|
|
|
Item {
|
|
id: menuContent
|
|
|
|
height: menu._computeHeight()
|
|
width: menu._content[0].width
|
|
}
|
|
}
|
|
|
|
Binding {
|
|
property: 'height'
|
|
target: menu._content[0]
|
|
value: menuContent.height
|
|
}
|
|
}
|