aboutsummaryrefslogtreecommitdiff
path: root/src/UserSettingsWindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/UserSettingsWindow.cpp')
-rw-r--r--src/UserSettingsWindow.cpp131
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