X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fchat.cpp;h=2d29d39da77fe1b87381607b392ee920a7732e45;hb=dfe00abc5addd66dbf840d7e826690291f4afd93;hp=0efda7eacd88391276611ba4ce5aa2f09a2864c6;hpb=497ff1ecd64c8908f988e15ca879824f2781e3fd;p=dragonfireclient.git diff --git a/src/chat.cpp b/src/chat.cpp index 0efda7eac..2d29d39da 100644 --- a/src/chat.cpp +++ b/src/chat.cpp @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2011 celeron55, Perttu Ahola +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 @@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "chat.h" #include "debug.h" -#include +#include "strfnd.h" #include #include #include "util/string.h" @@ -83,7 +83,7 @@ u32 ChatBuffer::getScrollback() const const ChatLine& ChatBuffer::getLine(u32 index) const { - assert(index < getLineCount()); + assert(index < getLineCount()); // pre-condition return m_unformatted[index]; } @@ -107,7 +107,8 @@ void ChatBuffer::deleteOldest(u32 count) // keep m_formatted in sync if (del_formatted < m_formatted.size()) { - assert(m_formatted[del_formatted].first); + + sanity_check(m_formatted[del_formatted].first); ++del_formatted; while (del_formatted < m_formatted.size() && !m_formatted[del_formatted].first) @@ -117,8 +118,8 @@ void ChatBuffer::deleteOldest(u32 count) --count; } - m_unformatted.erase(0, del_unformatted); - m_formatted.erase(0, del_formatted); + m_unformatted.erase(m_unformatted.begin(), m_unformatted.begin() + del_unformatted); + m_formatted.erase(m_formatted.begin(), m_formatted.begin() + del_formatted); } void ChatBuffer::deleteByAge(f32 maxAge) @@ -151,7 +152,7 @@ void ChatBuffer::reformat(u32 cols, u32 rows) } else if (cols != m_cols || rows != m_rows) { - // TODO: Avoid reformatting ALL lines (even inivisble ones) + // TODO: Avoid reformatting ALL lines (even invisible ones) // each time the console size changes. // Find out the scroll position in *unformatted* lines @@ -232,10 +233,10 @@ void ChatBuffer::scrollTop() } u32 ChatBuffer::formatChatLine(const ChatLine& line, u32 cols, - core::array& destination) const + std::vector& destination) const { u32 num_added = 0; - core::array next_frags; + std::vector next_frags; ChatFormattedLine next_line; ChatFormattedFragment temp_frag; u32 out_column = 0; @@ -292,7 +293,7 @@ u32 ChatBuffer::formatChatLine(const ChatLine& line, u32 cols, frag.column = out_column; next_line.fragments.push_back(frag); out_column += frag.text.size(); - next_frags.erase(0, 1); + next_frags.erase(next_frags.begin()); } else { @@ -407,6 +408,15 @@ void ChatPrompt::input(wchar_t ch) m_nick_completion_end = 0; } +void ChatPrompt::input(const std::wstring &str) +{ + m_line.insert(m_cursor, str); + m_cursor += str.size(); + clampView(); + m_nick_completion_start = 0; + m_nick_completion_end = 0; +} + std::wstring ChatPrompt::submit() { std::wstring line = m_line; @@ -414,7 +424,7 @@ std::wstring ChatPrompt::submit() if (!line.empty()) m_history.push_back(line); if (m_history.size() > m_history_limit) - m_history.erase(0); + m_history.erase(m_history.begin()); m_history_index = m_history.size(); m_view = 0; m_cursor = 0; @@ -464,7 +474,7 @@ void ChatPrompt::historyNext() } } -void ChatPrompt::nickCompletion(const core::list& names, bool backwards) +void ChatPrompt::nickCompletion(const std::list& names, bool backwards) { // Two cases: // (a) m_nick_completion_start == m_nick_completion_end == 0 @@ -492,14 +502,14 @@ void ChatPrompt::nickCompletion(const core::list& names, bool back std::wstring prefix = m_line.substr(prefix_start, prefix_end - prefix_start); // find all names that start with the selected prefix - core::array completions; - for (core::list::ConstIterator + std::vector completions; + for (std::list::const_iterator i = names.begin(); - i != names.end(); i++) + i != names.end(); ++i) { - if (str_starts_with(*i, prefix, true)) + if (str_starts_with(narrow_to_wide(*i), prefix, true)) { - std::wstring completion = *i; + std::wstring completion = narrow_to_wide(*i); if (prefix_start == 0) completion += L":"; completions.push_back(completion); @@ -765,5 +775,5 @@ void ChatBackend::scrollPageDown() void ChatBackend::scrollPageUp() { - m_console_buffer.scroll(-m_console_buffer.getRows()); + m_console_buffer.scroll(-(s32)m_console_buffer.getRows()); }