X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fchat.h;h=11061fd39e1c0e5619ec9d4b59c2961a7fe1260a;hb=198ed60cabd3066977df5360b7b32a6b895ea744;hp=49de529859b11da2845ccbe927b61cbf8c11f6be;hpb=9f031a67594162a53b07acbfbc65faf8c4938e99;p=minetest.git diff --git a/src/chat.h b/src/chat.h index 49de52985..11061fd39 100644 --- a/src/chat.h +++ b/src/chat.h @@ -1,6 +1,6 @@ /* -Minetest-c55 -Copyright (C) 2011 celeron55, Perttu Ahola +Minetest +Copyright (C) 2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -20,19 +20,23 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef CHAT_HEADER #define CHAT_HEADER -#include "irrlichttypes_bloated.h" #include +#include +#include -// Chat console related classes, only used by the client +#include "irrlichttypes.h" +#include "util/enriched_string.h" + +// Chat console related classes struct ChatLine { // age in seconds f32 age; // name of sending player, or empty if sent by server - std::wstring name; + EnrichedString name; // message text - std::wstring text; + EnrichedString text; ChatLine(std::wstring a_name, std::wstring a_text): age(0.0), @@ -40,12 +44,19 @@ struct ChatLine text(a_text) { } + + ChatLine(EnrichedString a_name, EnrichedString a_text): + age(0.0), + name(a_name), + text(a_text) + { + } }; struct ChatFormattedFragment { // text string - std::wstring text; + EnrichedString text; // starting column u32 column; // formatting @@ -55,7 +66,7 @@ struct ChatFormattedFragment struct ChatFormattedLine { // Array of text fragments - core::array fragments; + std::vector fragments; // true if first line of one formatted ChatLine bool first; }; @@ -110,7 +121,7 @@ class ChatBuffer // Appends the formatted lines to the destination array and // returns the number of formatted lines. u32 formatChatLine(const ChatLine& line, u32 cols, - core::array& destination) const; + std::vector& destination) const; protected: s32 getTopScrollPos() const; @@ -120,8 +131,8 @@ class ChatBuffer // Scrollback size u32 m_scrollback; // Array of unformatted chat lines - core::array m_unformatted; - + std::vector m_unformatted; + // Number of character columns in console u32 m_cols; // Number of character rows in console @@ -129,7 +140,7 @@ class ChatBuffer // Scroll position (console's top line index into m_formatted) s32 m_scroll; // Array of formatted lines - core::array m_formatted; + std::vector m_formatted; // Empty formatted line, for error returns ChatFormattedLine m_empty_formatted_line; }; @@ -140,17 +151,25 @@ class ChatPrompt ChatPrompt(std::wstring prompt, u32 history_limit); ~ChatPrompt(); - // Input character + // Input character or string void input(wchar_t ch); + void input(const std::wstring &str); + + // Add a string to the history + void addToHistory(std::wstring line); + + // Get current line + std::wstring getLine() const { return m_line; } - // Submit, clear and return current line - std::wstring submit(); + // Get section of line that is currently selected + std::wstring getSelection() const + { return m_line.substr(m_cursor, m_cursor_len); } // Clear the current line void clear(); // Replace the current line with the given text - void replace(std::wstring line); + std::wstring replace(std::wstring line); // Select previous command from history void historyPrev(); @@ -158,7 +177,7 @@ class ChatPrompt void historyNext(); // Nick completion - void nickCompletion(const core::list& names, bool backwards); + void nickCompletion(const std::list& names, bool backwards); // Update console size and reformat the visible portion of the prompt void reformat(u32 cols); @@ -166,10 +185,13 @@ class ChatPrompt std::wstring getVisiblePortion() const; // Get cursor position (relative to visible portion). -1 if invalid s32 getVisibleCursorPosition() const; + // Get length of cursor selection + s32 getCursorLength() const { return m_cursor_len; } // Cursor operations enum CursorOp { CURSOROP_MOVE, + CURSOROP_SELECT, CURSOROP_DELETE }; @@ -183,7 +205,8 @@ class ChatPrompt enum CursorOpScope { CURSOROP_SCOPE_CHARACTER, CURSOROP_SCOPE_WORD, - CURSOROP_SCOPE_LINE + CURSOROP_SCOPE_LINE, + CURSOROP_SCOPE_SELECTION }; // Cursor operation @@ -209,8 +232,8 @@ class ChatPrompt // Currently edited line std::wstring m_line; // History buffer - core::array m_history; - // History index (0 <= m_history_index <= m_history.size()) + std::vector m_history; + // History index (0 <= m_history_index <= m_history.size()) u32 m_history_index; // Maximum number of history entries u32 m_history_limit; @@ -221,6 +244,8 @@ class ChatPrompt s32 m_view; // Cursor (index into m_line) s32 m_cursor; + // Cursor length (length of selected portion of line) + s32 m_cursor_len; // Last nick completion start (index into m_line) s32 m_nick_completion_start; @@ -244,7 +269,7 @@ class ChatBackend // Get the recent messages buffer ChatBuffer& getRecentBuffer(); // Concatenate all recent messages - std::wstring getRecentChat(); + EnrichedString getRecentChat(); // Get the console prompt ChatPrompt& getPrompt();