#pragma once #include "ImageButton.hpp" #include #include #include #include #include #include #include #include #include #include #include namespace dchat { class ChatMessage; class Window; class ChatWindow : public Gtk::Grid { public: ChatWindow(Window *window); ~ChatWindow(); void addRoom(std::shared_ptr room); void addMessage(const RoomAddMessageRequest &request); void addUser(std::shared_ptr room, std::shared_ptr user); void setUserNickname(const UserChangeNicknameRequest &request); void changeRoomName(const RoomChangeNameRequest &request); void scrollToBottom(); private: void setupTopBar(); void setupLeftPanel(Gtk::Paned *sidePanels); void setupMessageArea(Gtk::Grid *rightPanel); void setupChatInput(Gtk::Grid *rightPanel); void setCurrentRoom(std::shared_ptr room); private: Gtk::Grid topbar; Gtk::Entry topbarSearchBar; Gtk::Grid leftPanelChannels; Gtk::Stack leftPanelUsersStack; ImageButton addRoomButton; Gtk::Label currentChannelTitle; Gtk::ScrolledWindow messageArea; Gtk::Stack messageAreaStack; Gtk::TextView chatInput; struct RoomData { Gtk::Grid *leftPanelUsersLayout; Gtk::Grid *messageAreaLayout; Gtk::ToggleButton *button; }; odhtdb::MapHash roomDataById; odhtdb::MapHash messageById; int chatPrevNumLines; int roomCount; RoomData *currentRoomData; std::shared_ptr currentRoom; Window *window; }; }