X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fchat.h;h=fc080f64b9c87a0b9784dceb75dc3ec97abe9596;hb=2f32044273d107e82fb1c35d4a0f616fa480cdf0;hp=38727c6680a4bcd7f71b456079f90838471fb8f9;hpb=921151d97a2fb2238ab514324fb95e2732248b96;p=dragonfireclient.git diff --git a/src/chat.h b/src/chat.h index 38727c668..fc080f64b 100644 --- a/src/chat.h +++ b/src/chat.h @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes.h" #include "util/enriched_string.h" +#include "settings.h" // Chat console related classes @@ -56,6 +57,8 @@ struct ChatFormattedFragment EnrichedString text; // starting column u32 column; + // web link is empty for most frags + std::string weblink; // formatting //u8 bold:1; }; @@ -76,7 +79,7 @@ class ChatBuffer // Append chat line // Removes oldest chat line if scrollback size is reached - void addLine(std::wstring name, std::wstring text); + void addLine(const std::wstring &name, const std::wstring &text); // Remove all chat lines void clear(); @@ -93,8 +96,6 @@ class ChatBuffer // Delete lines older than maxAge. void deleteByAge(f32 maxAge); - // Get number of columns, 0 if reformat has not been called yet. - u32 getColumns() const; // Get number of rows, 0 if reformat has not been called yet. u32 getRows() const; // Update console size and reformat all formatted lines. @@ -109,8 +110,13 @@ class ChatBuffer void scrollAbsolute(s32 scroll); // Scroll to bottom of buffer (newest) void scrollBottom(); - // Scroll to top of buffer (oldest) - void scrollTop(); + + // Functions for keeping track of whether the lines were modified by any + // preceding operations + // If they were not changed, getLineCount() and getLine() output the same as + // before + bool getLinesModified() const { return m_lines_modified; } + void resetLinesModified() { m_lines_modified = false; } // Format a chat line for the given number of columns. // Appends the formatted lines to the destination array and @@ -118,6 +124,8 @@ class ChatBuffer u32 formatChatLine(const ChatLine& line, u32 cols, std::vector& destination) const; + void resize(u32 scrollback); + protected: s32 getTopScrollPos() const; s32 getBottomScrollPos() const; @@ -138,6 +146,16 @@ class ChatBuffer std::vector m_formatted; // Empty formatted line, for error returns ChatFormattedLine m_empty_formatted_line; + + // Enable clickable chat weblinks + bool m_cache_clickable_chat_weblinks; + // Color of clickable chat weblinks + irr::video::SColor m_cache_chat_weblink_color; + + // Whether the lines were modified since last markLinesUnchanged() + // Is always set to true when m_unformatted is modified, because that's what + // determines the output of getLineCount() and getLine() + bool m_lines_modified = true; }; class ChatPrompt @@ -151,7 +169,7 @@ class ChatPrompt void input(const std::wstring &str); // Add a string to the history - void addToHistory(std::wstring line); + void addToHistory(const std::wstring &line); // Get current line std::wstring getLine() const { return m_line; } @@ -163,7 +181,7 @@ class ChatPrompt void clear(); // Replace the current line with the given text - std::wstring replace(std::wstring line); + std::wstring replace(const std::wstring &line); // Select previous command from history void historyPrev(); @@ -254,7 +272,7 @@ class ChatBackend ~ChatBackend() = default; // Add chat message - void addMessage(std::wstring name, std::wstring text); + void addMessage(const std::wstring &name, std::wstring text); // Parse and add unparsed chat message void addUnparsedMessage(std::wstring line); @@ -263,7 +281,7 @@ class ChatBackend // Get the recent messages buffer ChatBuffer& getRecentBuffer(); // Concatenate all recent messages - EnrichedString getRecentChat(); + EnrichedString getRecentChat() const; // Get the console prompt ChatPrompt& getPrompt(); @@ -281,6 +299,9 @@ class ChatBackend void scrollPageDown(); void scrollPageUp(); + // Resize recent buffer based on settings + void applySettings(); + private: ChatBuffer m_console_buffer; ChatBuffer m_recent_buffer;