mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-05-03 22:56:49 +00:00
feat(ui/modules/Linphone/SmartSearchBar): supports not registered sip addresses
This commit is contained in:
parent
39e83ddb58
commit
d37c3b812c
6 changed files with 134 additions and 46 deletions
|
|
@ -134,6 +134,16 @@ void SipAddressesModel::handleAllHistoryEntriesRemoved () {
|
|||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
QString SipAddressesModel::interpretUrl (const QString &sip_address) {
|
||||
shared_ptr<linphone::Address> l_address = CoreManager::getInstance()->getCore()->interpretUrl(
|
||||
::Utils::qStringToLinphoneString(sip_address)
|
||||
);
|
||||
|
||||
return l_address ? ::Utils::linphoneStringToQString(l_address->asStringUriOnly()) : "";
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
bool SipAddressesModel::removeRow (int row, const QModelIndex &parent) {
|
||||
return removeRows(row, 1, parent);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ public:
|
|||
|
||||
Q_INVOKABLE void handleAllHistoryEntriesRemoved ();
|
||||
|
||||
Q_INVOKABLE QString interpretUrl (const QString &sip_address);
|
||||
|
||||
private:
|
||||
bool removeRow (int row, const QModelIndex &parent = QModelIndex());
|
||||
bool removeRows (int row, int count, const QModelIndex &parent = QModelIndex()) override;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ Rectangle {
|
|||
property alias usernameColor: description.usernameColor
|
||||
|
||||
property var entry
|
||||
|
||||
property var _contact: entry.contact
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -19,57 +19,138 @@ SearchBox {
|
|||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
header: MouseArea {
|
||||
id: headerContent
|
||||
header: Column {
|
||||
readonly property string interpretableSipAddress: SipAddressesModel.interpretUrl(searchBox.filter)
|
||||
|
||||
height: SmartSearchBarStyle.header.height
|
||||
height: {
|
||||
var height = SmartSearchBarStyle.header.addButtonHeight
|
||||
return defaultContact.visible ? height + searchBox.entryHeight : height
|
||||
}
|
||||
width: parent.width
|
||||
|
||||
onClicked: {
|
||||
searchBox.hideMenu()
|
||||
searchBox.addContact(searchBox.filter)
|
||||
spacing: 0
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Default contact.
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
Loader {
|
||||
id: defaultContact
|
||||
|
||||
height: searchBox.entryHeight
|
||||
width: parent.width
|
||||
|
||||
visible: interpretableSipAddress.length > 0
|
||||
|
||||
sourceComponent: Rectangle {
|
||||
anchors.fill: parent
|
||||
color: SmartSearchBarStyle.entry.color.normal
|
||||
|
||||
RowLayout {
|
||||
anchors {
|
||||
fill: parent
|
||||
rightMargin: SmartSearchBarStyle.entry.rightMargin
|
||||
}
|
||||
spacing: 0
|
||||
|
||||
Contact {
|
||||
id: contact
|
||||
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
entry: Object ({
|
||||
sipAddress: interpretableSipAddress
|
||||
})
|
||||
}
|
||||
|
||||
ActionBar {
|
||||
iconSize: SmartSearchBarStyle.entry.iconSize
|
||||
|
||||
ActionButton {
|
||||
icon: 'video_call'
|
||||
onClicked: {
|
||||
searchBox.hideMenu()
|
||||
searchBox.launchVideoCall(interpretableSipAddress)
|
||||
}
|
||||
}
|
||||
|
||||
ActionButton {
|
||||
icon: 'call'
|
||||
onClicked: {
|
||||
searchBox.hideMenu()
|
||||
searchBox.launchCall(interpretableSipAddress)
|
||||
}
|
||||
}
|
||||
|
||||
ActionButton {
|
||||
icon: 'chat'
|
||||
onClicked: {
|
||||
searchBox.hideMenu()
|
||||
searchBox.launchChat(interpretableSipAddress)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: parent.pressed
|
||||
// -------------------------------------------------------------------------
|
||||
// Add contact button.
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
MouseArea {
|
||||
id: addContactButton
|
||||
|
||||
height: SmartSearchBarStyle.header.addButtonHeight
|
||||
width: parent.width
|
||||
|
||||
onClicked: {
|
||||
searchBox.hideMenu()
|
||||
searchBox.addContact(interpretableSipAddress)
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: parent.pressed
|
||||
? SmartSearchBarStyle.header.color.pressed
|
||||
: SmartSearchBarStyle.header.color.normal
|
||||
|
||||
Text {
|
||||
anchors {
|
||||
left: parent.left
|
||||
leftMargin: SmartSearchBarStyle.header.leftMargin
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
font {
|
||||
bold: true
|
||||
pointSize: SmartSearchBarStyle.header.text.fontSize
|
||||
}
|
||||
color: headerContent.pressed
|
||||
Text {
|
||||
anchors {
|
||||
left: parent.left
|
||||
leftMargin: SmartSearchBarStyle.header.leftMargin
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
font {
|
||||
bold: true
|
||||
pointSize: SmartSearchBarStyle.header.text.fontSize
|
||||
}
|
||||
color: addContactButton.pressed
|
||||
? SmartSearchBarStyle.header.text.color.pressed
|
||||
: SmartSearchBarStyle.header.text.color.normal
|
||||
text: qsTr('addContact')
|
||||
}
|
||||
|
||||
Icon {
|
||||
anchors {
|
||||
right: parent.right
|
||||
rightMargin: SmartSearchBarStyle.header.rightMargin
|
||||
verticalCenter: parent.verticalCenter
|
||||
text: qsTr('addContact')
|
||||
}
|
||||
|
||||
Icon {
|
||||
anchors {
|
||||
right: parent.right
|
||||
rightMargin: SmartSearchBarStyle.header.rightMargin
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
icon: 'contact_add'
|
||||
iconSize: SmartSearchBarStyle.header.iconSize
|
||||
}
|
||||
icon: 'contact_add'
|
||||
iconSize: SmartSearchBarStyle.header.iconSize
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Entries.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
delegate: Rectangle {
|
||||
id: searchBoxEntry
|
||||
id: sipAddressEntry
|
||||
|
||||
color: SmartSearchBarStyle.entry.color.normal
|
||||
height: searchBox.entryHeight
|
||||
|
|
@ -97,9 +178,9 @@ SearchBox {
|
|||
}
|
||||
spacing: 0
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
// Contact or address info.
|
||||
// ---------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
Contact {
|
||||
Layout.fillHeight: true
|
||||
|
|
@ -107,9 +188,9 @@ SearchBox {
|
|||
entry: $entry
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
// Actions
|
||||
// ---------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
ActionBar {
|
||||
iconSize: SmartSearchBarStyle.entry.iconSize
|
||||
|
|
@ -155,7 +236,7 @@ SearchBox {
|
|||
|
||||
PropertyChanges {
|
||||
color: SmartSearchBarStyle.entry.color.hovered
|
||||
target: searchBoxEntry
|
||||
target: sipAddressEntry
|
||||
}
|
||||
|
||||
PropertyChanges {
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ QtObject {
|
|||
}
|
||||
|
||||
property QtObject header: QtObject {
|
||||
property int height: 40
|
||||
property int addButtonHeight: 40
|
||||
property int iconSize: 22
|
||||
property int leftMargin: 20
|
||||
property int rightMargin: 10
|
||||
|
|
|
|||
|
|
@ -89,9 +89,7 @@ ColumnLayout {
|
|||
_vcard = CoreManager.createDetachedVcardModel()
|
||||
|
||||
if (sipAddress && sipAddress.length > 0) {
|
||||
_vcard.addSipAddress(
|
||||
Utils.startsWith(sipAddress, 'sip:') ? sipAddress : 'sip:' + sipAddress
|
||||
)
|
||||
_vcard.addSipAddress(sipAddress)
|
||||
}
|
||||
|
||||
_edition = true
|
||||
|
|
@ -215,12 +213,8 @@ ColumnLayout {
|
|||
// -----------------------------------------------------------------------
|
||||
|
||||
function _handleSipAddressChanged (index, defaultValue, newValue) {
|
||||
if (!Utils.startsWith(newValue, 'sip:')) {
|
||||
newValue = 'sip:' + newValue
|
||||
|
||||
if (newValue === defaultValue) {
|
||||
return
|
||||
}
|
||||
if (newValue === defaultValue) {
|
||||
return
|
||||
}
|
||||
|
||||
var so_far_so_good = (defaultValue.length === 0)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue