mirror of
https://github.com/uowuo/abaddon.git
synced 2024-09-20 06:51:51 +00:00
hide dm header unless selected in classic channel list
This commit is contained in:
parent
9131158cbb
commit
1e6d16f44a
|
@ -11,6 +11,10 @@ ChannelList::ChannelList() {
|
|||
m_tree.SetSelectedGuild(guild_id);
|
||||
});
|
||||
|
||||
m_guilds.signal_dms_selected().connect([this]() {
|
||||
m_tree.SetSelectedDMs();
|
||||
});
|
||||
|
||||
m_guilds.show();
|
||||
m_tree.show();
|
||||
m_guilds_scroll.add(m_guilds);
|
||||
|
|
|
@ -86,10 +86,17 @@ ChannelListTree::ChannelListTree()
|
|||
m_filter_model->set_visible_func([this](const Gtk::TreeModel::const_iterator &iter) -> bool {
|
||||
if (!m_classic) return true;
|
||||
|
||||
if ((*iter)[m_columns.m_type] == RenderType::Guild) {
|
||||
const RenderType type = (*iter)[m_columns.m_type];
|
||||
|
||||
if (m_classic_selected_dms) {
|
||||
if (iter->parent()) return true;
|
||||
return type == RenderType::DMHeader;
|
||||
}
|
||||
|
||||
if (type == RenderType::Guild) {
|
||||
return (*iter)[m_columns.m_id] == m_classic_selected_guild;
|
||||
}
|
||||
return true;
|
||||
return type != RenderType::DMHeader;
|
||||
});
|
||||
|
||||
m_view.show();
|
||||
|
@ -309,6 +316,7 @@ void ChannelListTree::SetClassic(bool value) {
|
|||
|
||||
void ChannelListTree::SetSelectedGuild(Snowflake guild_id) {
|
||||
m_classic_selected_guild = guild_id;
|
||||
m_classic_selected_dms = false;
|
||||
m_filter_model->refilter();
|
||||
auto guild_iter = GetIteratorForGuildFromID(guild_id);
|
||||
if (guild_iter) {
|
||||
|
@ -318,6 +326,16 @@ void ChannelListTree::SetSelectedGuild(Snowflake guild_id) {
|
|||
}
|
||||
}
|
||||
|
||||
void ChannelListTree::SetSelectedDMs() {
|
||||
m_classic_selected_dms = true;
|
||||
m_filter_model->refilter();
|
||||
if (m_dm_header) {
|
||||
if (auto filter_path = m_filter_model->convert_child_path_to_path(m_dm_header)) {
|
||||
m_view.expand_row(filter_path, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ChannelListTree::OnPanedPositionChanged() {
|
||||
m_view.queue_draw();
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ public:
|
|||
|
||||
void SetClassic(bool value);
|
||||
void SetSelectedGuild(Snowflake guild_id);
|
||||
void SetSelectedDMs();
|
||||
|
||||
protected:
|
||||
void OnPanedPositionChanged();
|
||||
|
@ -193,6 +194,7 @@ protected:
|
|||
|
||||
bool m_classic = false;
|
||||
Snowflake m_classic_selected_guild;
|
||||
bool m_classic_selected_dms = false;
|
||||
|
||||
Snowflake m_active_channel;
|
||||
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
#include "guildlist.hpp"
|
||||
#include "guildlistfolderitem.hpp"
|
||||
|
||||
class GuildListDMsButton : public Gtk::EventBox {
|
||||
public:
|
||||
GuildListDMsButton() {
|
||||
m_img.property_pixbuf() = Abaddon::Get().GetImageManager().GetPlaceholder(48);
|
||||
add(m_img);
|
||||
show_all_children();
|
||||
}
|
||||
|
||||
private:
|
||||
Gtk::Image m_img;
|
||||
};
|
||||
|
||||
GuildList::GuildList() {
|
||||
set_selection_mode(Gtk::SELECTION_NONE);
|
||||
show_all_children();
|
||||
|
@ -11,6 +23,16 @@ void GuildList::UpdateListing() {
|
|||
|
||||
Clear();
|
||||
|
||||
auto *dms = Gtk::make_managed<GuildListDMsButton>();
|
||||
dms->show();
|
||||
dms->signal_button_press_event().connect([this](GdkEventButton *ev) -> bool {
|
||||
if (ev->type == GDK_BUTTON_PRESS && ev->button == GDK_BUTTON_PRIMARY) {
|
||||
m_signal_dms_selected.emit();
|
||||
}
|
||||
return false;
|
||||
});
|
||||
add(*dms);
|
||||
|
||||
// does this function still even work ??lol
|
||||
const auto folders = discord.GetUserSettings().GuildFolders;
|
||||
const auto guild_ids = discord.GetUserSortedGuilds();
|
||||
|
@ -86,3 +108,7 @@ void GuildList::Clear() {
|
|||
GuildList::type_signal_guild_selected GuildList::signal_guild_selected() {
|
||||
return m_signal_guild_selected;
|
||||
}
|
||||
|
||||
GuildList::type_signal_dms_selected GuildList::signal_dms_selected() {
|
||||
return m_signal_dms_selected;
|
||||
}
|
||||
|
|
|
@ -20,9 +20,12 @@ private:
|
|||
|
||||
public:
|
||||
using type_signal_guild_selected = sigc::signal<void, Snowflake>;
|
||||
using type_signal_dms_selected = sigc::signal<void>;
|
||||
|
||||
type_signal_guild_selected signal_guild_selected();
|
||||
type_signal_dms_selected signal_dms_selected();
|
||||
|
||||
private:
|
||||
type_signal_guild_selected m_signal_guild_selected;
|
||||
type_signal_dms_selected m_signal_dms_selected;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue
Block a user