summaryrefslogtreecommitdiff
path: root/src/components/channellist/classic/guildlist.hpp
blob: 2d745d3d6f1693b0970a4059ca13b27c19108da0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#pragma once
#include <gtkmm/listbox.h>
#include <gtkmm/menu.h>
#include "discord/snowflake.hpp"
#include "discord/usersettings.hpp"

class GuildListGuildItem;

class GuildList : public Gtk::ListBox {
public:
    GuildList();

    void UpdateListing();

private:
    void AddGuild(Snowflake id);
    void AddFolder(const UserSettingsGuildFoldersEntry &folder);
    void Clear();

    GuildListGuildItem *CreateGuildWidget(Snowflake id);

    // todo code duplication not good no sir
    Gtk::Menu m_menu_guild;
    Gtk::MenuItem m_menu_guild_copy_id;
    Gtk::MenuItem m_menu_guild_settings;
    Gtk::MenuItem m_menu_guild_leave;
    Gtk::MenuItem m_menu_guild_mark_as_read;
    Gtk::MenuItem m_menu_guild_toggle_mute;
    Snowflake m_menu_guild_target;

    void OnGuildSubmenuPopup();

public:
    using type_signal_guild_selected = sigc::signal<void, Snowflake>;
    using type_signal_dms_selected = sigc::signal<void>;
    using type_signal_action_guild_leave = sigc::signal<void, Snowflake>;
    using type_signal_action_guild_settings = sigc::signal<void, Snowflake>;

    type_signal_guild_selected signal_guild_selected();
    type_signal_dms_selected signal_dms_selected();
    type_signal_action_guild_leave signal_action_guild_leave();
    type_signal_action_guild_settings signal_action_guild_settings();

private:
    type_signal_guild_selected m_signal_guild_selected;
    type_signal_dms_selected m_signal_dms_selected;
    type_signal_action_guild_leave m_signal_action_guild_leave;
    type_signal_action_guild_settings m_signal_action_guild_settings;
};