summaryrefslogtreecommitdiff
path: root/noncore/net/opieirc/ircoutput.h
blob: 934dbda2519faf52970e94a113792d29873947db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
    OpieIRC - An embedded IRC client
    Copyright (C) 2002 Wenzel Jakob

    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
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

*/

#ifndef __IRCOUTPUT_H
#define __IRCOUTPUT_H

#include <qstring.h>
#include <qlist.h>
#include "ircchannel.h"

/* Types of possible IRC output */
enum IRCOutputType {
    OUTPUT_ERROR = -1,          /* parameters : none */
    OUTPUT_SERVERMESSAGE  = 0,   /* parameters : none */
    OUTPUT_CLIENTMESSAGE  = 1,   /* parameters : none */
    OUTPUT_CHANPRIVMSG    = 2,   /* parameters : channel (IRCChannel), person (IRCChannelPerson) */
    OUTPUT_QUERYPRIVMSG   = 3,   /* parameters : person (IRCPerson) */
    OUTPUT_NICKCHANGE     = 4,   /* parameters : person (IRCPerson) */
    OUTPUT_SELFJOIN       = 5,   /* parameters : channel (IRCChannel) */
    OUTPUT_OTHERJOIN      = 6,   /* parameters : channel (IRCChannel), person (IRCChannelPerson) */
    OUTPUT_SELFPART       = 7,   /* parameters : channel (IRCChannel) */
    OUTPUT_OTHERPART      = 8,   /* parameters : channel (IRCChannel), person (IRCChannelPerson) */
    OUTPUT_QUIT           = 9,   /* parameters : person (IRCPerson) */
    OUTPUT_CONNCLOSE      = 10,  /* parameters : none */
    OUTPUT_CTCP           = 11,  /* parameters : none */
    OUTPUT_SELFKICK       = 12,  /* parameters : channel (IRCChannel) */
    OUTPUT_OTHERKICK      = 13,  /* parameters : channel (IRCChannel) person (IRCChannelPerson) */
    OUTPUT_CHANACTION     = 14,  /* parameters : channel (IRCChannel) person (IRCChannelPerson) */
    OUTPUT_QUERYACTION    = 15,  /* parameters : person (IRCPerson) */
    OUTPUT_CHANPERSONMODE = 16,  /* parameters : channel (IRCCHannel) person (IRCChannelPerson) */
    OUTPUT_TOPIC          = 17,  /* parameters : channel (IRCChannel) */
    OUTPUT_TITLE          = 18   /* parameters : channel (IRCChannel) */
};

typedef struct IRCOutputEscapeSecuences {
    char escape;
    char *open;
    char *close;
};

/* The IRCOutput class is used as a kind of message which is sent by the
   IRC parser to inform the GUI of changes. This could for example be a 
   channel message or a nickname change */

class IRCOutput {
public:
    IRCOutput(IRCOutputType type = OUTPUT_SERVERMESSAGE, QString message = QString::null);
    /* Used to add a parameter to this IRCOutput. Parameters are dependent
       on which IRCOutputType we are using (see above) */
    void addParam(void *data);
    
    IRCOutputType type();
    QString message();
    /* Return the message with all HTML code escaped (for example &lt; instead of '<') */
    QString htmlMessage();
    
    void setType(IRCOutputType);
    void setMessage(const QString &message);
    
    static QString toHTML(const QString &message);
    void *getParam(int index);
protected:
    IRCOutputType      m_type;
    QString            m_message;
    QList<void>        m_parameters;
    static IRCOutputEscapeSecuences m_escapeSecuences[];
};

#endif