Warning, /plasma/plasma-desktop/emojier/app/ui/Emojier.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2019 Aleix Pol Gonzalez <aleixpol@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 import QtQuick 2.11 0008 import QtQuick.Layouts 1.3 0009 import org.kde.kirigami 2.6 as Kirigami 0010 import org.kde.plasma.emoji 0011 0012 Kirigami.ApplicationWindow 0013 { 0014 id: window 0015 0016 minimumWidth: Math.round(minimumHeight * 1.25) 0017 width: Kirigami.Units.gridUnit * 25 0018 height: Kirigami.Units.gridUnit * 25 0019 0020 EmojiModel { 0021 id: emoji 0022 } 0023 0024 RecentEmojiModel { 0025 id: recentEmojiModel 0026 } 0027 0028 function report(thing, description) { 0029 if (!visible) 0030 return; 0031 CopyHelper.copyTextToClipboard(thing) 0032 recentEmojiModel.includeRecent(thing, description); 0033 window.showPassiveNotification(i18n("%1 copied to the clipboard", thing)) 0034 } 0035 0036 Kirigami.Action { 0037 id: recentAction 0038 checked: window.pageStack.get(0).title === text 0039 text: i18n("Recent") 0040 0041 icon.name: "document-open-recent-symbolic" 0042 onTriggered: { 0043 window.pageStack.replace(Qt.resolvedUrl("CategoryPage.qml"), {title: text, category: "", model: recentEmojiModel, showClearHistoryButton: true}) 0044 } 0045 } 0046 Kirigami.Action { 0047 id: searchAction 0048 checked: window.pageStack.get(0).title === text 0049 text: i18n("Search") 0050 icon.name: "search" 0051 shortcut: StandardKey.Find 0052 0053 onTriggered: { 0054 window.pageStack.replace(Qt.resolvedUrl("CategoryPage.qml"), {title: text, category: "", model: emoji, showSearch: true }) 0055 } 0056 } 0057 0058 CategoryAction { 0059 id: allAction 0060 text: i18n("All") 0061 icon.name: "view-list-icons" 0062 category: "" 0063 } 0064 0065 Component { 0066 id: drawerComponent 0067 0068 Kirigami.GlobalDrawer { 0069 id: drawer 0070 0071 title: i18n("Categories") 0072 collapsible: !topContent.activeFocus 0073 collapsed: true 0074 modal: false 0075 0076 header: Kirigami.AbstractApplicationHeader { 0077 topPadding: Kirigami.Units.smallSpacing 0078 bottomPadding: Kirigami.Units.smallSpacing 0079 leftPadding: Kirigami.Units.largeSpacing 0080 rightPadding: Kirigami.Units.smallSpacing 0081 0082 Kirigami.Heading { 0083 level: 1 0084 text: drawer.title 0085 textFormat: Text.PlainText 0086 Layout.fillWidth: true 0087 } 0088 } 0089 0090 function getIcon(category: string) { 0091 switch (category.trim()) { 0092 case 'Activities': return 'games-highscores' 0093 case 'Animals and Nature': return 'animal' 0094 case 'Flags': return 'flag' 0095 case 'Food and Drink': return 'food' 0096 case 'Objects': return 'object' 0097 case 'People and Body': return 'user' 0098 case 'Smileys and Emotion': return 'smiley' 0099 case 'Symbols': return 'checkmark' 0100 case 'Travel and Places': return 'globe' 0101 default: return 'folder' 0102 } 0103 } 0104 0105 Instantiator { 0106 id: instantiator 0107 property int loadCount: 0 0108 asynchronous: true 0109 model: emoji.categories 0110 CategoryAction { 0111 category: modelData 0112 icon.name: drawer.getIcon(category) 0113 } 0114 onObjectAdded: (index, object) => { 0115 if (++loadCount !== model.length) { 0116 return; 0117 } 0118 0119 let actions = [recentAction, searchAction, allAction]; 0120 for (let i = 0; i < count; ++i) { 0121 actions.push(this.objectAt(i)); 0122 } 0123 drawer.actions = actions; 0124 // The extra gridUnit is to account for the header that appears when expanded 0125 window.minimumHeight = Qt.binding(() => drawer.contentHeight + Kirigami.Units.gridUnit * 2); 0126 0127 } 0128 } 0129 } 0130 } 0131 0132 Component.onCompleted: { 0133 recentAction.trigger(); 0134 0135 const incubator = drawerComponent.incubateObject(window); 0136 if (incubator.status !== Component.Ready) { 0137 incubator.onStatusChanged = function(status) { 0138 if (status === Component.Ready) { 0139 window.globalDrawer = incubator.object; 0140 } 0141 }; 0142 } else { 0143 window.globalDrawer = incubator.object; 0144 } 0145 } 0146 }