summaryrefslogtreecommitdiff
path: root/windows
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2021-06-11 01:24:23 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2021-06-11 01:24:23 -0400
commite166c83d33bbf5aebe172111c8a7614c1dece48c (patch)
treedeb06cefbda7fe9f08aae54daaa2eeb9ec659807 /windows
parentefc97aa2b0d7a4d63a2e6219070919559a0cf64d (diff)
downloadabaddon-portaudio-e166c83d33bbf5aebe172111c8a7614c1dece48c.tar.gz
abaddon-portaudio-e166c83d33bbf5aebe172111c8a7614c1dece48c.zip
basic pins window
Diffstat (limited to 'windows')
-rw-r--r--windows/mainwindow.cpp15
-rw-r--r--windows/mainwindow.hpp4
-rw-r--r--windows/pinnedwindow.cpp32
-rw-r--r--windows/pinnedwindow.hpp20
4 files changed, 71 insertions, 0 deletions
diff --git a/windows/mainwindow.cpp b/windows/mainwindow.cpp
index cbf91d9..4d6a1dc 100644
--- a/windows/mainwindow.cpp
+++ b/windows/mainwindow.cpp
@@ -42,7 +42,9 @@ MainWindow::MainWindow()
m_menu_view.set_label("View");
m_menu_view.set_submenu(m_menu_view_sub);
m_menu_view_friends.set_label("Friends");
+ m_menu_view_pins.set_label("Pins");
m_menu_view_sub.append(m_menu_view_friends);
+ m_menu_view_sub.append(m_menu_view_pins);
m_menu_view_sub.signal_popped_up().connect(sigc::mem_fun(*this, &MainWindow::OnViewSubmenuPopup));
m_menu_bar.append(m_menu_file);
@@ -92,6 +94,10 @@ MainWindow::MainWindow()
m_content_stack.set_visible_child("friends");
});
+ m_menu_view_pins.signal_activate().connect([this] {
+ m_signal_action_view_pins.emit(GetChatActiveChannel());
+ });
+
m_content_box.set_hexpand(true);
m_content_box.set_vexpand(true);
m_content_box.show();
@@ -263,6 +269,11 @@ void MainWindow::OnDiscordSubmenuPopup(const Gdk::Rectangle *flipped_rect, const
void MainWindow::OnViewSubmenuPopup(const Gdk::Rectangle *flipped_rect, const Gdk::Rectangle *final_rect, bool flipped_x, bool flipped_y) {
m_menu_view_friends.set_sensitive(Abaddon::Get().GetDiscordClient().IsStarted());
+ auto channel_id = GetChatActiveChannel();
+ auto channel = Abaddon::Get().GetDiscordClient().GetChannel(channel_id);
+ m_menu_view_pins.set_sensitive(false);
+ if (channel.has_value())
+ m_menu_view_pins.set_sensitive(channel->Type == ChannelType::GUILD_TEXT);
}
ChannelList *MainWindow::GetChannelList() {
@@ -308,3 +319,7 @@ MainWindow::type_signal_action_reload_settings MainWindow::signal_action_reload_
MainWindow::type_signal_action_add_recipient MainWindow::signal_action_add_recipient() {
return m_signal_action_add_recipient;
}
+
+MainWindow::type_signal_action_view_pins MainWindow::signal_action_view_pins() {
+ return m_signal_action_view_pins;
+}
diff --git a/windows/mainwindow.hpp b/windows/mainwindow.hpp
index 30fd3de..25c1acb 100644
--- a/windows/mainwindow.hpp
+++ b/windows/mainwindow.hpp
@@ -43,6 +43,7 @@ public:
typedef sigc::signal<void> type_signal_action_set_status;
typedef sigc::signal<void> type_signal_action_reload_settings;
typedef sigc::signal<void, Snowflake> type_signal_action_add_recipient; // channel id
+ typedef sigc::signal<void, Snowflake> type_signal_action_view_pins; // channel id
type_signal_action_connect signal_action_connect();
type_signal_action_disconnect signal_action_disconnect();
@@ -52,6 +53,7 @@ public:
type_signal_action_set_status signal_action_set_status();
type_signal_action_reload_settings signal_action_reload_settings();
type_signal_action_add_recipient signal_action_add_recipient();
+ type_signal_action_view_pins signal_action_view_pins();
protected:
type_signal_action_connect m_signal_action_connect;
@@ -62,6 +64,7 @@ protected:
type_signal_action_set_status m_signal_action_set_status;
type_signal_action_reload_settings m_signal_action_reload_settings;
type_signal_action_add_recipient m_signal_action_add_recipient;
+ type_signal_action_view_pins m_signal_action_view_pins;
protected:
Gtk::Box m_main_box;
@@ -96,5 +99,6 @@ protected:
Gtk::MenuItem m_menu_view;
Gtk::Menu m_menu_view_sub;
Gtk::MenuItem m_menu_view_friends;
+ Gtk::MenuItem m_menu_view_pins;
void OnViewSubmenuPopup(const Gdk::Rectangle *flipped_rect, const Gdk::Rectangle *final_rect, bool flipped_x, bool flipped_y);
};
diff --git a/windows/pinnedwindow.cpp b/windows/pinnedwindow.cpp
new file mode 100644
index 0000000..0d677ee
--- /dev/null
+++ b/windows/pinnedwindow.cpp
@@ -0,0 +1,32 @@
+#include "pinnedwindow.hpp"
+#include "../abaddon.hpp"
+
+PinnedWindow::PinnedWindow(const ChannelData &data)
+ : ChannelID(data.ID) {
+ if (data.GuildID.has_value())
+ GuildID = *data.GuildID;
+
+ set_name("pinned-messages");
+ set_default_size(450, 375);
+ set_title("#" + *data.Name + " - Pinned Messages");
+ set_position(Gtk::WIN_POS_CENTER);
+ get_style_context()->add_class("app-window");
+ get_style_context()->add_class("app-popup");
+ get_style_context()->add_class("pinned-messages-window");
+
+ add(m_chat);
+ m_chat.show();
+
+ m_chat.SetActiveChannel(ChannelID);
+
+ FetchPinned();
+}
+
+void PinnedWindow::FetchPinned() {
+ Abaddon::Get().GetDiscordClient().FetchPinned(ChannelID, sigc::mem_fun(*this, &PinnedWindow::OnFetchedPinned));
+}
+
+void PinnedWindow::OnFetchedPinned(const std::vector<Message> &msgs, DiscordError code) {
+ if (code != DiscordError::NONE) return;
+ m_chat.SetMessages(msgs.begin(), msgs.end());
+}
diff --git a/windows/pinnedwindow.hpp b/windows/pinnedwindow.hpp
new file mode 100644
index 0000000..a118876
--- /dev/null
+++ b/windows/pinnedwindow.hpp
@@ -0,0 +1,20 @@
+#pragma once
+#include <gtkmm.h>
+#include "../discord/errors.hpp"
+#include "../discord/channel.hpp"
+#include "../discord/message.hpp"
+#include "../components/chatlist.hpp"
+
+class PinnedWindow : public Gtk::Window {
+public:
+ PinnedWindow(const ChannelData &data);
+
+ Snowflake GuildID;
+ Snowflake ChannelID;
+
+private:
+ void FetchPinned();
+ void OnFetchedPinned(const std::vector<Message> &msgs, DiscordError code);
+
+ ChatList m_chat;
+};