]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/chat.cpp
Suppress MSVC warning in chat.cpp
[dragonfireclient.git] / src / chat.cpp
index 2f5f8a44845295a1ea0fd8bf6d659eaa24fad345..1fb872b8527badb4d5fa4ae1696601b84c7d5970 100644 (file)
@@ -1,28 +1,29 @@
 /*
-Minetest-c55
-Copyright (C) 2011 celeron55, Perttu Ahola <celeron55@gmail.com>
+Minetest
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
 (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+GNU Lesser General Public License for more details.
 
-You should have received a copy of the GNU General Public License along
+You should have received a copy of the GNU Lesser General Public License along
 with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
 #include "chat.h"
 #include "debug.h"
-#include "utility.h"
-#include <cassert>
+#include "strfnd.h"
 #include <cctype>
 #include <sstream>
+#include "util/string.h"
+#include "util/numeric.h"
 
 ChatBuffer::ChatBuffer(u32 scrollback):
        m_scrollback(scrollback),
@@ -116,8 +117,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)
@@ -150,7 +151,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
@@ -231,10 +232,10 @@ void ChatBuffer::scrollTop()
 }
 
 u32 ChatBuffer::formatChatLine(const ChatLine& line, u32 cols,
-               core::array<ChatFormattedLine>& destination) const
+               std::vector<ChatFormattedLine>& destination) const
 {
        u32 num_added = 0;
-       core::array<ChatFormattedFragment> next_frags;
+       std::vector<ChatFormattedFragment> next_frags;
        ChatFormattedLine next_line;
        ChatFormattedFragment temp_frag;
        u32 out_column = 0;
@@ -291,7 +292,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
                        {
@@ -406,6 +407,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;
@@ -413,7 +423,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;
@@ -463,7 +473,7 @@ void ChatPrompt::historyNext()
        }
 }
 
-void ChatPrompt::nickCompletion(const core::list<std::wstring>& names, bool backwards)
+void ChatPrompt::nickCompletion(const std::list<std::string>& names, bool backwards)
 {
        // Two cases:
        // (a) m_nick_completion_start == m_nick_completion_end == 0
@@ -491,14 +501,14 @@ void ChatPrompt::nickCompletion(const core::list<std::wstring>& 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<std::wstring> completions;
-       for (core::list<std::wstring>::ConstIterator
+       std::vector<std::wstring> completions;
+       for (std::list<std::string>::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);
@@ -764,5 +774,5 @@ void ChatBackend::scrollPageDown()
 
 void ChatBackend::scrollPageUp()
 {
-       m_console_buffer.scroll(-m_console_buffer.getRows());
+       m_console_buffer.scroll(-(s32)m_console_buffer.getRows());
 }