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