diff options
-rw-r--r-- | src/gui/chat.cpp | 40 | ||||
-rw-r--r-- | src/gui/chat.h | 10 |
2 files changed, 44 insertions, 6 deletions
diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp index 95f29dbd..253fb3f4 100644 --- a/src/gui/chat.cpp +++ b/src/gui/chat.cpp @@ -96,10 +96,9 @@ void ChatWindow::chat_log(std::string line, int own) if (line.length() > maxLength) { + tempText = line; if (line.length() > maxLength) - tempText = line.substr(0, maxLength); - else - tempText = line; + line = cut_string(tempText, maxLength); tmp.text = tempText; @@ -107,9 +106,6 @@ void ChatWindow::chat_log(std::string line, int own) //chatlog_file.flush(); chatlog.push_front(tmp); - - if (line.length() > maxLength) - line = line.substr(maxLength, line.length() - maxLength); } else // Normal message { @@ -312,3 +308,35 @@ std::string ChatWindow::const_msg(CHATSKILL action) return msg; } + +std::string ChatWindow::cut_string(std::string& value, unsigned int maximumLength) +{ + // If the string exceeds the maximum length + if(value.length() > maximumLength) + { + unsigned int index = 0; + unsigned int lastSpace = 0; + std::string cutOff = ""; + + for(index = 0; index < maximumLength; index++) { + if(value.at(index) == ' ') { + lastSpace = index; + } + } + + // If the last space is at the beginning of the string + if(lastSpace == 0) { + // Just cut it right off from the end + cutOff = value.substr(maximumLength); + value = value.substr(0, maximumLength); + } else { + // Cut it off from the last space forward + cutOff = value.substr(lastSpace + 1); + value = value.substr(0, lastSpace); + } + + return cutOff; + } + + return std::string(""); +}
\ No newline at end of file diff --git a/src/gui/chat.h b/src/gui/chat.h index 3102e3bc..db2d9843 100644 --- a/src/gui/chat.h +++ b/src/gui/chat.h @@ -181,6 +181,16 @@ class ChatWindow : public Window, public gcn::ActionListener { /** Constructs failed messages for actions */ std::string const_msg(CHATSKILL); + /** + * Cuts a string into two on a per word basis + * @param value The string to be cut, it may be modified + * in the function. + * @param maximumLength The length after which the string + * should be cut. + * @return The cut off section of the string + */ + std::string cut_string(std::string& value, unsigned int maximumLength); + /** Input box for chat messages */ gcn::TextField *chatInput; }; |