add more css selectors

This commit is contained in:
ouwou 2020-09-09 18:32:45 -04:00
parent 397702b6c9
commit 76cbaa377d
6 changed files with 83 additions and 1 deletions

3
.gitignore vendored
View File

@ -351,3 +351,6 @@ MigrationBackup/
abaddon.ini abaddon.ini
testdata/ testdata/
build/
out/

View File

@ -26,3 +26,33 @@
* [C++ Requests: Curl for People](https://github.com/whoshuu/cpr/) * [C++ Requests: Curl for People](https://github.com/whoshuu/cpr/)
* [zlib](https://zlib.net/) * [zlib](https://zlib.net/)
* [simpleini](https://github.com/brofield/simpleini) * [simpleini](https://github.com/brofield/simpleini)
### Styling
#### CSS selectors
.channel-list - Container of the channel list
.channel-row - All rows within the channel container
.channel-row-channel - Only rows containing a channel
.channel-row-category - Only rows containing a category
.channel-row-guild - Only rows containing a guild
.channel-row-label - All labels within the channel container
.messages - Container of user messages
.message-container - The container which holds a user's messages
.message-container-author - The author label for a message container
.message-container-timestamp - The timestamp label for a message container
.message-text - The TextView of a user message
.embed - Container for a message embed
.embed-author - The author of an embed
.embed-title - The title of an embed
.embed-description - The description of an embed
.embed-field-title - The title of an embed field
.embed-field-value - The value of an embed field
.embed-footer - The footer of an embed
.members - Container of the member list
.members-row - All rows within the members container
.members-row-label - All labels in the members container
.members-row-member - Rows containing a member
.members-row-role - Rows containing a role

View File

@ -8,6 +8,8 @@ ChannelList::ChannelList() {
m_main = Gtk::manage(new Gtk::ScrolledWindow); m_main = Gtk::manage(new Gtk::ScrolledWindow);
m_list = Gtk::manage(new Gtk::ListBox); m_list = Gtk::manage(new Gtk::ListBox);
m_list->get_style_context()->add_class("channel-list");
m_guild_menu_up = Gtk::manage(new Gtk::MenuItem("Move _Up", true)); m_guild_menu_up = Gtk::manage(new Gtk::MenuItem("Move _Up", true));
m_guild_menu_up->signal_activate().connect(sigc::mem_fun(*this, &ChannelList::on_menu_move_up)); m_guild_menu_up->signal_activate().connect(sigc::mem_fun(*this, &ChannelList::on_menu_move_up));
m_guild_menu.append(*m_guild_menu_up); m_guild_menu.append(*m_guild_menu_up);
@ -96,6 +98,8 @@ void ChannelList::AddPrivateChannels() {
parent_ev->add(*parent_box); parent_ev->add(*parent_box);
parent_row->add(*parent_ev); parent_row->add(*parent_ev);
parent_row->show_all(); parent_row->show_all();
parent_row->get_style_context()->add_class("channel-row");
parent_label->get_style_context()->add_class("channel-row-label");
m_list->add(*parent_row); m_list->add(*parent_row);
ListItemInfo parent_info; ListItemInfo parent_info;
@ -110,6 +114,10 @@ void ChannelList::AddPrivateChannels() {
auto *dm_ev = Gtk::manage(new Gtk::EventBox); auto *dm_ev = Gtk::manage(new Gtk::EventBox);
auto *dm_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); auto *dm_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
auto *dm_label = Gtk::manage(new Gtk::Label); auto *dm_label = Gtk::manage(new Gtk::Label);
dm_row->get_style_context()->add_class("channel-row");
dm_label->get_style_context()->add_class("channel-row-label");
if (data->Type == ChannelType::DM) if (data->Type == ChannelType::DM)
dm_label->set_text(data->Recipients[0].Username); dm_label->set_text(data->Recipients[0].Username);
else else
@ -184,6 +192,11 @@ void ChannelList::SetListingFromGuildsInternal() {
auto *channel_ev = Gtk::manage(new Gtk::EventBox); auto *channel_ev = Gtk::manage(new Gtk::EventBox);
auto *channel_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); auto *channel_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
auto *channel_label = Gtk::manage(new Gtk::Label); auto *channel_label = Gtk::manage(new Gtk::Label);
channel_row->get_style_context()->add_class("channel-row");
channel_row->get_style_context()->add_class("channel-row-channel");
channel_label->get_style_context()->add_class("channel-row-label");
channel_label->set_text("#" + channel.Name); channel_label->set_text("#" + channel.Name);
channel_box->set_halign(Gtk::ALIGN_START); channel_box->set_halign(Gtk::ALIGN_START);
channel_box->pack_start(*channel_label); channel_box->pack_start(*channel_label);
@ -208,6 +221,11 @@ void ChannelList::SetListingFromGuildsInternal() {
auto *category_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); auto *category_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
auto *category_label = Gtk::manage(new Gtk::Label); auto *category_label = Gtk::manage(new Gtk::Label);
auto *category_arrow = Gtk::manage(new Gtk::Arrow(Gtk::ARROW_DOWN, Gtk::SHADOW_NONE)); auto *category_arrow = Gtk::manage(new Gtk::Arrow(Gtk::ARROW_DOWN, Gtk::SHADOW_NONE));
category_row->get_style_context()->add_class("channel-row");
category_row->get_style_context()->add_class("channel-row-category");
category_label->get_style_context()->add_class("channel-row-label");
category_label->set_text(channel.Name); category_label->set_text(channel.Name);
category_box->set_halign(Gtk::ALIGN_START); category_box->set_halign(Gtk::ALIGN_START);
category_box->pack_start(*category_arrow); category_box->pack_start(*category_arrow);
@ -247,6 +265,11 @@ void ChannelList::SetListingFromGuildsInternal() {
auto *guild_ev = Gtk::manage(new Gtk::EventBox); auto *guild_ev = Gtk::manage(new Gtk::EventBox);
auto *guild_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); auto *guild_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
auto *guild_label = Gtk::manage(new Gtk::Label); auto *guild_label = Gtk::manage(new Gtk::Label);
guild_row->get_style_context()->add_class("channel-row");
guild_row->get_style_context()->add_class("channel-row-guild");
guild_label->get_style_context()->add_class("channel-row-label");
guild_label->set_markup("<b>" + Glib::Markup::escape_text(guild.Name) + "</b>"); guild_label->set_markup("<b>" + Glib::Markup::escape_text(guild.Name) + "</b>");
guild_box->set_halign(Gtk::ALIGN_START); guild_box->set_halign(Gtk::ALIGN_START);
guild_box->pack_start(*guild_label); guild_box->pack_start(*guild_label);

View File

@ -14,6 +14,10 @@ ChatMessageContainer::ChatMessageContainer(const MessageData *data) {
m_author = Gtk::manage(new Gtk::Label); m_author = Gtk::manage(new Gtk::Label);
m_timestamp = Gtk::manage(new Gtk::Label); m_timestamp = Gtk::manage(new Gtk::Label);
get_style_context()->add_class("message-container");
m_author->get_style_context()->add_class("message-container-author");
m_timestamp->get_style_context()->add_class("message-container-timestamp");
m_author->set_markup("<span weight=\"bold\">" + Glib::Markup::escape_text(data->Author.Username) + "</span>"); m_author->set_markup("<span weight=\"bold\">" + Glib::Markup::escape_text(data->Author.Username) + "</span>");
m_author->set_single_line_mode(true); m_author->set_single_line_mode(true);
m_author->set_line_wrap(false); m_author->set_line_wrap(false);
@ -140,6 +144,8 @@ void ChatMessageItem::AddMenuItem(Gtk::MenuItem *item) {
ChatMessageTextItem::ChatMessageTextItem(const MessageData *data) { ChatMessageTextItem::ChatMessageTextItem(const MessageData *data) {
m_content = data->Content; m_content = data->Content;
get_style_context()->add_class("message-text");
set_can_focus(false); set_can_focus(false);
set_editable(false); set_editable(false);
set_wrap_mode(Gtk::WRAP_WORD_CHAR); set_wrap_mode(Gtk::WRAP_WORD_CHAR);
@ -225,6 +231,7 @@ void ChatMessageEmbedItem::DoLayout() {
title_label->set_markup("<b>" + Glib::Markup::escape_text(m_embed.Title) + "</b>"); title_label->set_markup("<b>" + Glib::Markup::escape_text(m_embed.Title) + "</b>");
title_label->set_halign(Gtk::ALIGN_CENTER); title_label->set_halign(Gtk::ALIGN_CENTER);
title_label->set_hexpand(false); title_label->set_hexpand(false);
title_label->get_style_context()->add_class("embed-title");
m_main->pack_start(*title_label); m_main->pack_start(*title_label);
} }
@ -236,6 +243,7 @@ void ChatMessageEmbedItem::DoLayout() {
desc_label->set_max_width_chars(50); desc_label->set_max_width_chars(50);
desc_label->set_halign(Gtk::ALIGN_START); desc_label->set_halign(Gtk::ALIGN_START);
desc_label->set_hexpand(false); desc_label->set_hexpand(false);
desc_label->get_style_context()->add_class("embed-description");
m_main->pack_start(*desc_label); m_main->pack_start(*desc_label);
} }
@ -274,6 +282,8 @@ void ChatMessageEmbedItem::DoLayout() {
field_val->set_line_wrap_mode(Pango::WRAP_WORD_CHAR); field_val->set_line_wrap_mode(Pango::WRAP_WORD_CHAR);
field_box->pack_start(*field_lbl); field_box->pack_start(*field_lbl);
field_box->pack_start(*field_val); field_box->pack_start(*field_val);
field_lbl->get_style_context()->add_class("embed-field-title");
field_val->get_style_context()->add_class("embed-field-value");
flow->insert(*field_box, -1); flow->insert(*field_box, -1);
} }
} }

View File

@ -16,6 +16,9 @@ ChatWindow::ChatWindow() {
m_input = Gtk::manage(new Gtk::TextView); m_input = Gtk::manage(new Gtk::TextView);
m_entry_scroll = Gtk::manage(new Gtk::ScrolledWindow); m_entry_scroll = Gtk::manage(new Gtk::ScrolledWindow);
m_listbox->get_style_context()->add_class("messages");
m_input->get_style_context()->add_class("message-input");
m_input->signal_key_press_event().connect(sigc::mem_fun(*this, &ChatWindow::on_key_press_event), false); m_input->signal_key_press_event().connect(sigc::mem_fun(*this, &ChatWindow::on_key_press_event), false);
m_main->set_hexpand(true); m_main->set_hexpand(true);

View File

@ -8,6 +8,8 @@ MemberList::MemberList() {
m_main = Gtk::manage(new Gtk::ScrolledWindow); m_main = Gtk::manage(new Gtk::ScrolledWindow);
m_listbox = Gtk::manage(new Gtk::ListBox); m_listbox = Gtk::manage(new Gtk::ListBox);
m_listbox->get_style_context()->add_class("members");
m_listbox->set_selection_mode(Gtk::SELECTION_NONE); m_listbox->set_selection_mode(Gtk::SELECTION_NONE);
m_menu_copy_id = Gtk::manage(new Gtk::MenuItem("_Copy ID", true)); m_menu_copy_id = Gtk::manage(new Gtk::MenuItem("_Copy ID", true));
@ -109,6 +111,11 @@ void MemberList::UpdateMemberListInternal() {
user_row->ID = data->ID; user_row->ID = data->ID;
auto *user_ev = Gtk::manage(new Gtk::EventBox); auto *user_ev = Gtk::manage(new Gtk::EventBox);
auto *user_lbl = Gtk::manage(new Gtk::Label); auto *user_lbl = Gtk::manage(new Gtk::Label);
user_row->get_style_context()->add_class("members-row");
user_row->get_style_context()->add_class("members-row-member");
user_lbl->get_style_context()->add_class("members-row-label");
user_lbl->set_single_line_mode(true); user_lbl->set_single_line_mode(true);
user_lbl->set_ellipsize(Pango::ELLIPSIZE_END); user_lbl->set_ellipsize(Pango::ELLIPSIZE_END);
if (data != nullptr) { if (data != nullptr) {
@ -121,6 +128,8 @@ void MemberList::UpdateMemberListInternal() {
} else { } else {
user_lbl->set_text(display); user_lbl->set_text(display);
} }
AttachUserMenuHandler(user_row, data->ID);
} else { } else {
user_lbl->set_use_markup(true); user_lbl->set_use_markup(true);
user_lbl->set_markup("<i>[unknown user]</i>"); user_lbl->set_markup("<i>[unknown user]</i>");
@ -130,12 +139,16 @@ void MemberList::UpdateMemberListInternal() {
user_row->add(*user_ev); user_row->add(*user_ev);
user_row->show_all(); user_row->show_all();
m_listbox->add(*user_row); m_listbox->add(*user_row);
AttachUserMenuHandler(user_row, data->ID);
}; };
auto add_role = [this](std::string name) { auto add_role = [this](std::string name) {
auto *role_row = Gtk::manage(new Gtk::ListBoxRow); auto *role_row = Gtk::manage(new Gtk::ListBoxRow);
auto *role_lbl = Gtk::manage(new Gtk::Label); auto *role_lbl = Gtk::manage(new Gtk::Label);
role_row->get_style_context()->add_class("members-row");
role_row->get_style_context()->add_class("members-row-role");
role_lbl->get_style_context()->add_class("members-row-label");
role_lbl->set_single_line_mode(true); role_lbl->set_single_line_mode(true);
role_lbl->set_ellipsize(Pango::ELLIPSIZE_END); role_lbl->set_ellipsize(Pango::ELLIPSIZE_END);
role_lbl->set_use_markup(true); role_lbl->set_use_markup(true);