moment/src/gui/Base/HBox.qml

128 lines
3.8 KiB
QML
Raw Normal View History

2019-12-19 22:46:16 +11:00
// SPDX-License-Identifier: LGPL-3.0-or-later
import QtQuick 2.12
import QtQuick.Layouts 1.12
2019-08-28 12:46:31 +10:00
Rectangle {
2019-12-12 03:42:59 +11:00
id: box
color: theme.controls.box.background
implicitWidth: theme.controls.box.defaultWidth
implicitHeight: childrenRect.height
Keys.onReturnPressed: if (clickButtonOnEnter) enterClickButton()
Keys.onEnterPressed: Keys.onReturnPressed(event)
property alias buttonModel: buttonRepeater.model
property var buttonCallbacks: []
property string focusButton: ""
property string clickButtonOnEnter: ""
2019-12-12 03:42:59 +11:00
property bool fillAvailableHeight: false
property HButton firstButton: null
2019-08-29 01:54:25 +10:00
default property alias body: interfaceBody.data
function enterClickButton() {
2019-07-18 19:18:13 +10:00
for (let i = 0; i < buttonModel.length; i++) {
let btn = buttonRepeater.itemAt(i)
if (btn.enabled && btn.name === clickButtonOnEnter) btn.clicked()
}
}
2019-12-16 19:42:41 +11:00
HNumberAnimation on scale {
2019-11-23 01:35:53 +11:00
running: true
from: 0
to: 1
overshoot: 3
}
2019-04-29 02:47:51 +10:00
HColumnLayout {
id: mainColumn
width: parent.width
2019-12-12 03:42:59 +11:00
Binding on height {
value: box.height
when: box.fillAvailableHeight
}
HColumnLayout {
id: interfaceBody
2019-12-08 20:29:37 +11:00
spacing: theme.spacing * 1.5
2019-04-28 11:07:20 +10:00
Layout.margins: spacing
}
2019-04-28 11:07:20 +10:00
HGridLayout {
id: buttonGrid
2019-08-28 12:25:13 +10:00
visible: buttonModel.length > 0
2019-12-20 06:56:07 +11:00
flow: width >= buttonRepeater.summedImplicitWidth ?
GridLayout.LeftToRight : GridLayout.TopToBottom
2019-08-28 12:25:13 +10:00
HRepeater {
id: buttonRepeater
model: []
2019-12-12 03:42:59 +11:00
onItemAdded:
if (index === 0) firstButton = buttonRepeater.itemAt(0)
onItemRemoved:
if (index === 0) firstButton = null
2019-08-21 07:41:24 +10:00
HButton {
id: button
text: modelData.text
icon.name: modelData.iconName || ""
2019-08-29 08:21:13 +10:00
icon.color: modelData.iconColor || (
2019-12-10 02:35:50 +11:00
name === "ok" || name === "apply" || name === "retry" ?
2019-08-29 08:21:13 +10:00
theme.colors.positiveBackground :
2019-12-10 02:35:50 +11:00
name === "cancel" ?
2019-08-29 08:21:13 +10:00
theme.colors.negativeBackground :
theme.icons.colorize
)
enabled:
modelData.enabled === undefined ?
true : modelData.enabled
loading: modelData.loading || false
disableWhileLoading:
modelData.disableWhileLoading === undefined ?
true : modelData.disableWhileLoading
onClicked: buttonCallbacks[name](button)
Keys.onLeftPressed: previous.forceActiveFocus()
Keys.onUpPressed: previous.forceActiveFocus()
Keys.onRightPressed: next.forceActiveFocus()
Keys.onDownPressed: next.forceActiveFocus()
Keys.onReturnPressed: if (button.enabled) button.clicked()
Keys.onEnterPressed: Keys.onReturnPressed(event)
Component.onCompleted:
2019-12-10 02:35:50 +11:00
if (name === focusButton) forceActiveFocus()
Layout.fillWidth: true
Layout.preferredHeight: theme.baseElementsHeight
property string name: modelData.name
property Item next: buttonRepeater.itemAt(
utils.numberWrapAt(index + 1, buttonRepeater.count),
)
property Item previous: buttonRepeater.itemAt(
utils.numberWrapAt(index - 1, buttonRepeater.count),
)
}
}
}
}
}