Warning, /utilities/mycroft-plasmoid/plasmoid/contents/ui/Logic.qml is written in an unsupported language. File is not indexed.
0001 /* Copyright 2019 Aditya Mehra <aix.m@outlook.com> 0002 0003 This library is free software; you can redistribute it and/or 0004 modify it under the terms of the GNU Lesser General Public 0005 License as published by the Free Software Foundation; either 0006 version 2.1 of the License, or (at your option) version 3, or any 0007 later version accepted by the membership of KDE e.V. (or its 0008 successor approved by the membership of KDE e.V.), which shall 0009 act as a proxy defined in Section 6 of version 3 of the license. 0010 0011 This library is distributed in the hope that it will be useful, 0012 but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0014 Lesser General Public License for more details. 0015 0016 You should have received a copy of the GNU Lesser General Public 0017 License along with this library. If not, see <http://www.gnu.org/licenses/>. 0018 */ 0019 0020 import QtQuick 2.9 0021 0022 Item { 0023 id: component 0024 property alias model: filterModel 0025 0026 property QtObject sourceModel: undefined 0027 property string filter: "" 0028 property string property: "" 0029 0030 Connections { 0031 onFilterChanged: invalidateFilter() 0032 onPropertyChanged: invalidateFilter() 0033 onSourceModelChanged: invalidateFilter() 0034 } 0035 0036 Component.onCompleted: invalidateFilter() 0037 0038 ListModel { 0039 id: filterModel 0040 } 0041 0042 function invalidateFilter() { 0043 if (sourceModel === undefined) 0044 return; 0045 0046 filterModel.clear(); 0047 0048 if (!isFilteringPropertyOk()) 0049 return 0050 0051 var length = sourceModel.count 0052 for (var i = 0; i < length; ++i) { 0053 var item = sourceModel.get(i); 0054 if (isAcceptedItem(item)) { 0055 filterModel.append(item) 0056 } 0057 } 0058 } 0059 0060 function isAcceptedItem(item) { 0061 if (item[this.property] === undefined) 0062 return false 0063 0064 if (item[this.property].match(this.filter) === null) { 0065 return false 0066 } 0067 0068 return true 0069 } 0070 0071 function isFilteringPropertyOk() { 0072 if(this.property === undefined || this.property === "") { 0073 return false 0074 } 0075 return true 0076 } 0077 } 0078