emojier.qml 3.11 KB
Newer Older
Aleix Pol Gonzalez's avatar
Aleix Pol Gonzalez committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
 *  Copyright (C) 2019 Aleix Pol Gonzalez <aleixpol@kde.org>
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU General Public License as
 *  published by the Free Software Foundation; either version 2 of
 *  the License or (at your option) version 3 or any later version
 *  accepted by the membership of KDE e.V. (or its successor approved
 *  by the membership of KDE e.V.), which shall act as a proxy
 *  defined in Section 14 of version 3 of the license.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

import QtQuick 2.11
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.11 as QQC2
import org.kde.kirigami 2.6 as Kirigami
import org.kde.plasma.emoji 1.0

Kirigami.ApplicationWindow
{
    id: window
    title: i18n("Emoji Picker")

    EmojiModel {
        id: emoji
    }

    RecentEmojiModel {
        id: recentEmojiModel
    }

    function report(thing, description) {
        console.log("Copied to clipboard:", thing)
        CopyHelper.copyTextToClipboard(thing)
        recentEmojiModel.includeRecent(thing, description);
        visible = false
    }

    Component.onCompleted: {
        globalDrawer.actions[recentEmojiModel.count === 0 ? 1 : 0].trigger()
    }

    globalDrawer: Kirigami.GlobalDrawer {
        id: drawer
        title: i18n("Categories")
        collapsible: !topContent.activeFocus
        collapsed: true
        modal: false

        function createCategoryActions(categories) {
            var actions = []
            for(var i in categories) {
                var cat = categories[i];
                var catAction = categoryActionComponent.createObject(drawer, { category: cat });
                actions.push(catAction)
            }
            return actions;
        }

        actions: createCategoryActions(emoji.categories)

        Component {
            id: categoryActionComponent
            Kirigami.Action {
                readonly property bool isRecent: category === ":recent:"
                property string category
                checked: window.pageStack.get(0).title === text
                text: category.length === 0 ? i18n("All")
                        : isRecent          ? i18n("Recent")
                        : category.replace(/&/g, "&&");
                enabled: !isRecent || recentEmojiModel.count > 0

                icon.name: isRecent ? "document-open-recent-symbolic"
                         : category.length === 0 ? "view-list-icons"
                         : "image://text/" + emoji.findFirstEmojiForCategory(category)
                onTriggered: {
                    window.pageStack.replace("qrc:/ui/CategoryPage.qml", {title: text, category: isRecent ? "" : category, model: isRecent ? recentEmojiModel : emoji })
                }
            }
        }
    }
}