summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateusz Kaduk <mateusz.kaduk@gmail.com>2005-04-26 09:17:53 +0000
committerMateusz Kaduk <mateusz.kaduk@gmail.com>2005-04-26 09:17:53 +0000
commitc1d360e6f0ae1ff3c15a52fab8a6115841d058bb (patch)
treec535f85804c5e0290e32a649d9f0749cfefda41f
parent8b0e30d3798cd5bdce2c3a34a3c384e90dceac99 (diff)
downloadmana-c1d360e6f0ae1ff3c15a52fab8a6115841d058bb.tar.gz
mana-c1d360e6f0ae1ff3c15a52fab8a6115841d058bb.tar.bz2
mana-c1d360e6f0ae1ff3c15a52fab8a6115841d058bb.tar.xz
mana-c1d360e6f0ae1ff3c15a52fab8a6115841d058bb.zip
Added scrolling to chat but setText() works strangly and because of draw() I get message looping
-rw-r--r--src/gui/chat.cpp46
-rw-r--r--src/gui/chat.h7
2 files changed, 39 insertions, 14 deletions
diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp
index fac868c5..27005a16 100644
--- a/src/gui/chat.cpp
+++ b/src/gui/chat.cpp
@@ -35,14 +35,19 @@ ChatWindow::ChatWindow(const char *logfile, int item_num):
items_keep = item_num;
setContentSize(600, 100);
-
+ textOutput = new TextBox();
chatInput = new TextField();
+ textOutput->setEditable(false);
+ scrollArea = new ScrollArea(textOutput);
+ scrollArea->setDimension(gcn::Rectangle(
+ 5, 5, 590, 85 - chatInput->getHeight()));
chatInput->setPosition(
chatInput->getBorderSize(),
100 - chatInput->getHeight() - chatInput->getBorderSize());
chatInput->setWidth(600 - 2 * chatInput->getBorderSize());
chatInput->setEventId("chatinput");
chatInput->addActionListener(this);
+ add(scrollArea);
add(chatInput);
}
@@ -54,6 +59,12 @@ ChatWindow::~ChatWindow()
chatlog_file.close();
}
+void ChatWindow::addOutput(std::string output)
+{
+ textOutput->setText(textOutput->getText() + output);
+ //textOutput->setText(output);
+}
+
void ChatWindow::chat_log(std::string line, int own)
{
int pos;
@@ -150,41 +161,48 @@ void ChatWindow::draw(gcn::Graphics *graphics)
texty -= getFont()->getHeight() - 2;
- graphics->pushClipArea(gcn::Rectangle(0, 0, 95, getHeight()));
+ //graphics->pushClipArea(gcn::Rectangle(0, 0, 95, getHeight()));
switch (line.own) {
case BY_GM:
graphics->setColor(gcn::Color(97, 156, 236)); // GM Bue
- graphics->drawText("Global announcement: ", 5, texty);
- break;
+ //graphics->drawText("Global announcement: ", 5, texty);
+ addOutput(std::string("Global announcement: "));
+ break;
case BY_PLAYER:
graphics->setColor(gcn::Color(255, 246, 98)); // Yellow
- graphics->drawText(line.nick, 5, texty);
+ //graphics->drawText(line.nick, 5, texty);
+ addOutput(std::string(line.nick));
break;
case BY_OTHER:
graphics->setColor(gcn::Color(97, 156, 236)); // GM Bue
- graphics->drawText(line.nick, 5, texty);
+ //graphics->drawText(line.nick, 5, texty);
+ addOutput(std::string(line.nick));
break;
- }
+ }
- graphics->popClipArea();
+ //graphics->popClipArea();
switch (line.own) {
case BY_GM:
graphics->setColor(gcn::Color(39, 197, 39)); // Green
- graphics->drawText(line.text, 100, texty);
- break;
+ //graphics->drawText(line.text, 100, texty);
+ addOutput(std::string(line.text) + std::string("\n"));
+ break;
case BY_PLAYER:
graphics->setColor(gcn::Color(255, 255, 255)); // White
- graphics->drawText(line.text, 100, texty);
- break;
+ //graphics->drawText(line.text, 100, texty);
+ addOutput(std::string(line.text) + std::string("\n"));
+ break;
case BY_OTHER:
graphics->setColor(gcn::Color(39, 197, 39)); // Green
- graphics->drawText(line.text, 100, texty);
+ //graphics->drawText(line.text, 100, texty);
+ addOutput(std::string(line.text) + std::string("\n"));
break;
default:
graphics->setColor(gcn::Color(83, 233, 246)); // Light blue
- graphics->drawText(line.text, 5, texty);
+ //graphics->drawText(line.text, 5, texty);
+ addOutput(std::string(line.text) + std::string("\n"));
}
if (i >= n) {
diff --git a/src/gui/chat.h b/src/gui/chat.h
index 4aabe4c2..b41e6947 100644
--- a/src/gui/chat.h
+++ b/src/gui/chat.h
@@ -28,6 +28,8 @@
#include "../resources/image.h"
#include "../net/network.h"
#include "window.h"
+#include "textbox.h"
+#include "scrollarea.h"
#include <SDL.h>
#include <list>
#include <string>
@@ -109,6 +111,9 @@ class ChatWindow : public Window, public gcn::ActionListener {
*/
~ChatWindow();
+
+ void addOutput(std::string output);
+
/*
* Adds a line of text to our message list. Parameters:
*
@@ -198,6 +203,8 @@ class ChatWindow : public Window, public gcn::ActionListener {
/** Input box for chat messages */
gcn::TextField *chatInput;
+ TextBox *textOutput;
+ ScrollArea *scrollArea;
};
#endif