mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-17 03:18:07 +00:00
173 lines
5 KiB
QML
173 lines
5 KiB
QML
import QtQuick
|
|
import QtQuick.Layouts
|
|
import QtQuick.Controls.Basic as Control
|
|
import QtQuick.Effects
|
|
|
|
import Linphone
|
|
import SettingsCpp
|
|
|
|
Control.TabBar {
|
|
id: mainItem
|
|
//spacing: Math.round(32 * DefaultStyle.dp)
|
|
topPadding: Math.round(36 * DefaultStyle.dp)
|
|
|
|
property var model
|
|
readonly property alias cornerRadius: bottomLeftCorner.radius
|
|
|
|
property AccountGui defaultAccount
|
|
|
|
// Call it after model is ready. If done before, Repeater will not be updated
|
|
function initButtons(){
|
|
actionsRepeater.model = mainItem.model
|
|
}
|
|
|
|
onDefaultAccountChanged: {
|
|
if (defaultAccount) defaultAccount.core?.lRefreshNotifications()
|
|
}
|
|
|
|
Connections {
|
|
target: SettingsCpp
|
|
function onDisableMeetingsFeatureChanged() {
|
|
initButtons()
|
|
}
|
|
function onDisableChatFeatureChanged() {
|
|
initButtons()
|
|
}
|
|
}
|
|
|
|
component UnreadNotification: Rectangle {
|
|
property int unread: 0
|
|
visible: unread > 0
|
|
width: Math.round(15 * DefaultStyle.dp)
|
|
height: Math.round(15 * DefaultStyle.dp)
|
|
radius: width/2
|
|
color: DefaultStyle.danger_500main
|
|
Text{
|
|
id: unreadCount
|
|
anchors.fill: parent
|
|
verticalAlignment: Text.AlignVCenter
|
|
horizontalAlignment: Text.AlignHCenter
|
|
color: DefaultStyle.grey_0
|
|
fontSizeMode: Text.Fit
|
|
font.pixelSize: Math.round(15 * DefaultStyle.dp)
|
|
text: parent.unread > 100 ? '99+' : parent.unread
|
|
}
|
|
}
|
|
|
|
contentItem: ListView {
|
|
model: mainItem.contentModel
|
|
currentIndex: mainItem.currentIndex
|
|
|
|
spacing: mainItem.spacing
|
|
orientation: ListView.Vertical
|
|
// boundsBehavior: Flickable.StopAtBounds
|
|
flickableDirection: Flickable.AutoFlickIfNeeded
|
|
// snapMode: ListView.SnapToItem
|
|
|
|
// highlightMoveDuration: 0
|
|
// highlightRangeMode: ListView.ApplyRange
|
|
// preferredHighlightBegin: 40
|
|
// preferredHighlightEnd: width - 40
|
|
}
|
|
|
|
background: Item {
|
|
id: background
|
|
anchors.fill: parent
|
|
Rectangle {
|
|
id: bottomLeftCorner
|
|
anchors.fill: parent
|
|
color: DefaultStyle.main1_500_main
|
|
radius: Math.round(25 * DefaultStyle.dp)
|
|
}
|
|
Rectangle {
|
|
color: DefaultStyle.main1_500_main
|
|
anchors.left: parent.left
|
|
anchors.top: parent.top
|
|
width: parent.width/2
|
|
height: parent.height/2
|
|
}
|
|
Rectangle {
|
|
color: DefaultStyle.main1_500_main
|
|
y: parent.y + parent.height/2
|
|
width: parent.width
|
|
height: parent.height/2
|
|
}
|
|
}
|
|
|
|
Repeater {
|
|
id: actionsRepeater
|
|
Control.TabButton {
|
|
id: tabButton
|
|
width: mainItem.width
|
|
height: visible && buttonIcon.isImageReady ? undefined : 0
|
|
bottomInset: Math.round(32 * DefaultStyle.dp)
|
|
topInset: Math.round(32 * DefaultStyle.dp)
|
|
hoverEnabled: true
|
|
visible: modelData?.visible != undefined ? modelData.visible : true
|
|
UnreadNotification {
|
|
unread: !defaultAccount
|
|
? -1
|
|
: index === 0
|
|
? defaultAccount.core?.unreadCallNotifications || -1
|
|
: index === 2
|
|
? defaultAccount.core?.unreadMessageNotifications || -1
|
|
: 0
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: Math.round(15 * DefaultStyle.dp)
|
|
anchors.top: parent.top
|
|
}
|
|
MouseArea {
|
|
anchors.fill: tabButton
|
|
cursorShape: tabButton.hovered ? Qt.PointingHandCursor : Qt.ArrowCursor
|
|
acceptedButtons: Qt.NoButton
|
|
}
|
|
contentItem: ColumnLayout {
|
|
EffectImage {
|
|
id: buttonIcon
|
|
property real buttonSize: mainItem.currentIndex !== index && tabButton.hovered ? Math.round(26 * DefaultStyle.dp) : Math.round(24 * DefaultStyle.dp)
|
|
imageSource: mainItem.currentIndex === index ? modelData.selectedIcon : modelData.icon
|
|
Layout.preferredWidth: buttonSize
|
|
Layout.preferredHeight: buttonSize
|
|
Layout.alignment: Qt.AlignHCenter
|
|
fillMode: Image.PreserveAspectFit
|
|
colorizationColor: DefaultStyle.grey_0
|
|
useColor: !modelData.colored
|
|
}
|
|
Text {
|
|
id: buttonText
|
|
visible: buttonIcon.isImageReady
|
|
text: modelData.label
|
|
font {
|
|
weight: mainItem.currentIndex === index
|
|
? Math.round(800 * DefaultStyle.dp)
|
|
: tabButton.hovered
|
|
? Math.round(600 * DefaultStyle.dp)
|
|
: Math.round(400 * DefaultStyle.dp)
|
|
pixelSize: Math.round(11 * DefaultStyle.dp)
|
|
}
|
|
color: DefaultStyle.grey_0
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: txtMeter.height
|
|
Layout.alignment: Qt.AlignHCenter
|
|
horizontalAlignment: Text.AlignHCenter
|
|
leftPadding: Math.round(3 * DefaultStyle.dp)
|
|
rightPadding: Math.round(3 * DefaultStyle.dp)
|
|
}
|
|
}
|
|
TextMetrics {
|
|
id: txtMeter
|
|
text: modelData.label
|
|
font: buttonText.font
|
|
Component.onCompleted: {
|
|
font.weight = Math.round(800 * DefaultStyle.dp)
|
|
mainItem.implicitWidth = Math.max(mainItem.implicitWidth, advanceWidth + buttonIcon.buttonSize)
|
|
}
|
|
}
|
|
onClicked: {
|
|
mainItem.setCurrentIndex(TabBar.index)
|
|
}
|
|
|
|
background: Item {}
|
|
}
|
|
}
|
|
}
|