Chat-O-Matic/libs/libmsn/message.h

212 lines
6.3 KiB
C++

#ifndef __msn_message_h__
#define __msn_message_h__
/*
* message.h
* libmsn
*
* Created by Mark Rowe on Wed Mar 17 2004.
* Refactored by Tiago Salem Herrmann on 08/2007.
* Copyright (c) 2004 Mark Rowe. All rights reserved.
* Copyright (c) 2007 Tiago Salem Herrmann. All rights reserved
*
* 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
*/
#ifdef WIN32
#include <windows.h>
#endif
#include <string>
#include <map>
#include <vector>
#include <stdexcept>
#include "libmsn_export.h"
#ifdef _MSC_VER
#pragma warning( disable : 4290 )
#endif
namespace MSN
{
/** This class represents an MSN message
*
* It may or may not represent an @e instant @e message.
*
* @todo Complete read/write support for formatting messages.
*/
class LIBMSN_EXPORT Message
{
public:
enum FontEffects
{
BOLD_FONT = 1,
ITALIC_FONT = 2,
UNDERLINE_FONT = 4,
STRIKETHROUGH_FONT = 8
};
#ifdef WIN32
typedef int CharacterSet;
typedef int FontFamily;
typedef int FontPitch;
#else
enum CharacterSet
{
ANSI_CHARSET = 0x00,
DEFAULT_CHARSET = 0x01,
SYMBOL_CHARSET = 0x02,
MAC_CHARSET = 0x4d,
SHIFTJIS_CHARSET = 0x80,
HANGEUL_CHARSET = 0x81,
JOHAB_CHARSET = 0x82,
GB2312_CHARSET = 0x86,
CHINESEBIG5_CHARSET = 0x88,
GREEK_CHARSET = 0xa1,
TURKISH_CHARSET = 0xa2,
VIETNAMESE_CHARSET = 0xa3,
HEBREW_CHARSET = 0xb1,
ARABIC_CHARSET = 0xb2,
BALTIC_CHARSET = 0xba,
RUSSIAN_CHARSET_DEFAULT = 0xcc,
THAI_CHARSET = 0xde,
EASTEUROPE_CHARSET = 0xee,
OEM_DEFAULT = 0xff
};
enum FontFamily
{
FF_DONTCARE = 0,
FF_ROMAN = 1,
FF_SWISS = 2,
FF_MODERN = 3,
FF_SCRIPT = 4,
FF_DECORATIVE = 5
};
enum FontPitch
{
DEFAULT_PITCH = 0,
FIXED_PITCH = 1,
VARIABLE_PITCH = 2
};
#endif
class Headers
{
public:
Headers(const std::string & rawContents_) : rawContents(rawContents_) {};
Headers() : rawContents("") {};
std::string asString() const;
std::string operator[](const std::string header) const;
void setHeader(const std::string header, const std::string value);
private:
std::string rawContents;
};
private:
std::string body;
Message::Headers header;
public:
/** Create a message with the specified @a body and @a mimeHeader.
*/
Message(std::string body, std::string mimeHeader="MIME-Version: 1.0\r\nContent-Type: text/plain; charset=UTF-8\r\n\r\n");
/** Convert the Message into a string.
*
* This returns a string containing the MIME headers separated from the
* message body by a blank line.
*/
std::string asString() const;
/** Return the value of the MIME header named @a header.
*
* @return The value of the MIME header if present, or "" if not found.
*/
std::string operator[](const std::string header) const;
void setHeader(const std::string name, const std::string value) { header.setHeader(name, value); };
/** Return the body portion of this Message.
*/
std::string getBody() const { return body; };
/** Return the font name used in this Message.
*
* @return The font name used for this Message, or "" if none specified.
*/
std::string getFontName() const;
/** Set font name for use in this Message.
*/
void setFontName(const std::string & fontName);
/** Get the color used in this Message.
*/
std::vector<int> getColor() const;
std::string getColorAsHTMLString() const;
/** Set the color used in this Message.
*/
void setColor(std::vector<int> color);
void setColor(std::string color);
void setColor(int red, int green, int blue);
/** Return the font effects used in this Message.
*
* @return An integer that is a bitwise-or of Message::FontEffects members.
*/
int getFontEffects() const;
/** Set the font effects for use in this Message.
*
* @param fontEffects Bitwise-or of Message::FontEffects members.
*/
void setFontEffects(int fontEffects);
/** Return the character set that the font uses in this Message.
*/
CharacterSet getFontCharacterSet() const;
/** Set the character set that the font should use for this Message.
*/
void setFontCharacterSet(CharacterSet cs);
/** Return the font family used in this Message.
*/
FontFamily getFontFamily() const;
/** Return the font pitch used in this Message.
*/
FontPitch getFontPitch() const;
/** Set the font family and pitch to be used for this Message.
*/
void setFontFamilyAndPitch(Message::FontFamily fontFamily, Message::FontPitch fontPitch);
/** Is the Message to be right-aligned?
*/
bool isRightAligned() const;
private:
std::map<std::string, std::string> getFormatInfo() const throw (std::runtime_error);
void setFormatInfo(std::map<std::string, std::string> & info);
};
}
#endif