blob: f898df7dc1e1bd70ea75171549011d20622501e7 (
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#pragma once
#include <gtkmm.h>
#include <string>
#include <queue>
#include <mutex>
#include <unordered_set>
#include <sigc++/sigc++.h>
#include "../discord/discord.hpp"
class ChannelListRow : public Gtk::ListBoxRow {
public:
bool IsUserCollapsed;
bool IsHidden;
Snowflake ID;
std::unordered_set<ChannelListRow *> Children;
typedef sigc::signal<void> type_signal_list_collapse;
typedef sigc::signal<void> type_signal_list_uncollapse;
type_signal_list_collapse signal_list_collapse();
type_signal_list_uncollapse signal_list_uncollapse();
protected:
type_signal_list_collapse m_signal_list_collapse;
type_signal_list_uncollapse m_signal_list_uncollapse;
};
class ChannelListRowDMHeader : public ChannelListRow {
public:
ChannelListRowDMHeader();
protected:
Gtk::EventBox *m_ev;
Gtk::Box *m_box;
Gtk::Label *m_lbl;
};
class ChannelListRowDMChannel : public ChannelListRow {
public:
ChannelListRowDMChannel(const Channel *data);
protected:
Gtk::EventBox *m_ev;
Gtk::Box *m_box;
Gtk::Label *m_lbl;
};
class ChannelListRowGuild : public ChannelListRow {
public:
ChannelListRowGuild(const Guild *data);
int GuildIndex;
protected:
Gtk::EventBox *m_ev;
Gtk::Box *m_box;
Gtk::Label *m_lbl;
Gtk::Image *m_icon;
};
class ChannelListRowCategory : public ChannelListRow {
public:
ChannelListRowCategory(const Channel *data);
protected:
Gtk::EventBox *m_ev;
Gtk::Box *m_box;
Gtk::Label *m_lbl;
Gtk::Arrow *m_arrow;
};
class ChannelListRowChannel : public ChannelListRow {
public:
ChannelListRowChannel(const Channel *data);
protected:
Gtk::EventBox *m_ev;
Gtk::Box *m_box;
Gtk::Label *m_lbl;
};
class ChannelList {
public:
ChannelList();
Gtk::Widget *GetRoot() const;
void UpdateListing();
void Clear();
protected:
Gtk::ListBox *m_list;
Gtk::ScrolledWindow *m_main;
void on_row_activated(Gtk::ListBoxRow *row);
int m_guild_count;
Gtk::Menu m_guild_menu;
Gtk::MenuItem *m_guild_menu_up;
Gtk::MenuItem *m_guild_menu_down;
Gtk::MenuItem *m_guild_menu_copyid;
void on_menu_move_up();
void on_menu_move_down();
void on_menu_copyid();
Glib::Dispatcher m_update_dispatcher;
//mutable std::mutex m_update_mutex;
//std::queue<std::unordered_set<Snowflake>> m_update_queue;
void AddPrivateChannels(); // retard moment
void UpdateListingInternal();
void AttachMenuHandler(Gtk::ListBoxRow *row);
public:
typedef sigc::signal<void, Snowflake> type_signal_action_channel_item_select;
typedef sigc::signal<void, Snowflake> type_signal_action_guild_move_up;
typedef sigc::signal<void, Snowflake> type_signal_action_guild_move_down;
typedef sigc::signal<void, Snowflake> type_signal_action_guild_copy_id;
type_signal_action_channel_item_select signal_action_channel_item_select();
type_signal_action_guild_move_up signal_action_guild_move_up();
type_signal_action_guild_move_down signal_action_guild_move_down();
type_signal_action_guild_copy_id signal_action_guild_copy_id();
protected:
type_signal_action_channel_item_select m_signal_action_channel_item_select;
type_signal_action_guild_move_up m_signal_action_guild_move_up;
type_signal_action_guild_move_down m_signal_action_guild_move_down;
type_signal_action_guild_copy_id m_signal_action_guild_copy_id;
};
|