diff options
author | dec05eba <dec05eba@protonmail.com> | 2018-11-24 19:17:47 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2018-11-24 19:17:50 +0100 |
commit | b5659bf9ade976353d771d9fcd1a3f1f3c3fb663 (patch) | |
tree | ec83c67f7aa705f46b0aca32554dc8b94b7b1025 /src/UserSettingsWindow.cpp | |
parent | 6da0c0ab26e726e4ea35457246ef06970ce5975a (diff) |
Add change user nickname/avatar menu
Diffstat (limited to 'src/UserSettingsWindow.cpp')
-rw-r--r-- | src/UserSettingsWindow.cpp | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/UserSettingsWindow.cpp b/src/UserSettingsWindow.cpp new file mode 100644 index 0000000..6eda049 --- /dev/null +++ b/src/UserSettingsWindow.cpp @@ -0,0 +1,131 @@ +#include "../include/UserSettingsWindow.hpp" +#include "../include/ChatWindow.hpp" +#include "../include/Window.hpp" +#include <gtkmm/button.h> +#include <gtkmm/togglebutton.h> +#include <gtkmm/button.h> +#include <gtkmm/paned.h> +#include <assert.h> + +namespace dchat +{ + UserSettingsWindow::UserSettingsWindow(ChatWindow *_chatWindow) : + chatWindow(_chatWindow) + { + assert(chatWindow); + Gtk::Paned *sidePanels = Gtk::manage(new Gtk::Paned(Gtk::ORIENTATION_HORIZONTAL)); + sidePanels->get_style_context()->add_class("side-panels"); + sidePanels->set_vexpand(true); + sidePanels->set_hexpand(true); + sidePanels->set_wide_handle(true); + attach(*sidePanels, 0, 0, 1, 1); + + setupLeftPanel(sidePanels); + setupRightPanel(sidePanels); + + set_vexpand(true); + set_hexpand(true); + } + + void UserSettingsWindow::setAvatarUrl(const std::string &url) + { + avatarUrlEntry.set_text(url); + prevAvatarUrl = url; + } + + void UserSettingsWindow::setNickname(const std::string &nickname) + { + nicknameEntry.set_text(nickname); + prevNickname = nickname; + } + + void UserSettingsWindow::setupLeftPanel(Gtk::Paned *sidePanels) + { + Gtk::Grid *leftPanel = Gtk::manage(new Gtk::Grid()); + leftPanel->set_vexpand(true); + leftPanel->set_size_request(200); + leftPanel->get_style_context()->add_class("left-panel"); + sidePanels->add1(*leftPanel); + + Gtk::Label *settingsLabel = Gtk::manage(new Gtk::Label("Settings")); + leftPanel->attach(*settingsLabel, 0, 0, 1, 1); + + Gtk::ToggleButton *generalButton = Gtk::manage(new Gtk::ToggleButton("General")); + leftPanel->attach_next_to(*generalButton, *settingsLabel, Gtk::POS_BOTTOM, 1, 1); + + Gtk::ToggleButton *returnToChatButton = Gtk::manage(new Gtk::ToggleButton("Return to chat")); + leftPanel->attach_next_to(*returnToChatButton, *generalButton, Gtk::POS_BOTTOM, 1, 1); + returnToChatButton->signal_clicked().connect([this] + { + chatWindow->chatPage.show_all(); + chatWindow->stack.set_visible_child("chat"); + }); + } + + void UserSettingsWindow::setupRightPanel(Gtk::Paned *sidePanels) + { + Gtk::Grid *rightPanel = Gtk::manage(new Gtk::Grid()); + rightPanel->set_margin_top(10); + rightPanel->set_margin_left(10); + rightPanel->set_vexpand(true); + rightPanel->set_valign(Gtk::ALIGN_START); + rightPanel->set_halign(Gtk::ALIGN_START); + sidePanels->add2(*rightPanel); + + Gtk::Label *nicknameLabel = Gtk::manage(new Gtk::Label("Nickname")); + rightPanel->attach(*nicknameLabel, 0, 0, 2, 1); + rightPanel->attach_next_to(nicknameEntry, *nicknameLabel, Gtk::POS_BOTTOM, 2, 1); + + Gtk::Label *avatarUrlLabel = Gtk::manage(new Gtk::Label("Avatar url")); + rightPanel->attach_next_to(*avatarUrlLabel, nicknameEntry, Gtk::POS_BOTTOM, 2, 1); + rightPanel->attach_next_to(avatarUrlEntry, *avatarUrlLabel, Gtk::POS_BOTTOM, 2, 1); + + Gtk::Button *resetButton = Gtk::manage(new Gtk::Button("Rest")); + resetButton->set_halign(Gtk::ALIGN_END); + rightPanel->attach_next_to(*resetButton, avatarUrlEntry, Gtk::POS_BOTTOM, 1, 1); + resetButton->signal_clicked().connect([this] + { + avatarUrlEntry.set_text(prevAvatarUrl); + nicknameEntry.set_text(prevNickname); + }); + + Gtk::Button *saveButton = Gtk::manage(new Gtk::Button("Save")); + saveButton->get_style_context()->add_class("confirm-button"); + rightPanel->attach_next_to(*saveButton, *resetButton, Gtk::POS_RIGHT, 1, 1); + saveButton->signal_clicked().connect([this] + { + Glib::ustring avatarUrl = avatarUrlEntry.get_text(); + Glib::ustring nickname = nicknameEntry.get_text(); + if(avatarUrl.size() < 5) + { + chatWindow->window->windowNotification->show("Invalid avatar url!"); + return; + } + if(nickname.empty()) + { + chatWindow->window->windowNotification->show("Invalid nickname!"); + return; + } + + bool changed = false; + if(avatarUrl != prevAvatarUrl) + { + prevAvatarUrl = avatarUrl; + chatWindow->currentRoom->setAvatarUrl(avatarUrl); + changed = true; + } + + if(nickname != prevNickname) + { + prevNickname = nickname; + chatWindow->currentRoom->setNickname(nickname); + changed = true; + } + + if(changed) + { + chatWindow->window->windowNotification->show("Saved changes!"); + } + }); + } +}
\ No newline at end of file |