diff options
Diffstat (limited to 'src/ChatWindow.cpp')
-rw-r--r-- | src/ChatWindow.cpp | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/src/ChatWindow.cpp b/src/ChatWindow.cpp index 529b857..9cc4ff1 100644 --- a/src/ChatWindow.cpp +++ b/src/ChatWindow.cpp @@ -18,6 +18,7 @@ namespace dchat ChatWindow::ChatWindow(Window *_window) : roomSettingsWindow(this), roomNotificationsWindow(this), + userSettingsWindow(this), createRoomButton("images/add_button_small.png", " Create room"), joinRoomButton("images/add_button_small.png", " Join room"), userSettingsButton("images/settings-icon.png", " User settings"), @@ -37,8 +38,9 @@ namespace dchat attach(stack, 0, 1, 2, 2); stack.add(chatPage, "chat"); - stack.add(roomSettingsWindow, "settings"); + stack.add(roomSettingsWindow, "room-settings"); stack.add(roomNotificationsWindow, "notifications"); + stack.add(userSettingsWindow, "user-settings"); Gtk::ResponsivePaned *sidePanels = Gtk::manage(new Gtk::ResponsivePaned(Gtk::ORIENTATION_HORIZONTAL)); sidePanels->get_style_context()->add_class("side-panels"); @@ -95,7 +97,7 @@ namespace dchat roomSettingsWindow.show_all(); roomSettingsWindow.selectRoom(currentRoom); - stack.set_visible_child("settings"); + stack.set_visible_child("room-settings"); }); topbar->roomNotificationsButton.signal_clicked().connect([this] @@ -219,7 +221,20 @@ namespace dchat leftPanelLayout->attach_next_to(userSettingsButton, joinRoomButton, Gtk::POS_BOTTOM, 1, 1); userSettingsButton.signal_clicked().connect([this]() { - printf("user settings!\n"); + if(!currentRoom) + { + window->windowNotification->show("You need to be inside a room to go to user settings"); + return; + } + + if(!currentRoom->localUser) + { + window->windowNotification->show("You need to be a member of the room to go to user settings"); + return; + } + + userSettingsWindow.show_all(); + stack.set_visible_child("user-settings"); }); } @@ -394,7 +409,20 @@ namespace dchat currentRoom = room; currentRoomData = roomDataById[*room->id]; if(room->localUser) + { chatInput.set_editable(true); + + std::string nickname = "Anonymous"; + if(!room->localUser->nickname.empty()) + nickname = room->localUser->nickname; + + std::string avatarUrl = "https://discordemoji.com/assets/emoji/PeepoHide.png"; + if(!room->localUser->avatarUrl.empty()) + avatarUrl = room->localUser->avatarUrl; + + userSettingsWindow.setNickname(nickname); + userSettingsWindow.setAvatarUrl(avatarUrl); + } else chatInput.set_editable(false); @@ -432,6 +460,10 @@ namespace dchat if(userNickname.empty()) userNickname = "Anonymous"; ChatMessage *message = Gtk::manage(new ChatMessage(userNickname, request.message.text, request.message.timestampSeconds)); + if(request.message.creator->avatarUrl.empty()) + message->avatar.url = "https://discordemoji.com/assets/emoji/PeepoHide.png"; + else + message->avatar.url = request.message.creator->avatarUrl; message->set_valign(Gtk::Align::ALIGN_START); message->set_hexpand(true); message->show_all(); @@ -461,7 +493,11 @@ namespace dchat if(roomData == currentRoomData) { if(request.room->localUser) + { chatInput.set_editable(true); + userSettingsWindow.setNickname("Anonymous"); + userSettingsWindow.setAvatarUrl("https://discordemoji.com/assets/emoji/PeepoHide.png"); + } else chatInput.set_editable(false); } @@ -478,9 +514,19 @@ namespace dchat { Gtk::Label *userNicknameLabel = (Gtk::Label*)request.user->userdata; userNicknameLabel->set_text(request.newNickname); + if(request.user == request.room->localUser) + userSettingsWindow.setNickname(request.newNickname); fprintf(stderr, "Set nickname for user %s to %s\n", request.user->publicKey.toString().c_str(), request.newNickname.c_str()); } + void ChatWindow::setUserAvatar(const UserChangeAvatarRequest &request) + { + request.user->avatarUrl = request.url; + if(request.user == request.room->localUser) + userSettingsWindow.setAvatarUrl(request.url); + fprintf(stderr, "Set avatar for user %s to %s\n", request.user->publicKey.toString().c_str(), request.url.c_str()); + } + void ChatWindow::changeRoomName(const RoomChangeNameRequest &request) { Gtk::RadioButton *button = roomDataById[*request.room->id]->button; |