summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/chat.cpp40
-rw-r--r--src/gui/chat.h10
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;
};