/* * Copyright (C) by Felix Weilbach * * 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) any later version. * * 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. */ import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import Style 1.0 import com.nextcloud.desktopclient 1.0 as NC import "./tray" ColumnLayout { NC.EmojiModel { id: emojiModel } signal chosen(string emoji) spacing: 0 FontMetrics { id: metrics } ListView { id: headerLayout Layout.fillWidth: true Layout.margins: 1 implicitWidth: contentItem.childrenRect.width implicitHeight: metrics.height * 2 orientation: ListView.Horizontal model: emojiModel.emojiCategoriesModel delegate: ItemDelegate { id: headerDelegate width: metrics.height * 2 height: headerLayout.height background: Rectangle { color: palette.highlight visible: ListView.isCurrentItem || headerDelegate.highlighted || headerDelegate.checked || headerDelegate.down || headerDelegate.hovered radius: Style.slightlyRoundedButtonRadius } contentItem: EnforcedPlainTextLabel { horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: emoji } Rectangle { anchors.bottom: parent.bottom width: parent.width height: Style.thickBorderWidth visible: ListView.isCurrentItem color: palette.dark } onClicked: { emojiModel.setCategory(label) } } } Rectangle { height: Style.normalBorderWidth Layout.fillWidth: true color: palette.dark } GridView { id: emojiView Layout.fillWidth: true Layout.fillHeight: true Layout.preferredHeight: metrics.height * 8 Layout.margins: Style.normalBorderWidth cellWidth: metrics.height * 2 cellHeight: metrics.height * 2 boundsBehavior: Flickable.DragOverBounds clip: true model: emojiModel.model delegate: ItemDelegate { id: emojiDelegate width: metrics.height * 2 height: metrics.height * 2 background: Rectangle { color: palette.highlight visible: ListView.isCurrentItem || emojiDelegate.highlighted || emojiDelegate.checked || emojiDelegate.down || emojiDelegate.hovered radius: Style.slightlyRoundedButtonRadius } contentItem: EnforcedPlainTextLabel { horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: modelData === undefined ? "" : modelData.unicode } onClicked: { chosen(modelData.unicode); emojiModel.emojiUsed(modelData); } } EnforcedPlainTextLabel { id: placeholderMessage width: parent.width * 0.8 anchors.centerIn: parent text: qsTr("No recent emojis") color: palette.midlight wrapMode: Text.Wrap font.bold: true visible: emojiView.count === 0 } ScrollBar.vertical: ScrollBar {} } }