summaryrefslogtreecommitdiff
path: root/src/gui/chat.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/chat.h')
-rw-r--r--src/gui/chat.h229
1 files changed, 103 insertions, 126 deletions
diff --git a/src/gui/chat.h b/src/gui/chat.h
index 8b710dc8..7c080960 100644
--- a/src/gui/chat.h
+++ b/src/gui/chat.h
@@ -1,9 +1,8 @@
/*
- * Aethyra
+ * The Mana World
* Copyright (C) 2004 The Mana World Development Team
*
- * This file is part of Aethyra based on original code
- * from The Mana World.
+ * This file is part of The Mana World.
*
* 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
@@ -25,29 +24,28 @@
#include <list>
#include <string>
+#include <map>
#include <guichan/actionlistener.hpp>
#include <guichan/keylistener.hpp>
+#include <guichan/widget.hpp>
+#include <guichan/widgetlistener.hpp>
+
+#include "widgets/chattab.h"
#include "window.h"
class BrowserBox;
-class Network;
+class Channel;
+class ChatTab;
class Recorder;
-class Party;
class ScrollArea;
+class TabbedArea;
class ItemLinkHandler;
-
-#define BY_GM 0 // those should be self-explanatory =)
-#define BY_PLAYER 1
-#define BY_OTHER 2
-#define BY_SERVER 3
-#define BY_PARTY 4
-
-#define ACT_WHISPER 5 // getting whispered at
-#define ACT_IS 6 // equivalent to "/me" on IRC
-
-#define BY_LOGGER 7
+#ifdef EATHENA_SUPPORT
+class Network;
+#endif
+class WhisperTab;
/**
* gets in between usernick and message text depending on
@@ -57,47 +55,14 @@ class ItemLinkHandler;
#define CAT_IS ""
#define CAT_WHISPER " whispers: "
-/** job dependend identifiers (?) */
-#define SKILL_BASIC 0x0001
-#define SKILL_WARP 0x001b
-#define SKILL_STEAL 0x0032
-#define SKILL_ENVENOM 0x0034
-
-/** basic skills identifiers */
-#define BSKILL_TRADE 0x0000
-#define BSKILL_EMOTE 0x0001
-#define BSKILL_SIT 0x0002
-#define BSKILL_CREATECHAT 0x0003
-#define BSKILL_JOINPARTY 0x0004
-#define BSKILL_SHOUT 0x0005
-#define BSKILL_PK 0x0006 // ??
-#define BSKILL_SETALLIGN 0x0007 // ??
-
-/** reasons why action failed */
-#define RFAIL_SKILLDEP 0x00
-#define RFAIL_INSUFHP 0x01
-#define RFAIL_INSUFSP 0x02
-#define RFAIL_NOMEMO 0x03
-#define RFAIL_SKILLDELAY 0x04
-#define RFAIL_ZENY 0x05
-#define RFAIL_WEAPON 0x06
-#define RFAIL_REDGEM 0x07
-#define RFAIL_BLUEGEM 0x08
-#define RFAIL_OVERWEIGHT 0x09
-#define RFAIL_GENERIC 0x0a
-
-/** should always be zero if failed */
-#define SKILL_FAILED 0x00
-
#define DEFAULT_CHAT_WINDOW_SCROLL 7 // 1 means `1/8th of the window size'.
-struct CHATSKILL
+/** One item in the chat log */
+struct CHATLOG
{
- short skill;
- short bskill;
- short unused;
- char success;
- char reason;
+ std::string nick;
+ std::string text;
+ int own;
};
/**
@@ -105,14 +70,19 @@ struct CHATSKILL
*
* \ingroup Interface
*/
-class ChatWindow : public Window, public gcn::ActionListener,
+class ChatWindow : public Window,
+ public gcn::ActionListener,
public gcn::KeyListener
{
public:
/**
* Constructor.
*/
+#ifdef TMWSERV_SUPPORT
+ ChatWindow();
+#else
ChatWindow(Network *network);
+#endif
/**
* Destructor: used to write back values to the config file
@@ -120,23 +90,33 @@ class ChatWindow : public Window, public gcn::ActionListener,
~ChatWindow();
/**
+ * Called when the widget changes size. Used for adapting the size of
+ * the tabbed area.
+ */
+ void widgetResized(const gcn::Event &event);
+
+ void logic();
+
+ /**
* Reset the chat window and recorder window attached to it to their
* default positions.
*/
void resetToDefaultSize();
/**
- * Adds a line of text to our message list. Parameters:
- *
- * @param line Text message.
- * @parem own Type of message (usually the owner-type).
+ * Gets the focused tab.
*/
- void chatLog(std::string line, int own, bool ignoreRecord = false);
+ ChatTab* getFocused() const;
/**
- * Calls original chat_log() after processing the packet.
+ * Clear the given tab.
*/
- void chatLog(CHATSKILL);
+ void clearTab(ChatTab* tab);
+
+ /**
+ * Clear the current tab.
+ */
+ void clearTab();
/**
* Performs action.
@@ -145,8 +125,11 @@ class ChatWindow : public Window, public gcn::ActionListener,
/**
* Request focus for typing chat message.
+ *
+ * \returns true if the input was shown
+ * false otherwise
*/
- void requestChatFocus();
+ bool requestChatFocus();
/**
* Checks whether ChatWindow is Focused or not.
@@ -154,30 +137,12 @@ class ChatWindow : public Window, public gcn::ActionListener,
bool isInputFocused();
/**
- * Determines whether to send a command or an ordinary message, then
- * contructs packets & sends them.
- *
- * @param nick The character's name to display in front.
- * @param msg The message text which is to be send.
+ * Passes the text to the current tab as input
*
- * 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 with "@" is not a command that needs
- * to be parsed rather is sent using the normal chat-packet.
+ * @param msg The message text which is to be sent.
*
- * 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!");
*/
- void chatSend(const std::string &nick, std::string msg);
+ void chatSend(std::string &msg);
/** Called when key is pressed */
void keyPressed(gcn::KeyEvent &event);
@@ -191,65 +156,77 @@ class ChatWindow : public Window, public gcn::ActionListener,
/** Override to reset mTmpVisible */
void setVisible(bool visible);
- /**
- * Scrolls the chat window
- *
- * @param amount direction and amount to scroll. Negative numbers scroll
- * up, positive numbers scroll down. The absolute amount indicates the
- * amount of 1/8ths of chat window real estate that should be scrolled.
- */
- void scroll(int amount);
-
/**
- * party implements the partying chat commands
+ * Scrolls the chat window
*
- * @param command is the party command to perform
- * @param msg is the remainder of the message
+ * @param amount direction and amount to scroll. Negative numbers scroll
+ * up, positive numbers scroll down. The absolute amount indicates the
+ * amount of 1/8ths of chat window real estate that should be scrolled.
*/
- void party(const std::string &command, const std::string &msg);
+ void scroll(int amount);
+
+#ifdef EATHENA_SUPPORT
+ char getPartyPrefix() const { return mPartyPrefix; }
+ void setPartyPrefix(char prefix) { mPartyPrefix = prefix; }
+#endif
/**
- * help implements the /help command
+ * Sets the file being recorded to
*
- * @param msg1 is the command that the player needs help on
- * @param msg2 is the sub-command relating to the command
+ * @param msg The file to write out to. If null, then stop recording.
*/
- void help(const std::string &msg1, const std::string &msg2);
+ void setRecordingFile(const std::string &msg);
- private:
+ bool getReturnTogglesChat() const { return mReturnToggles; }
+ void setReturnTogglesChat(bool toggles) { mReturnToggles = toggles; }
+
+ void doPresent();
+
+ void whisper(std::string nick, std::string mes, bool own = false);
+
+ protected:
+ friend class ChatTab;
+ friend class WhisperTab;
+ /** Remove the given tab from the window */
+ void removeTab(ChatTab *tab);
+
+ /** Add the tab to the window */
+ void addTab(ChatTab *tab);
+
+ void adjustTabSize();
+
+#ifdef EATHENA_SUPPORT
Network *mNetwork;
- bool mTmpVisible;
+ char mPartyPrefix; /**< Messages beginning with the prefix are sent to
+ the party */
+#endif
+ /** Used for showing item popup on clicking links **/
+ ItemLinkHandler *mItemLinkHandler;
+ Recorder *mRecorder;
- void whisper(const std::string &nick, std::string msg);
+ /** Input box for typing chat messages. */
+ gcn::TextField *mChatInput;
- /** One item in the chat log */
- struct CHATLOG
- {
- std::string nick;
- std::string text;
- int own;
- };
+ private:
+ bool mTmpVisible;
- /** Constructs failed messages for actions */
- std::string const_msg(CHATSKILL);
+ /** Tabbed area for holding each channel. */
+ TabbedArea *mChatTabs;
+ Tab *mCurrentTab;
+
+ typedef std::map<const std::string, ChatTab*> TabMap;
+ /** Manage whisper tabs */
+ TabMap mWhispers;
- gcn::TextField *mChatInput; /**< Input box for typing chat messages */
- BrowserBox *mTextOutput; /**< Text box for displaying chat history */
- ScrollArea *mScrollArea; /**< Scroll area around text output */
- ItemLinkHandler *mItemLinkHandler; /** Used for showing item popup on
- clicking links **/
typedef std::list<std::string> History;
typedef History::iterator HistoryIterator;
- History mHistory; /**< Command history */
- HistoryIterator mCurHist; /**< History iterator */
- Recorder *mRecorder; /**< Recording class */
- char mPartyPrefix; /**< Messages beginning with the prefix are
- sent to the party */
- bool mReturnToggles; /**< Marks whether <Return> toggles the chat
- log or not */
- Party *mParty;
+ History mHistory; /**< Command history. */
+ HistoryIterator mCurHist; /**< History iterator. */
+ bool mReturnToggles; /**< Marks whether <Return> toggles the chat log
+ or not */
};
+
extern ChatWindow *chatWindow;
#endif