summaryrefslogtreecommitdiff
path: root/windows/threadswindow.hpp
blob: a0c77e876886a8a0d5986016960d0866d573be7d (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
#pragma once
#include <gtkmm.h>
#include "../discord/objects.hpp"

class ActiveThreadsList : public Gtk::ScrolledWindow {
public:
    ActiveThreadsList(const ChannelData &channel);

private:
    Gtk::ListBox m_list;

    using type_signal_thread_open = sigc::signal<void, Snowflake>;
    type_signal_thread_open m_signal_thread_open;

public:
    type_signal_thread_open signal_thread_open();
};

class ArchivedThreadsList : public Gtk::ScrolledWindow {
public:
    ArchivedThreadsList(const ChannelData &channel);

private:
    Gtk::ListBox m_list;

    void OnPublicFetched(DiscordError code, const ArchivedThreadsResponseData &data);

    using type_signal_thread_open = sigc::signal<void, Snowflake>;
    type_signal_thread_open m_signal_thread_open;

public:
    type_signal_thread_open signal_thread_open();
};

// view all threads in a channel
class ThreadsWindow : public Gtk::Window {
public:
    ThreadsWindow(const ChannelData &channel);

private:
    Snowflake m_channel_id;

    Gtk::StackSwitcher m_switcher;
    Gtk::Stack m_stack;

    Gtk::Box m_box;

    ActiveThreadsList m_active;
    ArchivedThreadsList m_archived;
};

class ThreadListRow : public Gtk::ListBoxRow {
public:
    ThreadListRow(const ChannelData &channel);

    Snowflake ID;

private:
    Gtk::Label m_label;
};