Fix StickerPicker padding and names of unnamed packs

This commit is contained in:
Nicolas Werner 2023-05-19 23:19:04 +02:00
parent 7fab9a1d73
commit 58cfc39ac4
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
3 changed files with 53 additions and 27 deletions

View file

@ -138,6 +138,8 @@ Menu {
section.delegate: sectionHeading section.delegate: sectionHeading
section.labelPositioning: ViewSection.InlineLabels | ViewSection.CurrentLabelAtStart section.labelPositioning: ViewSection.InlineLabels | ViewSection.CurrentLabelAtStart
spacing: Nheko.paddingSmall
ScrollHelper { ScrollHelper {
flickable: parent flickable: parent
anchors.fill: parent anchors.fill: parent
@ -148,38 +150,40 @@ Menu {
delegate: Row { delegate: Row {
required property var row; required property var row;
spacing: Nheko.paddingSmall
Repeater { Repeater {
model: row model: row
delegate: AbstractButton { delegate: AbstractButton {
width: stickerDim width: stickerDim
height: stickerDim height: stickerDim
hoverEnabled: true hoverEnabled: true
ToolTip.text: ":" + modelData.shortcode + ": - " + modelData.body ToolTip.text: ":" + modelData.shortcode + ": - " + modelData.body
ToolTip.visible: hovered ToolTip.visible: hovered
// TODO: maybe add favorites at some point? // TODO: maybe add favorites at some point?
onClicked: { onClicked: {
console.debug("Picked " + modelData.descriptor); console.debug("Picked " + modelData.descriptor);
stickerPopup.close(); stickerPopup.close();
callback(modelData.descriptor); callback(modelData.descriptor);
} }
contentItem: Image { contentItem: Image {
height: stickerDim height: stickerDim
width: stickerDim width: stickerDim
source: modelData.url.replace("mxc://", "image://MxcImage/") + "?scale" source: modelData.url.replace("mxc://", "image://MxcImage/") + "?scale"
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
} }
background: Rectangle { background: Rectangle {
anchors.fill: parent anchors.fill: parent
color: hovered ? Nheko.colors.highlight : 'transparent' color: hovered ? Nheko.colors.highlight : 'transparent'
radius: 5 radius: 5
} }
}
}
} }
}
}
ScrollBar.vertical: ScrollBar { ScrollBar.vertical: ScrollBar {
id: emojiScroll id: emojiScroll

View file

@ -8,6 +8,7 @@
#include <algorithm> #include <algorithm>
#include "Cache.h"
#include "Cache_p.h" #include "Cache_p.h"
Q_DECLARE_METATYPE(StickerImage) Q_DECLARE_METATYPE(StickerImage)
@ -104,7 +105,7 @@ GridImagePackModel::data(const QModelIndex &index, int role) const
const auto &pack = packs[rowToPack[index.row()]]; const auto &pack = packs[rowToPack[index.row()]];
switch (role) { switch (role) {
case Roles::PackName: case Roles::PackName:
return pack.packname; return nameFromPack(pack);
case Roles::Row: { case Roles::Row: {
std::size_t offset = static_cast<std::size_t>(index.row()) - pack.firstRow; std::size_t offset = static_cast<std::size_t>(index.row()) - pack.firstRow;
QList<StickerImage> imgs; QList<StickerImage> imgs;
@ -135,7 +136,7 @@ GridImagePackModel::data(const QModelIndex &index, int role) const
switch (role) { switch (role) {
case Roles::PackName: case Roles::PackName:
return pack.packname; return nameFromPack(pack);
case Roles::Row: { case Roles::Row: {
QList<StickerImage> imgs; QList<StickerImage> imgs;
for (auto img = firstIndex; for (auto img = firstIndex;
@ -162,6 +163,25 @@ GridImagePackModel::data(const QModelIndex &index, int role) const
return {}; return {};
} }
QString
GridImagePackModel::nameFromPack(const PackDesc &pack) const
{
if (!pack.packname.isEmpty()) {
return pack.packname;
}
if (!pack.state_key.empty()) {
return QString::fromStdString(pack.state_key);
}
if (!pack.room_id.empty()) {
auto info = cache::singleRoomInfo(pack.room_id);
return QString::fromStdString(info.name);
}
return tr("Account Pack");
}
void void
GridImagePackModel::setSearchString(QString key) GridImagePackModel::setSearchString(QString key)
{ {

View file

@ -85,4 +85,6 @@ private:
trie<uint, std::pair<std::uint32_t, std::uint32_t>> trie_; trie<uint, std::pair<std::uint32_t, std::uint32_t>> trie_;
std::vector<std::pair<std::uint32_t, std::uint32_t>> currentSearchResult; std::vector<std::pair<std::uint32_t, std::uint32_t>> currentSearchResult;
std::vector<std::size_t> rowToFirstRowEntryFromSearch; std::vector<std::size_t> rowToFirstRowEntryFromSearch;
QString nameFromPack(const PackDesc &pack) const;
}; };