mirror of
https://github.com/uowuo/abaddon.git
synced 2024-09-20 06:51:51 +00:00
show guild icon previews as grid in folder button
This commit is contained in:
parent
6fc3624e3b
commit
8bd628c177
|
@ -64,7 +64,7 @@ void GuildList::AddFolder(const UserSettingsGuildFoldersEntry &folder) {
|
|||
return;
|
||||
}
|
||||
|
||||
auto *folder_widget = Gtk::make_managed<GuildListFolderItem>();
|
||||
auto *folder_widget = Gtk::make_managed<GuildListFolderItem>(folder);
|
||||
for (const auto guild_id : folder.GuildIDs) {
|
||||
if (auto *guild_widget = CreateGuildWidget(guild_id)) {
|
||||
guild_widget->show();
|
||||
|
|
|
@ -1,7 +1,46 @@
|
|||
#include "guildlistfolderitem.hpp"
|
||||
#include "guildlistguilditem.hpp"
|
||||
|
||||
GuildListFolderItem::GuildListFolderItem() {
|
||||
// doing my best to copy discord here
|
||||
|
||||
const int FolderGridButtonSize = 48;
|
||||
const int FolderGridImageSize = 24;
|
||||
|
||||
class GuildListFolderButton : public Gtk::Grid {
|
||||
public:
|
||||
GuildListFolderButton() {
|
||||
set_size_request(FolderGridButtonSize, FolderGridButtonSize);
|
||||
}
|
||||
|
||||
void SetGuilds(const std::vector<Snowflake> &guild_ids) {
|
||||
for (int y = 0; y < 2; y++) {
|
||||
for (int x = 0; x < 2; x++) {
|
||||
const size_t i = y * 2 + x;
|
||||
auto &widget = m_images[x][y];
|
||||
widget.property_pixbuf() = Abaddon::Get().GetImageManager().GetPlaceholder(FolderGridImageSize);
|
||||
attach(widget, x, y, 1, 1);
|
||||
|
||||
if (i < guild_ids.size()) {
|
||||
widget.show();
|
||||
|
||||
if (const auto guild = Abaddon::Get().GetDiscordClient().GetGuild(guild_ids[i]); guild.has_value()) {
|
||||
const auto cb = [&widget](const Glib::RefPtr<Gdk::Pixbuf> &pb) {
|
||||
widget.property_pixbuf() = pb->scale_simple(FolderGridImageSize, FolderGridImageSize, Gdk::INTERP_BILINEAR);
|
||||
};
|
||||
Abaddon::Get().GetImageManager().LoadFromURL(guild->GetIconURL("png", "32"), sigc::track_obj(cb, *this));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
Gtk::Image m_images[2][2];
|
||||
};
|
||||
|
||||
GuildListFolderItem::GuildListFolderItem(const UserSettingsGuildFoldersEntry &folder) {
|
||||
get_style_context()->add_class("classic-guild-folder");
|
||||
|
||||
m_revealer.add(m_box);
|
||||
m_revealer.set_reveal_child(true);
|
||||
|
||||
|
@ -14,10 +53,18 @@ GuildListFolderItem::GuildListFolderItem() {
|
|||
return false;
|
||||
});
|
||||
|
||||
m_ev.add(m_image);
|
||||
auto *btn = Gtk::make_managed<GuildListFolderButton>();
|
||||
btn->SetGuilds(folder.GuildIDs);
|
||||
m_ev.add(*btn);
|
||||
add(m_ev);
|
||||
add(m_revealer);
|
||||
show_all_children();
|
||||
|
||||
btn->show();
|
||||
m_ev.show();
|
||||
m_revealer.show();
|
||||
m_box.show();
|
||||
m_image.show();
|
||||
show();
|
||||
}
|
||||
|
||||
void GuildListFolderItem::AddGuildWidget(GuildListGuildItem *widget) {
|
||||
|
|
|
@ -5,12 +5,13 @@
|
|||
#include <gtkmm/revealer.h>
|
||||
|
||||
#include "guildlistguilditem.hpp"
|
||||
#include "discord/usersettings.hpp"
|
||||
|
||||
class GuildListGuildItem;
|
||||
|
||||
class GuildListFolderItem : public Gtk::VBox {
|
||||
public:
|
||||
GuildListFolderItem();
|
||||
GuildListFolderItem(const UserSettingsGuildFoldersEntry &folder);
|
||||
|
||||
void AddGuildWidget(GuildListGuildItem *widget);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user