diff options
Diffstat (limited to 'src/gui/chat.h')
-rw-r--r-- | src/gui/chat.h | 229 |
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 |