Warning, /maui/communicator/src/views/contacts/ContactsView.qml is written in an unsupported language. File is not indexed.
0001 import QtQuick 2.14
0002 import QtQuick.Controls 2.14
0003 import QtQuick.Layouts 1.3
0004
0005 import QtGraphicalEffects 1.0
0006
0007 import org.mauikit.controls 1.3 as Maui
0008
0009 import org.maui.communicator 1.0
0010
0011 Maui.AltBrowser
0012 {
0013 id: control
0014
0015 property alias list : _contactsList
0016 property alias listModel : _contactsModel
0017
0018 property bool showAccountFilter: false
0019
0020 property var currentContact : ({})
0021
0022 holder.visible: !currentView.count
0023 headBar.visible: true
0024 headBar.forceCenterMiddleContent: root.isWide
0025 // onActionTriggered: _newContactDialog.open()
0026
0027 model: Maui.BaseModel
0028 {
0029 id: _contactsModel
0030 list: ContactsList
0031 {
0032 id: _contactsList
0033 }
0034 sort: "n"
0035 sortOrder: Qt.AscendingOrder
0036 recursiveFilteringEnabled: true
0037 sortCaseSensitivity: Qt.CaseInsensitive
0038 filterCaseSensitivity: Qt.CaseInsensitive
0039 }
0040
0041 // headBar.leftContent: ToolButton
0042 // {
0043 // // enabled: _contactsModel.count > 0
0044 // icon.name: control.viewType === Maui.AltBrowser.ViewType.List ? "view-list-icons" : "view-list-details"
0045
0046 // onClicked:
0047 // {
0048 // control.viewType = control.viewType === Maui.AltBrowser.ViewType.List ? Maui.AltBrowser.ViewType.Grid : Maui.AltBrowser.ViewType.List
0049 // }
0050 // }
0051
0052 headBar.middleContent: Maui.SearchField
0053 {
0054 id: _searchField
0055 Layout.fillWidth: true
0056 Layout.maximumWidth: 500
0057 Layout.alignment: Qt.AlignCenter
0058 focusReason : Qt.PopupFocusReason
0059 placeholderText: i18n("Search %1 contacts", _contactsList.count)
0060 onAccepted: _contactsModel.filter = text
0061 onCleared: _contactsModel.filter = ""
0062 }
0063
0064 gridView.itemSize: Math.min(140, Math.floor(width/3))
0065
0066 listView.spacing: Maui.Style.space.big
0067 listView.flickable.header: Item
0068 {
0069 visible: showAccountFilter
0070 height: visible ? Maui.Style.toolBarHeight * 1.5 : 0
0071 width: visible ? parent.width : 0
0072
0073 ComboBox
0074 {
0075 id: _accountsCombobox
0076 width: isWide ? control.width * 0.8 : control.width * 0.95
0077 textRole: "account"
0078 anchors.centerIn: parent
0079
0080 onActivated:
0081 {
0082
0083 console.log("filter by:"+currentText)
0084 if(currentText === "All")
0085 list.reset()
0086 else
0087 list.query = "account="+currentText
0088
0089 positionViewAtBeginning()
0090 }
0091
0092 Component.onCompleted:
0093 {
0094 var androidAccounts = [{account: "All"}]
0095 var accounts = []
0096 accounts = list.getAccounts()
0097
0098 for(var i in accounts)
0099 androidAccounts.push(accounts[i])
0100 _accountsCombobox.model = androidAccounts;
0101 }
0102
0103 }
0104
0105 }
0106
0107 listView.section.property: "n"
0108 listView.section.criteria: ViewSection.FirstCharacter
0109 listView.section.labelPositioning: ViewSection.InlineLabels
0110 listView.section.delegate: Maui.LabelDelegate
0111 {
0112 label: section.toUpperCase()
0113 isSection: true
0114 width: parent.width
0115 opacity: 0.6
0116 }
0117
0118 gridDelegate: Item
0119 {
0120 width: control.gridView.cellWidth
0121 height: control.gridView.cellHeight
0122
0123 property bool isCurrentItem : GridView.isCurrentItem
0124
0125 GridContactDelegate
0126 {
0127 anchors.fill: parent
0128 anchors.margins: Maui.Style.space.medium
0129 isCurrentItem: parent.isCurrentItem
0130
0131 onClicked:
0132 {
0133 control.currentIndex = index
0134
0135 if(Maui.Handy.singleClick)
0136 {
0137 openContact(_contactsModel.get(index))
0138 }
0139 }
0140
0141 onDoubleClicked:
0142 {
0143 control.currentIndex = index
0144
0145 if(!Maui.Handy.singleClick)
0146 {
0147 openContact(_contactsModel.get(index))
0148 }
0149 }
0150
0151 onFavClicked:
0152 {
0153 var item = _contactsList.get(index)
0154 item["fav"] = item.fav == "1" ? "0" : "1"
0155 _contactsList.update(item, listModel.mappedToSource(index))
0156 }
0157 }
0158 }
0159
0160 listDelegate: ContactDelegate
0161 {
0162 height: 60
0163 width: Math.min(isWide ? ListView.view.width * 0.8 : ListView.view.width, 500)
0164 anchors.horizontalCenter: parent.horizontalCenter
0165 showQuickActions: true
0166 template.headerSizeHint: 60
0167
0168 template.iconComponent: Item
0169 {
0170 id: _contactPic
0171
0172 Rectangle
0173 {
0174 Maui.Theme.colorSet: Maui.Theme.Complementary
0175 Maui.Theme.inherit: false
0176 anchors.fill: parent
0177 radius: Maui.Style.radiusV
0178 color: Maui.Theme.backgroundColor
0179
0180 Loader
0181 {
0182 id: _contactPicLoader
0183 anchors.fill: parent
0184 anchors.margins: 1
0185 sourceComponent: model.photo ? _imgComponent : _iconComponent
0186 }
0187
0188 Component
0189 {
0190 id: _imgComponent
0191
0192 Image
0193 {
0194 id: _img
0195
0196 sourceSize.width: parent.width
0197 sourceSize.height: parent.height
0198
0199 fillMode: Image.PreserveAspectCrop
0200 cache: true
0201 antialiasing: true
0202 smooth: true
0203 asynchronous: true
0204
0205 source: "image://contact/"+ model.id
0206
0207 layer.enabled: true
0208 layer.effect: OpacityMask
0209 {
0210 maskSource: Item
0211 {
0212 width: _img.width
0213 height: _img.height
0214
0215 Rectangle
0216 {
0217 anchors.fill: parent
0218 radius: Maui.Style.radiusV
0219 }
0220 }
0221 }
0222 }
0223 }
0224
0225 Component
0226 {
0227 id: _iconComponent
0228
0229 Label
0230 {
0231 anchors.fill: parent
0232 horizontalAlignment: Qt.AlignHCenter
0233 verticalAlignment: Qt.AlignVCenter
0234 color: Maui.Theme.textColor
0235 font.pointSize: Maui.Style.fontSizes.huge
0236 font.bold: true
0237 font.weight: Font.Bold
0238 text: model.n ? model.n[0].toUpperCase() : "?"
0239 }
0240 }
0241 }
0242 }
0243
0244 quickActions: [
0245
0246 Action
0247 {
0248 icon.name: "send-sms"
0249 onTriggered:
0250 {
0251 _dialogLoader.sourceComponent = _messageComposerComponent
0252 dialog.contact = list.get(index)
0253 dialog.open()
0254 }
0255 },
0256
0257 Action
0258 {
0259 enabled: Maui.Handy.isMobile
0260 icon.name: "dialer-call"
0261 onTriggered: _communicator.call(model.tel)
0262
0263 }
0264 ]
0265
0266 onClicked:
0267 {
0268 control.currentIndex = index
0269
0270 if(Maui.Handy.singleClick)
0271 {
0272 openContact(_contactsModel.get(index))
0273 }
0274 }
0275
0276 onDoubleClicked:
0277 {
0278 control.currentIndex = index
0279
0280 if(!Maui.Handy.singleClick)
0281 {
0282 openContact(_contactsModel.get(index))
0283 }
0284 }
0285
0286 onFavClicked:
0287 {
0288 var item = _contactsList.get(index)
0289 item["fav"] = item.fav == "1" ? "0" : "1"
0290 _contactsList.update(item, listModel.mappedToSource(index))
0291 }
0292 }
0293
0294
0295 Component
0296 {
0297 id: _contactPageComponent
0298
0299 ContactPage
0300 {
0301 id: _contactPage
0302 contact: control.currentContact
0303 onCloseTriggered:
0304 {
0305 if(editing)
0306 {
0307 _confirmExit.open()
0308
0309 }else
0310 {
0311 close()
0312 }
0313 }
0314
0315 Maui.InfoDialog
0316 {
0317 id: _confirmExit
0318 title: i18n("Discard")
0319 message: i18n("If you chose to exit the changes made will be lost. Do you want to exit?")
0320
0321 onAccepted: close()
0322 onRejected:
0323 {
0324 _contactPage.editing = false
0325
0326 if(!_contactPage.contact.id)
0327 {
0328 _contactPage.close()
0329 }
0330
0331 _confirmExit.close()
0332 }
0333
0334 }
0335
0336 onEditCanceled:
0337 {
0338 if(!contact.id)
0339 {
0340 _contactPage.close()
0341 }
0342 }
0343
0344 onContactEdited:
0345 {
0346 console.log(contact.id)
0347
0348 if(contact.n.length && contact.tel.length)
0349 {
0350 if(contact.id)
0351 {
0352 _contactsList.update(contact, listModel.mappedToSource(control.currentIndex))
0353 }else
0354 {
0355 _contactsList.insert(contact)
0356 notify("list-add-user", i18n("New contact added"), contact.n)
0357 }
0358 }else
0359 {
0360 _contactPage.close()
0361 }
0362 }
0363 }
0364 }
0365
0366 function openContact(contact)
0367 {
0368 control.currentContact = contact
0369 _dialogLoader.sourceComponent = _contactPageComponent
0370 dialog.open()
0371 }
0372
0373 }
0374