Warning, /frameworks/kpeople/examples/qml/Main.qml is written in an unsupported language. File is not indexed.
0001 import QtQuick 2.1 0002 import QtQuick.Controls 1.1 0003 import QtQuick.Layouts 1.1 0004 import org.kde.people 1.0 0005 import org.kde.plasma.components 2.0 0006 import org.kde.plasma.core 2.0 as Core 0007 import org.kde.plasma.extras 2.0 0008 import org.kde.kquickcontrolsaddons 2.0 0009 0010 ApplicationWindow { 0011 width: 640 0012 height: 480 0013 visible: true 0014 0015 Core.SortFilterModel { 0016 id: filteredPeople 0017 sortRole: "display" 0018 sortCaseSensitivity: Qt.CaseInsensitive 0019 sourceModel: PersonsModel { 0020 id: people 0021 } 0022 filterRegExp: searchField.text 0023 } 0024 0025 CheckBox { 0026 id: areWeMerging 0027 anchors { 0028 top: parent.top 0029 left: parent.left 0030 } 0031 text: "Merging" 0032 onCheckedChanged: toMergeItems.clear() 0033 } 0034 0035 TextField { 0036 id: searchField 0037 focus: true 0038 anchors { 0039 left: areWeMerging.right 0040 right: mergeLabel.left 0041 } 0042 } 0043 0044 Label { 0045 id: mergeLabel 0046 anchors { 0047 top: parent.top 0048 right: view.right 0049 } 0050 0051 ListModel { 0052 id: toMergeItems 0053 0054 function uriIndex(uri) { 0055 var ret = -1 0056 for (var i = 0; i < count && ret < 0; ++i) { 0057 if (get(i).uri == uri) 0058 ret = i; 0059 } 0060 return ret 0061 } 0062 0063 function addUri(uri, name) { 0064 if (uriIndex(uri) < 0) 0065 toMergeItems.append({ "uri": uri, "name": name }) 0066 } 0067 0068 function indexes() { 0069 var ret = new Array 0070 for(var i=0; i<count; ++i) { 0071 ret.push(get(i).uri) 0072 } 0073 return people.indexesForUris(ret) 0074 } 0075 0076 function removeUri(uri) { 0077 remove(uriIndex(uri)) 0078 } 0079 } 0080 } 0081 0082 GridView { 0083 id: view 0084 clip: true 0085 anchors { 0086 top: searchField.bottom 0087 bottom: parent.bottom 0088 left: parent.left 0089 right: contactItem.left 0090 } 0091 0092 cellWidth: 100 0093 cellHeight: 100 0094 model: filteredPeople 0095 delegate: ListItem { 0096 height: view.cellHeight 0097 width: view.cellWidth - 5 0098 0099 clip: true 0100 enabled: true 0101 0102 ColumnLayout { 0103 anchors.fill: parent 0104 0105 Core.IconItem { 0106 id: avatar 0107 Layout.fillWidth: true 0108 Layout.fillHeight: true 0109 0110 source: decoration 0111 } 0112 Label { 0113 width: parent.width 0114 text: display 0115 wrapMode: Text.WrapAnywhere 0116 elide: Text.ElideMiddle 0117 visible: avatar.status!=Image.Ready 0118 } 0119 } 0120 0121 onClicked: { 0122 contactItem.contactData = model 0123 personActions.personUri = model.personUri 0124 0125 if (areWeMerging.checked) { 0126 toMergeItems.addUri(model.personUri, model.display) 0127 } 0128 } 0129 } 0130 } 0131 0132 Flickable { 0133 id: contactItem 0134 anchors { 0135 top: parent.top 0136 right: parent.right 0137 bottom: parent.bottom 0138 } 0139 width: parent.width/2 0140 property variant contactData 0141 0142 ColumnLayout { 0143 width: parent.width 0144 spacing: 5 0145 0146 Column { 0147 Layout.fillWidth: true 0148 visible: toMergeItems.count > 0 0149 0150 Label { 0151 text: "Contacts To Merge:" 0152 } 0153 0154 Repeater { 0155 model: toMergeItems 0156 delegate: Label { 0157 width: parent.width 0158 text: name + " - " + uri 0159 } 0160 } 0161 0162 Button { 0163 text: "Merge!" 0164 onClicked: { 0165 people.createPersonFromIndexes(toMergeItems.indexes()) 0166 toMergeItems.clear() 0167 } 0168 } 0169 0170 Rectangle { 0171 width: parent.width 0172 height: 1 0173 color: "#888" 0174 } 0175 } 0176 0177 0178 RowLayout { 0179 Core.IconItem { 0180 id: avatar 0181 height: 64 0182 width: height 0183 source: contactItem.contactData ? contactItem.contactData.decoration : null 0184 } 0185 0186 Label { 0187 text: contactItem.contactData ? contactItem.contactData.display : "" 0188 } 0189 } 0190 0191 Label { 0192 id: contactText 0193 width: parent.width 0194 text: dataToString(contactItem.contactData) 0195 0196 function dataToString(data) { 0197 var text = "" 0198 if (data != null) { 0199 for (var prop in data) { 0200 text += prop + ": "; 0201 var currentData = data[prop] 0202 text += currentData == null ? "null" : currentData 0203 text += '\n' 0204 } 0205 } 0206 0207 return text 0208 } 0209 } 0210 0211 Flow { 0212 Layout.fillWidth: true 0213 Layout.fillHeight: true 0214 0215 Repeater { 0216 width: parent.width 0217 model: PersonActions { 0218 id: personActions 0219 } 0220 delegate: Button { 0221 text: model.display 0222 iconSource: model.iconName 0223 onClicked: personActions.triggerAction(model.index) 0224 } 0225 } 0226 } 0227 0228 Button { 0229 text: "Unmerge" 0230 visible: contactItem.contactData!=null && contactItem.contactData.contactsCount>1 0231 onClicked: { 0232 dialogLoader.sourceComponent = unmergeDialogComponent 0233 dialogLoader.item.open() 0234 } 0235 Loader { 0236 id: dialogLoader 0237 } 0238 } 0239 } 0240 } 0241 0242 Component { 0243 id: unmergeDialogComponent 0244 CommonDialog { 0245 id: unmergeDialog 0246 property string name: contactItem.contactData.name 0247 property int index: filteredPeople.mapRowToSource(contactItem.contactData.index) 0248 property url uri: contactItem.contactData.uri 0249 0250 buttonTexts: ["Unmerge", "Cancel"] 0251 titleText: i18n("Unmerging %1", unmergeDialog.name) 0252 content: Column { 0253 width: 500 0254 height: 200 0255 Repeater { 0256 id: unmergesView 0257 model: ColumnProxyModel { 0258 rootIndex: indexFromModel(people, unmergeDialog.index) 0259 } 0260 delegate: ListItem { 0261 property alias checked: willUnmerge.checked 0262 property string contactUri: uri 0263 enabled: true 0264 onClicked: willUnmerge.checked=!willUnmerge.checked 0265 Row { 0266 spacing: 5 0267 CheckBox { id: willUnmerge } 0268 Label { text: display+" - "+contactUri } 0269 } 0270 } 0271 } 0272 } 0273 onButtonClicked: if(index==0) { 0274 for(var i=0; i<unmergesView.count; ++i) { 0275 var item = unmergesView.itemAt(i) 0276 if(item.checked) 0277 people.unmerge(item.contactUri, uri) 0278 } 0279 } 0280 } 0281 } 0282 }