#pragma once #include #include #include #include #include #include #include #include #include #include #include namespace dchat { class ChatMessage; class ChatWindow : public Gtk::Grid { public: 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 scrollToBottom(); private: void setupTopBar(); void setupLeftPanel(Gtk::Paned *sidePanels); void setupMessageArea(Gtk::Grid *rightPanel); void setupChatInput(Gtk::Grid *rightPanel); private: Gtk::Grid topbar; Gtk::Entry topbarSearchBar; Gtk::Grid leftPanelChannels; Gtk::Grid leftPanelUsers; Gtk::Label currentChannelTitle; Gtk::ScrolledWindow messageArea; Gtk::Grid messageAreaLayout; Gtk::TextView chatInput; struct RoomData { Gtk::ToggleButton *button; }; odhtdb::MapHash roomDataById; odhtdb::MapHash messageById; int chatPrevNumLines; int roomCount; std::shared_ptr currentRoom; }; }