////////////////////////////////////////////////// // Blabber [TalkWindow.h] // A session with another user. ////////////////////////////////////////////////// #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "jabber/ChatTextView.h" #include "jabber/ChatWidget.h" #include "jabber/StatusView.h" #include "jabber/UserID.h" #include "ui/EditingFilter.h" enum { kIncomingMessage = 'imsg' }; class TalkView : public BGroupView { public: enum user_type {MAIN_RECIPIENT, LOCAL, OTHER}; public: TalkView(const gloox::JID *user, std::string group_room, std::string group_username, gloox::MessageSession* session); ~TalkView(); void AttachedToWindow() override; void FrameResized(float width, float height) override; void MessageReceived(BMessage *msg) override; std::string OurRepresentation(); void AddToTalk(std::string username, std::string message, user_type type, bool highlight = false); bool NewlinesAllowed(); const gloox::JID& GetUserID(); std::string GetGroupRoom(); std::string GetGroupUsername(); int CountHyperlinks(std::string message); void GenerateHyperlinkText(std::string message, text_run standard, text_run_array **tra); void AddGroupChatter(std::string username, gloox::MUCRoomAffiliation); void RemoveGroupChatter(std::string username); void RevealPreviousHistory(); void RevealNextHistory(); bool IsGroupChat(); void SetStatus(std::string message); // gloox MessageHandler void handleMessage(const gloox::Message&, gloox::MessageSession*); private: BString originalWindowTitle; std::string _group_room; std::string _group_username; UserID::online_status _current_status; gloox::MessageSession* _session; // GUI StatusView *_status_view; BScrollView *fTimelineScroller; BScrollView *fMessageInputScroller; ChatTextView *fTimeline; BTextView *fMessageInput; BListView *_people; BBox *_chat_pane; BScrollView *_scrolled_people_pane; // user history std::deque _chat_history; std::string _chat_buffer; int _chat_index; BFilePanel *_fp; };