summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2004-12-12 16:18:13 +0000
committerBjørn Lindeijer <bjorn@lindeijer.nl>2004-12-12 16:18:13 +0000
commit197b684831c9701635fd140bbb06a6c2b3f0fcc7 (patch)
tree035d637cba6634d9195094213d80679838fd925e /src/gui
parent72d8e5065d6c2bdb4c941e91d4280b48afc6d602 (diff)
downloadmana-197b684831c9701635fd140bbb06a6c2b3f0fcc7.tar.gz
mana-197b684831c9701635fd140bbb06a6c2b3f0fcc7.tar.bz2
mana-197b684831c9701635fd140bbb06a6c2b3f0fcc7.tar.xz
mana-197b684831c9701635fd140bbb06a6c2b3f0fcc7.zip
Chat input field to Guichan.
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/chat.cpp487
-rw-r--r--src/gui/gui.cpp40
-rw-r--r--src/gui/gui.h3
-rw-r--r--src/gui/login.cpp2
-rw-r--r--src/gui/login.h3
5 files changed, 273 insertions, 262 deletions
diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp
index b9b1daf7..b1cec890 100644
--- a/src/gui/chat.cpp
+++ b/src/gui/chat.cpp
@@ -21,278 +21,285 @@
#include "chat.h"
-/**
- Simple ChatLog Object v0.5 (i'd say...)
-
- Bestviewd w/ Bitstream Vera Sans Mono @ 9pt and a tab-width of 2 spaces
-
- Author: kth5 aka Alexander Baldeck
- pipe your questions, suggestions and flames to: kth5@gawab.com
-*/
+/*
+ * Simple ChatLog Object v0.5 (i'd say...)
+ *
+ * Bestviewd w/ Bitstream Vera Sans Mono @ 9pt and a tab-width of 2 spaces
+ *
+ * Author: kth5 aka Alexander Baldeck
+ * pipe your questions, suggestions and flames to: kth5@gawab.com
+ */
-/**
-*/
+/*
+ */
Chat::Chat(const char * logfile, int item_num) {
- chatlog_file.open(logfile, std::ios::out | std::ios::app);
- items = 0;
- items_keep = item_num;
+ chatlog_file.open(logfile, std::ios::out | std::ios::app);
+ items = 0;
+ items_keep = item_num;
}
-/**
-*/
+/*
+ */
Chat::~Chat() {
- chatlog_file.flush();
- chatlog_file.close();
+ chatlog_file.flush();
+ chatlog_file.close();
}
-/**
-*/
+/*
+ */
void Chat::chat_dlgrsize(int) {
}
-/** adds a line of text to our message list
-
- string line -> message text
- int own -> type of message (usually the owner-type)
- ALFONT_FONT * font -> font that'll be used to draw the text later
-
- NOTE:
- to all of you who wonder why the font needs to be passed, simple.
- i already store the width in pixel in the list rather than
- calculating it again and again on every draw event. ;-)
+/*
+ * Adds a line of text to our message list. Parameters:
+ *
+ * line: message text
+ * own: type of message (usually the owner-type)
+ * font: font that'll be used to draw the text later
+ *
+ * NOTE:
+ * To all of you who wonder why the font needs to be passed, simple.
+ * i already store the width in pixel in the list rather than
+ * calculating it again and again on every draw event. ;-)
*/
void Chat::chat_log(std::string line, int own, ALFONT_FONT * font) {
- int pos;
- CHATLOG tmp;
-
- if(items<=items_keep)
- items++; // delete overhead from the end of the list
- else
- chatlog.pop_back();
-
- pos = 0;
- pos = (int)line.find(" : ", 0);
- if(pos > 0) {
- tmp.nick = line.substr(0,pos);
- switch(own) {
- case ACT_IS :
- tmp.nick += CAT_IS;
- break;
- case ACT_WHISPER :
- tmp.nick += CAT_WHISPER;
- break;
- default :
- tmp.nick += CAT_NORMAL;
- }
- tmp.width = TEXT_GETWIDTH(tmp.nick.c_str())+2;
- line.erase(0,pos+3);
- }else {
- tmp.nick = "";
- tmp.width = 1;
- }
- tmp.own = own;
- tmp.text = line;
+ int pos;
+ CHATLOG tmp;
+
+ if (items <= items_keep) {
+ items++; // delete overhead from the end of the list
+ }
+ else {
+ chatlog.pop_back();
+ }
+
+ pos = 0;
+ pos = (int)line.find(" : ", 0);
+ if (pos > 0) {
+ tmp.nick = line.substr(0,pos);
+ switch(own) {
+ case ACT_IS :
+ tmp.nick += CAT_IS;
+ break;
+ case ACT_WHISPER :
+ tmp.nick += CAT_WHISPER;
+ break;
+ default :
+ tmp.nick += CAT_NORMAL;
+ }
+ tmp.width = TEXT_GETWIDTH(tmp.nick.c_str())+2;
+ line.erase(0,pos+3);
+ } else {
+ tmp.nick = "";
+ tmp.width = 1;
+ }
+ tmp.own = own;
+ tmp.text = line;
- chatlog_file << tmp.nick << tmp.text << "\n";
- chatlog_file.flush();
+ chatlog_file << tmp.nick << tmp.text << "\n";
+ chatlog_file.flush();
- chatlog.push_front(tmp);
+ chatlog.push_front(tmp);
}
-/** function overload -> calls original chat_log()
- after processing the packet
-*/
+/*
+ * function overload -> calls original chat_log() after processing the packet
+ */
void Chat::chat_log(CHATSKILL action, ALFONT_FONT * font) {
- chat_log(const_msg(action), BY_SERVER, font);
+ chat_log(const_msg(action), BY_SERVER, font);
}
-/** draw first n lines of the list onto a Allegro type bitmap buffer
- using Alfont
-
- BITMAP * bmp -> Allegro type bitmap buffer to draw onto
- int n -> number of lines to be drawn
- ALFONT_FONT * font -> font to use
-
- NOTE:
- take great care using this, make sure the buffer passed is
- empty! ;-) anyway, line wrapping is not supported yet.
+/*
+ * Draw first n lines of the list onto a Allegro type bitmap buffer using
+ * Alfont.
+ *
+ * BITMAP * bmp: Allegro type bitmap buffer to draw onto
+ * int n: number of lines to be drawn
+ * ALFONT_FONT * font: font to use
+ *
+ * NOTE:
+ * take great care using this, make sure the buffer passed is
+ * empty! ;-) anyway, line wrapping is not supported yet.
*/
void Chat::chat_draw(BITMAP * bmp, int n, ALFONT_FONT * font) {
- int y = 600-35, i = 0;
- CHATLOG line;
- n -= 1;
-
- for(iter = chatlog.begin(); iter != chatlog.end(); iter++) {
- line = *iter;
- y -=11;
-
- switch(line.own) {
- case BY_GM :
- alfont_textprintf_aa(bmp, font, 1, y, COLOR_BLUE, "Global announcement: ");
- alfont_textprintf_aa(bmp, font, TEXT_GETWIDTH("Global announcement: "), y, COLOR_GREEN, line.text.c_str());
- break;
- case BY_PLAYER :
- alfont_textprintf_aa(bmp, font, 1, y, COLOR_YELLOW, line.nick.c_str());
- alfont_textprintf_aa(bmp, font, line.width, y, COLOR_WHITE, line.text.c_str());
- break;
- case BY_OTHER :
- alfont_textprintf_aa(bmp, font, 1, y, COLOR_GREEN, line.nick.c_str());
- alfont_textprintf_aa(bmp, font, line.width, y, COLOR_WHITE, line.text.c_str());
- break;
- default :
- alfont_textprintf_aa(bmp, font, 1, y, COLOR_LIGHTBLUE, line.text.c_str());
- }
-
- if(i>=n)
- return;
- i++;
- }
+ int y = 600-35, i = 0;
+ CHATLOG line;
+ n -= 1;
+
+ for (iter = chatlog.begin(); iter != chatlog.end(); iter++) {
+ line = *iter;
+ y -=11;
+
+ switch (line.own) {
+ case BY_GM :
+ alfont_textprintf_aa(bmp, font, 1, y, COLOR_BLUE, "Global announcement: ");
+ alfont_textprintf_aa(bmp, font, TEXT_GETWIDTH("Global announcement: "), y, COLOR_GREEN, line.text.c_str());
+ break;
+ case BY_PLAYER :
+ alfont_textprintf_aa(bmp, font, 1, y, COLOR_YELLOW, line.nick.c_str());
+ alfont_textprintf_aa(bmp, font, line.width, y, COLOR_WHITE, line.text.c_str());
+ break;
+ case BY_OTHER :
+ alfont_textprintf_aa(bmp, font, 1, y, COLOR_GREEN, line.nick.c_str());
+ alfont_textprintf_aa(bmp, font, line.width, y, COLOR_WHITE, line.text.c_str());
+ break;
+ default :
+ alfont_textprintf_aa(bmp, font, 1, y, COLOR_LIGHTBLUE, line.text.c_str());
+ }
+
+ if (i>=n) {
+ return;
+ }
+ i++;
+ }
}
-/** determines wether to send a command or an ordinary message, then
- contructs packets & sends them
-
- string nick -> the character's name to display infront
- string msg -> the message's text which is to be send.
-
- NOTE:
- the nickname is required by the server, if not specified
- the message may not be sent unless a command was intended
- which requires another packet to be constructed! you can
- achieve this by putting a slash ("/") infront of the
- message followed by the command name and the message.
- of course all slash-commands need implemented handler-
- routines. ;-)
- remember, a line starting w/ "@" is not a command that needs
- to be parsed rather is sent using the normal chat-packet.
-
- EXAMPLE:
- // for an global announcement /- command
- chatlog.chat_send("", "/announce Hello to all logged in users!");
- // for simple message by a user /- message
- chatlog.chat_send("Zaeiru", "Hello to all users on the screen!");
-*/
+/*
+ * Determines wether to send a command or an ordinary message, then
+ * contructs packets & sends them
+ *
+ * string nick -> the character's name to display infront
+ * string msg -> the message's text which is to be send.
+ *
+ * NOTE:
+ * the nickname is required by the server, if not specified
+ * the message may not be sent unless a command was intended
+ * which requires another packet to be constructed! you can
+ * achieve this by putting a slash ("/") infront of the
+ * message followed by the command name and the message.
+ * of course all slash-commands need implemented handler-
+ * routines. ;-)
+ * remember, a line starting w/ "@" is not a command that needs
+ * to be parsed rather is sent using the normal chat-packet.
+ *
+ * EXAMPLE:
+ * // for an global announcement /- command
+ * chatlog.chat_send("", "/announce Hello to all logged in users!");
+ * // for simple message by a user /- message
+ * chatlog.chat_send("Zaeiru", "Hello to all users on the screen!");
+ */
char * Chat::chat_send(std::string nick, std::string msg) {
- short packid;
-
- // prepare command
- if(msg.substr(0,1)=="/") {
- // global announcement
- if(msg.substr(0,IS_ANNOUNCE_LENGTH) == IS_ANNOUNCE) {
- msg.erase(0,IS_ANNOUNCE_LENGTH);
- packid = 0x0099;
- } else if(msg.substr(0,IS_WHERE_LENGTH) == IS_WHERE) {
+ short packid;
+
+ // prepare command
+ if(msg.substr(0,1)=="/") {
+ // global announcement
+ if(msg.substr(0,IS_ANNOUNCE_LENGTH) == IS_ANNOUNCE) {
+ msg.erase(0,IS_ANNOUNCE_LENGTH);
+ packid = 0x0099;
+ } else if(msg.substr(0,IS_WHERE_LENGTH) == IS_WHERE) {
+ } else {
+ packid = 0x008c;
+ }
+ // prepare ordinary message
} else {
- packid = 0x008c;
- }
- // prepare ordinary message
- } else {
- // temporary hack to make messed-up-keyboard-ppl able to send GM commands
- if(msg.substr(0,1)=="#")
- msg.replace(0,1,"@");
- // end temp. hack XD
- nick += " : ";
- nick += msg;
- msg = nick;
- packid = 0x008c;
- }
-
- msg += "\0";
-
- // send processed message
- WFIFOW(0) = net_w_value(packid);
- WFIFOW(2) = net_w_value((unsigned short)(msg.length()+4));
- memcpy(WFIFOP(4), msg.c_str(), msg.length());
- WFIFOSET((int)msg.length()+4);
- nick = msg = "";
- return "";
+ // temporary hack to make messed-up-keyboard-ppl able to send GM commands
+ if(msg.substr(0,1)=="#")
+ msg.replace(0,1,"@");
+ // end temp. hack XD
+ nick += " : ";
+ nick += msg;
+ msg = nick;
+ packid = 0x008c;
+ }
+
+ msg += "\0";
+
+ // send processed message
+ WFIFOW(0) = net_w_value(packid);
+ WFIFOW(2) = net_w_value((unsigned short)(msg.length()+4));
+ memcpy(WFIFOP(4), msg.c_str(), msg.length());
+ WFIFOSET((int)msg.length()+4);
+ nick = msg = "";
+ return "";
}
-/** PRIVATE :
- NOTE:
- these usually will be left undocumented coz u can't call them
- directly anyway. ;-)
-*/
+/*
+ * PRIVATE :
+ * NOTE:
+ * these usually will be left undocumented coz u can't call them
+ * directly anyway. ;-)
+ */
/** constructs failed messages for actions */
std::string Chat::const_msg(CHATSKILL action) {
- std::string msg;
- if(action.success == SKILL_FAILED && action.skill == SKILL_BASIC) {
- switch(action.bskill) {
- case BSKILL_TRADE :
- msg = "Trade failed!";
- break;
- case BSKILL_EMOTE :
- msg = "Emote failed!";
- break;
- case BSKILL_SIT :
- msg = "Sit failed!";
- break;
- case BSKILL_CREATECHAT :
- msg = "Chat creating failed!";
- break;
- case BSKILL_JOINPARTY :
- msg = "Could not join party!";
- break;
- case BSKILL_SHOUT :
- msg = "Cannot shout!";
- break;
- }
-
- switch(action.reason) {
- case RFAIL_SKILLDEP :
- msg += " You have not yet reached a high enough lvl!";
- break;
- case RFAIL_INSUFHP :
- msg += " Insufficient HP!";
- break;
- case RFAIL_INSUFSP :
- msg += " Insufficient SP!";
- break;
- case RFAIL_NOMEMO :
- msg += " You have no memos!";
- break;
- case RFAIL_SKILLDELAY :
- msg += " You cannot do that right now!";
- break;
- case RFAIL_ZENY :
- msg += " Seems you need more Zeny... ;-)";
- break;
- case RFAIL_WEAPON :
- msg += " You cannot use this skill with that kind of weapon!";
- break;
- case RFAIL_REDGEM :
- msg += " You need another red gem!";
- break;
- case RFAIL_BLUEGEM :
- msg += " You need another blue gem!";
- break;
- case RFAIL_OVERWEIGHT :
- msg += " You're carrying to much to do this!";
- break;
- default :
- msg += " Huh? What's that?";
- break;
- }
- }else{
- switch(action.skill) {
- case SKILL_WARP :
- msg = "Warp failed...";
- break;
- case SKILL_STEAL :
- msg = "Could not steal anything...";
- break;
- case SKILL_ENVENOM :
- msg = "Poison had no effect...";
- break;
- }
- }
-
- return msg;
+ std::string msg;
+ if (action.success == SKILL_FAILED && action.skill == SKILL_BASIC) {
+ switch (action.bskill) {
+ case BSKILL_TRADE :
+ msg = "Trade failed!";
+ break;
+ case BSKILL_EMOTE :
+ msg = "Emote failed!";
+ break;
+ case BSKILL_SIT :
+ msg = "Sit failed!";
+ break;
+ case BSKILL_CREATECHAT :
+ msg = "Chat creating failed!";
+ break;
+ case BSKILL_JOINPARTY :
+ msg = "Could not join party!";
+ break;
+ case BSKILL_SHOUT :
+ msg = "Cannot shout!";
+ break;
+ }
+
+ switch (action.reason) {
+ case RFAIL_SKILLDEP :
+ msg += " You have not yet reached a high enough lvl!";
+ break;
+ case RFAIL_INSUFHP :
+ msg += " Insufficient HP!";
+ break;
+ case RFAIL_INSUFSP :
+ msg += " Insufficient SP!";
+ break;
+ case RFAIL_NOMEMO :
+ msg += " You have no memos!";
+ break;
+ case RFAIL_SKILLDELAY :
+ msg += " You cannot do that right now!";
+ break;
+ case RFAIL_ZENY :
+ msg += " Seems you need more Zeny... ;-)";
+ break;
+ case RFAIL_WEAPON :
+ msg += " You cannot use this skill with that kind of weapon!";
+ break;
+ case RFAIL_REDGEM :
+ msg += " You need another red gem!";
+ break;
+ case RFAIL_BLUEGEM :
+ msg += " You need another blue gem!";
+ break;
+ case RFAIL_OVERWEIGHT :
+ msg += " You're carrying to much to do this!";
+ break;
+ default :
+ msg += " Huh? What's that?";
+ break;
+ }
+ } else {
+ switch(action.skill) {
+ case SKILL_WARP :
+ msg = "Warp failed...";
+ break;
+ case SKILL_STEAL :
+ msg = "Could not steal anything...";
+ break;
+ case SKILL_ENVENOM :
+ msg = "Poison had no effect...";
+ break;
+ }
+ }
+
+ return msg;
}
std::string const_msg(int own) {
- std::string msg;
- return msg;
+ std::string msg;
+ return msg;
}
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp
index b9dcf923..b20d2e1d 100644
--- a/src/gui/gui.cpp
+++ b/src/gui/gui.cpp
@@ -57,13 +57,13 @@ int (*gui__external_slider_callback)(void *, int);
int reroute_slider_proc(void *dp3, int d2);
// Guichan Allegro stuff
-gcn::AllegroInput* input; // Input driver
-gcn::AllegroGraphics* graphics; // Graphics driver
+gcn::AllegroInput* guiInput; // Input driver
+gcn::AllegroGraphics* guiGraphics; // Graphics driver
gcn::AllegroImageLoader* imageLoader; // For loading images
// Guichan stuff
gcn::Gui* gui; // A Gui object - binds it all together
-gcn::Container* guitop; // The top container
+gcn::Container* guiTop; // The top container
gcn::ImageFont* guiFont; // A font
@@ -74,19 +74,19 @@ void init_gui(BITMAP *bitmap, const char *skin) {
imageLoader = new gcn::AllegroImageLoader();
gcn::Image::setImageLoader(imageLoader);
- graphics = new gcn::AllegroGraphics();
- graphics->setTarget(bitmap);
+ guiGraphics = new gcn::AllegroGraphics();
+ guiGraphics->setTarget(bitmap);
- input = new gcn::AllegroInput();
+ guiInput = new gcn::AllegroInput();
- guitop = new gcn::Container();
- guitop->setDimension(gcn::Rectangle(0, 0, SCREEN_W, SCREEN_H));
- guitop->setOpaque(false);
+ guiTop = new gcn::Container();
+ guiTop->setDimension(gcn::Rectangle(0, 0, SCREEN_W, SCREEN_H));
+ guiTop->setOpaque(false);
gui = new gcn::Gui();
- gui->setGraphics(graphics);
- gui->setInput(input);
- gui->setTop(guitop);
+ gui->setGraphics(guiGraphics);
+ gui->setInput(guiInput);
+ gui->setTop(guiTop);
guiFont = new gcn::ImageFont("./data/graphic/fixedfont.bmp",
" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
gcn::Widget::setGlobalFont(guiFont);
@@ -102,14 +102,18 @@ void init_gui(BITMAP *bitmap, const char *skin) {
}
int gui_update(DIALOG_PLAYER *player) {
- int ret;
- gui->logic();
- gui->draw();
+ int ret = 0;
if (player) {
+ // Update Allegro dialog (to be replaced)
dialog_message(player->dialog, MSG_DRAW, 0, 0);
ret = update_dialog(player);
}
+ else {
+ // Update new GUI system using Guichan
+ gui->logic();
+ gui->draw();
+ }
// Draw the mouse
draw_sprite(gui_bitmap, mouse_sprite, mouse_x, mouse_y);
@@ -458,11 +462,11 @@ int gui_load_skin(const char* skinname) {
void gui_exit() {
delete guiFont;
- delete guitop;
+ delete guiTop;
delete gui;
- delete input;
- delete graphics;
+ delete guiInput;
+ delete guiGraphics;
delete imageLoader;
//alfont_destroy_font(gui_font);
diff --git a/src/gui/gui.h b/src/gui/gui.h
index a29d02b7..b3c989c2 100644
--- a/src/gui/gui.h
+++ b/src/gui/gui.h
@@ -103,7 +103,8 @@ extern LexSkin gui_skin;
extern BITMAP *gui_bitmap;
extern ALFONT_FONT *gui_font;
-extern gcn::Container* guitop; // The top container
+extern gcn::Container* guiTop; // The top container
+extern gcn::AllegroGraphics* guiGraphics; // Graphics driver
/* Definition of the callback function prototypes */
typedef int (*gui_buttonCallback)(int id);
diff --git a/src/gui/login.cpp b/src/gui/login.cpp
index 0fe39cef..c61b0e01 100644
--- a/src/gui/login.cpp
+++ b/src/gui/login.cpp
@@ -110,7 +110,7 @@ void login() {
dialog->add(okButton);
dialog->add(cancelButton);
- guitop->add(dialog);
+ guiTop->add(dialog);
if (get_config_int("login", "remember", 0)) {
if (get_config_string("login", "username", 0)) {
diff --git a/src/gui/login.h b/src/gui/login.h
index 9f8f49b6..8798ddea 100644
--- a/src/gui/login.h
+++ b/src/gui/login.h
@@ -36,8 +36,7 @@
#include "gui.h"
// The action listener for the login dialog
-class LoginActionListener : public gcn::ActionListener
-{
+class LoginActionListener : public gcn::ActionListener {
public:
void action(const std::string& eventId);
};