linphone-desktop/linphone-app/ui/modules/Linphone/Timeline/CallTimeline.qml

144 lines
3.6 KiB
QML

import QtQuick 2.7
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.5
import QtQuick.Shapes 1.10
import Common 1.0
import Common.Styles 1.0
import Linphone 1.0
import Linphone.Styles 1.0
import ColorsList 1.0
import UtilsCpp 1.0
import 'Timeline.js' as Logic
import 'qrc:/ui/scripts/Utils/utils.js' as Utils
// =============================================================================
ColumnLayout{
id: mainItem
signal entrySelected(var model)
Layout.fillHeight: true
spacing: 0
// HEADER
Rectangle {
id: legendArea
Layout.preferredWidth: mainItem.width
Layout.preferredHeight: 50
Layout.alignment: Qt.AlignTop
color: CallTimelineStyle.backgroundColor.normal.color
RowLayout{
anchors.fill: parent
spacing: 2
Text {
Layout.preferredHeight: parent.height
Layout.fillWidth: true
Layout.leftMargin: 10
color: CallTimelineStyle.colorModel.color
font.pointSize: CallTimelineStyle.pointSize
font.weight: Font.Bold
font.capitalization: Font.Capitalize
//: 'Call list' : Call histories title
text: qsTr('callListTitle').toLowerCase()
verticalAlignment: Text.AlignVCenter
}
ActionButton {
id:filterButton
Layout.alignment: Qt.AlignRight
isCustom: true
colorSet: CallTimelineStyle.filterAction
toggled: view.model.filterFlags != 0 && view.model.filterFlags != CallHistoryProxyModel.All
onClicked: filterMenu.open()
Menu{
id: filterMenu
MenuItem{
id: incomingFilter
//: 'Incoming' : Filter label for incoming call
text: qsTr('incomingFilter')
checkable: true
}
MenuItem{
id: outgoingFilter
//: 'Outgoing' : Filter label for outgoing call
text: qsTr('outgoingFilter')
checkable: true
}
MenuItem{
id: missedFilter
//: 'Missed' : Filter label for missed call
text: qsTr('missedFilter')
checkable: true
}
}
}
}
}
// -------------------------------------------------------------------------
// Search.
// -------------------------------------------------------------------------
Rectangle{
id:searchView
Layout.preferredWidth: mainItem.width
Layout.preferredHeight: 50
Layout.alignment: Qt.AlignCenter
color: legendArea.color
TextField {
id:searchBar
anchors.fill: parent
anchors.rightMargin: 10
anchors.leftMargin: 10
anchors.topMargin: 5
anchors.bottomMargin: 10
width: parent.width - 14
icon: text == '' ? 'search_custom' : 'close_custom'
iconSize: 30
overwriteColor: CallTimelineStyle.searchField.colorModel.color
//: 'Search in the list' : ths is a placeholder when searching something in a list
placeholderText: qsTr('searchListPlaceholderText')
onTextChanged: searchDelay.restart()
font.pointSize: CallTimelineStyle.searchField.pointSize
Timer{
id: searchDelay
interval: 600
repeat: false
onTriggered: view.model.filterText = searchBar.text
}
}
}
ScrollableListView {
id: view
Layout.fillHeight: true
Layout.preferredWidth: mainItem.width
currentIndex: -1
model: CallHistoryProxyModel{
filterFlags: (incomingFilter.checked ? CallHistoryProxyModel.Incoming : 0)
| (outgoingFilter.checked ? CallHistoryProxyModel.Outgoing : 0)
| (missedFilter.checked ? CallHistoryProxyModel.Missed : 0)
}
delegate: Loader{
width: view.contentWidth
asynchronous: index > 20
active: true
sourceComponent: CallTimelineItem{
callHistoryModel: $modelData
modelIndex: index
Connections{
target: $modelData
onSelectedChanged:{
if(selected) {
view.currentIndex = index;
mainItem.entrySelected(model)
}
}
}
}
}
}
}