From f04d64869f3b1de54fb343f28f955584780001b8 Mon Sep 17 00:00:00 2001 From: mataes2007 Date: Sat, 26 Nov 2011 15:41:10 +0000 Subject: Project folders rename part 3 git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@215 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- IEView/ChatHTMLBuilder.cpp | 268 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 268 insertions(+) create mode 100644 IEView/ChatHTMLBuilder.cpp (limited to 'IEView/ChatHTMLBuilder.cpp') diff --git a/IEView/ChatHTMLBuilder.cpp b/IEView/ChatHTMLBuilder.cpp new file mode 100644 index 0000000..e7b0e43 --- /dev/null +++ b/IEView/ChatHTMLBuilder.cpp @@ -0,0 +1,268 @@ +/* + +IEView Plugin for Miranda IM +Copyright (C) 2005-2010 Piotr Piastucki + +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. + +*/ +#include "ChatHTMLBuilder.h" + +#include "Options.h" +#include "Utils.h" +#include "m_chat.h" + +#define CHATMOD "Chat" +#define CHATFONTMOD "ChatFonts" +#define CHAT_ICON_FLAGS "IconFlags" + +#define FONTF_BOLD 1 +#define FONTF_ITALIC 2 +#define FONTF_UNDERLINE 4 + +#define FONT_NUM 17 + +static const char *classNames[] = { + ".timestamp", ".nameIn", ".nameOut", ".userJoined", ".userLeft", ".userDisconnected", + ".userKicked", ".nickChange", ".notice", + ".messageIn", ".messageOut", ".topicChange", ".information", ".statusEnable", ".statusDisable", + ".action", ".highlight" +}; + +ChatHTMLBuilder::ChatHTMLBuilder() { + setLastEventType(-1); + setLastEventTime(time(NULL)); +} + +void ChatHTMLBuilder::loadMsgDlgFont(int i, LOGFONTA * lf, COLORREF * colour) { + char str[32]; + int style; + DBVARIANT dbv; + if (colour) { + wsprintfA(str, "Font%dCol", i); + *colour = DBGetContactSettingDword(NULL, CHATFONTMOD, str, 0x000000); + } + if (lf) { + wsprintfA(str, "Font%dSize", i); + lf->lfHeight = (char) DBGetContactSettingByte(NULL, CHATFONTMOD, str, 10); + lf->lfHeight = abs(lf->lfHeight); + lf->lfWidth = 0; + lf->lfEscapement = 0; + lf->lfOrientation = 0; + wsprintfA(str, "Font%dSty", i); + style = DBGetContactSettingByte(NULL, CHATFONTMOD, str, 0); + lf->lfWeight = style & FONTF_BOLD ? FW_BOLD : FW_NORMAL; + lf->lfItalic = style & FONTF_ITALIC ? 1 : 0; + lf->lfUnderline = style & FONTF_UNDERLINE ? 1 : 0; + lf->lfStrikeOut = 0; + wsprintfA(str, "Font%dSet", i); + lf->lfCharSet = DBGetContactSettingByte(NULL, CHATFONTMOD, str, DEFAULT_CHARSET); + lf->lfOutPrecision = OUT_DEFAULT_PRECIS; + lf->lfClipPrecision = CLIP_DEFAULT_PRECIS; + lf->lfQuality = DEFAULT_QUALITY; + lf->lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; + wsprintfA(str, "Font%d", i); + if (DBGetContactSetting(NULL, CHATFONTMOD, str, &dbv)) + lstrcpyA(lf->lfFaceName, "Verdana"); + else { + lstrcpynA(lf->lfFaceName, dbv.pszVal, sizeof(lf->lfFaceName)); + DBFreeVariant(&dbv); + } + } +} + +char *ChatHTMLBuilder::timestampToString(time_t time) +{ + static char szResult[512]; + static char str[80]; + char *pszStamp = "[%H:%M]"; + //InitSetting( &g_Settings.pszTimeStamp, "HeaderTime", _T("[%H:%M]")); + strftime(str, 79, pszStamp, localtime(&time)); + Utils::UTF8Encode(str, szResult, 500); + return szResult; +} + +void ChatHTMLBuilder::buildHead(IEView *view, IEVIEWEVENT *event) { + LOGFONTA lf; + COLORREF color; + char *output = NULL; + int outputSize; + ProtocolSettings *protoSettings = getChatProtocolSettings(event->pszProto); + if (protoSettings == NULL) { + return; + } + if (protoSettings->getChatMode() == Options::MODE_TEMPLATE) { +// buildHeadTemplate(view, event); + return; + } + if (protoSettings->getChatMode() == Options::MODE_CSS) { + const char *externalCSS = protoSettings->getChatCssFilename(); + Utils::appendText(&output, &outputSize, "\n", externalCSS); + } else { + HDC hdc = GetDC(NULL); + int logPixelSY = GetDeviceCaps(hdc, LOGPIXELSY); + ReleaseDC(NULL, hdc); + Utils::appendText(&output, &outputSize, ""); + Utils::appendText(&output, &outputSize, "\n"); + } + if (output != NULL) { + view->write(output); + free(output); + } + setLastEventType(-1); +} + +/* WORK IN PROGRESS: + * The following method is going to be completely rewritten soon. Do not modify or complain for the time being... + */ + +void ChatHTMLBuilder::appendEventNonTemplate(IEView *view, IEVIEWEVENT *event) { + + DWORD iconFlags = DBGetContactSettingDword(NULL, CHATMOD, CHAT_ICON_FLAGS, 0); + IEVIEWEVENTDATA* eventData = event->eventData; + for (int eventIdx = 0; eventData!=NULL && (eventIdx < event->count || event->count==-1); eventData = eventData->next, eventIdx++) { + //DWORD dwFlags = eventData->dwFlags; + const char *iconFile = ""; + DWORD dwData = eventData->dwData; + int isSent = eventData->bIsMe; + int outputSize = 0; + char *output = NULL; + char *szName = NULL, *szText = NULL; + const char *className = ""; + bool showIcon = false; + + if (eventData->dwFlags & IEEDF_UNICODE_TEXT) { + szText = encodeUTF8(NULL, event->pszProto, eventData->pszTextW, ENF_ALL | ENF_CHAT_FORMATTING, isSent); + } else { + szText = encodeUTF8(NULL, event->pszProto, (char *)eventData->pszText, ENF_ALL | ENF_CHAT_FORMATTING, isSent); + } + if (eventData->dwFlags & IEEDF_UNICODE_NICK) { + szName = encodeUTF8(NULL, event->pszProto, eventData->pszNickW, ENF_NAMESMILEYS, true); + } else { + szName = encodeUTF8(NULL, event->pszProto, (char *) eventData->pszNick, ENF_NAMESMILEYS, true); + } + if (eventData->iType == IEED_GC_EVENT_MESSAGE) { + iconFile = isSent ? "message_out_chat.gif" : "message_in_chat.gif"; + showIcon = iconFlags & (isSent ? GC_EVENT_MESSAGE : GC_EVENT_MESSAGE); + className = isSent ? "messageOut" : "messageIn"; + } else { + if (eventData->iType == IEED_GC_EVENT_ACTION) { + iconFile = "action.gif"; + className = "action"; + } else if (eventData->iType == IEED_GC_EVENT_JOIN) { + iconFile = "join.gif"; + className = "userJoined"; + } else if (eventData->iType == IEED_GC_EVENT_PART) { + iconFile = "part.gif"; + className = "userLeft"; + } else if (eventData->iType == IEED_GC_EVENT_QUIT) { + iconFile = "quit.gif"; + className = "userDisconnected"; + } else if (eventData->iType == IEED_GC_EVENT_NICK) { + iconFile = "nick.gif"; + className = "nickChange"; + } else if (eventData->iType == IEED_GC_EVENT_KICK) { + iconFile = "kick.gif"; + className = "userKicked"; + } else if (eventData->iType == IEED_GC_EVENT_NOTICE) { + iconFile = "notice.gif"; + className = "notice"; + } else if (eventData->iType == IEED_GC_EVENT_TOPIC) { + iconFile = "topic.gif"; + className = "topicChange"; + } else if (eventData->iType == IEED_GC_EVENT_ADDSTATUS) { + iconFile = "addstatus.gif"; + className = "statusEnable"; + } else if (eventData->iType == IEED_GC_EVENT_REMOVESTATUS) { + iconFile = "removestatus.gif"; + className = "statusDisable"; + } else if (eventData->iType == IEED_GC_EVENT_INFORMATION) { + iconFile = "info.gif"; + className = "information"; + } + } + Utils::appendText(&output, &outputSize, "
", isSent ? "divOut" : "divIn"); + if (dwData & IEEDD_GC_SHOW_ICON) { + Utils::appendIcon(&output, &outputSize, iconFile); + } + if (dwData & IEEDD_GC_SHOW_TIME) { + Utils::appendText(&output, &outputSize, "%s ", + isSent ? "timestamp" : "timestamp", timestampToString(eventData->time)); + } + if ((dwData & IEEDD_GC_SHOW_NICK) && eventData->iType == IEED_GC_EVENT_MESSAGE) { + Utils::appendText(&output, &outputSize, "%s: ", + isSent ? "nameOut" : "nameIn", szName); + } + if (dwData & IEEDD_GC_MSG_ON_NEW_LINE) { + Utils::appendText(&output, &outputSize, "
"); + } + Utils::appendText(&output, &outputSize, "", className); + Utils::appendText(&output, &outputSize, "%s", szText); + Utils::appendText(&output, &outputSize, "
\n"); + if (output != NULL) { + view->write(output); + free(output); + } + if (szName!=NULL) delete szName; + if (szText!=NULL) delete szText; + } +} + +void ChatHTMLBuilder::appendEvent(IEView *view, IEVIEWEVENT *event) { + ProtocolSettings *protoSettings = getChatProtocolSettings(event->pszProto); + if (protoSettings == NULL) { + return; + } +// if (protoSettings->getSRMMMode() == Options::MODE_TEMPLATE) { + // appendEventTemplate(view, event); +// } else { + appendEventNonTemplate(view, event); +// } +} + +bool ChatHTMLBuilder::isDbEventShown(DBEVENTINFO * dbei) { + return true; +} -- cgit v1.2.3