From 8b034e48e27e4889b08ed648745a74d05630a431 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Tue, 24 Oct 2023 21:55:26 -0400 Subject: add intermediate container for channel list --- src/components/channellist/channellist.cpp | 50 ++++++++++++++++++++++++ src/components/channellist/channellist.hpp | 61 ++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 src/components/channellist/channellist.cpp create mode 100644 src/components/channellist/channellist.hpp (limited to 'src/components') diff --git a/src/components/channellist/channellist.cpp b/src/components/channellist/channellist.cpp new file mode 100644 index 0000000..38a9ecc --- /dev/null +++ b/src/components/channellist/channellist.cpp @@ -0,0 +1,50 @@ +#include "channellist.hpp" + +ChannelList::ChannelList() { + m_tree.show(); + add(m_tree); +} + +void ChannelList::UpdateListing() { + m_tree.UpdateListing(); +} + +void ChannelList::SetActiveChannel(Snowflake id, bool expand_to) { + m_tree.SetActiveChannel(id, expand_to); +} + +void ChannelList::UseExpansionState(const ExpansionStateRoot &state) { + m_tree.UseExpansionState(state); +} + +ExpansionStateRoot ChannelList::GetExpansionState() const { + m_tree.GetExpansionState(); +} + +void ChannelList::UsePanedHack(Gtk::Paned &paned) { + m_tree.UsePanedHack(paned); +} + +ChannelList::type_signal_action_open_new_tab ChannelList::signal_action_open_new_tab() { + return m_signal_action_open_new_tab; +} + +ChannelList::type_signal_action_join_voice_channel ChannelList::signal_action_join_voice_channel() { + return m_signal_action_join_voice_channel; +} + +ChannelList::type_signal_action_disconnect_voice ChannelList::signal_action_disconnect_voice() { + return m_signal_action_disconnect_voice; +} + +ChannelList::type_signal_action_channel_item_select ChannelList::signal_action_channel_item_select() { + return m_signal_action_channel_item_select; +} + +ChannelList::type_signal_action_guild_leave ChannelList::signal_action_guild_leave() { + return m_signal_action_guild_leave; +} + +ChannelList::type_signal_action_guild_settings ChannelList::signal_action_guild_settings() { + return m_signal_action_guild_settings; +} diff --git a/src/components/channellist/channellist.hpp b/src/components/channellist/channellist.hpp new file mode 100644 index 0000000..5863485 --- /dev/null +++ b/src/components/channellist/channellist.hpp @@ -0,0 +1,61 @@ +#pragma once +#include +#include +#include "channellisttree.hpp" +#include "discord/snowflake.hpp" +#include "state.hpp" + +// Contains the actual ChannelListTree and the classic listing if enabled +class ChannelList : public Gtk::Box { + // have to proxy public and signals to underlying tree... ew!!! +public: + ChannelList(); + + void UpdateListing(); + void SetActiveChannel(Snowflake id, bool expand_to); + + // channel list should be populated when this is called + void UseExpansionState(const ExpansionStateRoot &state); + ExpansionStateRoot GetExpansionState() const; + + void UsePanedHack(Gtk::Paned &paned); + +private: + ChannelListTree m_tree; + +public: + using type_signal_action_channel_item_select = sigc::signal; + using type_signal_action_guild_leave = sigc::signal; + using type_signal_action_guild_settings = sigc::signal; + +#ifdef WITH_LIBHANDY + using type_signal_action_open_new_tab = sigc::signal; + type_signal_action_open_new_tab signal_action_open_new_tab(); +#endif + +#ifdef WITH_VOICE + using type_signal_action_join_voice_channel = sigc::signal; + using type_signal_action_disconnect_voice = sigc::signal; + + type_signal_action_join_voice_channel signal_action_join_voice_channel(); + type_signal_action_disconnect_voice signal_action_disconnect_voice(); +#endif + + type_signal_action_channel_item_select signal_action_channel_item_select(); + type_signal_action_guild_leave signal_action_guild_leave(); + type_signal_action_guild_settings signal_action_guild_settings(); + +private: + type_signal_action_channel_item_select m_signal_action_channel_item_select; + type_signal_action_guild_leave m_signal_action_guild_leave; + type_signal_action_guild_settings m_signal_action_guild_settings; + +#ifdef WITH_LIBHANDY + type_signal_action_open_new_tab m_signal_action_open_new_tab; +#endif + +#ifdef WITH_VOICE + type_signal_action_join_voice_channel m_signal_action_join_voice_channel; + type_signal_action_disconnect_voice m_signal_action_disconnect_voice; +#endif +}; -- cgit v1.2.3