friends presence
This commit is contained in:
parent
84950e70b5
commit
ac528fc05c
8 changed files with 171 additions and 131 deletions
|
|
@ -76,7 +76,6 @@ void CoreModel::start() {
|
||||||
Utils::appStringToCoreString(Paths::getFactoryConfigFilePath()), nullptr);
|
Utils::appStringToCoreString(Paths::getFactoryConfigFilePath()), nullptr);
|
||||||
setMonitor(mCore);
|
setMonitor(mCore);
|
||||||
setPathsAfterCreation();
|
setPathsAfterCreation();
|
||||||
mCore->enableFriendListSubscription(true);
|
|
||||||
mCore->enableRecordAware(true);
|
mCore->enableRecordAware(true);
|
||||||
mCore->setVideoDisplayFilter("MSQOGL");
|
mCore->setVideoDisplayFilter("MSQOGL");
|
||||||
mCore->usePreviewWindow(true);
|
mCore->usePreviewWindow(true);
|
||||||
|
|
@ -92,6 +91,7 @@ void CoreModel::start() {
|
||||||
config->setInt("video", "show_local", 0); // So : write ourself to turn off camera before starting the core.
|
config->setInt("video", "show_local", 0); // So : write ourself to turn off camera before starting the core.
|
||||||
mCore->start();
|
mCore->start();
|
||||||
setPathAfterStart();
|
setPathAfterStart();
|
||||||
|
mCore->enableFriendListSubscription(true);
|
||||||
auto videoPolicy = mCore->getVideoActivationPolicy();
|
auto videoPolicy = mCore->getVideoActivationPolicy();
|
||||||
videoPolicy->setAutomaticallyAccept(true);
|
videoPolicy->setAutomaticallyAccept(true);
|
||||||
videoPolicy->setAutomaticallyInitiate(false);
|
videoPolicy->setAutomaticallyInitiate(false);
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,7 @@ signals:
|
||||||
void familyNameChanged(const QString &name);
|
void familyNameChanged(const QString &name);
|
||||||
void organizationChanged(const QString &orga);
|
void organizationChanged(const QString &orga);
|
||||||
void jobChanged(const QString &job);
|
void jobChanged(const QString &job);
|
||||||
|
void presenceReceived(LinphoneEnums::ConsolidatedPresence consolidatedPresence, QDateTime presenceTimestamp);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DECLARE_ABSTRACT_OBJECT
|
DECLARE_ABSTRACT_OBJECT
|
||||||
|
|
@ -96,9 +97,6 @@ private:
|
||||||
// LINPHONE
|
// LINPHONE
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
virtual void onPresenceReceived(const std::shared_ptr<linphone::Friend> &contact) override;
|
virtual void onPresenceReceived(const std::shared_ptr<linphone::Friend> &contact) override;
|
||||||
|
|
||||||
signals:
|
|
||||||
void presenceReceived(LinphoneEnums::ConsolidatedPresence consolidatedPresence, QDateTime presenceTimestamp);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -77,18 +77,34 @@ ColumnLayout {
|
||||||
// Layout.fillWidth: true
|
// Layout.fillWidth: true
|
||||||
Text {
|
Text {
|
||||||
Layout.alignment: Qt.AlignHCenter
|
Layout.alignment: Qt.AlignHCenter
|
||||||
text: mainItem.contactName
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
text: mainItem.contactName
|
||||||
font {
|
font {
|
||||||
pixelSize: 14 * DefaultStyle.dp
|
pixelSize: 14 * DefaultStyle.dp
|
||||||
weight: 400 * DefaultStyle.dp
|
weight: 400 * DefaultStyle.dp
|
||||||
|
capitalization: Font.Capitalize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
id: contactAddress
|
id: contactAddress
|
||||||
visible: mainItem.addressVisible
|
property var mode : contact ? contact.core.consolidatedPresence : -1
|
||||||
text: mainItem.contactAddress
|
Layout.alignment: Qt.AlignHCenter
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
visible: mainItem.addressVisible
|
||||||
|
text: mode === LinphoneEnums.ConsolidatedPresence.Online
|
||||||
|
? qsTr("En ligne")
|
||||||
|
: mode === LinphoneEnums.ConsolidatedPresence.Busy
|
||||||
|
? qsTr("Occupé")
|
||||||
|
: mode === LinphoneEnums.ConsolidatedPresence.DoNotDisturb
|
||||||
|
? qsTr("Ne pas déranger")
|
||||||
|
: qsTr("Hors ligne")
|
||||||
|
color: mode === LinphoneEnums.ConsolidatedPresence.Online
|
||||||
|
? DefaultStyle.success_500main
|
||||||
|
: mode === LinphoneEnums.ConsolidatedPresence.Busy
|
||||||
|
? DefaultStyle.warning_600
|
||||||
|
: mode === LinphoneEnums.ConsolidatedPresence.DoNotDisturb
|
||||||
|
? DefaultStyle.danger_500main
|
||||||
|
: DefaultStyle.main2_500main
|
||||||
font {
|
font {
|
||||||
pixelSize: 12 * DefaultStyle.dp
|
pixelSize: 12 * DefaultStyle.dp
|
||||||
weight: 300 * DefaultStyle.dp
|
weight: 300 * DefaultStyle.dp
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ StackView {
|
||||||
property string displayNameVal: displayNameObj ? displayNameObj.value : ""
|
property string displayNameVal: displayNameObj ? displayNameObj.value : ""
|
||||||
property bool haveAvatar: (account && account.core.pictureUri )
|
property bool haveAvatar: (account && account.core.pictureUri )
|
||||||
|| (contact && contact.core.pictureUri)
|
|| (contact && contact.core.pictureUri)
|
||||||
|
|
||||||
onHaveAvatarChanged: replace(haveAvatar ? avatar : initials, StackView.Immediate)
|
onHaveAvatarChanged: replace(haveAvatar ? avatar : initials, StackView.Immediate)
|
||||||
|
|
||||||
property bool secured: false
|
property bool secured: false
|
||||||
|
|
@ -54,6 +54,38 @@ StackView {
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Rectangle {
|
||||||
|
visible: (account || contact) && (account
|
||||||
|
? account.core.registrationState != LinphoneEnums.RegistrationState.Progress && account.core.registrationState != LinphoneEnums.RegistrationState.Refreshing
|
||||||
|
: contact.core.consolidatedPresence != LinphoneEnums.ConsolidatedPresence.Offline)
|
||||||
|
width: mainItem.width/4.5
|
||||||
|
height: width
|
||||||
|
radius: width / 2
|
||||||
|
x: 2 * mainItem.width / 3
|
||||||
|
y: 6 * mainItem.height / 7
|
||||||
|
z: 1
|
||||||
|
color: account
|
||||||
|
? account.core.registrationState == LinphoneEnums.RegistrationState.Ok
|
||||||
|
? DefaultStyle.success_500main
|
||||||
|
: account.core.registrationState == LinphoneEnums.RegistrationState.Cleared || account.core.registrationState == LinphoneEnums.RegistrationState.None
|
||||||
|
? DefaultStyle.warning_600
|
||||||
|
: account.core.registrationState == LinphoneEnums.RegistrationState.Progress || account.core.registrationState == LinphoneEnums.RegistrationState.Refreshing
|
||||||
|
? DefaultStyle.main2_500main
|
||||||
|
: DefaultStyle.danger_500main
|
||||||
|
: contact
|
||||||
|
? contact.core.consolidatedPresence === LinphoneEnums.ConsolidatedPresence.Online
|
||||||
|
? DefaultStyle.success_500main
|
||||||
|
: contact.core.consolidatedPresence === LinphoneEnums.ConsolidatedPresence.Busy
|
||||||
|
? DefaultStyle.warning_600
|
||||||
|
: contact.core.consolidatedPresence === LinphoneEnums.ConsolidatedPresence.DoNotDisturb
|
||||||
|
? DefaultStyle.danger_500main
|
||||||
|
: DefaultStyle.main2_500main
|
||||||
|
: "transparent"
|
||||||
|
border {
|
||||||
|
width: 2 * DefaultStyle.dp
|
||||||
|
color: DefaultStyle.grey_0
|
||||||
|
}
|
||||||
|
}
|
||||||
Component{
|
Component{
|
||||||
id: initials
|
id: initials
|
||||||
Rectangle {
|
Rectangle {
|
||||||
|
|
|
||||||
|
|
@ -84,81 +84,75 @@ ListView {
|
||||||
text: itemDelegate.displayName
|
text: itemDelegate.displayName
|
||||||
font.pixelSize: 14 * DefaultStyle.dp
|
font.pixelSize: 14 * DefaultStyle.dp
|
||||||
font.capitalization: mainItem.displayNameCapitalization ? Font.Capitalize : Font.MixedCase
|
font.capitalization: mainItem.displayNameCapitalization ? Font.Capitalize : Font.MixedCase
|
||||||
}
|
maximumLineCount: 1
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
}
|
RowLayout {
|
||||||
|
id: buttonsLayout
|
||||||
|
z: 1
|
||||||
|
height: parent.height
|
||||||
|
children: mainItem.delegateButtons || []
|
||||||
|
}
|
||||||
|
|
||||||
RowLayout {
|
PopupButton {
|
||||||
z: 1
|
id: friendPopup
|
||||||
height: parent.height
|
z: 1
|
||||||
anchors.right: parent.right
|
hoverEnabled: mainItem.hoverEnabled
|
||||||
anchors.rightMargin: 5 * DefaultStyle.dp
|
visible: mainItem.contactMenuVisible && (contactArea.containsMouse || hovered || popup.opened) && (!delegateButtons || delegateButtons.children.length === 0)
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
popup.x: 0
|
||||||
children: mainItem.delegateButtons || []
|
popup.padding: 10 * DefaultStyle.dp
|
||||||
}
|
Layout.rightMargin: 5 * DefaultStyle.dp
|
||||||
|
popup.contentItem: ColumnLayout {
|
||||||
PopupButton {
|
Button {
|
||||||
id: friendPopup
|
background: Item{}
|
||||||
z: 1
|
contentItem: RowLayout {
|
||||||
hoverEnabled: mainItem.hoverEnabled
|
Image {
|
||||||
visible: mainItem.contactMenuVisible && (contactArea.containsMouse || hovered || popup.opened) && (!delegateButtons || delegateButtons.children.length === 0)
|
source: modelData.core.starred ? AppIcons.heartFill : AppIcons.heart
|
||||||
popup.x: 0
|
fillMode: Image.PreserveAspectFit
|
||||||
popup.padding: 10 * DefaultStyle.dp
|
width: 24 * DefaultStyle.dp
|
||||||
anchors.right: parent.right
|
height: 24 * DefaultStyle.dp
|
||||||
anchors.rightMargin: 5 * DefaultStyle.dp
|
Layout.preferredWidth: 24 * DefaultStyle.dp
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
Layout.preferredHeight: 24 * DefaultStyle.dp
|
||||||
popup.contentItem: ColumnLayout {
|
}
|
||||||
Button {
|
Text {
|
||||||
background: Item{}
|
text: modelData.core.starred ? qsTr("Enlever des favoris") : qsTr("Mettre en favori")
|
||||||
contentItem: RowLayout {
|
color: DefaultStyle.main2_500main
|
||||||
Image {
|
font {
|
||||||
source: modelData.core.starred ? AppIcons.heartFill : AppIcons.heart
|
pixelSize: 14 * DefaultStyle.dp
|
||||||
fillMode: Image.PreserveAspectFit
|
weight: 400 * DefaultStyle.dp
|
||||||
width: 24 * DefaultStyle.dp
|
}
|
||||||
height: 24 * DefaultStyle.dp
|
|
||||||
Layout.preferredWidth: 24 * DefaultStyle.dp
|
|
||||||
Layout.preferredHeight: 24 * DefaultStyle.dp
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
text: modelData.core.starred ? qsTr("Enlever des favoris") : qsTr("Mettre en favori")
|
|
||||||
color: DefaultStyle.main2_500main
|
|
||||||
font {
|
|
||||||
pixelSize: 14 * DefaultStyle.dp
|
|
||||||
weight: 400 * DefaultStyle.dp
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
onClicked: {
|
||||||
onClicked: {
|
modelData.core.lSetStarred(!modelData.core.starred)
|
||||||
modelData.core.lSetStarred(!modelData.core.starred)
|
friendPopup.close()
|
||||||
friendPopup.close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Button {
|
|
||||||
background: Item{}
|
|
||||||
contentItem: RowLayout {
|
|
||||||
EffectImage {
|
|
||||||
source: AppIcons.trashCan
|
|
||||||
width: 24 * DefaultStyle.dp
|
|
||||||
height: 24 * DefaultStyle.dp
|
|
||||||
Layout.preferredWidth: 24 * DefaultStyle.dp
|
|
||||||
Layout.preferredHeight: 24 * DefaultStyle.dp
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
colorizationColor: DefaultStyle.danger_500main
|
|
||||||
}
|
}
|
||||||
Text {
|
}
|
||||||
text: qsTr("Supprimer")
|
Button {
|
||||||
color: DefaultStyle.danger_500main
|
background: Item{}
|
||||||
font {
|
contentItem: RowLayout {
|
||||||
pixelSize: 14 * DefaultStyle.dp
|
EffectImage {
|
||||||
weight: 400 * DefaultStyle.dp
|
source: AppIcons.trashCan
|
||||||
|
width: 24 * DefaultStyle.dp
|
||||||
|
height: 24 * DefaultStyle.dp
|
||||||
|
Layout.preferredWidth: 24 * DefaultStyle.dp
|
||||||
|
Layout.preferredHeight: 24 * DefaultStyle.dp
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
colorizationColor: DefaultStyle.danger_500main
|
||||||
|
}
|
||||||
|
Text {
|
||||||
|
text: qsTr("Supprimer")
|
||||||
|
color: DefaultStyle.danger_500main
|
||||||
|
font {
|
||||||
|
pixelSize: 14 * DefaultStyle.dp
|
||||||
|
weight: 400 * DefaultStyle.dp
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
onClicked: {
|
||||||
onClicked: {
|
mainItem.contactDeletionRequested(modelData)
|
||||||
mainItem.contactDeletionRequested(modelData)
|
friendPopup.close()
|
||||||
friendPopup.close()
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -167,7 +161,7 @@ ListView {
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: contactArea
|
id: contactArea
|
||||||
hoverEnabled: mainItem.hoverEnabled
|
hoverEnabled: mainItem.hoverEnabled
|
||||||
anchors.fill: initial.visible ? contactDelegate : parent
|
anchors.fill: contactDelegate
|
||||||
height: mainItem.height
|
height: mainItem.height
|
||||||
Rectangle {
|
Rectangle {
|
||||||
anchors.fill: contactArea
|
anchors.fill: contactArea
|
||||||
|
|
|
||||||
|
|
@ -190,10 +190,14 @@ Item {
|
||||||
}
|
}
|
||||||
Button {
|
Button {
|
||||||
Layout.alignment: Qt.AlignHCenter
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
topPadding: 11 * DefaultStyle.dp
|
||||||
|
bottomPadding: 11 * DefaultStyle.dp
|
||||||
|
leftPadding: 20 * DefaultStyle.dp
|
||||||
|
rightPadding: 20 * DefaultStyle.dp
|
||||||
contentItem: RowLayout {
|
contentItem: RowLayout {
|
||||||
Layout.alignment: Qt.AlignVCenter
|
Layout.alignment: Qt.AlignVCenter
|
||||||
EffectImage {
|
EffectImage {
|
||||||
colorizationColor: "red"// DefaultStyle.grey_0
|
colorizationColor: DefaultStyle.grey_0
|
||||||
source: mainItem.newItemIconSource
|
source: mainItem.newItemIconSource
|
||||||
width: 24 * DefaultStyle.dp
|
width: 24 * DefaultStyle.dp
|
||||||
height: 24 * DefaultStyle.dp
|
height: 24 * DefaultStyle.dp
|
||||||
|
|
|
||||||
|
|
@ -194,58 +194,53 @@ AbstractMainPage {
|
||||||
height: 45 * DefaultStyle.dp
|
height: 45 * DefaultStyle.dp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Item {
|
ColumnLayout {
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
ColumnLayout {
|
Layout.fillWidth: true
|
||||||
spacing: 5 * DefaultStyle.dp
|
spacing: 5 * DefaultStyle.dp
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
Text {
|
||||||
Text {
|
id: friendAddress
|
||||||
id: friendAddress
|
Layout.fillWidth: true
|
||||||
property var remoteAddress: modelData ? UtilsCpp.getDisplayName(modelData.core.remoteAddress) : null
|
maximumLineCount: 1
|
||||||
text: remoteAddress ? remoteAddress.value : ""
|
property var remoteAddress: modelData ? UtilsCpp.getDisplayName(modelData.core.remoteAddress) : null
|
||||||
font {
|
text: remoteAddress ? remoteAddress.value : ""
|
||||||
pixelSize: 14 * DefaultStyle.dp
|
font {
|
||||||
weight: 400 * DefaultStyle.dp
|
pixelSize: 14 * DefaultStyle.dp
|
||||||
}
|
weight: 400 * DefaultStyle.dp
|
||||||
}
|
}
|
||||||
RowLayout {
|
}
|
||||||
spacing: 3 * DefaultStyle.dp
|
RowLayout {
|
||||||
Image {
|
spacing: 3 * DefaultStyle.dp
|
||||||
source: modelData.core.status === LinphoneEnums.CallStatus.Declined
|
Image {
|
||||||
|| modelData.core.status === LinphoneEnums.CallStatus.DeclinedElsewhere
|
source: modelData.core.status === LinphoneEnums.CallStatus.Declined
|
||||||
|| modelData.core.status === LinphoneEnums.CallStatus.Aborted
|
|| modelData.core.status === LinphoneEnums.CallStatus.DeclinedElsewhere
|
||||||
|| modelData.core.status === LinphoneEnums.CallStatus.EarlyAborted
|
|| modelData.core.status === LinphoneEnums.CallStatus.Aborted
|
||||||
? modelData.core.isOutgoing
|
|| modelData.core.status === LinphoneEnums.CallStatus.EarlyAborted
|
||||||
? AppIcons.outgoingCallRejected
|
? modelData.core.isOutgoing
|
||||||
: AppIcons.incomingCallRejected
|
? AppIcons.outgoingCallRejected
|
||||||
: modelData.core.status === LinphoneEnums.CallStatus.Missed
|
: AppIcons.incomingCallRejected
|
||||||
? modelData.core.isOutgoing
|
: modelData.core.status === LinphoneEnums.CallStatus.Missed
|
||||||
? AppIcons.outgoingCallMissed
|
? modelData.core.isOutgoing
|
||||||
: AppIcons.incomingCallMissed
|
? AppIcons.outgoingCallMissed
|
||||||
: modelData.core.isOutgoing
|
: AppIcons.incomingCallMissed
|
||||||
? AppIcons.outgoingCall
|
: modelData.core.isOutgoing
|
||||||
: AppIcons.incomingCall
|
? AppIcons.outgoingCall
|
||||||
Layout.preferredWidth: 5 * DefaultStyle.dp
|
: AppIcons.incomingCall
|
||||||
Layout.preferredHeight: 5 * DefaultStyle.dp
|
Layout.preferredWidth: 5 * DefaultStyle.dp
|
||||||
sourceSize.width: 5 * DefaultStyle.dp
|
Layout.preferredHeight: 5 * DefaultStyle.dp
|
||||||
sourceSize.height: 5 * DefaultStyle.dp
|
sourceSize.width: 5 * DefaultStyle.dp
|
||||||
RectangleTest{anchors.fill: parent}
|
sourceSize.height: 5 * DefaultStyle.dp
|
||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
// text: modelData.core.date
|
// text: modelData.core.date
|
||||||
text: UtilsCpp.formatDateElapsedTime(modelData.core.date)
|
text: UtilsCpp.formatDateElapsedTime(modelData.core.date)
|
||||||
font {
|
font {
|
||||||
pixelSize: 12 * DefaultStyle.dp
|
pixelSize: 12 * DefaultStyle.dp
|
||||||
weight: 300 * DefaultStyle.dp
|
weight: 300 * DefaultStyle.dp
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Item {
|
|
||||||
// Layout.fillWidth: true
|
|
||||||
// }
|
|
||||||
Button {
|
Button {
|
||||||
Layout.rightMargin: 5 * DefaultStyle.dp
|
Layout.rightMargin: 5 * DefaultStyle.dp
|
||||||
padding: 0
|
padding: 0
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ AbstractMainPage {
|
||||||
id: mainItem
|
id: mainItem
|
||||||
noItemButtonText: qsTr("Ajouter un contact")
|
noItemButtonText: qsTr("Ajouter un contact")
|
||||||
emptyListText: qsTr("Aucun contact pour le moment")
|
emptyListText: qsTr("Aucun contact pour le moment")
|
||||||
newItemIconSource: AppIcons.newCall
|
newItemIconSource: AppIcons.plusCircle
|
||||||
|
|
||||||
// disable left panel contact list interaction while a contact is being edited
|
// disable left panel contact list interaction while a contact is being edited
|
||||||
property bool leftPanelEnabled: true
|
property bool leftPanelEnabled: true
|
||||||
|
|
@ -154,8 +154,8 @@ AbstractMainPage {
|
||||||
Button {
|
Button {
|
||||||
background: Item{}
|
background: Item{}
|
||||||
icon.source: favoriteList.visible ? AppIcons.upArrow : AppIcons.downArrow
|
icon.source: favoriteList.visible ? AppIcons.upArrow : AppIcons.downArrow
|
||||||
width: 24 * DefaultStyle.dp
|
Layout.preferredWidth: 24 * DefaultStyle.dp
|
||||||
height: 24 * DefaultStyle.dp
|
Layout.preferredHeight: 24 * DefaultStyle.dp
|
||||||
onClicked: favoriteList.visible = !favoriteList.visible
|
onClicked: favoriteList.visible = !favoriteList.visible
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -190,6 +190,7 @@ AbstractMainPage {
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
visible: contactList.count > 0
|
visible: contactList.count > 0
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
Text {
|
Text {
|
||||||
text: qsTr("All contacts")
|
text: qsTr("All contacts")
|
||||||
font {
|
font {
|
||||||
|
|
@ -201,11 +202,11 @@ AbstractMainPage {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
Button {
|
Button {
|
||||||
background: Item{}
|
background: Item{}
|
||||||
icon.source: favoriteList.visible ? AppIcons.upArrow : AppIcons.downArrow
|
icon.source: contactList.visible ? AppIcons.upArrow : AppIcons.downArrow
|
||||||
width: 24 * DefaultStyle.dp
|
Layout.preferredWidth: 24 * DefaultStyle.dp
|
||||||
height: 24 * DefaultStyle.dp
|
Layout.preferredHeight: 24 * DefaultStyle.dp
|
||||||
onClicked: contactList.visible = !contactList.visible
|
onClicked: contactList.visible = !contactList.visible
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ContactsList{
|
ContactsList{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue