some refactorage

This commit is contained in:
ouwou
2021-07-04 02:36:12 -04:00
parent c154a63967
commit 87d5faf30b
2 changed files with 13 additions and 9 deletions

View File

@@ -124,7 +124,7 @@ void ChannelList::UpdateChannel(Snowflake id) {
channel_row[m_columns.m_id] = channel->ID;
channel_row[m_columns.m_name] = Glib::Markup::escape_text(*channel->Name);
if (is_orphan)
channel_row[m_columns.m_sort] = *channel->Position - 100;
channel_row[m_columns.m_sort] = *channel->Position + OrphanChannelSortOffset;
else
channel_row[m_columns.m_sort] = *channel->Position;
}
@@ -153,7 +153,7 @@ void ChannelList::UpdateCreateChannel(Snowflake id) {
channel_row[m_columns.m_id] = channel->ID;
channel_row[m_columns.m_name] = Glib::Markup::escape_text(*channel->Name);
if (orphan)
channel_row[m_columns.m_sort] = *channel->Position - 100;
channel_row[m_columns.m_sort] = *channel->Position + OrphanChannelSortOffset;
else
channel_row[m_columns.m_sort] = *channel->Position;
}
@@ -165,13 +165,13 @@ void ChannelList::UpdateGuild(Snowflake id) {
if (!iter || !guild.has_value()) return;
(*iter)[m_columns.m_name] = "<b>" + Glib::Markup::escape_text(guild->Name) + "</b>";
(*iter)[m_columns.m_icon] = img.GetPlaceholder(24);
(*iter)[m_columns.m_icon] = img.GetPlaceholder(GuildIconSize);
if (guild->HasIcon()) {
const auto cb = [this, id](const Glib::RefPtr<Gdk::Pixbuf> &pb) {
// iter might be invalid
auto iter = GetIteratorForGuildFromID(id);
if (iter)
(*iter)[m_columns.m_icon] = pb->scale_simple(24, 24, Gdk::INTERP_BILINEAR);
(*iter)[m_columns.m_icon] = pb->scale_simple(GuildIconSize, GuildIconSize, Gdk::INTERP_BILINEAR);
};
img.LoadFromURL(guild->GetIconURL("png", "32"), sigc::track_obj(cb, *this));
}
@@ -188,11 +188,13 @@ Gtk::TreeModel::iterator ChannelList::AddGuild(const GuildData &guild) {
guild_row[m_columns.m_type] = RenderType::Guild;
guild_row[m_columns.m_id] = guild.ID;
guild_row[m_columns.m_name] = "<b>" + Glib::Markup::escape_text(guild.Name) + "</b>";
guild_row[m_columns.m_icon] = img.GetPlaceholder(24);
guild_row[m_columns.m_icon] = img.GetPlaceholder(GuildIconSize);
if (guild.HasIcon()) {
const auto cb = [this, guild_row](const Glib::RefPtr<Gdk::Pixbuf> &pb) {
guild_row[m_columns.m_icon] = pb->scale_simple(24, 24, Gdk::INTERP_BILINEAR);
const auto cb = [this, id = guild.ID](const Glib::RefPtr<Gdk::Pixbuf> &pb) {
auto iter = GetIteratorForGuildFromID(id);
if (iter)
(*iter)[m_columns.m_icon] = pb->scale_simple(GuildIconSize, GuildIconSize, Gdk::INTERP_BILINEAR);
};
img.LoadFromURL(guild.GetIconURL("png", "32"), sigc::track_obj(cb, *this));
}
@@ -221,7 +223,7 @@ Gtk::TreeModel::iterator ChannelList::AddGuild(const GuildData &guild) {
channel_row[m_columns.m_type] = RenderType::TextChannel;
channel_row[m_columns.m_id] = channel.ID;
channel_row[m_columns.m_name] = Glib::Markup::escape_text(*channel.Name);
channel_row[m_columns.m_sort] = *channel.Position - 100; // subtract 100 to make sure they stay behind categories
channel_row[m_columns.m_sort] = *channel.Position + OrphanChannelSortOffset;
}
for (const auto &[category_id, channels] : categories) {

View File

@@ -8,7 +8,8 @@
#include <sigc++/sigc++.h>
#include "../discord/discord.hpp"
static const constexpr int ChannelEmojiSize = 16;
constexpr static int GuildIconSize = 24;
constexpr static int OrphanChannelSortOffset = -100; // forces orphan channels to the top of the list
enum class RenderType {
Guild,
@@ -124,6 +125,7 @@ protected:
void UpdateChannelCategory(const ChannelData &channel);
// separation necessary because a channel and guild can share the same id
Gtk::TreeModel::iterator GetIteratorForGuildFromID(Snowflake id);
Gtk::TreeModel::iterator GetIteratorForChannelFromID(Snowflake id);