#pragma once #include "ImageButton.hpp" #include "RoomSettingsWindow.hpp" #include "RoomNotificationsWindow.hpp" #include "UserSettingsWindow.hpp" #include #include #include #include #include #include "ResponsivePaned.hpp" #include #include #include #include #include #include namespace dchat { class ChatMessage; class Window; class Topbar; class ChatWindow : public Gtk::Grid { public: ChatWindow(Window *window); ~ChatWindow(); void addRoom(std::shared_ptr room); void addMessage(const RoomAddMessageRequest &request); void addUser(const RoomAddUserRequest &request); void setUserNickname(const UserChangeNicknameRequest &request); void setUserAvatar(const UserChangeAvatarRequest &request); void changeRoomName(const RoomChangeNameRequest &request); void addInviteRequest(const InviteUserRequest &request); void scrollToBottom(); Topbar *topbar; Gtk::Stack stack; Gtk::Grid chatPage; RoomSettingsWindow roomSettingsWindow; RoomNotificationsWindow roomNotificationsWindow; UserSettingsWindow userSettingsWindow; Window *window; std::shared_ptr currentRoom; private: void setupTopbar(); void setupLeftPanel(Gtk::ResponsivePaned *sidePanels); void setupMessageArea(Gtk::Grid *rightPanel); void setupChatInput(Gtk::Grid *rightPanel); void setCurrentRoom(std::shared_ptr room); private: //Gtk::Grid leftPanelChannels; Gtk::StackSidebar leftPanelChannels; Gtk::Stack leftPanelUsersStack; ImageButton createRoomButton; ImageButton joinRoomButton; ImageButton userSettingsButton; Gtk::Stack messageAreaStack; Gtk::TextView chatInput; struct RoomData { Gtk::Grid *leftPanelUsersLayout; Gtk::Grid *messageAreaLayout; uint numMessages; uint numUsers; Gtk::RadioButton *button; }; odhtdb::MapHash roomDataById; odhtdb::MapHash messageById; int chatPrevNumLines; int roomCount; RoomData *currentRoomData; bool chatInputShowPlaceholder; bool chatInputChangeByPlaceholder; }; }