Warning, /pim/kube/views/people/qml/People.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 Copyright (C) 2017 Michael Bohlender, <bohlender@kolabsys.com> 0003 Copyright (C) 2017 Christian Mollekopf, <mollekopf@kolabsys.com> 0004 0005 This program is free software; you can redistribute it and/or modify 0006 it under the terms of the GNU General Public License as published by 0007 the Free Software Foundation; either version 2 of the License, or 0008 (at your option) any later version. 0009 0010 This program is distributed in the hope that it will be useful, 0011 but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0013 GNU General Public License for more details. 0014 0015 You should have received a copy of the GNU General Public License along 0016 with this program; if not, write to the Free Software Foundation, Inc., 0017 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 0018 */ 0019 0020 import QtQuick 2.7 0021 import QtQuick.Controls 2 0022 import QtQuick.Layouts 1.1 0023 0024 import org.kube.framework 1.0 as Kube 0025 0026 0027 FocusScope { 0028 id: root 0029 0030 property var currentContact 0031 0032 Item { 0033 id: peopleRoot 0034 0035 anchors.fill: parent 0036 0037 Item { 0038 id: toolbar 0039 anchors { 0040 top: parent.top 0041 horizontalCenter: parent.horizontalCenter 0042 } 0043 0044 height: searchBar.height + Kube.Units.smallSpacing 0045 width: parent.width 0046 0047 Kube.PositiveButton { 0048 anchors { 0049 verticalCenter: parent.verticalCenter 0050 left: parent.left 0051 leftMargin: Kube.Units.smallSpacing 0052 } 0053 text: qsTr("New Contact") 0054 visible: stack.depth == 1 0055 0056 onClicked: { 0057 stack.push(personComposer, {contact: null}) 0058 } 0059 } 0060 0061 Kube.IconButton { 0062 anchors { 0063 top: parent.top 0064 left: parent.left 0065 leftMargin: Kube.Units.smallSpacing 0066 } 0067 visible: stack.depth > 1 0068 iconName: Kube.Icons.goBack 0069 onClicked: { 0070 if(stack.depth == 1) 0071 root.currentContact = "" 0072 stack.pop() 0073 } 0074 } 0075 Kube.TextField { 0076 id: searchBar 0077 focus: true 0078 anchors.horizontalCenter: parent.horizontalCenter 0079 width: parent.width * 0.5 0080 placeholderText: qsTr("Search...") 0081 } 0082 } 0083 0084 StackView { 0085 id: stack 0086 0087 anchors { 0088 top: toolbar.bottom 0089 left: parent.left 0090 right: parent.right 0091 bottom: parent.bottom 0092 } 0093 0094 initialItem: peoplePage 0095 0096 clip: true 0097 } 0098 } 0099 0100 Component { 0101 id: peoplePage 0102 0103 Rectangle { 0104 id: peoplePageRoot 0105 color: Kube.Colors.viewBackgroundColor 0106 0107 Kube.GridView { 0108 id: gridView 0109 anchors { 0110 fill: parent 0111 margins: Kube.Units.largeSpacing 0112 } 0113 0114 activeFocusOnTab: true 0115 0116 model: Kube.PeopleModel { 0117 filter: searchBar.text 0118 } 0119 0120 cellWidth: Kube.Units.gridUnit * 10 0121 cellHeight: Kube.Units.gridUnit * 3 0122 0123 onActiveFocusChanged: { 0124 if (currentIndex < 0) { 0125 currentIndex = 0 0126 } 0127 } 0128 0129 function selectObject(domainObject) { 0130 root.currentContact = domainObject 0131 stack.push(personPage) 0132 } 0133 0134 delegate: Item { 0135 id: delegateRoot 0136 0137 height: gridView.cellHeight - Kube.Units.smallSpacing * 2 0138 width: gridView.cellWidth - Kube.Units.smallSpacing * 2 0139 0140 Keys.onReturnPressed: { 0141 GridView.view.currentIndex = index 0142 GridView.view.selectObject(model.domainObject) 0143 } 0144 0145 Rectangle { 0146 anchors.fill: parent 0147 0148 border.width: 1 0149 border.color: Kube.Colors.buttonColor 0150 0151 Rectangle { 0152 id: avatarPlaceholder 0153 color: Kube.Colors.buttonColor 0154 anchors { 0155 top: parent.top 0156 left: parent.left 0157 bottom: parent.bottom 0158 } 0159 clip: true 0160 0161 width: height 0162 Kube.KubeImage { 0163 anchors.fill: parent 0164 visible: model.imageData != "" 0165 imageData: model.imageData 0166 } 0167 Kube.Icon { 0168 anchors.fill: parent 0169 visible: model.imageData == "" 0170 iconName: Kube.Icons.user 0171 } 0172 } 0173 0174 Column { 0175 width: parent.width 0176 anchors { 0177 left: avatarPlaceholder.right 0178 margins: Kube.Units.smallSpacing 0179 verticalCenter: parent.verticalCenter 0180 } 0181 0182 Kube.Label { 0183 width: delegateRoot.width - avatarPlaceholder.width - Kube.Units.smallSpacing * 2 0184 0185 text: model.firstName 0186 elide: Text.ElideRight 0187 } 0188 0189 Kube.Label { 0190 width: delegateRoot.width - avatarPlaceholder.width - Kube.Units.smallSpacing * 2 0191 0192 text: model.lastName 0193 elide: Text.ElideRight 0194 } 0195 } 0196 } 0197 Kube.AbstractButton { 0198 0199 anchors.fill: parent 0200 0201 color: "#00000000" 0202 0203 onClicked: { 0204 parent.GridView.view.currentIndex = index 0205 parent.GridView.view.selectObject(model.domainObject) 0206 } 0207 } 0208 } 0209 } 0210 } 0211 } 0212 0213 Component { 0214 id: personPage 0215 0216 Rectangle { 0217 id: personPageRoot 0218 0219 Kube.ContactController { 0220 id: contactController 0221 contact: root.currentContact 0222 } 0223 0224 color: Kube.Colors.viewBackgroundColor 0225 0226 PersonPage { 0227 } 0228 0229 Kube.Button { 0230 anchors { 0231 bottom: parent.bottom 0232 left: parent.left 0233 margins: Kube.Units.largeSpacing 0234 } 0235 text: qsTr("Remove") 0236 0237 onClicked: { 0238 contactController.remove() 0239 stack.pop() 0240 } 0241 } 0242 0243 Kube.Button { 0244 anchors { 0245 bottom: parent.bottom 0246 right: parent.right 0247 margins: Kube.Units.largeSpacing 0248 } 0249 text: qsTr("Edit") 0250 0251 onClicked: { 0252 stack.push(personComposer, {contact: root.currentContact}) 0253 } 0254 } 0255 } 0256 } 0257 0258 Component { 0259 id: personComposer 0260 0261 Rectangle { 0262 id: personComposerRoot 0263 0264 property var contact: null 0265 0266 color: Kube.Colors.viewBackgroundColor 0267 0268 PersonComposer { 0269 contactController: Kube.ContactController { 0270 id: contactController 0271 contact: personComposerRoot.contact 0272 } 0273 } 0274 0275 Kube.PositiveButton { 0276 anchors { 0277 bottom: parent.bottom 0278 right: parent.right 0279 margins: Kube.Units.largeSpacing 0280 } 0281 0282 text: "Save" 0283 0284 onClicked: { 0285 contactController.saveAction.execute() 0286 stack.pop() 0287 } 0288 } 0289 } 0290 } 0291 } 0292 0293 // Column { 0294 // 0295 // width: parent.width 0296 // 0297 // spacing: Kube.Units.smallSpacing 0298 // 0299 // Text { 0300 // 0301 // text: root.firstname + " is part of these groups:" 0302 // } 0303 // 0304 // GroupGrid { 0305 // id: groups 0306 // 0307 // width: root.width - Kube.Units.largeSpacing 0308 // 0309 // model: GroupModel1 {} 0310 // } 0311 // } 0312 0313 // Column { 0314 // 0315 // width: parent.width 0316 // 0317 // spacing: Kube.Units.smallSpacing 0318 // 0319 // Text { 0320 // id: commonPeopleLabel 0321 // 0322 // text: root.firstname + " is associated with:" 0323 // } 0324 // 0325 // PeopleGrid { 0326 // id: commonPeople 0327 // 0328 // width: root.width - Kube.Units.largeSpacing 0329 // 0330 // model: PeopleModel2 {} 0331 // } 0332 // } 0333