summaryrefslogtreecommitdiff
path: root/plugins/Scriver/src/chat
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2014-01-16 08:37:51 +0000
committerGeorge Hazan <george.hazan@gmail.com>2014-01-16 08:37:51 +0000
commit38ab4dde6b080defc5e7d7b286110d580cabdaa0 (patch)
tree4890eaba00645f597e91a888277d461ba3d923c0 /plugins/Scriver/src/chat
parent2f30799b091475f1086b756bba4b43ebacd3aefc (diff)
kernel chat engine, part 2 - scriver
git-svn-id: http://svn.miranda-ng.org/main/trunk@7676 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/Scriver/src/chat')
-rw-r--r--plugins/Scriver/src/chat/chat.h358
-rw-r--r--plugins/Scriver/src/chat/clist.cpp289
-rw-r--r--plugins/Scriver/src/chat/colorchooser.cpp79
-rw-r--r--plugins/Scriver/src/chat/log.cpp956
-rw-r--r--plugins/Scriver/src/chat/main.cpp152
-rw-r--r--plugins/Scriver/src/chat/manager.cpp1349
-rw-r--r--plugins/Scriver/src/chat/message.cpp179
-rw-r--r--plugins/Scriver/src/chat/options.cpp149
-rw-r--r--plugins/Scriver/src/chat/services.cpp520
-rw-r--r--plugins/Scriver/src/chat/tools.cpp665
-rw-r--r--plugins/Scriver/src/chat/window.cpp85
11 files changed, 439 insertions, 4342 deletions
diff --git a/plugins/Scriver/src/chat/chat.h b/plugins/Scriver/src/chat/chat.h
index 7f26cb3437..9e2d97cc98 100644
--- a/plugins/Scriver/src/chat/chat.h
+++ b/plugins/Scriver/src/chat/chat.h
@@ -23,7 +23,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define _CHAT_H_
#include <m_protomod.h>
-#include <m_chat.h>
+#include <m_chat_int.h>
+
+#define EM_ACTIVATE (WM_USER+202)
+
+#define TIMERID_MSGSEND 1
+#define TIMERID_TYPE 2
+#define TIMERID_UNREAD 3
+#define TIMEOUT_TYPEOFF 10000 // send type off after 10 seconds of inactivity
+#define TIMEOUT_UNREAD 800 // multiple-send bombproofing: send max 3 messages every 4 seconds
#ifndef TVM_GETITEMSTATE
#define TVM_GETITEMSTATE (TV_FIRST + 39)
@@ -38,249 +46,30 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define CFM_BACKCOLOR 0x04000000
#endif
-//defines
-#define OPTIONS_FONTCOUNT 17
-#define GC_SPLITTERMOVED (WM_USER+101)
-#define GC_CLOSEWINDOW (WM_USER+103)
-#define GC_GETITEMDATA (WM_USER+104)
-#define GC_SETITEMDATA (WM_USER+105)
-#define GC_SETVISIBILITY (WM_USER+107)
-#define GC_SETWNDPROPS (WM_USER+108)
-#define GC_REDRAWLOG (WM_USER+109)
-#define GC_FIREHOOK (WM_USER+110)
-#define GC_FILTERFIX (WM_USER+111)
-#define GC_CHANGEFILTERFLAG (WM_USER+112)
-#define GC_SHOWFILTERMENU (WM_USER+113)
-#define GC_SETWINDOWPOS (WM_USER+114)
-//#define GC_NICKLISTCLEAR (WM_USER+117)
-#define GC_REDRAWWINDOW (WM_USER+118)
-#define GC_SHOWCOLORCHOOSER (WM_USER+119)
-#define GC_ADDLOG (WM_USER+120)
-#define GC_ACKMESSAGE (WM_USER+121)
-//#define GC_ADDUSER (WM_USER+122)
-//#define GC_REMOVEUSER (WM_USER+123)
-//#define GC_NICKCHANGE (WM_USER+124)
-#define GC_UPDATENICKLIST (WM_USER+125)
-//#define GC_MODECHANGE (WM_USER+126)
-#define GC_TABCHANGE (WM_USER+127)
-#define GC_SCROLLTOBOTTOM (WM_USER+129)
-#define GC_FIXTABICONS (WM_USER+132)
-#define GC_SETTABHIGHLIGHT (WM_USER+138)
-#define GC_SETMESSAGEHIGHLIGHT (WM_USER+139)
-#define GC_REDRAWLOG2 (WM_USER+140)
-#define GC_REDRAWLOG3 (WM_USER+141)
-
-//#define EM_SUBCLASSED (WM_USER+200)
-//#define EM_UNSUBCLASSED (WM_USER+201)
-#define EM_ACTIVATE (WM_USER+202)
-
-#define GCW_TABROOM 10
-#define GCW_TABPRIVMSG 11
-
-#define GC_EVENT_HIGHLIGHT 0x1000
-#define STATE_TALK 0x0001
-
-
-// special service for tweaking performance
-#define MS_GC_GETEVENTPTR "GChat/GetNewEventPtr"
-typedef INT_PTR (*GETEVENTFUNC)(WPARAM wParam, LPARAM lParam);
-typedef struct {
- GETEVENTFUNC pfnAddEvent;
-}GCPTRS;
-
//structs
-typedef struct MODULE_INFO_TYPE
-{
- char* pszModule;
- TCHAR* ptszModDispName;
- BOOL bBold;
- BOOL bUnderline;
- BOOL bItalics;
- BOOL bColor;
- BOOL bBkgColor;
- BOOL bFontSize;
- BOOL bChanMgr;
- BOOL bAckMsg;
- BOOL bSingleFormat;
- int nColorCount;
- COLORREF* crColors;
- HICON hOnlineIcon;
- HICON hOfflineIcon;
- HICON hOnlineIconBig;
- HICON hOfflineIconBig;
- HICON hOnlineTalkIcon;
- HICON hOfflineTalkIcon;
- int iMaxText;
- struct MODULE_INFO_TYPE *next;
-}
- MODULEINFO;
-
-typedef struct COMMAND_INFO_TYPE
-{
- char* lpCommand;
- struct COMMAND_INFO_TYPE *prev, *next;
-}
- COMMAND_INFO;
-
-typedef struct
-{
- LOGFONT lf;
- COLORREF color;
-}
- FONTINFO;
-
-typedef struct LOG_INFO_TYPE
-{
- TCHAR* ptszText;
- TCHAR* ptszNick;
- TCHAR* ptszUID;
- TCHAR* ptszStatus;
- TCHAR* ptszUserInfo;
- BOOL bIsMe;
- BOOL bIsHighlighted;
- time_t time;
- int iType;
- struct LOG_INFO_TYPE *next;
- struct LOG_INFO_TYPE *prev;
-}
- LOGINFO;
-
-typedef struct STATUSINFO_TYPE
-{
- TCHAR* pszGroup;
- HICON hIcon;
- WORD Status;
- struct STATUSINFO_TYPE *next;
-}
- STATUSINFO;
-
-typedef struct USERINFO_TYPE
+struct MODULEINFO : public GCModuleInfoBase
{
- TCHAR* pszNick;
- TCHAR* pszUID;
- WORD Status;
- int iStatusEx;
- WORD ContactStatus;
- struct USERINFO_TYPE *next;
-}
- USERINFO;
+ HICON hOnlineIconBig;
+ HICON hOfflineIconBig;
+};
-typedef struct TABLIST_TYPE
+struct LOGSTREAMDATA : public GCLogStreamDataBase
{
- TCHAR* pszID;
- char* pszModule;
- struct TABLIST_TYPE *next;
-}
- TABLIST;
+ BOOL isFirst;
+};
-typedef struct SESSION_INFO_TYPE
+struct SESSION_INFO : public GCSessionInfoBase
{
- HWND hWnd;
+ char* pszHeader;
+ TCHAR szSearch[255];
+ int desiredInputAreaHeight;
- BOOL bFGSet;
- BOOL bBGSet;
- BOOL bFilterEnabled;
- BOOL bNicklistEnabled;
- BOOL bInitDone;
-
- char* pszModule;
- char* pszHeader;
- TCHAR* ptszID;
- TCHAR* ptszName;
- TCHAR* ptszStatusbarText;
- TCHAR* ptszTopic;
-
- char* pszID; // ugly fix for returning static ANSI strings in GC_INFO
- char* pszName; // just to fix a bug quickly, should die after porting IRC to Unicode
-
- int iType;
- int iFG;
- int iBG;
- int iSplitterY;
- int desiredInputAreaHeight;
- int iSplitterX;
- int iLogFilterFlags;
- int nUsersInNicklist;
- int iEventCount;
- int iStatusCount;
-
- WORD wStatus;
- WORD wState;
- WORD wCommandsNum;
- DWORD dwItemData;
- DWORD dwFlags;
- time_t LastTime;
CommonWindowData windowData;
- LOGINFO* pLog;
- LOGINFO* pLogEnd;
- USERINFO* pUsers;
- USERINFO* pMe;
- STATUSINFO* pStatuses;
- TCHAR szSearch[255];
-
- struct SESSION_INFO_TYPE *next;
-
-}SESSION_INFO;
-
-typedef struct
-{
- char* buffer;
- int bufferOffset, bufferLen;
- HWND hwnd;
- LOGINFO* lin;
- BOOL bStripFormat;
- BOOL bRedraw;
- BOOL isFirst;
- SESSION_INFO *si;
-}
- LOGSTREAMDATA;
-
-struct GlobalLogSettings_t {
- BOOL ShowTime;
- BOOL ShowTimeIfChanged;
- BOOL LoggingEnabled;
- BOOL FlashWindow;
- BOOL HighlightEnabled;
- BOOL LogIndentEnabled;
- BOOL StripFormat;
- BOOL SoundsFocus;
- BOOL PopupInactiveOnly;
- BOOL TrayIconInactiveOnly;
- BOOL AddColonToAutoComplete;
- BOOL LogLimitNames;
- BOOL TimeStampEventColour;
- DWORD dwIconFlags;
- DWORD dwTrayIconFlags;
- DWORD dwPopupFlags;
- int LogTextIndent;
- int LoggingLimit;
- int iEventLimit;
- int iPopupStyle;
- int iPopupTimeout;
- int iSplitterX;
- int iSplitterY;
- TCHAR* pszTimeStamp;
- TCHAR* pszTimeStampLog;
- TCHAR* pszIncomingNick;
- TCHAR* pszOutgoingNick;
- TCHAR* pszHighlightWords;
- TCHAR* pszLogDir;
- HFONT UserListFont;
- HFONT UserListHeadingsFont;
- HFONT MessageBoxFont;
- HFONT NameFont;
- COLORREF crLogBackground;
- COLORREF crUserListColor;
- COLORREF crUserListBGColor;
- COLORREF crUserListSelectedBGColor;
- COLORREF crUserListHeadingsColor;
- COLORREF crPUTextColour;
- COLORREF crPUBkgColour;
- BOOL ShowContactStatus;
- BOOL ContactStatusFirst;
};
-extern struct GlobalLogSettings_t g_Settings;
+
+struct GlobalLogSettings : public GlobalLogSettingsBase {};
+extern GlobalLogSettings g_Settings;
typedef struct{
MODULEINFO* pModule;
@@ -294,7 +83,6 @@ typedef struct{
//main.c
void LoadIcons(void);
-void FreeIcons(void);
void UpgradeCheck(void);
//colorchooser.c
@@ -315,114 +103,22 @@ int GetTextPixelSize( TCHAR* pszText, HFONT hFont, BOOL bWidth);
//options.c
int OptionsInit(void);
int OptionsUnInit(void);
-void LoadGlobalSettings(void);
-void LoadLogFonts(void);
-void SetIndentSize();
-//services.c
-void HookEvents(void);
-void UnhookEvents(void);
-void CreateServiceFunctions(void);
-void DestroyServiceFunctions(void);
-void DestroyHookableEvents(void);
-void CreateHookableEvents(void);
-int Chat_ModulesLoaded(WPARAM wParam,LPARAM lParam);
-int Chat_FontsChanged(WPARAM wParam,LPARAM lParam);
-int Chat_SmileyOptionsChanged(WPARAM wParam,LPARAM lParam);
-int Chat_PreShutdown(WPARAM wParam,LPARAM lParam);
-int Chat_IconsChanged(WPARAM wParam,LPARAM lParam);
+// services.c
void ShowRoom(SESSION_INFO *si, WPARAM wp, BOOL bSetForeground);
-//manager.c
-void SetActiveSession(const TCHAR *pszID, const char* pszModule);
-void SetActiveSessionEx(SESSION_INFO *si);
-SESSION_INFO* GetActiveSession(void);
-SESSION_INFO* SM_AddSession(const TCHAR *pszID, const char* pszModule);
-int SM_RemoveSession(const TCHAR *pszID, const char* pszModule, BOOL removeContact);
-SESSION_INFO* SM_FindSession(const TCHAR *pszID, const char* pszModule);
+// manager.c
HWND SM_FindWindowByContact(HANDLE hContact);
-USERINFO* SM_AddUser(SESSION_INFO *si, const TCHAR* pszUID, const TCHAR* pszNick, WORD wStatus);
-BOOL SM_ChangeUID(const TCHAR *pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszNewUID);
-BOOL SM_ChangeNick(const TCHAR *pszID, const char* pszModule, GCEVENT *gce);
-BOOL SM_RemoveUser(const TCHAR *pszID, const char* pszModule, const TCHAR* pszUID);
-BOOL SM_SetOffline(const TCHAR *pszID, const char* pszModule);
-HICON SM_GetStatusIcon(SESSION_INFO *si, USERINFO *ui);
-BOOL SM_SetStatus(const TCHAR *pszID, const char* pszModule, int wStatus);
-BOOL SM_SetStatusEx(const TCHAR *pszID, const char* pszModule, const TCHAR* pszText, int flags );
-BOOL SM_SendUserMessage(const TCHAR *pszID, const char* pszModule, const TCHAR* pszText);
-STATUSINFO* SM_AddStatus(const TCHAR *pszID, const char* pszModule, const TCHAR* pszStatus);
-BOOL SM_AddEventToAllMatchingUID(GCEVENT *gce);
-BOOL SM_AddEvent(const TCHAR *pszID, const char* pszModule, GCEVENT *gce, BOOL bIsHighlighted);
-LRESULT SM_SendMessage(const TCHAR *pszID, const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam);
-BOOL SM_PostMessage(const TCHAR *pszID, const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam);
-BOOL SM_BroadcastMessage(const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam, BOOL bAsync);
-BOOL SM_RemoveAll (void);
-BOOL SM_GiveStatus(const TCHAR *pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszStatus);
-BOOL SM_SetContactStatus(const TCHAR *pszID, const char* pszModule, const TCHAR* pszUID, WORD pszStatus);
-BOOL SM_TakeStatus(const TCHAR *pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszStatus);
-BOOL SM_MoveUser(const TCHAR *pszID, const char* pszModule, const TCHAR* pszUID);
-int SM_GetCount(const char* pszModule);
-SESSION_INFO* SM_FindSessionByIndex(const char* pszModule, int iItem);
-char* SM_GetUsers(SESSION_INFO *si);
-USERINFO* SM_GetUserFromIndex(const TCHAR *pszID, const char* pszModule, int index);
-char SM_GetStatusIndicator(SESSION_INFO *si, USERINFO *ui);
SESSION_INFO* SM_FindSessionAutoComplete(const char* pszModule, SESSION_INFO* currSession, SESSION_INFO* prevSession, const TCHAR* pszOriginal, const TCHAR* pszCurrent);
-MODULEINFO* MM_AddModule(const char* pszModule);
-MODULEINFO* MM_FindModule(const char* pszModule);
-void MM_FixColors();
-void MM_FontsChanged(void);
-void MM_IconsChanged(void);
-BOOL MM_RemoveAll (void);
-BOOL TabM_AddTab(const TCHAR *pszID, const char* pszModule);
-BOOL TabM_RemoveAll (void);
-STATUSINFO* TM_AddStatus(STATUSINFO** ppStatusList, const TCHAR* pszStatus, int* iCount);
-STATUSINFO* TM_FindStatus(STATUSINFO* pStatusList, const TCHAR* pszStatus);
-WORD TM_StringToWord(STATUSINFO* pStatusList, const TCHAR* pszStatus);
-TCHAR* TM_WordToString(STATUSINFO* pStatusList, WORD Status);
-BOOL TM_RemoveAll (STATUSINFO** pStatusList);
-BOOL UM_SetStatusEx(USERINFO* pUserList,const TCHAR* pszText, int onlyMe );
-USERINFO* UM_AddUser(STATUSINFO* pStatusList, USERINFO** pUserList, const TCHAR* pszUID, const TCHAR* pszNick, WORD wStatus);
-USERINFO* UM_SortUser(USERINFO** ppUserList, const TCHAR* pszUID);
-USERINFO* UM_FindUser(USERINFO* pUserList, const TCHAR* pszUID);
-USERINFO* UM_FindUserFromIndex(USERINFO* pUserList, int index);
-USERINFO* UM_GiveStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status);
-USERINFO* UM_SetContactStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status);
-USERINFO* UM_TakeStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status);
-TCHAR* UM_FindUserAutoComplete(USERINFO* pUserList, const TCHAR* pszOriginal, const TCHAR* pszCurrent);
-BOOL UM_RemoveUser(USERINFO** pUserList, const TCHAR* pszUID);
-BOOL UM_RemoveAll (USERINFO** ppUserList);
-LOGINFO* LM_AddEvent(LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd);
-BOOL LM_TrimLog(LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd, int iCount);
-BOOL LM_RemoveAll (LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd);
-
-//clist.c
-HANDLE CList_AddRoom(const char* pszModule, const TCHAR* pszRoom, const TCHAR* pszDisplayName, int iType);
-BOOL CList_SetOffline(HANDLE hContact, BOOL bHide);
-BOOL CList_SetAllOffline(BOOL bHide, const char *pszModule);
-int CList_RoomDoubleclicked(WPARAM wParam,LPARAM lParam);
-int CList_EventDoubleclicked(WPARAM wParam,LPARAM lParam);
-INT_PTR CList_EventDoubleclickedSvc(WPARAM wParam,LPARAM lParam);
-INT_PTR CList_JoinChat(WPARAM wParam, LPARAM lParam);
-INT_PTR CList_LeaveChat(WPARAM wParam, LPARAM lParam);
-INT_PTR CList_PrebuildContactMenuSvc(WPARAM wParam, LPARAM lParam);
-int CList_PrebuildContactMenu(WPARAM wParam, LPARAM lParam);
-BOOL CList_AddEvent(HANDLE hContact, HICON Icon, HANDLE event, int type, TCHAR* fmt, ... ) ;
-HANDLE CList_FindRoom (const char* pszModule, const TCHAR* pszRoom) ;
-int WCCmp(TCHAR* wild, TCHAR*string);
+char SM_GetStatusIndicator(SESSION_INFO *si, USERINFO *ui);
-//tools.c
-TCHAR* RemoveFormatting(const TCHAR* pszText);
+// tools.c
BOOL DoSoundsFlashPopupTrayStuff(SESSION_INFO *si, GCEVENT *gce, BOOL bHighlight, int bManyFix);
int GetColorIndex(const char* pszModule, COLORREF cr);
-void CheckColorsInModule(const char* pszModule);
TCHAR* my_strstri(const TCHAR* s1, const TCHAR* s2) ;
-BOOL IsHighlighted(SESSION_INFO *si, const TCHAR* pszText);
UINT CreateGCMenu(HWND hwndDlg, HMENU *hMenu, int iIndex, POINT pt, SESSION_INFO *si, TCHAR* pszUID, TCHAR* pszWordText);
void DestroyGCMenu(HMENU *hMenu, int iIndex);
BOOL DoEventHookAsync(HWND hwnd, const TCHAR *pszID, const char* pszModule, int iType, TCHAR* pszUID, TCHAR* pszText, DWORD dwItem);
-BOOL DoEventHook(const TCHAR *pszID, const char* pszModule, int iType, const TCHAR* pszUID, const TCHAR* pszText, DWORD dwItem);
-BOOL IsEventSupported(int eventType);
-BOOL LogToFile(SESSION_INFO *si, GCEVENT *gce);
// message.c
TCHAR* DoRtfToTags( char* pszRtfText, SESSION_INFO *si);
diff --git a/plugins/Scriver/src/chat/clist.cpp b/plugins/Scriver/src/chat/clist.cpp
deleted file mode 100644
index 25ea62df58..0000000000
--- a/plugins/Scriver/src/chat/clist.cpp
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
-Chat module plugin for Miranda IM
-
-Copyright (C) 2003 Jörgen Persson
-Copyright 2003-2009 Miranda ICQ/IM project,
-
-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 "../commonheaders.h"
-
-extern HGENMENU hJoinMenuItem, hLeaveMenuItem;
-
-HANDLE CList_AddRoom(const char* pszModule, const TCHAR* pszRoom, const TCHAR* pszDisplayName, int iType)
-{
- HANDLE hContact = CList_FindRoom(pszModule, pszRoom);
- DBVARIANT dbv;
- TCHAR pszGroup[50];
-
- *pszGroup = '\0';
- if ( !db_get_ts(NULL, "Chat", "AddToGroup", &dbv)) {
- if ( lstrlen(dbv.ptszVal) > 0 )
- lstrcpyn( pszGroup, dbv.ptszVal, 50);
- db_free(&dbv);
- }
- else lstrcpyn( pszGroup, _T("Chat rooms"), 50);
-
- if (pszGroup[0])
- Clist_CreateGroup(0, pszGroup);
-
- if (hContact) { //contact exist, make sure it is in the right group
- if (pszGroup[0]) {
- ptrT grpName( db_get_tsa(hContact, "CList", "Group"));
- if ( !lstrcmp(pszGroup, grpName))
- db_set_ts(hContact, "CList", "Group", pszGroup);
- }
-
- db_set_w(hContact, pszModule, "Status", ID_STATUS_OFFLINE);
- db_set_ts(hContact, pszModule, "Nick", pszDisplayName );
- return hContact;
- }
-
- // here we create a new one since no one is to be found
- if ((hContact = (HANDLE)CallService(MS_DB_CONTACT_ADD, 0, 0)) == NULL)
- return NULL;
-
- CallService(MS_PROTO_ADDTOCONTACT, (WPARAM) hContact, (LPARAM)pszModule);
- if ( lstrlen( pszGroup ) > 0 )
- db_set_ts(hContact, "CList", "Group", pszGroup);
- else
- db_unset(hContact, "CList", "Group");
- db_set_ts( hContact, pszModule, "Nick", pszDisplayName);
- db_set_ts( hContact, pszModule, "ChatRoomID", pszRoom);
- db_set_b(hContact, pszModule, "ChatRoom", (BYTE)iType);
- db_set_w(hContact, pszModule, "Status", ID_STATUS_OFFLINE);
- return hContact;
-}
-
-BOOL CList_SetOffline(HANDLE hContact, BOOL bHide)
-{
- if (hContact) {
- char *szProto = GetContactProto(hContact);
- db_set_w(hContact, szProto,"ApparentMode",(LPARAM)0);
- db_set_w(hContact, szProto, "Status", ID_STATUS_OFFLINE);
- return TRUE;
- }
-
- return FALSE;
-}
-
-BOOL CList_SetAllOffline(BOOL bHide, const char *pszModule)
-{
- for (HANDLE hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) {
- char *szProto = GetContactProto(hContact);
- if ( MM_FindModule(szProto)) {
- if (!pszModule || (pszModule && !strcmp(pszModule, szProto))) {
- int i = db_get_b(hContact, szProto, "ChatRoom", 0);
- if (i != 0) {
- db_set_w(hContact, szProto, "ApparentMode", 0);
- db_set_w(hContact, szProto, "Status", ID_STATUS_OFFLINE);
- }
- }
- }
- }
- return TRUE;
-}
-
-int CList_RoomDoubleclicked(WPARAM wParam,LPARAM lParam)
-{
- DBVARIANT dbv;
- char *szProto;
-
- HANDLE hContact = (HANDLE)wParam;
- if (!hContact)
- return 0;
-
- szProto = GetContactProto(hContact);
- if ( MM_FindModule(szProto)) {
- if (db_get_b(hContact, szProto, "ChatRoom", 0) == 0)
- return 0;
-
- if ( !db_get_ts( hContact, szProto, "ChatRoomID", &dbv )) {
- SESSION_INFO *si = SM_FindSession( dbv.ptszVal, szProto );
- if ( si ) {
- // is the "toggle visibility option set, so we need to close the window?
- if (si->hWnd != NULL &&
- db_get_b(NULL, "Chat", "ToggleVisibility", 0) == 1 &&
- !CallService(MS_CLIST_GETEVENT, (WPARAM)hContact, 0) &&
- IsWindowVisible(si->hWnd) && !IsIconic(si->hWnd))
- {
- PostMessage(si->hWnd, GC_CLOSEWINDOW, 0, 0);
- db_free(&dbv);
- return 1;
- }
- ShowRoom(si, WINDOW_VISIBLE, TRUE);
- }
- db_free(&dbv);
- return 1;
- }
- }
- return 0;
-}
-
-int CList_EventDoubleclicked(WPARAM wParam,LPARAM lParam)
-{
- return CList_RoomDoubleclicked((WPARAM) ((CLISTEVENT*)lParam)->hContact,(LPARAM)0);
-}
-
-INT_PTR CList_EventDoubleclickedSvc(WPARAM wParam,LPARAM lParam)
-{
- return CList_EventDoubleclicked(wParam, lParam);
-}
-
-INT_PTR CList_JoinChat(WPARAM wParam, LPARAM lParam)
-{
- HANDLE hContact = (HANDLE)wParam;
- if (hContact == NULL)
- return 0;
-
- char* szProto = GetContactProto(hContact);
- if ( szProto ) {
- if ( db_get_w( hContact, szProto, "Status", 0 ) == ID_STATUS_OFFLINE )
- CallProtoService( szProto, PS_JOINCHAT, wParam, lParam );
- else
- CList_RoomDoubleclicked( wParam, 0 );
- }
- return 0;
-}
-
-INT_PTR CList_LeaveChat(WPARAM wParam, LPARAM lParam)
-{
- HANDLE hContact = (HANDLE)wParam;
- if ( hContact ) {
- char* szProto = GetContactProto(hContact);
- if ( szProto )
- CallProtoService( szProto, PS_LEAVECHAT, wParam, lParam );
- }
- return 0;
-}
-
-int CList_PrebuildContactMenu(WPARAM wParam, LPARAM lParam)
-{
- HANDLE hContact = (HANDLE)wParam;
- if (hContact == NULL)
- return 0;
-
- bool bEnabled = false;
- char *szProto = GetContactProto(hContact);
- if (szProto) {
- // display this menu item only for chats
- if (db_get_b(hContact, szProto, "ChatRoom", 0)) {
- // still hide it for offline protos
- if (CallProtoService(szProto, PS_GETSTATUS, 0, 0) != ID_STATUS_OFFLINE) {
- CLISTMENUITEM clmi = { sizeof(clmi) };
- clmi.flags = CMIM_NAME;
- if (db_get_w(hContact, szProto, "Status", 0) == ID_STATUS_OFFLINE)
- clmi.pszName = (char*)LPGEN("Join chat");
- else
- clmi.pszName = (char*)LPGEN("Open chat window");
- Menu_ModifyItem(hJoinMenuItem, &clmi);
- bEnabled = true;
- } } }
-
- Menu_ShowItem(hJoinMenuItem, bEnabled);
- Menu_ShowItem(hLeaveMenuItem, bEnabled);
- return 0;
-}
-
-INT_PTR CList_PrebuildContactMenuSvc(WPARAM wParam, LPARAM lParam)
-{
- return CList_PrebuildContactMenu(wParam, lParam);
-}
-
-BOOL CList_AddEvent(HANDLE hContact, HICON Icon, HANDLE event, int type, TCHAR* fmt, ... )
-{
- if (!fmt || lstrlen(fmt) < 1 || lstrlen(fmt) > 2000)
- return FALSE;
-
- TCHAR* szBuf = (TCHAR*)alloca(4096 * sizeof(TCHAR));
- va_list marker;
- va_start(marker, fmt);
- mir_vsntprintf(szBuf, 4096, fmt, marker);
- va_end(marker);
-
- CLISTEVENT cle = { sizeof(cle) };
- cle.hContact = (HANDLE)hContact;
- cle.hDbEvent = (HANDLE)event;
- cle.flags = type | CLEF_TCHAR;
- cle.hIcon = Icon;
- cle.pszService = "GChat/DblClickEvent" ;
- cle.ptszTooltip = TranslateTS(szBuf);
- if (type) {
- if (!CallService(MS_CLIST_GETEVENT, (WPARAM)hContact, 0))
- CallService(MS_CLIST_ADDEVENT,(WPARAM) hContact,(LPARAM)&cle);
- }
- else {
- if (CallService(MS_CLIST_GETEVENT, (WPARAM)hContact, 0))
- CallService(MS_CLIST_REMOVEEVENT, (WPARAM)hContact, (LPARAM)event);
- CallService(MS_CLIST_ADDEVENT,(WPARAM) hContact,(LPARAM)&cle);
- }
- return TRUE;
-}
-
-HANDLE CList_FindRoom(const char* pszModule, const TCHAR* pszRoom)
-{
- for (HANDLE hContact = db_find_first(pszModule); hContact; hContact = db_find_next(hContact, pszModule)) {
- if ( !db_get_b( hContact, pszModule, "ChatRoom", 0))
- continue;
-
- DBVARIANT dbv;
- if ( !db_get_ts( hContact, pszModule, "ChatRoomID", &dbv)) {
- if ( !lstrcmpi(dbv.ptszVal, pszRoom)) {
- db_free(&dbv);
- return hContact;
- }
- db_free(&dbv);
- }
- }
- return 0;
-}
-
-int WCCmp(TCHAR* wild, TCHAR* string)
-{
- TCHAR *cp = NULL, *mp = NULL;
- if ( wild == NULL || !lstrlen(wild) || string == NULL || !lstrlen(string))
- return 0;
-
- while ((*string) && (*wild != '*')) {
- if ((*wild != *string) && (*wild != '?'))
- return 0;
-
- wild++;
- string++;
- }
-
- while (*string) {
- if (*wild == '*') {
- if (!*++wild)
- return 1;
-
- mp = wild;
- cp = string+1;
- }
- else if ((*wild == *string) || (*wild == '?')) {
- wild++;
- string++;
- }
- else {
- wild = mp;
- string = cp++;
- } }
-
- while (*wild == '*')
- wild++;
-
- return !*wild;
-}
diff --git a/plugins/Scriver/src/chat/colorchooser.cpp b/plugins/Scriver/src/chat/colorchooser.cpp
index a4a90f4286..0eff2d4b3a 100644
--- a/plugins/Scriver/src/chat/colorchooser.cpp
+++ b/plugins/Scriver/src/chat/colorchooser.cpp
@@ -26,10 +26,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static int CalculateCoordinatesToButton(COLORCHOOSER * pCC, POINT pt)
{
int iSquareRoot = (int)sqrt((double)pCC->pModule->nColorCount);
- int nCols = iSquareRoot * iSquareRoot < pCC->pModule->nColorCount?iSquareRoot+1:iSquareRoot;
+ int nCols = iSquareRoot * iSquareRoot < pCC->pModule->nColorCount ? iSquareRoot + 1 : iSquareRoot;
int col = pt.x / 25;
- int row = (pt.y-20) / 20;
+ int row = (pt.y - 20) / 20;
int pos = nCols * row + col;
if (pt.y < 20 && pos >= pCC->pModule->nColorCount)
@@ -42,14 +42,14 @@ static RECT CalculateButtonToCoordinates(COLORCHOOSER * pCC, int buttonPosition)
{
RECT pt;
int iSquareRoot = (int)sqrt((double)pCC->pModule->nColorCount);
- int nCols = iSquareRoot * iSquareRoot < pCC->pModule->nColorCount?iSquareRoot+1:iSquareRoot;
+ int nCols = iSquareRoot * iSquareRoot < pCC->pModule->nColorCount ? iSquareRoot + 1 : iSquareRoot;
int row = buttonPosition / nCols;
int col = buttonPosition % nCols;
- pt.left = col * 25+1;
+ pt.left = col * 25 + 1;
pt.top = row * 20 + 20;
- pt.right = pt.left + 25-1;
+ pt.right = pt.left + 25 - 1;
pt.bottom = pt.top + 20;
return pt;
@@ -64,57 +64,52 @@ INT_PTR CALLBACK DlgProcColorToolWindow(HWND hwndDlg, UINT msg, WPARAM wParam, L
static int iColumns;
static HWND hPreviousActiveWindow;
- switch(msg) {
+ switch (msg) {
case WM_INITDIALOG:
- {
- RECT rc;
- int iSquareRoot;
- int width ;
- int height;
-
TranslateDialogDefault(hwndDlg);
- pCC = (COLORCHOOSER*) lParam;
-
- iCurrentHotTrack = -2;
- bChoosing = FALSE;
+ {
+ pCC = (COLORCHOOSER*)lParam;
- iSquareRoot = (int)sqrt((double)pCC->pModule->nColorCount);
+ iCurrentHotTrack = -2;
+ bChoosing = FALSE;
- iColumns = iSquareRoot * iSquareRoot == pCC->pModule->nColorCount?iSquareRoot:iSquareRoot+1;
- iRows = iSquareRoot;
+ int iSquareRoot = (int)sqrt((double)pCC->pModule->nColorCount);
- rc.top = rc.left = 100;
- rc.right = 100 + iColumns * 25 + 1;
- rc.bottom = iRows * 20 + 100 + 20;
+ iColumns = iSquareRoot * iSquareRoot == pCC->pModule->nColorCount ? iSquareRoot : iSquareRoot + 1;
+ iRows = iSquareRoot;
- AdjustWindowRectEx(&rc, GetWindowLongPtr(hwndDlg, GWL_STYLE), FALSE, GetWindowLongPtr(hwndDlg, GWL_EXSTYLE));
+ RECT rc;
+ rc.top = rc.left = 100;
+ rc.right = 100 + iColumns * 25 + 1;
+ rc.bottom = iRows * 20 + 100 + 20;
- width = rc.right - rc.left;
- height = rc.bottom - rc.top;
+ AdjustWindowRectEx(&rc, GetWindowLongPtr(hwndDlg, GWL_STYLE), FALSE, GetWindowLongPtr(hwndDlg, GWL_EXSTYLE));
- pCC->yPosition -= height;
+ int width = rc.right - rc.left;
+ int height = rc.bottom - rc.top;
+ pCC->yPosition -= height;
- SetDlgItemText(hwndDlg, IDC_CHAT_COLORTEXT, pCC->bForeground?TranslateT("Text color"):TranslateT("Background color"));
- SetWindowPos(GetDlgItem(hwndDlg, IDC_CHAT_COLORTEXT), NULL, 0, 0, width, 20, 0);
- SetWindowPos(hwndDlg, NULL, pCC->xPosition, pCC->yPosition, width, height, SWP_SHOWWINDOW);
+ SetDlgItemText(hwndDlg, IDC_CHAT_COLORTEXT, pCC->bForeground ? TranslateT("Text color") : TranslateT("Background color"));
+ SetWindowPos(GetDlgItem(hwndDlg, IDC_CHAT_COLORTEXT), NULL, 0, 0, width, 20, 0);
+ SetWindowPos(hwndDlg, NULL, pCC->xPosition, pCC->yPosition, width, height, SWP_SHOWWINDOW);
}
break;
case WM_CTLCOLOREDIT:
case WM_CTLCOLORSTATIC:
- if ((HWND)lParam==GetDlgItem(hwndDlg,IDC_CHAT_COLORTEXT)) {
- SetTextColor((HDC)wParam,RGB(60,60,150));
- SetBkColor((HDC)wParam,GetSysColor(COLOR_WINDOW));
+ if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_CHAT_COLORTEXT)) {
+ SetTextColor((HDC)wParam, RGB(60, 60, 150));
+ SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW));
return (INT_PTR)GetSysColorBrush(COLOR_WINDOW);
}
break;
case WM_COMMAND:
- switch ( LOWORD( wParam )) {
- case IDOK:
+ switch (LOWORD(wParam)) {
+ case IDOK:
if (iCurrentHotTrack >= 0)
- PostMessage(hwndDlg, WM_LBUTTONUP, 0, 0);
+ PostMessage(hwndDlg, WM_LBUTTONUP, 0, 0);
break;
case IDCANCEL:
DestroyWindow(hwndDlg);
@@ -131,17 +126,16 @@ INT_PTR CALLBACK DlgProcColorToolWindow(HWND hwndDlg, UINT msg, WPARAM wParam, L
cf.dwEffects = 0;
hWindow = GetParent(pCC->hWndTarget);
- if ( pCC->bForeground ) {
+ if (pCC->bForeground) {
pCC->si->bFGSet = TRUE;
pCC->si->iFG = iCurrentHotTrack;
- if ( IsDlgButtonChecked( hWindow, IDC_CHAT_COLOR )) {
+ if (IsDlgButtonChecked(hWindow, IDC_CHAT_COLOR)) {
cf.dwMask = CFM_COLOR;
cf.crTextColor = pCC->pModule->crColors[iCurrentHotTrack];
- if (pCC->pModule->bSingleFormat) {
+ if (pCC->pModule->bSingleFormat)
SendMessage(pCC->hWndTarget, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf);
- } else {
+ else
SendMessage(pCC->hWndTarget, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
- }
}
}
else {
@@ -150,11 +144,10 @@ INT_PTR CALLBACK DlgProcColorToolWindow(HWND hwndDlg, UINT msg, WPARAM wParam, L
if (IsDlgButtonChecked(hWindow, IDC_CHAT_BKGCOLOR)) {
cf.dwMask = CFM_BACKCOLOR;
cf.crBackColor = pCC->pModule->crColors[iCurrentHotTrack];
- if (pCC->pModule->bSingleFormat) {
+ if (pCC->pModule->bSingleFormat)
SendMessage(pCC->hWndTarget, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf);
- } else {
+ else
SendMessage(pCC->hWndTarget, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
- }
}
}
}
diff --git a/plugins/Scriver/src/chat/log.cpp b/plugins/Scriver/src/chat/log.cpp
index 2865e43164..31ec53b3db 100644
--- a/plugins/Scriver/src/chat/log.cpp
+++ b/plugins/Scriver/src/chat/log.cpp
@@ -24,548 +24,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef EM_GETSCROLLPOS
#define EM_GETSCROLLPOS (WM_USER+221)
#endif
-// The code for streaming the text is to a large extent copied from
-// the srmm module and then modified to fit the chat module.
-
-extern FONTINFO aFonts[OPTIONS_FONTCOUNT];
-
-static PBYTE pLogIconBmpBits[14];
-static const char *logIconNames[14] = {
- "chat_log_action", "chat_log_addstatus", "chat_log_highlight", "chat_log_info", "chat_log_join",
- "chat_log_kick", "chat_log_message_in", "chat_log_message_out", "chat_log_nick", "chat_log_notice",
- "chat_log_part", "chat_log_quit", "chat_log_removestatus", "chat_log_topic"
-};
-static int logIconBmpSize[ SIZEOF(pLogIconBmpBits) ];
-
-static int EventToIndex(LOGINFO * lin)
-{
- switch (lin->iType) {
- case GC_EVENT_MESSAGE:
- if (lin->bIsMe)
- return 10;
- else
- return 9;
-
- case GC_EVENT_JOIN: return 3;
- case GC_EVENT_PART: return 4;
- case GC_EVENT_QUIT: return 5;
- case GC_EVENT_NICK: return 7;
- case GC_EVENT_KICK: return 6;
- case GC_EVENT_NOTICE: return 8;
- case GC_EVENT_TOPIC: return 11;
- case GC_EVENT_INFORMATION:return 12;
- case GC_EVENT_ADDSTATUS: return 13;
- case GC_EVENT_REMOVESTATUS: return 14;
- case GC_EVENT_ACTION: return 15;
- }
- return 0;
-}
-
-static int EventToIcon(LOGINFO * lin)
-{
- switch (lin->iType) {
- case GC_EVENT_MESSAGE:
- if (lin->bIsMe)
- return 7;
- else
- return 6;
-
- case GC_EVENT_JOIN: return 4;
- case GC_EVENT_PART: return 10;
- case GC_EVENT_QUIT: return 11;
- case GC_EVENT_NICK: return 8;
- case GC_EVENT_KICK: return 5;
- case GC_EVENT_NOTICE: return 9;
- case GC_EVENT_TOPIC: return 13;
- case GC_EVENT_INFORMATION:return 3;
- case GC_EVENT_ADDSTATUS: return 1;
- case GC_EVENT_REMOVESTATUS: return 12;
- case GC_EVENT_ACTION: return 0;
- }
- return 0;
-}
-
-static char *Log_SetStyle(int style, int fontindex)
-{
- static char szStyle[128];
- mir_snprintf(szStyle, SIZEOF(szStyle), "\\f%u\\cf%u\\ul0\\highlight0\\b%d\\i%d\\fs%u", style, style+1, aFonts[fontindex].lf.lfWeight >= FW_BOLD ? 1 : 0, aFonts[fontindex].lf.lfItalic, 2 * abs(aFonts[fontindex].lf.lfHeight) * 74 / g_dat.logPixelSY);
- return szStyle;
-}
-
-static int Log_AppendRTF(LOGSTREAMDATA* streamData, BOOL simpleMode, char **buffer, int *cbBufferEnd, int *cbBufferAlloced, const TCHAR *fmt, ...)
-{
- va_list va;
- int lineLen, textCharsCount=0;
- TCHAR* line = (TCHAR*)alloca( 8001*sizeof(TCHAR));
- char* d;
-
- va_start(va, fmt);
- lineLen = mir_vsntprintf(line, 8000, fmt, va);
- if (lineLen < 0) lineLen = 8000;
- line[lineLen] = 0;
- va_end(va);
-
- lineLen = lineLen*20 + 8;
- if (*cbBufferEnd + lineLen > *cbBufferAlloced) {
- cbBufferAlloced[0] += (lineLen + 1024 - lineLen % 1024);
- *buffer = (char*) mir_realloc(*buffer, *cbBufferAlloced);
- }
-
- d = *buffer + *cbBufferEnd;
-
- for (; *line; line++, textCharsCount++) {
- if (*line == '\r' && line[1] == '\n') {
- CopyMemory(d, "\\par ", 5);
- line++;
- d += 5;
- }
- else if (*line == '\n') {
- CopyMemory(d, "\\line ", 6);
- d += 6;
- }
- else if (*line == '%' && !simpleMode ) {
- char szTemp[200];
-
- szTemp[0] = '\0';
- switch ( *++line ) {
- case '\0':
- case '%':
- *d++ = '%';
- break;
-
- case 'c':
- case 'f':
- if (g_Settings.StripFormat || streamData->bStripFormat) {
- line += 2;
- }
- else if ( line[1] != '\0' && line[2] != '\0') {
- TCHAR szTemp3[3], c = *line;
- int col;
- szTemp3[0] = line[1];
- szTemp3[1] = line[2];
- szTemp3[2] = '\0';
- line += 2;
-
- col = _ttoi(szTemp3);
- col += (OPTIONS_FONTCOUNT + 1);
- mir_snprintf(szTemp, SIZEOF(szTemp), ( c == 'c' ) ? "\\cf%u " : "\\highlight%u ", col);
- }
- break;
- case 'C':
- case 'F':
- if ( !g_Settings.StripFormat && !streamData->bStripFormat) {
- int j = streamData->lin->bIsHighlighted ? 16 : EventToIndex(streamData->lin);
- if ( *line == 'C' )
- mir_snprintf(szTemp, SIZEOF(szTemp), "\\cf%u ", j+1);
- else
- mir_snprintf(szTemp, SIZEOF(szTemp), "\\highlight0 ");
- }
- break;
- case 'b':
- case 'u':
- case 'i':
- if ( !streamData->bStripFormat ) {
- mir_snprintf(szTemp, SIZEOF(szTemp), (*line == 'u') ? "\\%cl " : "\\%c ", *line );
- }
- break;
-
- case 'B':
- case 'U':
- case 'I':
- if ( !streamData->bStripFormat ) {
- mir_snprintf( szTemp, SIZEOF(szTemp), (*line == 'U') ? "\\%cl0 " : "\\%c0 ", *line );
- CharLowerA( szTemp );
- }
- break;
-
- case 'r':
- if ( !streamData->bStripFormat ) {
- int index = EventToIndex(streamData->lin);
- mir_snprintf(szTemp, SIZEOF(szTemp), "%s ", Log_SetStyle(index, index));
- }
- break;
- }
-
- if ( szTemp[0] ) {
- int iLen = lstrlenA(szTemp);
- memcpy( d, szTemp, iLen );
- d += iLen;
- }
- }
- else if (*line == '\t' && !streamData->bStripFormat) {
- CopyMemory(d, "\\tab ", 5);
- d += 5;
- }
- else if ((*line == '\\' || *line == '{' || *line == '}') && !streamData->bStripFormat) {
- *d++ = '\\';
- *d++ = (char) *line;
- }
- else if (*line > 0 && *line < 128) {
- *d++ = (char) *line;
- } else {
- d += sprintf(d, "\\u%u ?", (WORD)*line); //!!!!!!!!!
- }
- }
-
- *cbBufferEnd = (int) (d - *buffer);
- return textCharsCount;
-}
-
-static int Log_AppendIEView(LOGSTREAMDATA* streamData, BOOL simpleMode, TCHAR **buffer, int *cbBufferEnd, int *cbBufferAlloced, const TCHAR *fmt, ...)
-{
- va_list va;
- int lineLen, textCharsCount=0;
- TCHAR* line = (TCHAR*)alloca( 8001 * sizeof(TCHAR));
- TCHAR* d;
- MODULEINFO *mi = MM_FindModule(streamData->si->pszModule);
-
- va_start(va, fmt);
- lineLen = mir_vsntprintf(line, 8000, fmt, va);
- if (lineLen < 0)
- return 0;
- line[lineLen] = 0;
- va_end(va);
-
- lineLen = lineLen*9 + 8;
- if (*cbBufferEnd + lineLen > *cbBufferAlloced) {
- cbBufferAlloced[0] += (lineLen + 1024 - lineLen % 1024);
- *buffer = (TCHAR *) mir_realloc(*buffer, *cbBufferAlloced * sizeof(TCHAR));
- }
-
- d = *buffer + *cbBufferEnd;
-
- for (; *line; line++, textCharsCount++) {
- if (*line == '%' && !simpleMode ) {
- TCHAR szTemp[200];
-
- szTemp[0] = '\0';
- switch ( *++line ) {
- case '\0':
- case '%':
- *d++ = '%';
- break;
-
- case 'c':
- case 'f':
- if (!g_Settings.StripFormat && !streamData->bStripFormat) {
- if ( line[1] != '\0' && line[2] != '\0') {
- TCHAR szTemp3[3], c = *line;
- int col;
- szTemp3[0] = line[1];
- szTemp3[1] = line[2];
- szTemp3[2] = '\0';
- col = _ttoi(szTemp3);
- mir_sntprintf(szTemp, SIZEOF(szTemp), _T("%%%c#%02X%02X%02X"), c, GetRValue(mi->crColors[col]), GetGValue(mi->crColors[col]), GetBValue(mi->crColors[col]));
- }
- }
- line += 2;
- break;
- case 'C':
- case 'F':
- if ( !g_Settings.StripFormat && !streamData->bStripFormat) {
- mir_sntprintf(szTemp, SIZEOF(szTemp), _T("%%%c"), *line );
- }
- break;
- case 'b':
- case 'u':
- case 'i':
- case 'B':
- case 'U':
- case 'I':
- case 'r':
- if ( !streamData->bStripFormat ) {
- mir_sntprintf(szTemp, SIZEOF(szTemp), _T("%%%c"), *line );
- }
- break;
- }
-
- if ( szTemp[0] ) {
- size_t iLen = _tcslen(szTemp);
- memcpy( d, szTemp, iLen * sizeof(TCHAR));
- d += iLen;
- }
- }
- else if (*line == '%') {
- *d++ = '%';
- *d++ = (char) *line;
- }
- else {
- *d++ = (char) *line;
- }
- }
- *d = '\0';
- *cbBufferEnd = (int) (d - *buffer);
- return textCharsCount;
-}
-
-
-static void AddEventTextToBuffer(char **buffer, int *bufferEnd, int *bufferAlloced, LOGSTREAMDATA *streamData)
-{
- if (streamData->lin->ptszText)
- Log_AppendRTF(streamData, FALSE, buffer, bufferEnd, bufferAlloced, _T(": %s"), streamData->lin->ptszText);
-}
-
-static void AddEventToBuffer(char **buffer, int *bufferEnd, int *bufferAlloced, LOGSTREAMDATA *streamData, TCHAR *pszNick)
-{
-
- if ( streamData && streamData->lin ) {
- switch ( streamData->lin->iType ) {
- case GC_EVENT_MESSAGE:
- if ( streamData->lin->ptszText ) {
- TCHAR *ptszTemp = NULL;
- TCHAR *ptszText = streamData->lin->ptszText;
- if (streamData->si->windowData.codePage != CP_ACP) {
- char *aText = mir_t2a_cp(streamData->lin->ptszText, CP_ACP);
- ptszText = ptszTemp = mir_a2t_cp(aText, streamData->si->windowData.codePage);
- mir_free(aText);
- }
-
- Log_AppendRTF( streamData, FALSE, buffer, bufferEnd, bufferAlloced, _T("%s"), ptszText );
- mir_free(ptszTemp);
- }
- break;
- case GC_EVENT_ACTION:
- if ( pszNick && streamData->lin->ptszText) {
- Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, _T("%s "), pszNick);
- Log_AppendRTF(streamData, FALSE, buffer, bufferEnd, bufferAlloced, _T("%s"), streamData->lin->ptszText);
- }
- break;
- case GC_EVENT_JOIN:
- if (pszNick) {
- if (!streamData->lin->bIsMe)
- Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s has joined"), pszNick);
- else
- Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("You have joined %s"), streamData->si->ptszName);
- }
- break;
- case GC_EVENT_PART:
- if (pszNick)
- Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s has left"), pszNick);
- AddEventTextToBuffer(buffer, bufferEnd, bufferAlloced, streamData);
- break;
- case GC_EVENT_QUIT:
- if (pszNick)
- Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s has disconnected"), pszNick);
- AddEventTextToBuffer(buffer, bufferEnd, bufferAlloced, streamData);
- break;
- case GC_EVENT_NICK:
- if (pszNick && streamData->lin->ptszText) {
- if (!streamData->lin->bIsMe)
- Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s is now known as %s"), pszNick, streamData->lin->ptszText);
- else
- Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("You are now known as %s"), streamData->lin->ptszText);
- }
- break;
- case GC_EVENT_KICK:
- if (pszNick && streamData->lin->ptszStatus)
- Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s kicked %s"), streamData->lin->ptszStatus, pszNick);
- AddEventTextToBuffer(buffer, bufferEnd, bufferAlloced, streamData);
- break;
- case GC_EVENT_NOTICE:
- if (pszNick && streamData->lin->ptszText) {
- Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("Notice from %s"), pszNick );
- AddEventTextToBuffer(buffer, bufferEnd, bufferAlloced, streamData);
- }
- break;
- case GC_EVENT_TOPIC:
- if (streamData->lin->ptszText)
- Log_AppendRTF(streamData, FALSE, buffer, bufferEnd, bufferAlloced, TranslateT("The topic is \'%s%s\'"), streamData->lin->ptszText, _T("%r"));
- if (pszNick)
- Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced,
- streamData->lin->ptszUserInfo ? TranslateT(" (set by %s on %s)"): TranslateT(" (set by %s)"),
- pszNick, streamData->lin->ptszUserInfo);
- break;
- case GC_EVENT_INFORMATION:
- if (streamData->lin->ptszText)
- Log_AppendRTF(streamData, FALSE, buffer, bufferEnd, bufferAlloced, (streamData->lin->bIsMe) ? _T("--> %s") : _T("%s"), streamData->lin->ptszText);
- break;
- case GC_EVENT_ADDSTATUS:
- if (pszNick && streamData->lin->ptszText && streamData->lin->ptszStatus)
- Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s enables \'%s\' status for %s"), streamData->lin->ptszText, streamData->lin->ptszStatus, pszNick);
- break;
- case GC_EVENT_REMOVESTATUS:
- if (pszNick && streamData->lin->ptszText && streamData->lin->ptszStatus)
- Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s disables \'%s\' status for %s"), streamData->lin->ptszText , streamData->lin->ptszStatus, pszNick);
- break;
-} } }
-
-
-static void AddEventTextToBufferIEView(TCHAR **buffer, int *bufferEnd, int *bufferAlloced, LOGSTREAMDATA *streamData)
-{
- if (streamData->lin->ptszText)
- Log_AppendIEView(streamData, FALSE, buffer, bufferEnd, bufferAlloced, _T(": %s"), streamData->lin->ptszText);
-}
-
-
-static void AddEventToBufferIEView(TCHAR **buffer, int *bufferEnd, int *bufferAlloced, LOGSTREAMDATA *streamData, TCHAR *pszNick)
-{
-
- if ( streamData && streamData->lin ) {
- switch ( streamData->lin->iType ) {
- case GC_EVENT_MESSAGE:
- if ( streamData->lin->ptszText ) {
- TCHAR *ptszTemp = NULL;
- TCHAR *ptszText = streamData->lin->ptszText;
- if (streamData->si->windowData.codePage != CP_ACP) {
- char *aText = mir_t2a_cp(streamData->lin->ptszText, CP_ACP);
- ptszText = ptszTemp = mir_a2t_cp(aText, streamData->si->windowData.codePage);
- mir_free(aText);
- }
-
- Log_AppendIEView( streamData, FALSE, buffer, bufferEnd, bufferAlloced, _T("%s"), ptszText );
- mir_free(ptszTemp);
- }
- break;
- case GC_EVENT_ACTION:
- if ( pszNick && streamData->lin->ptszText) {
- Log_AppendIEView(streamData, TRUE, buffer, bufferEnd, bufferAlloced, _T("%s "), streamData->lin->ptszNick);
- Log_AppendIEView(streamData, FALSE, buffer, bufferEnd, bufferAlloced, _T("%s"), streamData->lin->ptszText);
- }
- break;
- case GC_EVENT_JOIN:
- if (pszNick) {
- if (!streamData->lin->bIsMe)
- Log_AppendIEView(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s has joined"), pszNick);
- else
- Log_AppendIEView(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("You have joined %s"), streamData->si->ptszName);
- }
- break;
- case GC_EVENT_PART:
- if (pszNick)
- Log_AppendIEView(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s has left"), pszNick);
- AddEventTextToBufferIEView(buffer, bufferEnd, bufferAlloced, streamData);
- break;
- case GC_EVENT_QUIT:
- if (pszNick)
- Log_AppendIEView(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s has disconnected"), pszNick);
- AddEventTextToBufferIEView(buffer, bufferEnd, bufferAlloced, streamData);
- break;
- case GC_EVENT_NICK:
- if (pszNick && streamData->lin->ptszText) {
- if (!streamData->lin->bIsMe)
- Log_AppendIEView(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s is now known as %s"), pszNick, streamData->lin->ptszText);
- else
- Log_AppendIEView(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("You are now known as %s"), streamData->lin->ptszText);
- }
- break;
- case GC_EVENT_KICK:
- if (pszNick && streamData->lin->ptszStatus)
- Log_AppendIEView(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s kicked %s"), streamData->lin->ptszStatus, streamData->lin->ptszNick);
- AddEventTextToBufferIEView(buffer, bufferEnd, bufferAlloced, streamData);
- break;
- case GC_EVENT_NOTICE:
- if (pszNick && streamData->lin->ptszText) {
- Log_AppendIEView(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("Notice from %s"), pszNick );
- AddEventTextToBufferIEView(buffer, bufferEnd, bufferAlloced, streamData);
- }
- break;
- case GC_EVENT_TOPIC:
- if (streamData->lin->ptszText)
- Log_AppendIEView(streamData, FALSE, buffer, bufferEnd, bufferAlloced, TranslateT("The topic is \'%s%s\'"), streamData->lin->ptszText, _T("%r"));
- if (pszNick)
- Log_AppendIEView(streamData, TRUE, buffer, bufferEnd, bufferAlloced,
- streamData->lin->ptszUserInfo ? TranslateT(" (set by %s on %s)"): TranslateT(" (set by %s)"),
- pszNick, streamData->lin->ptszUserInfo);
- break;
- case GC_EVENT_INFORMATION:
- if (streamData->lin->ptszText)
- Log_AppendIEView(streamData, FALSE, buffer, bufferEnd, bufferAlloced, (streamData->lin->bIsMe) ? _T("--> %s") : _T("%s"), streamData->lin->ptszText);
- break;
- case GC_EVENT_ADDSTATUS:
- if (pszNick && streamData->lin->ptszText && streamData->lin->ptszStatus)
- Log_AppendIEView(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s enables \'%s\' status for %s"), streamData->lin->ptszText, streamData->lin->ptszStatus, streamData->lin->ptszNick);
- break;
- case GC_EVENT_REMOVESTATUS:
- if (pszNick && streamData->lin->ptszText && streamData->lin->ptszStatus)
- Log_AppendIEView(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s disables \'%s\' status for %s"), streamData->lin->ptszText , streamData->lin->ptszStatus, streamData->lin->ptszNick);
- break;
- }
- }
-}
-
-
-static void LogEventIEView(LOGSTREAMDATA *streamData, TCHAR *ptszNick)
-{
- TCHAR *buffer = NULL;
- int bufferEnd = 0;
- int bufferAlloced = 0;
-
- IEVIEWEVENTDATA ied = { 0 };
-
- IEVIEWEVENT event = { sizeof(event) };
- event.hwnd = streamData->si->windowData.hwndLog;
- event.hContact = streamData->si->windowData.hContact;
- event.codepage = streamData->si->windowData.codePage;
- event.pszProto = streamData->si->pszModule;
- event.iType = IEE_LOG_MEM_EVENTS;
- event.eventData = &ied;
- event.count = 1;
-
- AddEventToBufferIEView(&buffer, &bufferEnd, &bufferAlloced, streamData, ptszNick);
- ied.ptszNick = ptszNick;
- ied.ptszText = buffer;
- ied.time = streamData->lin->time;
- ied.bIsMe = streamData->lin->bIsMe;
-
- switch ( streamData->lin->iType ) {
- case GC_EVENT_MESSAGE:
- ied.iType = IEED_GC_EVENT_MESSAGE;
- ied.dwData = IEEDD_GC_SHOW_NICK;
- break;
- case GC_EVENT_ACTION:
- ied.iType = IEED_GC_EVENT_ACTION;
- break;
- case GC_EVENT_JOIN:
- ied.iType = IEED_GC_EVENT_JOIN;
- break;
- case GC_EVENT_PART:
- ied.iType = IEED_GC_EVENT_PART;
- break;
- case GC_EVENT_QUIT:
- ied.iType = IEED_GC_EVENT_QUIT;
- break;
- case GC_EVENT_NICK:
- ied.iType = IEED_GC_EVENT_NICK;
- break;
- case GC_EVENT_KICK:
- ied.iType = IEED_GC_EVENT_KICK;
- break;
- case GC_EVENT_NOTICE:
- ied.iType = IEED_GC_EVENT_NOTICE;
- break;
- case GC_EVENT_TOPIC:
- ied.iType = IEED_GC_EVENT_TOPIC;
- break;
- case GC_EVENT_INFORMATION:
- ied.iType = IEED_GC_EVENT_INFORMATION;
- break;
- case GC_EVENT_ADDSTATUS:
- ied.iType = IEED_GC_EVENT_ADDSTATUS;
- break;
- case GC_EVENT_REMOVESTATUS:
- ied.iType = IEED_GC_EVENT_REMOVESTATUS;
- break;
- }
- ied.dwData |= g_Settings.ShowTime ? IEEDD_GC_SHOW_TIME : 0;
- ied.dwData |= IEEDD_GC_SHOW_ICON;
- ied.dwFlags = IEEDF_UNICODE_TEXT | IEEDF_UNICODE_NICK | IEEDF_UNICODE_TEXT2;
- ied.next = NULL;
- /*
- ied.color = event->color;
- ied.fontSize = event->iFontSize;
- ied.fontStyle = event->dwFlags;
- ied.fontName = getFontName(event->iFont);
- */
- CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&event);
- mir_free(buffer);
-/*
- iew.cbSize = sizeof(IEVIEWWINDOW);
- iew.iType = IEW_SCROLLBOTTOM;
- iew.hwnd = hWndLog;
- CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&iew);
-*/
-}
-
TCHAR* MakeTimeStamp( TCHAR* pszStamp, time_t time)
{
static TCHAR szTime[30];
@@ -574,152 +32,15 @@ TCHAR* MakeTimeStamp( TCHAR* pszStamp, time_t time)
return szTime;
}
-static char* Log_CreateRTF(LOGSTREAMDATA *streamData, BOOL ieviewMode)
-{
- char *buffer, *header;
- int bufferAlloced, bufferEnd, i;
- LOGINFO * lin = streamData->lin;
-
- // guesstimate amount of memory for the RTF
- bufferEnd = 0;
- bufferAlloced = streamData->bRedraw ? 1024 * (streamData->si->iEventCount+2) : 2048;
- buffer = (char*) mir_alloc(bufferAlloced);
- buffer[0] = '\0';
-
- // ### RTF HEADER
- header = streamData->si->pszHeader;
-
- if (header)
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, header);
-
-
- // ### RTF BODY (one iteration per event that should be streamed in)
- while ( lin )
- {
- // filter
- if (streamData->si->iType != GCW_CHATROOM || !streamData->si->bFilterEnabled || (streamData->si->iLogFilterFlags&lin->iType) != 0)
- {
- TCHAR szTemp[512], szTemp2[512];
- TCHAR* pszNick = NULL;
- streamData->lin = lin;
-
- if ( lin->ptszNick ) {
- if ( g_Settings.LogLimitNames && lstrlen( lin->ptszNick ) > 20 ) {
- lstrcpyn( szTemp2, lin->ptszNick, 20 );
- lstrcpyn( szTemp2+20, _T("..."), 4);
- }
- else lstrcpyn( szTemp2, lin->ptszNick, 511 );
-
- if ( lin->ptszUserInfo && lin->iType != GC_EVENT_TOPIC)
- mir_sntprintf( szTemp, SIZEOF(szTemp), _T("%s (%s)"), szTemp2, lin->ptszUserInfo );
- else
- mir_sntprintf( szTemp, SIZEOF(szTemp), _T("%s"), szTemp2 );
- pszNick = szTemp;
- }
-
- if (streamData->si->windowData.hwndLog != NULL) {
- LogEventIEView(streamData, pszNick);
- }
- {
- // create new line, and set font and color
- if (!streamData->isFirst) {
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\par");
- }
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "%s ", Log_SetStyle(0, 0));
- // Insert icon
- if ((lin->iType&g_Settings.dwIconFlags) || (lin->bIsHighlighted&&g_Settings.dwIconFlags&GC_EVENT_HIGHLIGHT))
- {
- int iIndex = (lin->bIsHighlighted&&g_Settings.dwIconFlags&GC_EVENT_HIGHLIGHT) ? 2 : EventToIcon(lin);
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\fs1 ");
- while (bufferAlloced - bufferEnd < logIconBmpSize[0])
- bufferAlloced += 4096;
- buffer = (char*) mir_realloc(buffer, bufferAlloced);
- CopyMemory(buffer + bufferEnd, pLogIconBmpBits[iIndex], logIconBmpSize[iIndex]);
- bufferEnd += logIconBmpSize[iIndex];
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, " ");
- }
-
- if (g_Settings.TimeStampEventColour)
- {
- // colored timestamps
- static char szStyle[256];
- int iii;
- if (lin->ptszNick && lin->iType == GC_EVENT_MESSAGE)
- {
- iii = lin->bIsHighlighted?16:(lin->bIsMe ? 2 : 1);
- mir_snprintf(szStyle, SIZEOF(szStyle), "\\f0\\cf%u\\ul0\\highlight0\\b%d\\i%d\\fs%u", iii+1, aFonts[0].lf.lfWeight >= FW_BOLD ? 1 : 0, aFonts[0].lf.lfItalic, 2 * abs(aFonts[0].lf.lfHeight) * 74 / g_dat.logPixelSY);
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "%s ", szStyle);
- }
- else
- {
- iii = lin->bIsHighlighted?16:EventToIndex(lin);
- mir_snprintf(szStyle, SIZEOF(szStyle), "\\f0\\cf%u\\ul0\\highlight0\\b%d\\i%d\\fs%u", iii+1, aFonts[0].lf.lfWeight >= FW_BOLD ? 1 : 0, aFonts[0].lf.lfItalic, 2 * abs(aFonts[0].lf.lfHeight) * 74 / g_dat.logPixelSY);
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "%s ", szStyle);
- }
- }
- else
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "%s ", Log_SetStyle(0, 0 ));
- // insert a TAB if necessary to put the timestamp in the right position
-// if (g_Settings.dwIconFlags)
-// AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\tab ");
-
- //insert timestamp
- if (g_Settings.ShowTime)
- {
- TCHAR szTimeStamp[30], szOldTimeStamp[30];
-
- lstrcpyn( szTimeStamp, MakeTimeStamp(g_Settings.pszTimeStamp, lin->time), 30);
- lstrcpyn( szOldTimeStamp, MakeTimeStamp(g_Settings.pszTimeStamp, streamData->si->LastTime), 30);
- if ( !g_Settings.ShowTimeIfChanged || streamData->si->LastTime == 0 || lstrcmp(szTimeStamp, szOldTimeStamp )) {
- streamData->si->LastTime = lin->time;
- Log_AppendRTF( streamData, TRUE, &buffer, &bufferEnd, &bufferAlloced, _T("%s"), szTimeStamp );
- }
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\tab ");
- }
-
- // Insert the nick
-
- if (pszNick && lin->iType == GC_EVENT_MESSAGE)
- {
- TCHAR pszTemp[300], *p1;
-
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "%s ", Log_SetStyle(lin->bIsMe ? 2 : 1, lin->bIsMe ? 2 : 1));
- lstrcpyn(pszTemp, lin->bIsMe ? g_Settings.pszOutgoingNick : g_Settings.pszIncomingNick, 299);
- p1 = _tcsstr(pszTemp, _T("%n"));
- if (p1)
- p1[1] = 's';
-
- Log_AppendRTF(streamData, TRUE, &buffer, &bufferEnd, &bufferAlloced, pszTemp, pszNick);
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, " ");
- }
-
- // Insert the message
- i = lin->bIsHighlighted?16:EventToIndex(lin);
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "%s ", Log_SetStyle(i, i));
- AddEventToBuffer(&buffer, &bufferEnd, &bufferAlloced, streamData, pszNick);
- }
- streamData->isFirst = FALSE;
-
- }
- lin = lin->prev;
- }
-
- // ### RTF END
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "}");
- return buffer;
-}
static DWORD CALLBACK Log_StreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb)
{
- LOGSTREAMDATA *lstrdat = (LOGSTREAMDATA *) dwCookie;
-
- if (lstrdat)
- {
+ LOGSTREAMDATA *lstrdat = (LOGSTREAMDATA*)dwCookie;
+ if (lstrdat) {
// create the RTF
- if (lstrdat->buffer == NULL)
- {
+ if (lstrdat->buffer == NULL) {
lstrdat->bufferOffset = 0;
- lstrdat->buffer = Log_CreateRTF(lstrdat, lstrdat->si->windowData.hwndLog != NULL);
+ lstrdat->buffer = pci->Log_CreateRTF(lstrdat);
lstrdat->bufferLen = lstrlenA(lstrdat->buffer);
}
@@ -729,8 +50,7 @@ static DWORD CALLBACK Log_StreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG
lstrdat->bufferOffset += *pcb;
// free stuff if the streaming operation is complete
- if (lstrdat->bufferOffset == lstrdat->bufferLen)
- {
+ if (lstrdat->bufferOffset == lstrdat->bufferLen) {
mir_free(lstrdat->buffer);
lstrdat->buffer = NULL;
}
@@ -741,117 +61,108 @@ static DWORD CALLBACK Log_StreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG
void Log_StreamInEvent(HWND hwndDlg, LOGINFO* lin, SESSION_INFO *si, BOOL bRedraw)
{
- CHARRANGE oldsel, sel, newsel;
- POINT point ={0};
- SCROLLINFO scroll;
- WPARAM wp;
- HWND hwndRich;
-
if (hwndDlg == 0 || lin == 0 || si == 0)
return;
- hwndRich = GetDlgItem(hwndDlg, IDC_CHAT_LOG);
+ HWND hwndRich = GetDlgItem(hwndDlg, IDC_CHAT_LOG);
- LOGSTREAMDATA streamData = { 0 };
+ LOGSTREAMDATA streamData;
+ ZeroMemory(&streamData, sizeof(streamData));
streamData.hwnd = hwndRich;
streamData.si = si;
streamData.lin = lin;
streamData.bStripFormat = FALSE;
streamData.isFirst = bRedraw ? 1 : (GetRichTextLength(hwndRich, CP_ACP, FALSE) == 0);
- if (bRedraw || si->iType != GCW_CHATROOM || !si->bFilterEnabled || (si->iLogFilterFlags&lin->iType) != 0)
- {
- BOOL bFlag = FALSE;
-
- EDITSTREAM stream = { 0 };
- stream.pfnCallback = Log_StreamCallback;
- stream.dwCookie = (DWORD_PTR) & streamData;
- scroll.cbSize= sizeof(SCROLLINFO);
- scroll.fMask= SIF_RANGE | SIF_POS|SIF_PAGE;
- GetScrollInfo(hwndRich, SB_VERT, &scroll);
- SendMessage(hwndRich, EM_GETSCROLLPOS, 0, (LPARAM)&point);
-
- // do not scroll to bottom if there is a selection
- SendMessage(hwndRich, EM_EXGETSEL, 0, (LPARAM)&oldsel);
- if (oldsel.cpMax != oldsel.cpMin)
- SendMessage(hwndRich, WM_SETREDRAW, FALSE, 0);
-
- //set the insertion point at the bottom
- sel.cpMin = sel.cpMax = GetRichTextLength(hwndRich, CP_ACP, FALSE);
- SendMessage(hwndRich, EM_EXSETSEL, 0, (LPARAM)& sel);
- SendMessage(hwndRich, EM_EXGETSEL, 0, (LPARAM)& sel);
+ if (!bRedraw && si->iType == GCW_CHATROOM && si->bFilterEnabled && !(si->iLogFilterFlags & lin->iType))
+ return;
- // fix for the indent... must be a M$ bug
- if (sel.cpMax == 0)
- bRedraw = TRUE;
+ BOOL bFlag = FALSE;
- // should the event(s) be appended to the current log
- wp = bRedraw?SF_RTF:SFF_SELECTION|SF_RTF;
+ EDITSTREAM stream = { 0 };
+ stream.pfnCallback = Log_StreamCallback;
+ stream.dwCookie = (DWORD_PTR)& streamData;
- //get the number of pixels per logical inch
- if (bRedraw)
- {
- SendMessage(hwndRich, WM_SETREDRAW, FALSE, 0);
- bFlag = TRUE;
-// SetCursor(LoadCursor(NULL, IDC_CHAT_ARROW));
- }
+ SCROLLINFO scroll;
+ scroll.cbSize = sizeof(SCROLLINFO);
+ scroll.fMask = SIF_RANGE | SIF_POS | SIF_PAGE;
+ GetScrollInfo(hwndRich, SB_VERT, &scroll);
- // stream in the event(s)
- streamData.lin = lin;
- streamData.bRedraw = bRedraw;
- SendMessage(hwndRich, EM_STREAMIN, wp, (LPARAM)& stream);
-
- // do smileys
- if (g_dat.smileyAddInstalled && (bRedraw
- || (lin->ptszText
- && lin->iType != GC_EVENT_JOIN
- && lin->iType != GC_EVENT_NICK
- && lin->iType != GC_EVENT_ADDSTATUS
- && lin->iType != GC_EVENT_REMOVESTATUS )))
- {
- newsel.cpMax = -1;
- newsel.cpMin = sel.cpMin;
- if (newsel.cpMin < 0)
- newsel.cpMin = 0;
-
- SMADD_RICHEDIT3 sm = { sizeof(sm) };
- sm.hwndRichEditControl = hwndRich;
- sm.Protocolname = si->pszModule;
- sm.rangeToReplace = bRedraw?NULL:&newsel;
- sm.flags = 0;
- sm.disableRedraw = TRUE;
- sm.hContact = si->windowData.hContact;
- CallService(MS_SMILEYADD_REPLACESMILEYS, 0, (LPARAM)&sm);
- }
+ POINT point = { 0 };
+ SendMessage(hwndRich, EM_GETSCROLLPOS, 0, (LPARAM)&point);
- // scroll log to bottom if the log was previously scrolled to bottom, else restore old position
- if (bRedraw || (UINT)scroll.nPos >= (UINT)scroll.nMax-scroll.nPage-5 || scroll.nMax-scroll.nMin-scroll.nPage < 50)
- {
- SendMessage(GetParent(hwndRich), GC_SCROLLTOBOTTOM, 0, 0);
- }
- else
- SendMessage(hwndRich, EM_SETSCROLLPOS, 0, (LPARAM)&point);
-
- // do we need to restore the selection
- if (oldsel.cpMax != oldsel.cpMin)
- {
- SendMessage(hwndRich, EM_EXSETSEL, 0, (LPARAM)& oldsel);
- SendMessage(hwndRich, WM_SETREDRAW, TRUE, 0);
- InvalidateRect(hwndRich, NULL, TRUE);
- }
+ // do not scroll to bottom if there is a selection
+ CHARRANGE oldsel, sel, newsel;
+ SendMessage(hwndRich, EM_EXGETSEL, 0, (LPARAM)&oldsel);
+ if (oldsel.cpMax != oldsel.cpMin)
+ SendMessage(hwndRich, WM_SETREDRAW, FALSE, 0);
+
+ // set the insertion point at the bottom
+ sel.cpMin = sel.cpMax = GetRichTextLength(hwndRich, CP_ACP, FALSE);
+ SendMessage(hwndRich, EM_EXSETSEL, 0, (LPARAM)&sel);
+ SendMessage(hwndRich, EM_EXGETSEL, 0, (LPARAM)&sel);
+
+ // fix for the indent... must be a M$ bug
+ if (sel.cpMax == 0)
+ bRedraw = TRUE;
+
+ // should the event(s) be appended to the current log
+ WPARAM wp = bRedraw ? SF_RTF : SFF_SELECTION | SF_RTF;
+
+ // get the number of pixels per logical inch
+ if (bRedraw) {
+ SendMessage(hwndRich, WM_SETREDRAW, FALSE, 0);
+ bFlag = TRUE;
+ }
+
+ // stream in the event(s)
+ streamData.lin = lin;
+ streamData.bRedraw = bRedraw;
+ SendMessage(hwndRich, EM_STREAMIN, wp, (LPARAM)&stream);
+
+ // do smileys
+ if (g_dat.smileyAddInstalled && (bRedraw || (lin->ptszText && lin->iType != GC_EVENT_JOIN
+ && lin->iType != GC_EVENT_NICK && lin->iType != GC_EVENT_ADDSTATUS && lin->iType != GC_EVENT_REMOVESTATUS)))
+ {
+ newsel.cpMax = -1;
+ newsel.cpMin = sel.cpMin;
+ if (newsel.cpMin < 0)
+ newsel.cpMin = 0;
+
+ SMADD_RICHEDIT3 sm = { sizeof(sm) };
+ sm.hwndRichEditControl = hwndRich;
+ sm.Protocolname = si->pszModule;
+ sm.rangeToReplace = bRedraw ? NULL : &newsel;
+ sm.flags = 0;
+ sm.disableRedraw = TRUE;
+ sm.hContact = si->windowData.hContact;
+ CallService(MS_SMILEYADD_REPLACESMILEYS, 0, (LPARAM)&sm);
+ }
+
+ // scroll log to bottom if the log was previously scrolled to bottom, else restore old position
+ if (bRedraw || (UINT)scroll.nPos >= (UINT)scroll.nMax - scroll.nPage - 5 || scroll.nMax - scroll.nMin - scroll.nPage < 50)
+ SendMessage(GetParent(hwndRich), GC_SCROLLTOBOTTOM, 0, 0);
+ else
+ SendMessage(hwndRich, EM_SETSCROLLPOS, 0, (LPARAM)&point);
+
+ // do we need to restore the selection
+ if (oldsel.cpMax != oldsel.cpMin) {
+ SendMessage(hwndRich, EM_EXSETSEL, 0, (LPARAM)& oldsel);
+ SendMessage(hwndRich, WM_SETREDRAW, TRUE, 0);
+ InvalidateRect(hwndRich, NULL, TRUE);
+ }
- // need to invalidate the window
- if (bFlag)
- {
- sel.cpMin = sel.cpMax = GetRichTextLength(hwndRich, CP_ACP, FALSE);
- SendMessage(hwndRich, EM_EXSETSEL, 0, (LPARAM)& sel);
- SendMessage(hwndRich, WM_SETREDRAW, TRUE, 0);
- InvalidateRect(hwndRich, NULL, TRUE);
-} } }
+ // need to invalidate the window
+ if (bFlag) {
+ sel.cpMin = sel.cpMax = GetRichTextLength(hwndRich, CP_ACP, FALSE);
+ SendMessage(hwndRich, EM_EXSETSEL, 0, (LPARAM)& sel);
+ SendMessage(hwndRich, WM_SETREDRAW, TRUE, 0);
+ InvalidateRect(hwndRich, NULL, TRUE);
+ }
+}
-char * Log_CreateRtfHeader(MODULEINFO * mi, SESSION_INFO *si)
+char* Log_CreateRtfHeader(MODULEINFO *mi, SESSION_INFO *si)
{
- char *buffer;
int bufferAlloced, bufferEnd, i = 0;
int charset = 0;
BOOL forceCharset = FALSE;
@@ -859,7 +170,7 @@ char * Log_CreateRtfHeader(MODULEINFO * mi, SESSION_INFO *si)
// guesstimate amount of memory for the RTF header
bufferEnd = 0;
bufferAlloced = 4096;
- buffer = (char*) mir_realloc(si->pszHeader, bufferAlloced);
+ char *buffer = (char*)mir_realloc(si->pszHeader, bufferAlloced);
buffer[0] = '\0';
// ### RTF HEADER
@@ -867,93 +178,34 @@ char * Log_CreateRtfHeader(MODULEINFO * mi, SESSION_INFO *si)
// font table
AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "{\\rtf1\\ansi\\deff0{\\fonttbl");
for (i = 0; i < OPTIONS_FONTCOUNT; i++)
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "{\\f%u\\fnil\\fcharset%u%S;}", i, (!forceCharset) ? aFonts[i].lf.lfCharSet : charset, aFonts[i].lf.lfFaceName);
+ AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "{\\f%u\\fnil\\fcharset%u%S;}", i, (!forceCharset) ? pci->aFonts[i].lf.lfCharSet : charset, pci->aFonts[i].lf.lfFaceName);
// colour table
AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "}{\\colortbl ;");
for (i = 0; i < OPTIONS_FONTCOUNT; i++)
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\red%u\\green%u\\blue%u;", GetRValue(aFonts[i].color), GetGValue(aFonts[i].color), GetBValue(aFonts[i].color));
+ AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\red%u\\green%u\\blue%u;", GetRValue(pci->aFonts[i].color), GetGValue(pci->aFonts[i].color), GetBValue(pci->aFonts[i].color));
- for(i = 0; i < mi->nColorCount; i++)
+ for (i = 0; i < mi->nColorCount; i++)
AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\red%u\\green%u\\blue%u;", GetRValue(mi->crColors[i]), GetGValue(mi->crColors[i]), GetBValue(mi->crColors[i]));
// new paragraph
AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "}\\pard");
// set tabs and indents
- {
- int iIndent = 0;
+ int iIndent = 0;
- if (g_Settings.dwIconFlags)
- {
- iIndent += (14*1440)/g_dat.logPixelSX;
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\tx%u", iIndent);
- }
- if (g_Settings.ShowTime)
- {
- int iSize = (g_Settings.LogTextIndent*1440)/g_dat.logPixelSX;
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\tx%u", iIndent + iSize );
- if (g_Settings.LogIndentEnabled)
- iIndent += iSize;
- }
- AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\fi-%u\\li%u", iIndent, iIndent);
+ if (g_Settings.dwIconFlags) {
+ iIndent += (14 * 1440) / g_dat.logPixelSX;
+ AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\tx%u", iIndent);
}
- return buffer;
-}
-
-#define RTFPICTHEADERMAXSIZE 78
-void LoadMsgLogBitmaps(void)
-{
- HBRUSH hBkgBrush = CreateSolidBrush(db_get_dw(NULL, "Chat", "ColorLogBG", GetSysColor(COLOR_WINDOW)));
-
- BITMAPINFOHEADER bih = { 0 };
- bih.biSize = sizeof(bih);
- bih.biBitCount = 24;
- bih.biCompression = BI_RGB;
- bih.biHeight = 10; //GetSystemMetrics(SM_CYSMICON);
- bih.biPlanes = 1;
- bih.biWidth = 10; //GetSystemMetrics(SM_CXSMICON);
-
- int widthBytes = ((bih.biWidth * bih.biBitCount + 31) >> 5) * 4;
-
- RECT rc;
- rc.top = rc.left = 0;
- rc.right = bih.biWidth;
- rc.bottom = bih.biHeight;
-
- HDC hdc = GetDC(NULL);
- HBITMAP hBmp = CreateCompatibleBitmap(hdc, bih.biWidth, bih.biHeight);
- HDC hdcMem = CreateCompatibleDC(hdc);
- PBYTE pBmpBits = (PBYTE) mir_alloc(widthBytes * bih.biHeight);
- for (int i = 0; i < SIZEOF(pLogIconBmpBits); i++) {
- HICON hIcon = GetCachedIcon(logIconNames[i]);
- pLogIconBmpBits[i] = (PBYTE) mir_alloc(RTFPICTHEADERMAXSIZE + (bih.biSize + widthBytes * bih.biHeight) * 2);
- int rtfHeaderSize = sprintf((char*)pLogIconBmpBits[i], "{\\pict\\dibitmap0\\wbmbitspixel%u\\wbmplanes1\\wbmwidthbytes%u\\picw%u\\pich%u ", bih.biBitCount, widthBytes, (unsigned int)bih.biWidth, (unsigned int)bih.biHeight); //!!!!!!!!!!
- HBITMAP hoBmp = (HBITMAP) SelectObject(hdcMem, hBmp);
- FillRect(hdcMem, &rc, hBkgBrush);
- DrawIconEx(hdcMem, 0, 0, hIcon, bih.biWidth, bih.biHeight, 0, NULL, DI_NORMAL);
- SelectObject(hdcMem, hoBmp);
- GetDIBits(hdc, hBmp, 0, bih.biHeight, pBmpBits, (BITMAPINFO *) & bih, DIB_RGB_COLORS);
-
- int n;
- for (n = 0; n < sizeof(BITMAPINFOHEADER); n++)
- sprintf((char*)pLogIconBmpBits[i] + rtfHeaderSize + n * 2, "%02X", ((PBYTE) & bih)[n]); //!!!!!!!!!!!!!!
- for (n = 0; n < widthBytes * bih.biHeight; n += 4)
- sprintf((char*)pLogIconBmpBits[i] + rtfHeaderSize + (bih.biSize + n) * 2, "%02X%02X%02X%02X", pBmpBits[n], pBmpBits[n + 1], pBmpBits[n + 2], pBmpBits[n + 3]); //!!!!!!!!!!!!!!!
-
- logIconBmpSize[i] = rtfHeaderSize + (bih.biSize + widthBytes * bih.biHeight) * 2 + 1;
- pLogIconBmpBits[i][logIconBmpSize[i] - 1] = '}';
+ if (g_Settings.ShowTime) {
+ int iSize = (g_Settings.LogTextIndent * 1440) / g_dat.logPixelSX;
+ AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\tx%u", iIndent + iSize);
+ if (g_Settings.LogIndentEnabled)
+ iIndent += iSize;
}
- mir_free(pBmpBits);
- DeleteDC(hdcMem);
- DeleteObject(hBmp);
- ReleaseDC(NULL, hdc);
- DeleteObject(hBkgBrush);
-}
+ AppendToBuffer(&buffer, &bufferEnd, &bufferAlloced, "\\fi-%u\\li%u", iIndent, iIndent);
-void FreeMsgLogBitmaps(void)
-{
- for (int i = 0; i < SIZEOF(pLogIconBmpBits); i++)
- mir_free(pLogIconBmpBits[i]);
+ return buffer;
}
diff --git a/plugins/Scriver/src/chat/main.cpp b/plugins/Scriver/src/chat/main.cpp
index 9973b86497..a563b99aaf 100644
--- a/plugins/Scriver/src/chat/main.cpp
+++ b/plugins/Scriver/src/chat/main.cpp
@@ -24,26 +24,113 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
void RegisterChatFonts( void );
//globals
-HMENU g_hMenu = NULL;
-HGENMENU hJoinMenuItem, hLeaveMenuItem;
+CHAT_MANAGER *pci;
+HMENU g_hMenu = NULL;
-FONTINFO aFonts[OPTIONS_FONTCOUNT];
-HBRUSH hListBkgBrush = NULL;
-HBRUSH hListSelectedBkgBrush = NULL;
+HBRUSH hListBkgBrush = NULL;
+HBRUSH hListSelectedBkgBrush = NULL;
-TCHAR* pszActiveWndID = 0;
-char* pszActiveWndModule = 0;
+GlobalLogSettings g_Settings;
-struct GlobalLogSettings_t g_Settings;
+static void OnAddLog(SESSION_INFO *si, int isOk)
+{
+ if (isOk && si->hWnd)
+ SendMessage(si->hWnd, GC_ADDLOG, 0, 0);
+ else if (si->hWnd)
+ SendMessage(si->hWnd, GC_REDRAWLOG2, 0, 0);
+}
+
+static void OnSessionDblClick(SESSION_INFO *si)
+{
+ PostMessage(si->hWnd, GC_CLOSEWINDOW, 0, 0);
+}
+
+static void OnSessionRemove(SESSION_INFO *si)
+{
+ if (si->hWnd)
+ SendMessage(si->hWnd, GC_EVENT_CONTROL + WM_USER + 500, SESSION_TERMINATE, 0);
+}
+
+static void OnSessionRename(SESSION_INFO *si)
+{
+ if (si->hWnd)
+ SendMessage(si->hWnd, DM_UPDATETITLEBAR, 0, 0);
+}
+
+static void OnSessionReplace(SESSION_INFO *si)
+{
+ if (si->hWnd)
+ RedrawWindow(GetDlgItem(si->hWnd, IDC_CHAT_LIST), NULL, NULL, RDW_INVALIDATE);
+}
+
+static void OnEventBroadcast(SESSION_INFO *si, GCEVENT *gce)
+{
+ if (pci->SM_AddEvent(si->ptszID, si->pszModule, gce, FALSE) && si->hWnd && si->bInitDone)
+ SendMessage(si->hWnd, GC_ADDLOG, 0, 0);
+ else if (si->hWnd && si->bInitDone)
+ SendMessage(si->hWnd, GC_REDRAWLOG2, 0, 0);
+}
+
+static void OnSetStatusBar(SESSION_INFO *si)
+{
+ if (si->hWnd)
+ SendMessage(si->hWnd, DM_UPDATETITLEBAR, 0, 0);
+}
+
+static void OnNewUser(SESSION_INFO *si, USERINFO*)
+{
+ if (si->hWnd)
+ SendMessage(si->hWnd, GC_UPDATENICKLIST, 0, 0);
+}
+
+static void OnSetStatus(SESSION_INFO *si, int wStatus)
+{
+ PostMessage(si->hWnd, GC_FIXTABICONS, 0, 0);
+}
+
+static void OnLoadSettings()
+{
+ if (hListBkgBrush != NULL)
+ DeleteObject(hListBkgBrush);
+ hListBkgBrush = CreateSolidBrush(db_get_dw(NULL, "Chat", "ColorNicklistBG", GetSysColor(COLOR_WINDOW)));
+
+ if (hListSelectedBkgBrush != NULL)
+ DeleteObject(hListSelectedBkgBrush);
+ hListSelectedBkgBrush = CreateSolidBrush(db_get_dw(NULL, "Chat", "ColorNicklistSelectedBG", GetSysColor(COLOR_HIGHLIGHT)));
+}
+
+static void OnFlashWindow(SESSION_INFO *si, int bInactive)
+{
+ if (bInactive && si->hWnd && db_get_b(NULL, "Chat", "FlashWindowHighlight", 0) != 0)
+ SendMessage(GetParent(si->hWnd), CM_STARTFLASHING, 0, 0);
+ if (bInactive && si->hWnd)
+ SendMessage(si->hWnd, GC_SETMESSAGEHIGHLIGHT, 0, 0);
+}
int Chat_Load()
{
- InitializeCriticalSection(&cs);
+ mir_getCI(&g_Settings);
+ pci->cbModuleInfo = sizeof(MODULEINFO);
+ pci->cbSession = sizeof(SESSION_INFO);
+ pci->OnNewUser = OnNewUser;
+
+ pci->OnSetStatus = OnSetStatus;
+
+ pci->OnAddLog = OnAddLog;
+ pci->OnLoadSettings = OnLoadSettings;
+
+ pci->OnSessionRemove = OnSessionRemove;
+ pci->OnSessionRename = OnSessionRename;
+ pci->OnSessionReplace = OnSessionReplace;
+ pci->OnSessionDblClick = OnSessionDblClick;
+
+ pci->OnEventBroadcast = OnEventBroadcast;
+ pci->OnSetStatusBar = OnSetStatusBar;
+ pci->OnFlashWindow = OnFlashWindow;
+ pci->ShowRoom = ShowRoom;
+
g_hMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU));
TranslateMenu(g_hMenu);
- HookEvents();
- CreateServiceFunctions();
- CreateHookableEvents();
return 0;
}
@@ -51,54 +138,13 @@ int Chat_Unload(void)
{
db_set_w(NULL, "Chat", "SplitterX", (WORD)g_Settings.iSplitterX);
- CList_SetAllOffline(TRUE, NULL);
-
- mir_free( pszActiveWndID );
- mir_free( pszActiveWndModule );
-
- DestroyHookableEvents();
-
DestroyMenu(g_hMenu);
- FreeIcons();
OptionsUnInit();
- DeleteCriticalSection(&cs);
return 0;
}
int Chat_ModulesLoaded(WPARAM wParam,LPARAM lParam)
{
- char* mods[3] = { "Chat", "ChatFonts" };
- CallService("DBEditorpp/RegisterModule", (WPARAM)mods, 2);
- RegisterChatFonts();
OptionsInit();
- LoadIcons();
- {
- CLISTMENUITEM mi = { sizeof(mi) };
- mi.cbSize = sizeof(mi);
- mi.position = -2000090001;
- mi.flags = CMIF_DEFAULT;
- mi.icolibItem = LoadSkinnedIconHandle( SKINICON_CHAT_JOIN );
- mi.pszName = LPGEN("&Join");
- mi.pszService = "GChat/JoinChat";
- hJoinMenuItem = Menu_AddContactMenuItem(&mi);
-
- mi.position = -2000090000;
- mi.flags = CMIF_NOTOFFLINE;
- mi.icolibItem = LoadSkinnedIconHandle( SKINICON_CHAT_LEAVE );
- mi.pszName = LPGEN("&Leave");
- mi.pszService = "GChat/LeaveChat";
- hLeaveMenuItem = Menu_AddContactMenuItem(&mi);
- }
- CList_SetAllOffline(TRUE, NULL);
return 0;
}
-
-void LoadIcons(void)
-{
- LoadMsgLogBitmaps();
-}
-
-void FreeIcons(void)
-{
- FreeMsgLogBitmaps();
-}
diff --git a/plugins/Scriver/src/chat/manager.cpp b/plugins/Scriver/src/chat/manager.cpp
index d0ab53966b..192906fb40 100644
--- a/plugins/Scriver/src/chat/manager.cpp
+++ b/plugins/Scriver/src/chat/manager.cpp
@@ -21,161 +21,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "../commonheaders.h"
-void LoadModuleIcons(MODULEINFO * mi);
-
-#define WINDOWS_COMMANDS_MAX 30
-#define STATUSICONCOUNT 6
-
-SESSION_INFO* m_WndList = 0;
-TABLIST * g_TabList = 0;
-MODULEINFO *m_ModList = 0;
-
-void SetActiveSession(const TCHAR *pszID, const char* pszModule)
-{
- SESSION_INFO *si = SM_FindSession(pszID, pszModule);
- if ( si )
- SetActiveSessionEx(si);
-}
-
-void SetActiveSessionEx(SESSION_INFO *si)
-{
- if (si) {
- replaceStrT(pszActiveWndID, si->ptszID);
- replaceStr(pszActiveWndModule, si->pszModule);
- }
-}
-
-SESSION_INFO* GetActiveSession( void )
-{
- SESSION_INFO *si = SM_FindSession( pszActiveWndID, pszActiveWndModule );
- if ( si )
- return si;
-
- return m_WndList;
-}
-
-//---------------------------------------------------
-// Session Manager functions
-//
-// Keeps track of all sessions and its windows
-//---------------------------------------------------
-
-SESSION_INFO* SM_AddSession( const TCHAR *pszID, const char* pszModule)
-{
- if ( !pszID || !pszModule )
- return NULL;
-
- if ( !SM_FindSession(pszID, pszModule)) {
- SESSION_INFO *node = (SESSION_INFO*) mir_calloc(sizeof(SESSION_INFO));
- node->ptszID = mir_tstrdup( pszID );
- node->pszModule = mir_strdup( pszModule );
- node->windowData.flags = CWDF_RTF_INPUT;
-
- if (m_WndList == NULL) { // list is empty
- m_WndList = node;
- node->next = NULL;
- }
- else {
- node->next = m_WndList;
- m_WndList = node;
- }
- return node;
- }
- return NULL;
-}
-
-int SM_RemoveSession(const TCHAR *pszID, const char* pszModule, BOOL removeContact)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if (!pszModule)
- return FALSE;
-
- while (pTemp != NULL)
- {
- if (((!pszID && pTemp->iType != GCW_SERVER) || !lstrcmpi(pTemp->ptszID,pszID)) && !lstrcmpiA(pTemp->pszModule,pszModule)) // match
- {
- DWORD dw = pTemp->dwItemData;
-
- if (pTemp->hWnd )
- SendMessage(pTemp->hWnd, GC_EVENT_CONTROL+WM_USER+500, SESSION_TERMINATE, 0);
-
- DoEventHook(pTemp->ptszID, pTemp->pszModule, GC_SESSION_TERMINATE, NULL, NULL, (DWORD)pTemp->dwItemData);
-
- if (pLast == NULL)
- m_WndList = pTemp->next;
- else
- pLast->next = pTemp->next;
-
- UM_RemoveAll(&pTemp->pUsers);
- TM_RemoveAll(&pTemp->pStatuses);
- LM_RemoveAll(&pTemp->pLog, &pTemp->pLogEnd);
- pTemp->iStatusCount = 0;
- pTemp->nUsersInNicklist = 0;
-
- if (pTemp->windowData.hContact)
- {
- CList_SetOffline(pTemp->windowData.hContact, pTemp->iType == GCW_CHATROOM?TRUE:FALSE);
-/* if (pTemp->iType != GCW_SERVER)
- db_set_b(pTemp->windowData.hContact, "CList", "Hidden", 1);*/
- }
- db_set_s(pTemp->windowData.hContact, pTemp->pszModule , "Topic", "");
- db_set_s(pTemp->windowData.hContact, pTemp->pszModule, "StatusBar", "");
- db_unset(pTemp->windowData.hContact, "CList", "StatusMsg");
-
- if (removeContact)
- CallService(MS_DB_CONTACT_DELETE, (WPARAM)pTemp->windowData.hContact, 0);
-
- mir_free(pTemp->pszModule);
- mir_free(pTemp->ptszID);
- mir_free(pTemp->ptszName);
- mir_free(pTemp->ptszStatusbarText);
- mir_free(pTemp->ptszTopic);
- mir_free(pTemp->pszHeader);
- mir_free(pTemp->pszID);
- mir_free(pTemp->pszName);
-
- // delete commands
- tcmdlist_free(pTemp->windowData.cmdList);
- mir_free(pTemp);
- if (pszID)
- return (int)dw;
- if (pLast)
- pTemp = pLast->next;
- else
- pTemp = m_WndList;
- }
- else
- {
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- }
- return FALSE;
-}
-
-SESSION_INFO* SM_FindSession(const TCHAR *pszID, const char* pszModule)
-{
- SESSION_INFO *pTemp = m_WndList;
-
- if ( !pszID || !pszModule )
- return NULL;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA(pTemp->pszModule,pszModule))
- return pTemp;
-
- pTemp = pTemp->next;
- }
- return NULL;
-}
-
HWND SM_FindWindowByContact(HANDLE hContact)
{
- SESSION_INFO *pTemp = m_WndList;
+ SESSION_INFO *pTemp = pci->wndList;
- while ( pTemp != NULL ) {
- if ( pTemp->windowData.hContact == hContact)
+ while (pTemp != NULL) {
+ if (pTemp->windowData.hContact == hContact)
return pTemp->hWnd;
pTemp = pTemp->next;
@@ -183,50 +34,30 @@ HWND SM_FindWindowByContact(HANDLE hContact)
return NULL;
}
-BOOL SM_SetOffline(const TCHAR *pszID, const char* pszModule)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if (!pszModule)
- return FALSE;
-
- while (pTemp != NULL)
- {
- if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA(pTemp->pszModule,pszModule))
- {
- UM_RemoveAll(&pTemp->pUsers);
- pTemp->nUsersInNicklist = 0;
- if (pTemp->iType != GCW_SERVER)
- pTemp->bInitDone = FALSE;
-
- if (pszID)
- return TRUE;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return TRUE;
-}
-
-BOOL SM_SetStatusEx( const TCHAR *pszID, const char* pszModule, const TCHAR* pszText, int flags )
+SESSION_INFO* SM_FindSessionAutoComplete(const char* pszModule, SESSION_INFO* currSession, SESSION_INFO* prevSession, const TCHAR* pszOriginal, const TCHAR* pszCurrent)
{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if (!pszModule)
- return FALSE;
-
- while ( pTemp != NULL ) {
- if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA(pTemp->pszModule,pszModule)) {
- UM_SetStatusEx(pTemp->pUsers, pszText, flags);
- if (pTemp->hWnd)
- RedrawWindow(GetDlgItem(pTemp->hWnd, IDC_CHAT_LIST), NULL, NULL, RDW_INVALIDATE);
- if (pszID)
- return TRUE;
+ SESSION_INFO* pResult = NULL;
+ if (prevSession == NULL && my_strstri(currSession->ptszName, pszOriginal) == currSession->ptszName)
+ pResult = currSession;
+ else {
+ TCHAR* pszName = NULL;
+ SESSION_INFO* pTemp = pci->wndList;
+ if (currSession == prevSession)
+ pszCurrent = pszOriginal;
+
+ while (pTemp != NULL) {
+ if (pTemp != currSession && !lstrcmpiA(pszModule, pTemp->pszModule)) {
+ if (my_strstri(pTemp->ptszName, pszOriginal) == pTemp->ptszName) {
+ if (prevSession != pTemp && lstrcmpi(pTemp->ptszName, pszCurrent) > 0 && (!pszName || lstrcmpi(pTemp->ptszName, pszName) < 0)) {
+ pResult = pTemp;
+ pszName = pTemp->ptszName;
+ }
+ }
+ }
+ pTemp = pTemp->next;
}
- pLast = pTemp;
- pTemp = pTemp->next;
}
- return TRUE;
+ return pResult;
}
char SM_GetStatusIndicator(SESSION_INFO *si, USERINFO *ui)
@@ -235,11 +66,9 @@ char SM_GetStatusIndicator(SESSION_INFO *si, USERINFO *ui)
if (!ui || !si)
return '\0';
- ti = TM_FindStatus(si->pStatuses, TM_WordToString(si->pStatuses, ui->Status));
- if (ti)
- {
- if ((INT_PTR)ti->hIcon < STATUSICONCOUNT)
- {
+ ti = pci->TM_FindStatus(si->pStatuses, pci->TM_WordToString(si->pStatuses, ui->Status));
+ if (ti) {
+ if ((INT_PTR)ti->hIcon < STATUSICONCOUNT) {
INT_PTR id = si->iStatusCount - (INT_PTR)ti->hIcon - 1;
if (id == 0)
return '\0';
@@ -259,1127 +88,3 @@ char SM_GetStatusIndicator(SESSION_INFO *si, USERINFO *ui)
}
return '\0';
}
-
-HICON SM_GetStatusIcon(SESSION_INFO *si, USERINFO *ui)
-{
- STATUSINFO * ti;
- if (!ui || !si)
- return NULL;
-
- ti = TM_FindStatus(si->pStatuses, TM_WordToString(si->pStatuses, ui->Status));
- if (ti)
- {
- if ((INT_PTR)ti->hIcon < STATUSICONCOUNT)
- {
- INT_PTR id = si->iStatusCount - (INT_PTR)ti->hIcon - 1;
- char name[128];
- mir_snprintf(name, SIZEOF(name), "chat_status%d", id);
- return GetCachedIcon(name);
- }
- else
- return ti->hIcon;
- }
- return GetCachedIcon("chat_status0");
-}
-
-BOOL SM_AddEventToAllMatchingUID(GCEVENT *gce)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
- int bManyFix = 0;
-
- while (pTemp != NULL) {
- if ( !lstrcmpiA( pTemp->pszModule, gce->pDest->pszModule )) {
- if ( UM_FindUser( pTemp->pUsers, gce->ptszUID )) {
- if ( pTemp->bInitDone ) {
- if ( SM_AddEvent(pTemp->ptszID, pTemp->pszModule, gce, FALSE ) && pTemp->hWnd && pTemp->bInitDone) {
- SendMessage(pTemp->hWnd, GC_ADDLOG, 0, 0);
- }
- else if (pTemp->hWnd && pTemp->bInitDone) {
- SendMessage(pTemp->hWnd, GC_REDRAWLOG2, 0, 0);
- }
- if (!(gce->dwFlags & GCEF_NOTNOTIFY))
- DoSoundsFlashPopupTrayStuff(pTemp, gce, FALSE, bManyFix);
- bManyFix ++;
- if ((gce->dwFlags & GCEF_ADDTOLOG) && g_Settings.LoggingEnabled)
- LogToFile(pTemp, gce);
- } } }
-
- pLast = pTemp;
- pTemp = pTemp->next;
- }
-
- return 0;
-}
-
-BOOL SM_AddEvent(const TCHAR *pszID, const char* pszModule, GCEVENT *gce, BOOL bIsHighlighted)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if (!pszID || !pszModule)
- return TRUE;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA(pTemp->pszModule,pszModule)) {
- LOGINFO * li = LM_AddEvent(&pTemp->pLog, &pTemp->pLogEnd);
- pTemp->iEventCount += 1;
-
- li->iType = gce->pDest->iType;
- li->ptszNick = mir_tstrdup( gce->ptszNick );
- li->ptszText = mir_tstrdup( gce->ptszText );
- li->ptszStatus = mir_tstrdup( gce->ptszStatus );
- li->ptszUserInfo = mir_tstrdup( gce->ptszUserInfo );
-
- li->bIsMe = gce->bIsMe;
- li->time = gce->time;
- li->bIsHighlighted = bIsHighlighted;
-
- if (g_Settings.iEventLimit > 0 && pTemp->iEventCount > g_Settings.iEventLimit + 20) {
- LM_TrimLog(&pTemp->pLog, &pTemp->pLogEnd, pTemp->iEventCount - g_Settings.iEventLimit);
- pTemp->iEventCount = g_Settings.iEventLimit;
- return FALSE;
- }
- return TRUE;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return TRUE;
-}
-
-USERINFO * SM_AddUser( SESSION_INFO * si, const TCHAR* pszUID, const TCHAR* pszNick, WORD wStatus)
-{
- USERINFO * p = UM_AddUser( si->pStatuses, &si->pUsers, pszUID, pszNick, wStatus);
- si->nUsersInNicklist++;
- return p;
-}
-
-BOOL SM_MoveUser(const TCHAR *pszID, const char* pszModule, const TCHAR* pszUID)
-{
- SESSION_INFO *pTemp = m_WndList;
-
- if (!pszID || !pszModule || !pszUID)
- return FALSE;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) {
- UM_SortUser( &pTemp->pUsers, pszUID );
- return TRUE;
- }
- pTemp = pTemp->next;
- }
-
- return FALSE;
-}
-
-BOOL SM_RemoveUser(const TCHAR *pszID, const char* pszModule, const TCHAR* pszUID)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if (!pszModule || !pszUID)
- return FALSE;
-
- while ( pTemp != NULL ) {
- if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) {
- DWORD dw;
- USERINFO *ui = UM_FindUser(pTemp->pUsers, pszUID);
- if ( ui ) {
- pTemp->nUsersInNicklist--;
-
- dw = UM_RemoveUser(&pTemp->pUsers, pszUID);
-
- if (pTemp->hWnd)
- SendMessage(pTemp->hWnd, GC_UPDATENICKLIST, 0, 0);
-
- if (pszID)
- return TRUE;
- } }
-
- pLast = pTemp;
- pTemp = pTemp->next;
- }
-
- return 0;
-}
-
-USERINFO * SM_GetUserFromIndex(const TCHAR *pszID, const char* pszModule, int index)
-{
- SESSION_INFO *pTemp = m_WndList;
-
- if (!pszModule)
- return FALSE;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule ))
- return UM_FindUserFromIndex( pTemp->pUsers, index );
- pTemp = pTemp->next;
- }
-
- return NULL;
-}
-
-
-STATUSINFO * SM_AddStatus(const TCHAR *pszID, const char* pszModule, const TCHAR* pszStatus)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if (!pszID || !pszModule )
- return NULL;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) {
- STATUSINFO* ti = TM_AddStatus( &pTemp->pStatuses, pszStatus, &pTemp->iStatusCount );
- if ( ti )
- pTemp->iStatusCount++;
- return ti;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
-
- return 0;
-}
-
-BOOL SM_GiveStatus(const TCHAR *pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszStatus)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if ( !pszID || !pszModule )
- return FALSE;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) {
- USERINFO *ui = UM_GiveStatus(pTemp->pUsers, pszUID, TM_StringToWord(pTemp->pStatuses, pszStatus));
- if (ui) {
- SM_MoveUser( pTemp->ptszID, pTemp->pszModule, ui->pszUID );
- if ( pTemp->hWnd )
- SendMessage(pTemp->hWnd, GC_UPDATENICKLIST, 0, 0);
- }
- return TRUE;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
-
- return FALSE;
-}
-
-BOOL SM_SetContactStatus(const TCHAR *pszID, const char* pszModule, const TCHAR* pszUID, WORD wStatus)
-{
- SESSION_INFO* pTemp = m_WndList, *pLast = NULL;
-
- if ( !pszID || !pszModule )
- return FALSE;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) {
- USERINFO *ui = UM_SetContactStatus(pTemp->pUsers, pszUID, wStatus);
- if (ui) {
- SM_MoveUser( pTemp->ptszID, pTemp->pszModule, ui->pszUID );
- if ( pTemp->hWnd )
- SendMessage(pTemp->hWnd, GC_UPDATENICKLIST, 0, 0);
- }
- return TRUE;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
-
- return FALSE;
-}
-
-BOOL SM_TakeStatus(const TCHAR *pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszStatus)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if (!pszID || !pszModule )
- return FALSE;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) {
- USERINFO* ui = UM_TakeStatus(pTemp->pUsers, pszUID, TM_StringToWord(pTemp->pStatuses, pszStatus));
- if ( ui ) {
- SM_MoveUser(pTemp->ptszID, pTemp->pszModule, ui->pszUID);
- if ( pTemp->hWnd )
- SendMessage(pTemp->hWnd, GC_UPDATENICKLIST, 0, 0);
- }
- return TRUE;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
-
- return FALSE;
-}
-LRESULT SM_SendMessage(const TCHAR *pszID, const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- while ( pTemp && pszModule ) {
- if (( !pszID ||!lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) {
- if ( pTemp->hWnd ) {
- LRESULT i = SendMessage(pTemp->hWnd, msg, wParam, lParam);
- if ( pszID )
- return i;
- }
- if ( pszID )
- return 0;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return 0;
-}
-
-BOOL SM_PostMessage(const TCHAR *pszID, const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if (!pszID || !pszModule)
- return 0;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) {
- if ( pTemp->hWnd )
- return PostMessage(pTemp->hWnd, msg, wParam, lParam);
-
- return FALSE;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return FALSE;
-}
-
-BOOL SM_BroadcastMessage(const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam, BOOL bAsync)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- while (pTemp != NULL)
- {
- if (!pszModule || !lstrcmpiA(pTemp->pszModule, pszModule))
- {
- if (pTemp->hWnd)
- {
- if (bAsync)
- PostMessage(pTemp->hWnd, msg, wParam, lParam);
- else
- SendMessage(pTemp->hWnd, msg, wParam, lParam);
- }
-
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return TRUE;
-}
-
-BOOL SM_SetStatus(const TCHAR *pszID, const char* pszModule, int wStatus)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if (!pszModule)
- return FALSE;
-
- while ( pTemp != NULL ) {
- if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) {
- pTemp->wStatus = wStatus;
-
- if ( pTemp->windowData.hContact ) {
- if ( pTemp->iType != GCW_SERVER && wStatus != ID_STATUS_OFFLINE )
- db_unset(pTemp->windowData.hContact, "CList", "Hidden");
-
- db_set_w(pTemp->windowData.hContact, pTemp->pszModule, "Status", (WORD)wStatus);
- }
-
- PostMessage(pTemp->hWnd, GC_FIXTABICONS, 0, 0);
-
- if (pszID)
- return TRUE;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return TRUE;
-}
-
-BOOL SM_SendUserMessage(const TCHAR *pszID, const char* pszModule, const TCHAR* pszText)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if ( !pszModule || !pszText )
- return FALSE;
-
- while ( pTemp != NULL ) {
- if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) {
- if ( pTemp->iType == GCW_CHATROOM )
- DoEventHook( pTemp->ptszID, pTemp->pszModule, GC_USER_MESSAGE, NULL, pszText, 0);
- if (pszID)
- return TRUE;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return TRUE;
-}
-
-
-BOOL SM_ChangeUID(const TCHAR *pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszNewUID)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if (!pszModule)
- return FALSE;
-
- while ( pTemp != NULL ) {
- if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) {
- USERINFO *ui = UM_FindUser(pTemp->pUsers, pszUID);
- if (ui)
- replaceStrT(ui->pszUID, pszNewUID);
-
- if ( pszID )
- return TRUE;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return TRUE;
-}
-
-
-BOOL SM_ChangeNick(const TCHAR *pszID, const char* pszModule, GCEVENT *gce)
-{
- SESSION_INFO *pTemp = m_WndList, *pLast = NULL;
-
- if (!pszModule)
- return FALSE;
-
- while ( pTemp != NULL ) {
- if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) {
- USERINFO* ui = UM_FindUser(pTemp->pUsers, gce->ptszUID );
- if (ui) {
- replaceStrT(ui->pszNick, gce->ptszText);
- SM_MoveUser(pTemp->ptszID, pTemp->pszModule, ui->pszUID);
- if (pTemp->hWnd)
- SendMessage(pTemp->hWnd, GC_UPDATENICKLIST, 0, 0);
- }
-
- if (pszID)
- return TRUE;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return TRUE;
-}
-
-BOOL SM_RemoveAll(void)
-{
- while (m_WndList) {
- SESSION_INFO *pLast = m_WndList->next;
-
- if (m_WndList->hWnd)
- SendMessage(m_WndList->hWnd, GC_EVENT_CONTROL+WM_USER+500, SESSION_TERMINATE, 0);
- DoEventHook(m_WndList->ptszID, m_WndList->pszModule, GC_SESSION_TERMINATE, NULL, NULL, (DWORD)m_WndList->dwItemData);
- if (m_WndList->windowData.hContact)
- CList_SetOffline(m_WndList->windowData.hContact, m_WndList->iType == GCW_CHATROOM?TRUE:FALSE);
- db_set_s(m_WndList->windowData.hContact, m_WndList->pszModule , "Topic", "");
- db_unset(m_WndList->windowData.hContact, "CList", "StatusMsg");
- db_set_s(m_WndList->windowData.hContact, m_WndList->pszModule, "StatusBar", "");
-
- UM_RemoveAll(&m_WndList->pUsers);
- TM_RemoveAll(&m_WndList->pStatuses);
- LM_RemoveAll(&m_WndList->pLog, &m_WndList->pLogEnd);
- m_WndList->iStatusCount = 0;
- m_WndList->nUsersInNicklist = 0;
-
- mir_free(m_WndList->pszModule);
- mir_free(m_WndList->ptszID);
- mir_free(m_WndList->ptszName);
- mir_free(m_WndList->ptszStatusbarText);
- mir_free(m_WndList->ptszTopic);
- mir_free(m_WndList->pszHeader);
- tcmdlist_free(m_WndList->windowData.cmdList);
- mir_free(m_WndList);
- m_WndList = pLast;
- }
- m_WndList = NULL;
- return TRUE;
-}
-
-int SM_GetCount(const char* pszModule)
-{
- SESSION_INFO* pTemp = m_WndList;
- int count = 0;
-
- while (pTemp != NULL)
- {
- if (!lstrcmpiA(pszModule, pTemp->pszModule))
- count++;
-
- pTemp = pTemp->next;
- }
- return count;
-}
-
-SESSION_INFO* SM_FindSessionByIndex(const char* pszModule, int iItem)
-{
- SESSION_INFO* pTemp = m_WndList;
- int count = 0;
- while (pTemp != NULL)
- {
- if (!lstrcmpiA(pszModule, pTemp->pszModule))
- {
- if (iItem ==count)
- return pTemp;
- else
- count++;
- }
-
- pTemp = pTemp->next;
- }
- return NULL;
-
-}
-
-char* SM_GetUsers(SESSION_INFO *si)
-{
- SESSION_INFO* pTemp = m_WndList;
- USERINFO* utemp = NULL;
- char* p = NULL;
- int alloced = 0;
-
- if ( si == NULL )
- return NULL;
-
- while (pTemp != NULL) {
- if ( si == pTemp ) {
- if (( utemp = pTemp->pUsers ) == NULL )
- return NULL;
-
- break;
- }
- pTemp = pTemp->next;
- }
-
- do {
- int pLen = lstrlenA(p), nameLen = lstrlen(utemp->pszUID);
- if ( pLen + nameLen + 2 > alloced )
- p = (char*)mir_realloc( p, alloced += 4096 );
-
- WideCharToMultiByte( CP_ACP, 0, utemp->pszUID, -1, p + pLen, nameLen+1, 0, 0 );
-
- lstrcpyA( p + pLen + nameLen, " " );
- utemp = utemp->next;
- }
- while ( utemp != NULL );
- return p;
-}
-
-
-SESSION_INFO* SM_FindSessionAutoComplete(const char* pszModule, SESSION_INFO* currSession, SESSION_INFO* prevSession, const TCHAR* pszOriginal, const TCHAR* pszCurrent)
-{
- SESSION_INFO* pResult = NULL;
- if (prevSession == NULL && my_strstri( currSession->ptszName, pszOriginal) == currSession->ptszName) {
- pResult = currSession;
- } else {
- TCHAR* pszName = NULL;
- SESSION_INFO* pTemp = m_WndList;
- if (currSession == prevSession) {
- pszCurrent = pszOriginal;
- }
- while (pTemp != NULL) {
- if (pTemp != currSession && !lstrcmpiA(pszModule, pTemp->pszModule)) {
- if ( my_strstri( pTemp->ptszName, pszOriginal) == pTemp->ptszName ) {
- if ( prevSession != pTemp && lstrcmpi( pTemp->ptszName, pszCurrent ) > 0 && ( !pszName || lstrcmpi( pTemp->ptszName, pszName ) < 0)) {
- pResult = pTemp;
- pszName = pTemp->ptszName;
- }
- }
- }
- pTemp = pTemp->next;
- }
- }
- return pResult;
-
-}
-
-
-//---------------------------------------------------
-// Module Manager functions
-//
-// Necessary to keep track of all modules
-// that has registered with the plugin
-//---------------------------------------------------
-
-MODULEINFO* MM_AddModule(const char* pszModule)
-{
- if (!pszModule)
- return NULL;
- if (!MM_FindModule(pszModule))
- {
- MODULEINFO *node = (MODULEINFO*) mir_calloc(sizeof(MODULEINFO));
-
- node->pszModule = mir_strdup(pszModule);
-
- if (m_ModList == NULL) // list is empty
- {
- m_ModList = node;
- }
- else
- {
- node->next = m_ModList;
- m_ModList = node;
- }
- return node;
- }
- return FALSE;
-}
-
-void MM_IconsChanged(void)
-{
- MODULEINFO *pTemp = m_ModList;
-
- while (pTemp != NULL)
- {
- if (pTemp->hOnlineTalkIcon)
- DestroyIcon(pTemp->hOnlineTalkIcon);
- if (pTemp->hOfflineTalkIcon)
- DestroyIcon(pTemp->hOfflineTalkIcon);
-
- LoadModuleIcons(pTemp);
- pTemp = pTemp->next;
- }
- return;
-}
-void MM_FontsChanged(void)
-{
- SESSION_INFO* pTemp = m_WndList;
- SetIndentSize();
- while (pTemp != NULL)
- {
- pTemp->pszHeader = Log_CreateRtfHeader(MM_FindModule(pTemp->pszModule), pTemp);
- pTemp = pTemp->next;
- }
- return;
-}
-MODULEINFO* MM_FindModule(const char* pszModule)
-{
- MODULEINFO *pTemp = m_ModList, *pLast = NULL;
-
- if (!pszModule)
- return NULL;
-
- while (pTemp != NULL) {
- if (lstrcmpiA(pTemp->pszModule,pszModule) == 0)
- return pTemp;
-
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return 0;
-}
-
-// stupid thing..
-void MM_FixColors()
-{
- MODULEINFO *pTemp = m_ModList;
-
- while (pTemp != NULL)
- {
- CheckColorsInModule(pTemp->pszModule);
- pTemp = pTemp->next;
- }
- return;
-}
-
-BOOL MM_RemoveAll (void)
-{
- while (m_ModList != NULL)
- {
- MODULEINFO *pLast = m_ModList->next;
- mir_free(m_ModList->pszModule);
- mir_free(m_ModList->ptszModDispName);
- mir_free(m_ModList->crColors);
-
- if (m_ModList->hOnlineTalkIcon)
- DestroyIcon(m_ModList->hOnlineTalkIcon);
- if (m_ModList->hOfflineTalkIcon)
- DestroyIcon(m_ModList->hOfflineTalkIcon);
-
- mir_free(m_ModList);
- m_ModList = pLast;
- }
- m_ModList = NULL;
- return TRUE;
-}
-
-//---------------------------------------------------
-// Status manager functions
-//
-// Necessary to keep track of what user statuses
-// per window nicklist that is available
-//---------------------------------------------------
-
-STATUSINFO * TM_AddStatus(STATUSINFO** ppStatusList, const TCHAR* pszStatus, int* iCount)
-{
- if (!ppStatusList || !pszStatus)
- return NULL;
-
- if ( !TM_FindStatus(*ppStatusList, pszStatus)) {
- STATUSINFO *node = (STATUSINFO*)mir_calloc(sizeof(STATUSINFO));
- replaceStrT(node->pszGroup, pszStatus);
- node->hIcon = (HICON)(*iCount);
- while ((INT_PTR)node->hIcon > STATUSICONCOUNT - 1)
- node->hIcon--;
-
- if (*ppStatusList == NULL) // list is empty
- {
- node->Status = 1;
- *ppStatusList = node;
- node->next = NULL;
- }
- else
- {
- node->Status = ppStatusList[0]->Status*2;
- node->next = *ppStatusList;
- *ppStatusList = node;
- }
- return node;
-
- }
- return FALSE;
-}
-
-STATUSINFO * TM_FindStatus(STATUSINFO* pStatusList, const TCHAR* pszStatus)
-{
- STATUSINFO *pTemp = pStatusList, *pLast = NULL;
-
- if (!pStatusList || !pszStatus)
- return NULL;
-
- while ( pTemp != NULL ) {
- if ( lstrcmpi(pTemp->pszGroup, pszStatus) == 0 )
- return pTemp;
-
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return 0;
-}
-
-WORD TM_StringToWord(STATUSINFO* pStatusList, const TCHAR* pszStatus)
-{
- STATUSINFO *pTemp = pStatusList, *pLast = NULL;
-
- if (!pStatusList || !pszStatus)
- return 0;
-
- while (pTemp != NULL) {
- if ( lstrcmpi( pTemp->pszGroup, pszStatus ) == 0 )
- return pTemp->Status;
-
- if ( pTemp->next == NULL )
- return pStatusList->Status;
-
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return 0;
-}
-
-TCHAR* TM_WordToString(STATUSINFO* pStatusList, WORD Status)
-{
- STATUSINFO *pTemp = pStatusList, *pLast = NULL;
-
- if (!pStatusList)
- return NULL;
-
- while (pTemp != NULL) {
- if (pTemp->Status&Status) {
- Status -= pTemp->Status;
- if (Status == 0)
- return pTemp->pszGroup;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return 0;
-}
-
-BOOL TM_RemoveAll (STATUSINFO** ppStatusList)
-{
-
- if (!ppStatusList)
- return FALSE;
-
- while (*ppStatusList != NULL)
- {
- STATUSINFO *pLast = ppStatusList[0]->next;
- mir_free(ppStatusList[0]->pszGroup);
- if ((INT_PTR)ppStatusList[0]->hIcon > 10)
- DestroyIcon(ppStatusList[0]->hIcon);
- mir_free(*ppStatusList);
- *ppStatusList = pLast;
- }
- *ppStatusList = NULL;
- return TRUE;
-}
-
-//---------------------------------------------------
-// User manager functions
-//
-// Necessary to keep track of the users
-// in a window nicklist
-//---------------------------------------------------
-
-
-static int UM_CompareItem(USERINFO * u1, const TCHAR* pszNick, WORD wStatus)
-{
- int i;
-
- WORD dw1 = u1->Status;
- WORD dw2 = wStatus;
-
- for (i=0; i<8; i++ )
- {
- if (( dw1 & 1 ) && !( dw2 & 1 ))
- return -1;
- if (( dw2 & 1 ) && !( dw1 & 1 ))
- return 1;
- if (( dw1 & 1 ) && ( dw2 & 1 ))
- return lstrcmp( u1->pszNick, pszNick );
-
- dw1 = dw1 >> 1;
- dw2 = dw2 >> 1;
- }
- return lstrcmp( u1->pszNick, pszNick );
-
-}
-
-USERINFO * UM_SortUser(USERINFO** ppUserList, const TCHAR* pszUID)
-{
- USERINFO * pTemp = *ppUserList, *pLast = NULL;
- USERINFO * node = NULL;
-
- if (!pTemp || !pszUID)
- return NULL;
-
- while(pTemp && lstrcmpi( pTemp->pszUID, pszUID)) {
- pLast = pTemp;
- pTemp = pTemp->next;
- }
-
- if ( pTemp ) {
- node = pTemp;
- if (pLast)
- pLast->next = pTemp->next;
- else
- *ppUserList = pTemp->next;
- pTemp = *ppUserList;
-
- pLast = NULL;
-
- while ( pTemp && UM_CompareItem(pTemp, node->pszNick, node->Status ) <= 0) {
- pLast = pTemp;
- pTemp = pTemp->next;
- }
-
- if (*ppUserList == NULL) { // list is empty
- *ppUserList = node;
- node->next = NULL;
- }
- else {
- if ( pLast ) {
- node->next = pTemp;
- pLast->next = node;
- }
- else {
- node->next = *ppUserList;
- *ppUserList = node;
- } }
-
- return node;
- }
- return NULL;
-}
-
-USERINFO* UM_AddUser(STATUSINFO* pStatusList, USERINFO** ppUserList, const TCHAR* pszUID, const TCHAR* pszNick, WORD wStatus)
-{
- if (!pStatusList || !ppUserList)
- return NULL;
-
- USERINFO * pTemp = *ppUserList, *pLast = NULL;
- while(pTemp && UM_CompareItem(pTemp, pszNick, wStatus) <= 0)
- {
- pLast = pTemp;
- pTemp = pTemp->next;
- }
-
- // if (!UM_FindUser(*ppUserList, pszUI, wStatus)
- {
- USERINFO *node = (USERINFO*)mir_calloc(sizeof(USERINFO));
- replaceStrT(node->pszUID, pszUID);
-
- if (*ppUserList == NULL) { // list is empty
- *ppUserList = node;
- node->next = NULL;
- }
- else {
- if (pLast) {
- node->next = pTemp;
- pLast->next = node;
- }
- else {
- node->next = *ppUserList;
- *ppUserList = node;
- } }
-
- return node;
- }
- return NULL;
-}
-
-USERINFO* UM_FindUser(USERINFO* pUserList, const TCHAR* pszUID)
-{
- USERINFO *pTemp = pUserList, *pLast = NULL;
-
- if (!pUserList || !pszUID)
- return NULL;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->pszUID, pszUID ))
- return pTemp;
-
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return 0;
-}
-
-USERINFO* UM_FindUserFromIndex(USERINFO* pUserList, int index)
-{
- int i = 0;
- USERINFO *pTemp = pUserList;
-
- if (!pUserList)
- return NULL;
-
- while (pTemp != NULL)
- {
- if (i == index)
- {
- return pTemp;
- }
- pTemp = pTemp->next;
- i++;
- }
- return NULL;
-}
-
-USERINFO* UM_GiveStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status)
-{
- USERINFO *pTemp = pUserList, *pLast = NULL;
-
- if (!pUserList || !pszUID)
- return NULL;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->pszUID, pszUID )) {
- pTemp->Status |= status;
- return pTemp;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return 0;
-}
-
-USERINFO* UM_SetContactStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status)
-{
- USERINFO *pTemp = pUserList, *pLast = NULL;
-
- if (!pUserList || !pszUID)
- return NULL;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->pszUID, pszUID )) {
- pTemp->ContactStatus = status;
- return pTemp;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return 0;
-}
-
-BOOL UM_SetStatusEx(USERINFO* pUserList, const TCHAR* pszText, int flags )
-{
- USERINFO *pTemp = pUserList, *pLast = NULL;
- int bOnlyMe = ( flags & GC_SSE_ONLYLISTED ) != 0, bSetStatus = ( flags & GC_SSE_ONLINE ) != 0;
- char cDelimiter = ( flags & GC_SSE_TABDELIMITED ) ? '\t' : ' ';
-
- while (pTemp != NULL)
- {
- if ( !bOnlyMe )
- pTemp->iStatusEx = 0;
-
- if ( pszText != NULL ) {
- TCHAR* s = (TCHAR *)_tcsstr( pszText, pTemp->pszUID );
- if ( s ) {
- pTemp->iStatusEx = 0;
- if ( s == pszText || s[-1] == cDelimiter ) {
- int len = lstrlen( pTemp->pszUID );
- if ( s[len] == cDelimiter || s[len] == '\0' )
- pTemp->iStatusEx = ( !bOnlyMe || bSetStatus ) ? 1 : 0;
- } } }
-
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return TRUE;
-}
-
-USERINFO* UM_TakeStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status)
-{
- USERINFO *pTemp = pUserList, *pLast = NULL;
-
- if (!pUserList || !pszUID)
- return NULL;
-
- while ( pTemp != NULL ) {
- if ( !lstrcmpi( pTemp->pszUID, pszUID )) {
- pTemp->Status &= ~status;
- return pTemp;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return 0;
-}
-
-TCHAR* UM_FindUserAutoComplete(USERINFO* pUserList, const TCHAR* pszOriginal, const TCHAR* pszCurrent)
-{
- TCHAR* pszName = NULL;
- USERINFO *pTemp = pUserList;
-
- if (!pUserList || !pszOriginal || !pszCurrent)
- return NULL;
-
- while ( pTemp != NULL ) {
- if ( my_strstri( pTemp->pszNick, pszOriginal) == pTemp->pszNick )
- if ( lstrcmpi( pTemp->pszNick, pszCurrent ) > 0 && ( !pszName || lstrcmpi( pTemp->pszNick, pszName ) < 0))
- pszName = pTemp->pszNick;
-
- pTemp = pTemp->next;
- }
- return pszName;
-}
-
-BOOL UM_RemoveUser(USERINFO** ppUserList, const TCHAR* pszUID)
-{
- if (!ppUserList || !pszUID)
- return FALSE;
-
- USERINFO *pTemp = *ppUserList, *pLast = NULL;
-
- while (pTemp != NULL) {
- if (!lstrcmpi( pTemp->pszUID, pszUID )) {
- if (pLast == NULL)
- *ppUserList = pTemp->next;
- else
- pLast->next = pTemp->next;
- mir_free(pTemp->pszNick);
- mir_free(pTemp->pszUID);
- mir_free(pTemp);
- return TRUE;
- }
- pLast = pTemp;
- pTemp = pTemp->next;
- }
- return FALSE;
-}
-
-BOOL UM_RemoveAll (USERINFO** ppUserList)
-{
- if (!ppUserList)
- return FALSE;
-
- while (*ppUserList != NULL)
- {
- USERINFO *pLast = ppUserList[0]->next;
- mir_free( ppUserList[0]->pszUID );
- mir_free( ppUserList[0]->pszNick );
- mir_free( *ppUserList );
- *ppUserList = pLast;
- }
- *ppUserList = NULL;
- return TRUE;
-}
-
-//---------------------------------------------------
-// Log manager functions
-//
-// Necessary to keep track of events
-// in a window log
-//---------------------------------------------------
-
-LOGINFO * LM_AddEvent(LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd)
-{
- if (!ppLogListStart || !ppLogListEnd)
- return NULL;
-
- LOGINFO *node = (LOGINFO*)mir_calloc(sizeof(LOGINFO));
- if (*ppLogListStart == NULL) // list is empty
- {
- *ppLogListStart = node;
- *ppLogListEnd = node;
- node->next = NULL;
- node->prev = NULL;
- }
- else
- {
- ppLogListStart[0]->prev = node;
- node->next = *ppLogListStart;
- *ppLogListStart = node;
- ppLogListStart[0]->prev=NULL;
- }
-
- return node;
-}
-
-BOOL LM_TrimLog(LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd, int iCount)
-{
- LOGINFO *pTemp = *ppLogListEnd;
- while (pTemp != NULL && iCount > 0) {
- *ppLogListEnd = pTemp->prev;
- if (*ppLogListEnd == NULL)
- *ppLogListStart = NULL;
-
- mir_free(pTemp->ptszNick);
- mir_free(pTemp->ptszUserInfo);
- mir_free(pTemp->ptszText);
- mir_free(pTemp->ptszStatus);
- mir_free(pTemp);
- pTemp = *ppLogListEnd;
- iCount--;
- }
- ppLogListEnd[0]->next = NULL;
-
- return TRUE;
-}
-
-BOOL LM_RemoveAll (LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd)
-{
- while ( *ppLogListStart != NULL ) {
- LOGINFO *pLast = ppLogListStart[0]->next;
- mir_free( ppLogListStart[0]->ptszText );
- mir_free( ppLogListStart[0]->ptszNick );
- mir_free( ppLogListStart[0]->ptszStatus );
- mir_free( ppLogListStart[0]->ptszUserInfo );
- mir_free( *ppLogListStart );
- *ppLogListStart = pLast;
- }
- *ppLogListStart = NULL;
- *ppLogListEnd = NULL;
- return TRUE;
-}
diff --git a/plugins/Scriver/src/chat/message.cpp b/plugins/Scriver/src/chat/message.cpp
index c87e67674b..1bcc285f79 100644
--- a/plugins/Scriver/src/chat/message.cpp
+++ b/plugins/Scriver/src/chat/message.cpp
@@ -23,131 +23,123 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static int RTFColorToIndex(int *pIndex, int iCol, SESSION_INFO *si)
{
- int i;
- MODULEINFO * pMod = MM_FindModule(si->pszModule);
-
- for (i = 0; i < pMod->nColorCount ; i++)
- if ( pIndex[i] == iCol )
+ MODULEINFO *pMod = pci->MM_FindModule(si->pszModule);
+ for (int i = 0; i < pMod->nColorCount; i++)
+ if (pIndex[i] == iCol)
return i;
return -1;
}
-static void CreateColorMap( char* Text, int *pIndex, SESSION_INFO *si)
+static void CreateColorMap(char* Text, int *pIndex, SESSION_INFO *si)
{
- char *p1, *p2, *pEnd;
- int iIndex = 1;
-
static const char* lpszFmt = "\\red%[^ \x5b\\]\\green%[^ \x5b\\]\\blue%[^ \x5b;];";
char szRed[10], szGreen[10], szBlue[10];
- p1 = strstr(Text, "\\colortbl" );
- if ( !p1 )
+ char *p1 = strstr(Text, "\\colortbl");
+ if (!p1)
return;
- pEnd = strchr(p1, '}');
- p2 = strstr(p1, "\\red" );
+ char *pEnd = strchr(p1, '}');
+ char *p2 = strstr(p1, "\\red");
+ int iIndex = 1;
while (p2 && p2 < pEnd) {
- if ( sscanf( p2, lpszFmt, &szRed, &szGreen, &szBlue) > 0 ) {
- int i;
- MODULEINFO * pMod = MM_FindModule(si->pszModule);
- for (i = 0; i < pMod->nColorCount ; i ++)
- if (pMod->crColors[i] == RGB( atoi(szRed), atoi(szGreen), atoi(szBlue)))
+ if (sscanf(p2, lpszFmt, &szRed, &szGreen, &szBlue) > 0) {
+ MODULEINFO *pMod = pci->MM_FindModule(si->pszModule);
+ for (int i = 0; i < pMod->nColorCount; i++)
+ if (pMod->crColors[i] == RGB(atoi(szRed), atoi(szGreen), atoi(szBlue)))
pIndex[i] = iIndex;
}
iIndex++;
p1 = p2;
- p1 ++;
- p2 = strstr(p1, "\\red" );
-} }
+ p1++;
+ p2 = strstr(p1, "\\red");
+ }
+}
-static int ReadInteger( const char* p, int* result )
+static int ReadInteger(const char *p, int *result)
{
char temp[10];
- int i=0;
- while ( isdigit( *p ))
+ int i = 0;
+ while (isdigit(*p))
temp[i++] = *p++;
temp[i] = 0;
- if ( result != NULL )
- *result = atoi( temp );
+ if (result != NULL)
+ *result = atoi(temp);
return i;
}
-TCHAR* DoRtfToTags( char* pszText, SESSION_INFO *si)
+TCHAR* DoRtfToTags(char *pszText, SESSION_INFO *si)
{
- char *p1;
- int* pIndex;
- int i, iRemoveChars;
- char InsertThis[50];
- BOOL bJustRemovedRTF = TRUE;
- BOOL bTextHasStarted = FALSE;
- TCHAR *ptszResult;
- int iUcMode = 0;
-
- if ( !pszText )
+ if (!pszText)
return FALSE;
// create an index of colors in the module and map them to
// corresponding colors in the RTF color table
- pIndex = (int *)mir_alloc(sizeof(int) * MM_FindModule(si->pszModule)->nColorCount);
- for(i = 0; i < MM_FindModule(si->pszModule)->nColorCount ; i++)
+ MODULEINFO *mi = pci->MM_FindModule(si->pszModule);
+ int *pIndex = (int *)mir_alloc(sizeof(int)*mi->nColorCount);
+ for (int i = 0; i < mi->nColorCount; i++)
pIndex[i] = -1;
- CreateColorMap( pszText, pIndex, si );
+ CreateColorMap(pszText, pIndex, si);
// scan the file for rtf commands and remove or parse them
- p1 = strstr( pszText, "\\pard" );
- if ( p1 == NULL ) {
+ char *p1 = strstr(pszText, "\\pard");
+ if (p1 == NULL) {
mir_free(pIndex);
return FALSE;
}
p1 += 5;
- MoveMemory( pszText, p1, lstrlenA( p1 ) + 1 );
+ MoveMemory(pszText, p1, lstrlenA(p1) + 1);
p1 = pszText;
// iterate through all characters, if rtf control character found then take action
- while ( *p1 != '\0' ) {
+ BOOL bJustRemovedRTF = TRUE;
+ BOOL bTextHasStarted = FALSE;
+ char InsertThis[50];
+
+ while (*p1 != '\0') {
InsertThis[0] = 0;
- iRemoveChars = 0;
+ int iRemoveChars = 0;
switch (*p1) {
case '\\':
- if ( !memcmp(p1, "\\cf", 3 )) { // foreground color
- int iCol, iInd;
- iRemoveChars = 3 + ReadInteger(p1+3, &iCol);
- iInd = RTFColorToIndex(pIndex, iCol, si);
+ if (!memcmp(p1, "\\cf", 3)) { // foreground color
+ int iCol;
+ iRemoveChars = 3 + ReadInteger(p1 + 3, &iCol);
bJustRemovedRTF = TRUE;
- if (bTextHasStarted || iInd >= 0)
- mir_snprintf( InsertThis, SIZEOF(InsertThis), ( iInd >= 0 ) ? "%%c%02u" : "%%C", iInd);
+ // int iInd = RTFColorToIndex(pIndex, iCol, si);
+ // if (bTextHasStarted || iInd >= 0)
+ // mir_snprintf(InsertThis, SIZEOF(InsertThis), (iInd >= 0) ? "%%c%02u" : "%%C", iInd);
}
- else if ( !memcmp(p1, "\\highlight", 10 )) { //background color
- int iCol, iInd;
- iRemoveChars = 10 + ReadInteger(p1+10, &iCol);
- iInd = RTFColorToIndex(pIndex, iCol, si);
+ else if (!memcmp(p1, "\\highlight", 10)) { //background color
+ int iCol;
+ iRemoveChars = 10 + ReadInteger(p1 + 10, &iCol);
bJustRemovedRTF = TRUE;
- if (bTextHasStarted || iInd >= 0)
- mir_snprintf( InsertThis, SIZEOF(InsertThis), ( iInd >= 0 ) ? "%%f%02u" : "%%F", iInd);
+ // int iInd = RTFColorToIndex(pIndex, iCol, si);
+ // if (bTextHasStarted || iInd >= 0)
+ // mir_snprintf(InsertThis, SIZEOF(InsertThis), (iInd >= 0) ? "%%f%02u" : "%%F", iInd);
}
- else if ( !memcmp(p1, "\\lang", 5 )) { // language id
+ else if (!memcmp(p1, "\\lang", 5)) { // language id
bTextHasStarted = bJustRemovedRTF = TRUE;
- iRemoveChars = 5 + ReadInteger( p1+5, NULL );
+ iRemoveChars = 5 + ReadInteger(p1 + 5, NULL);
}
- else if ( !memcmp(p1, "\\par", 4 )) { // newline
+ else if (!memcmp(p1, "\\par", 4)) { // newline
bTextHasStarted = bJustRemovedRTF = TRUE;
iRemoveChars = 4;
- strcpy(InsertThis, "\n" );
+ strcpy(InsertThis, "\n");
}
- else if ( !memcmp(p1, "\\line", 5 )) { // newline
+ else if (!memcmp(p1, "\\line", 5)) { // newline
bTextHasStarted = bJustRemovedRTF = TRUE;
iRemoveChars = 5;
- strcpy(InsertThis, "\n" );
+ strcpy(InsertThis, "\n");
}
else if (!memcmp(p1, "\\bullet", 7)) {
bTextHasStarted = TRUE;
@@ -155,22 +147,21 @@ TCHAR* DoRtfToTags( char* pszText, SESSION_INFO *si)
iRemoveChars = 7;
strcpy(InsertThis, "\xE2\x80\xA2");
}
- else if ( !memcmp(p1, "\\b", 2 )) { //bold
+ else if (!memcmp(p1, "\\b", 2)) { //bold
bTextHasStarted = bJustRemovedRTF = TRUE;
- iRemoveChars = (p1[2] != '0')?2:3;
- mir_snprintf(InsertThis, SIZEOF(InsertThis), (p1[2] != '0') ? "%%b": "%%B" );
+ iRemoveChars = (p1[2] != '0') ? 2 : 3;
+ mir_snprintf(InsertThis, SIZEOF(InsertThis), (p1[2] != '0') ? "%%b" : "%%B");
}
- else if ( !memcmp(p1, "\\i", 2 )) { // italics
+ else if (!memcmp(p1, "\\i", 2)) { // italics
bTextHasStarted = bJustRemovedRTF = TRUE;
- iRemoveChars = (p1[2] != '0')?2:3;
- mir_snprintf(InsertThis, SIZEOF(InsertThis), (p1[2] != '0') ? "%%i" : "%%I" );
+ iRemoveChars = (p1[2] != '0') ? 2 : 3;
+ mir_snprintf(InsertThis, SIZEOF(InsertThis), (p1[2] != '0') ? "%%i" : "%%I");
}
- else if ( !memcmp(p1, "\\uc", 3 )) { // number of Unicode chars
+ else if (!memcmp(p1, "\\uc", 3)) { // number of Unicode chars
bTextHasStarted = bJustRemovedRTF = TRUE;
- iUcMode = p1[3] - '0';
iRemoveChars = 4;
}
- else if ( !memcmp(p1, "\\ul", 3 )) { // underlined
+ else if (!memcmp(p1, "\\ul", 3)) { // underlined
bTextHasStarted = bJustRemovedRTF = TRUE;
if (p1[3] == 'n')
iRemoveChars = 7;
@@ -178,17 +169,17 @@ TCHAR* DoRtfToTags( char* pszText, SESSION_INFO *si)
iRemoveChars = 4;
else
iRemoveChars = 3;
- mir_snprintf(InsertThis, SIZEOF(InsertThis), (p1[3] != '0' && p1[3] != 'n') ? "%%u" : "%%U" );
+ mir_snprintf(InsertThis, SIZEOF(InsertThis), (p1[3] != '0' && p1[3] != 'n') ? "%%u" : "%%U");
}
- else if ( p1[1] == 'f' && isdigit( p1[2] )) { // unicode char
+ else if (p1[1] == 'f' && isdigit(p1[2])) { // unicode char
bTextHasStarted = bJustRemovedRTF = TRUE;
- iRemoveChars = 2 + ReadInteger( p1+2, NULL );
+ iRemoveChars = 2 + ReadInteger(p1 + 2, NULL);
}
- else if ( !memcmp(p1, "\\tab", 4 )) { // tab
+ else if (!memcmp(p1, "\\tab", 4)) { // tab
bTextHasStarted = TRUE;
bJustRemovedRTF = TRUE;
iRemoveChars = 4;
- strcpy(InsertThis, " " );
+ strcpy(InsertThis, " ");
}
else if (!memcmp(p1, "\\endash", 7)) {
bTextHasStarted = TRUE;
@@ -201,64 +192,64 @@ TCHAR* DoRtfToTags( char* pszText, SESSION_INFO *si)
bJustRemovedRTF = TRUE;
iRemoveChars = 7;
strcpy(InsertThis, "\xE2\x80\x94");
- }
- else if (!memcmp(p1, "\\lquote",7)) {
+ }
+ else if (!memcmp(p1, "\\lquote", 7)) {
bTextHasStarted = TRUE;
bJustRemovedRTF = TRUE;
iRemoveChars = 7;
strcpy(InsertThis, "\xE2\x80\x98");
}
- else if (!memcmp(p1, "\\rquote",7)) {
+ else if (!memcmp(p1, "\\rquote", 7)) {
bTextHasStarted = TRUE;
bJustRemovedRTF = TRUE;
iRemoveChars = 7;
strcpy(InsertThis, "\xE2\x80\x99");
}
- else if (!memcmp(p1, "\\ldblquote",10)) {
+ else if (!memcmp(p1, "\\ldblquote", 10)) {
bTextHasStarted = TRUE;
bJustRemovedRTF = TRUE;
iRemoveChars = 10;
strcpy(InsertThis, "\xe2\x80\x9c");
}
- else if (!memcmp(p1, "\\rdblquote",10)) {
+ else if (!memcmp(p1, "\\rdblquote", 10)) {
bTextHasStarted = TRUE;
bJustRemovedRTF = TRUE;
iRemoveChars = 10;
strcpy(InsertThis, "\xe2\x80\x9d");
}
- else if ( p1[1] == '\\' || p1[1] == '{' || p1[1] == '}' ) { // escaped characters
+ else if (p1[1] == '\\' || p1[1] == '{' || p1[1] == '}') { // escaped characters
bTextHasStarted = TRUE;
bJustRemovedRTF = FALSE;
iRemoveChars = 2;
mir_snprintf(InsertThis, SIZEOF(InsertThis), "%c", p1[1]);
}
- else if ( p1[1] == '~' ) { // non-breaking space
+ else if (p1[1] == '~') { // non-breaking space
bTextHasStarted = TRUE;
bJustRemovedRTF = FALSE;
iRemoveChars = 2;
strcpy(InsertThis, "\xC2\xA0");
}
- else if ( p1[1] == '\'' ) { // special character
+ else if (p1[1] == '\'') { // special character
char tmp[4], *p3 = tmp;
bTextHasStarted = TRUE;
bJustRemovedRTF = FALSE;
if (p1[2] != ' ' && p1[2] != '\\') {
*p3++ = p1[2];
iRemoveChars = 3;
- if ( p1[3] != ' ' && p1[3] != '\\') {
+ if (p1[3] != ' ' && p1[3] != '\\') {
*p3++ = p1[3];
iRemoveChars++;
}
*p3 = 0;
- sscanf( tmp, "%x", InsertThis );
+ sscanf(tmp, "%x", InsertThis);
InsertThis[1] = 0;
}
else iRemoveChars = 2;
}
- else if ( bJustRemovedRTF ) { // remove unknown RTF command
+ else if (bJustRemovedRTF) { // remove unknown RTF command
int j = 1;
bJustRemovedRTF = TRUE;
- while(p1[j] != ' ' && p1[j] != '\\' && p1[j] != '\0')
+ while (p1[j] != ' ' && p1[j] != '\\' && p1[j] != '\0')
j++;
iRemoveChars = j;
}
@@ -279,7 +270,7 @@ TCHAR* DoRtfToTags( char* pszText, SESSION_INFO *si)
bTextHasStarted = TRUE;
bJustRemovedRTF = FALSE;
iRemoveChars = 1;
- mir_snprintf(InsertThis, SIZEOF(InsertThis), "%%%%" );
+ mir_snprintf(InsertThis, SIZEOF(InsertThis), "%%%%");
break;
case ' ': // remove spaces following a RTF command
if (bJustRemovedRTF)
@@ -295,8 +286,8 @@ TCHAR* DoRtfToTags( char* pszText, SESSION_INFO *si)
}
// move the memory and paste in new commands instead of the old RTF
- if ( InsertThis[0] || iRemoveChars ) {
- MoveMemory(p1 + lstrlenA(InsertThis) , p1 + iRemoveChars, lstrlenA(p1) - iRemoveChars +1 );
+ if (InsertThis[0] || iRemoveChars) {
+ MoveMemory(p1 + lstrlenA(InsertThis), p1 + iRemoveChars, lstrlenA(p1) - iRemoveChars + 1);
CopyMemory(p1, InsertThis, lstrlenA(InsertThis));
p1 += lstrlenA(InsertThis);
}
@@ -304,7 +295,5 @@ TCHAR* DoRtfToTags( char* pszText, SESSION_INFO *si)
}
mir_free(pIndex);
- mir_utf8decode(pszText, &ptszResult);
- return ptszResult;
+ return mir_utf8decodeT(pszText);
}
-
diff --git a/plugins/Scriver/src/chat/options.cpp b/plugins/Scriver/src/chat/options.cpp
index 2d5370980f..79622ae681 100644
--- a/plugins/Scriver/src/chat/options.cpp
+++ b/plugins/Scriver/src/chat/options.cpp
@@ -226,7 +226,7 @@ static INT CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM p
void LoadLogFonts(void)
{
for (int i = 0; i<OPTIONS_FONTCOUNT; i++)
- LoadMsgDlgFont(i, &aFonts[i].lf, &aFonts[i].color, TRUE);
+ LoadMsgDlgFont(i, &pci->aFonts[i].lf, &pci->aFonts[i].color, TRUE);
}
@@ -308,11 +308,11 @@ INT_PTR CALLBACK DlgProcOptions1(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lPa
SendMessage(hwndDlg, UM_CHECKSTATECHANGE, (WPARAM)((LPNMHDR)lParam)->hwndFrom, (LPARAM)hti.hItem);
}
- } else if (((LPNMHDR) lParam)->code == TVN_KEYDOWN) {
- if (((LPNMTVKEYDOWN) lParam)->wVKey == VK_SPACE) {
+ }
+ else if (((LPNMHDR)lParam)->code == TVN_KEYDOWN) {
+ if (((LPNMTVKEYDOWN) lParam)->wVKey == VK_SPACE)
SendMessage(hwndDlg, UM_CHECKSTATECHANGE, (WPARAM)((LPNMHDR)lParam)->hwndFrom,
(LPARAM)TreeView_GetSelection(((LPNMHDR)lParam)->hwndFrom));
- }
}
break;
@@ -341,7 +341,7 @@ INT_PTR CALLBACK DlgProcOptions1(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lPa
SaveBranch(GetDlgItem(hwndDlg, IDC_CHAT_CHECKBOXES), branch1, SIZEOF(branch1));
SaveBranch(GetDlgItem(hwndDlg, IDC_CHAT_CHECKBOXES), branch4, SIZEOF(branch4));
- SM_BroadcastMessage(NULL, GC_SETWNDPROPS, 0, 0, TRUE);
+ pci->SM_BroadcastMessage(NULL, GC_SETWNDPROPS, 0, 0, TRUE);
}
return TRUE;
}
@@ -621,8 +621,8 @@ INT_PTR CALLBACK DlgProcOptions2(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lPa
g_Settings.PopupInactiveOnly = (BOOL)db_get_b(NULL, "Chat", "PopUpInactiveOnly", 1);
g_Settings.LogIndentEnabled = (db_get_b(NULL, "Chat", "LogIndentEnabled", 1) != 0)?TRUE:FALSE;
- MM_FontsChanged();
- SM_BroadcastMessage(NULL, GC_SETWNDPROPS, 0, 0, TRUE);
+ pci->MM_FontsChanged();
+ pci->SM_BroadcastMessage(NULL, GC_SETWNDPROPS, 0, 0, TRUE);
return TRUE;
}
break;
@@ -767,150 +767,15 @@ static int OptionsInitialize(WPARAM wParam, LPARAM lParam)
return 0;
}
-void LoadGlobalSettings(void)
-{
- LOGFONT lf;
-
- g_Settings.LogLimitNames = db_get_b(NULL, "Chat", "LogLimitNames", 1);
- g_Settings.ShowTime = db_get_b(NULL, "Chat", "ShowTimeStamp", 1);
- g_Settings.SoundsFocus = db_get_b(NULL, "Chat", "SoundsFocus", 0);
- g_Settings.ShowTimeIfChanged = (BOOL)db_get_b(NULL, "Chat", "ShowTimeStampIfChanged", 0);
- g_Settings.TimeStampEventColour = (BOOL)db_get_b(NULL, "Chat", "TimeStampEventColour", 0);
- g_Settings.iEventLimit = db_get_w(NULL, "Chat", "LogLimit", 100);
- g_Settings.dwIconFlags = db_get_dw(NULL, "Chat", "IconFlags", 0x0000);
- g_Settings.dwTrayIconFlags = db_get_dw(NULL, "Chat", "TrayIconFlags", 0x1000);
- g_Settings.dwPopupFlags = db_get_dw(NULL, "Chat", "PopupFlags", 0x0000);
- g_Settings.LoggingLimit = db_get_w(NULL, "Chat", "LoggingLimit", 100);
- g_Settings.LoggingEnabled = (BOOL)db_get_b(NULL, "Chat", "LoggingEnabled", 0);
- g_Settings.FlashWindow = (BOOL)db_get_b(NULL, "Chat", "FlashWindow", 0);
- g_Settings.HighlightEnabled = (BOOL)db_get_b(NULL, "Chat", "HighlightEnabled", 1);
- g_Settings.crUserListColor = db_get_dw(NULL, "ChatFonts", "Font18Col", RGB(0,0,0));
- g_Settings.crUserListBGColor = db_get_dw(NULL, "Chat", "ColorNicklistBG", GetSysColor(COLOR_WINDOW));
- g_Settings.crUserListSelectedBGColor = db_get_dw(NULL, "Chat", "ColorNicklistSelectedBG", GetSysColor(COLOR_HIGHLIGHT));
- g_Settings.crUserListHeadingsColor = db_get_dw(NULL, "ChatFonts", "Font19Col", RGB(170,170,170));
- g_Settings.crLogBackground = db_get_dw(NULL, "Chat", "ColorLogBG", GetSysColor(COLOR_WINDOW));
- g_Settings.StripFormat = (BOOL)db_get_b(NULL, "Chat", "StripFormatting", 0);
- g_Settings.TrayIconInactiveOnly = (BOOL)db_get_b(NULL, "Chat", "TrayIconInactiveOnly", 1);
- g_Settings.PopupInactiveOnly = (BOOL)db_get_b(NULL, "Chat", "PopUpInactiveOnly", 1);
- g_Settings.AddColonToAutoComplete = (BOOL)db_get_b(NULL, "Chat", "AddColonToAutoComplete", 1);
- g_Settings.iPopupStyle = db_get_b(NULL, "Chat", "PopupStyle", 1);
- g_Settings.iPopupTimeout = db_get_w(NULL, "Chat", "PopupTimeout", 3);
- g_Settings.crPUBkgColour = db_get_dw(NULL, "Chat", "PopupColorBG", GetSysColor(COLOR_WINDOW));
- g_Settings.crPUTextColour = db_get_dw(NULL, "Chat", "PopupColorText", 0);
- g_Settings.ShowContactStatus = db_get_b(NULL, "Chat", "ShowContactStatus", 0);
- g_Settings.ContactStatusFirst = db_get_b(NULL, "Chat", "ContactStatusFirst", 0);
-
- InitSetting( &g_Settings.pszTimeStamp, "HeaderTime", _T("[%H:%M]"));
- InitSetting( &g_Settings.pszTimeStampLog, "LogTimestamp", _T("[%d %b %y %H:%M]"));
- InitSetting( &g_Settings.pszIncomingNick, "HeaderIncoming", _T("%n:"));
- InitSetting( &g_Settings.pszOutgoingNick, "HeaderOutgoing", _T("%n:"));
- InitSetting( &g_Settings.pszHighlightWords, "HighlightWords", _T("%m"));
-
- DBVARIANT dbv;
- g_Settings.pszLogDir = (TCHAR *)mir_realloc(g_Settings.pszLogDir, MAX_PATH*sizeof(TCHAR));
- if ( !db_get_ts(NULL, "Chat", "LogDirectory", &dbv)) {
- lstrcpyn(g_Settings.pszLogDir, dbv.ptszVal, MAX_PATH);
- db_free(&dbv);
- }
- else lstrcpyn(g_Settings.pszLogDir, DEFLOGFILENAME, MAX_PATH);
-
- g_Settings.LogIndentEnabled = (db_get_b(NULL, "Chat", "LogIndentEnabled", 1) != 0)?TRUE:FALSE;
-
- if (g_Settings.MessageBoxFont)
- DeleteObject(g_Settings.MessageBoxFont);
- LoadMsgDlgFont(MSGFONTID_MESSAGEAREA, &lf, NULL, FALSE);
- g_Settings.MessageBoxFont = CreateFontIndirect(&lf);
-
- if (g_Settings.UserListFont)
- DeleteObject(g_Settings.UserListFont);
- LoadMsgDlgFont(18, &lf, NULL, TRUE);
- g_Settings.UserListFont = CreateFontIndirect(&lf);
-
- if (g_Settings.UserListHeadingsFont)
- DeleteObject(g_Settings.UserListHeadingsFont);
- LoadMsgDlgFont(19, &lf, NULL, TRUE);
- g_Settings.UserListHeadingsFont = CreateFontIndirect(&lf);
-
- if (hListBkgBrush != NULL)
- DeleteObject(hListBkgBrush);
- hListBkgBrush = CreateSolidBrush(db_get_dw(NULL, "Chat", "ColorNicklistBG", GetSysColor(COLOR_WINDOW)));
-
- if (hListSelectedBkgBrush != NULL)
- DeleteObject(hListSelectedBkgBrush);
- hListSelectedBkgBrush = CreateSolidBrush(db_get_dw(NULL, "Chat", "ColorNicklistSelectedBG", GetSysColor(COLOR_HIGHLIGHT)));
-}
-
-static void FreeGlobalSettings(void)
-{
- mir_free(g_Settings.pszTimeStamp);
- mir_free(g_Settings.pszTimeStampLog);
- mir_free(g_Settings.pszIncomingNick);
- mir_free(g_Settings.pszOutgoingNick);
- mir_free(g_Settings.pszHighlightWords);
- mir_free(g_Settings.pszLogDir);
- if (g_Settings.MessageBoxFont)
- DeleteObject(g_Settings.MessageBoxFont);
- if (g_Settings.UserListFont)
- DeleteObject(g_Settings.UserListFont);
- if (g_Settings.UserListHeadingsFont)
- DeleteObject(g_Settings.UserListHeadingsFont);
-}
-
-void SetIndentSize()
-{
- if (g_Settings.ShowTime) {
- LOGFONT lf;
- HFONT hFont;
- int iText;
-
- LoadMsgDlgFont(0, &lf, NULL, TRUE);
- hFont = CreateFontIndirect(&lf);
- iText = GetTextPixelSize(MakeTimeStamp(g_Settings.pszTimeStamp, time(NULL)),hFont, TRUE);
- DeleteObject(hFont);
- g_Settings.LogTextIndent = iText*12/10;
- }
- else g_Settings.LogTextIndent = 0;
-}
-
int OptionsInit(void)
{
HookEvent(ME_OPT_INITIALISE, OptionsInitialize);
-
- LoadLogFonts();
-
- LOGFONT lf;
- LoadMsgDlgFont(18, &lf, NULL, TRUE);
- lstrcpy(lf.lfFaceName, _T("MS Shell Dlg"));
- lf.lfUnderline = lf.lfItalic = lf.lfStrikeOut = 0;
- lf.lfHeight = -17;
- lf.lfWeight = FW_BOLD;
- g_Settings.NameFont = CreateFontIndirect(&lf);
- g_Settings.UserListFont = NULL;
- g_Settings.UserListHeadingsFont = NULL;
- g_Settings.MessageBoxFont = NULL;
- g_Settings.iSplitterX = db_get_w(NULL, "Chat", "SplitterX", 105);
- LoadGlobalSettings();
-
- SkinAddNewSoundEx("ChatMessage", LPGEN("Group chats"), LPGEN("Incoming message"));
- SkinAddNewSoundEx("ChatHighlight", LPGEN("Group chats"), LPGEN("Message is highlighted"));
- SkinAddNewSoundEx("ChatAction", LPGEN("Group chats"), LPGEN("User has performed an action"));
- SkinAddNewSoundEx("ChatJoin", LPGEN("Group chats"), LPGEN("User has joined"));
- SkinAddNewSoundEx("ChatPart", LPGEN("Group chats"), LPGEN("User has left"));
- SkinAddNewSoundEx("ChatKick", LPGEN("Group chats"), LPGEN("User has kicked some other user"));
- SkinAddNewSoundEx("ChatMode", LPGEN("Group chats"), LPGEN("User's status was changed"));
- SkinAddNewSoundEx("ChatNick", LPGEN("Group chats"), LPGEN("User has changed name"));
- SkinAddNewSoundEx("ChatNotice", LPGEN("Group chats"), LPGEN("User has sent a notice"));
- SkinAddNewSoundEx("ChatQuit", LPGEN("Group chats"), LPGEN("User has disconnected"));
- SkinAddNewSoundEx("ChatTopic", LPGEN("Group chats"), LPGEN("The topic has been changed"));
- SetIndentSize();
return 0;
}
int OptionsUnInit(void)
{
- FreeGlobalSettings();
DeleteObject(hListBkgBrush);
DeleteObject(hListSelectedBkgBrush);
- DeleteObject(g_Settings.NameFont);
return 0;
}
diff --git a/plugins/Scriver/src/chat/services.cpp b/plugins/Scriver/src/chat/services.cpp
index 6e09eb3039..5910841a66 100644
--- a/plugins/Scriver/src/chat/services.cpp
+++ b/plugins/Scriver/src/chat/services.cpp
@@ -21,79 +21,22 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "../commonheaders.h"
-HANDLE hSendEvent;
-HANDLE hBuildMenuEvent ;
-HANDLE g_hHookContactDblClick, g_hHookPrebuildMenu;
-CRITICAL_SECTION cs;
-
-int Chat_SmileyOptionsChanged(WPARAM wParam,LPARAM lParam)
-{
- SM_BroadcastMessage(NULL, GC_REDRAWLOG, 0, 1, FALSE);
- return 0;
-}
-
-int Chat_PreShutdown(WPARAM wParam,LPARAM lParam)
-{
- SM_BroadcastMessage(NULL, GC_CLOSEWINDOW, 0, 1, FALSE);
-
- SM_RemoveAll();
- MM_RemoveAll();
- return 0;
-}
-
-int Chat_FontsChanged(WPARAM wParam,LPARAM lParam)
-{
- LoadLogFonts();
- LoadMsgLogBitmaps();
- MM_FontsChanged();
- MM_FixColors();
- SM_BroadcastMessage(NULL, GC_SETWNDPROPS, 0, 0, TRUE);
- return 0;
-}
-
-int Chat_IconsChanged(WPARAM wParam,LPARAM lParam)
-{
- FreeMsgLogBitmaps();
- LoadMsgLogBitmaps();
- MM_IconsChanged();
- SM_BroadcastMessage(NULL, GC_SETWNDPROPS, 0, 0, FALSE);
- return 0;
-}
-
-static INT_PTR Service_GetCount(WPARAM wParam,LPARAM lParam)
-{
- if (!lParam)
- return -1;
-
- mir_cslock lock(cs);
- return SM_GetCount((char*)lParam);
-}
-
-static INT_PTR Service_GetInfo(WPARAM wParam,LPARAM lParam)
+void ShowRoom(SESSION_INFO *si, WPARAM wp, BOOL bSetForeground)
{
- GC_INFO *gci = (GC_INFO *)lParam;
- if (!gci || !gci->pszModule)
- return 1;
-
- SESSION_INFO *si = NULL;
-
- mir_cslock lock(cs);
- if (gci->Flags & BYINDEX)
- si = SM_FindSessionByIndex( gci->pszModule, gci->iItem );
- else
- si = SM_FindSession( gci->pszID, gci->pszModule );
-
- if (si == NULL)
- return 1;
+ HWND hParent = NULL;
+ if (!si)
+ return;
- if (gci->Flags & DATA) gci->dwItemData = si->dwItemData;
- if (gci->Flags & HCONTACT) gci->hContact = si->windowData.hContact;
- if (gci->Flags & TYPE) gci->iType = si->iType;
- if (gci->Flags & COUNT) gci->iCount = si->nUsersInNicklist;
- if (gci->Flags & USERS) gci->pszUsers = SM_GetUsers(si);
- if (gci->Flags & ID) gci->pszID = si->ptszID;
- if (gci->Flags & NAME) gci->pszName = si->ptszName;
- return 0;
+ //Do we need to create a window?
+ if (si->hWnd == NULL) {
+ hParent = GetParentWindow(si->windowData.hContact, TRUE);
+ si->hWnd = CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_CHANNEL), hParent, RoomWndProc, (LPARAM)si);
+ }
+ SendMessage(si->hWnd, DM_UPDATETABCONTROL, -1, (LPARAM)si);
+ SendMessage(GetParent(si->hWnd), CM_ACTIVATECHILD, 0, (LPARAM)si->hWnd);
+ SendMessage(GetParent(si->hWnd), CM_POPUPWINDOW, 0, (LPARAM)si->hWnd);
+ SendMessage(si->hWnd, WM_MOUSEACTIVATE, 0, 0);
+ SetFocus(GetDlgItem(si->hWnd, IDC_CHAT_MESSAGE));
}
void LoadModuleIcons(MODULEINFO *mi)
@@ -115,438 +58,3 @@ void LoadModuleIcons(MODULEINFO *mi)
ImageList_Destroy(hList);
}
-
-static INT_PTR Service_Register(WPARAM wParam, LPARAM lParam)
-{
- GCREGISTER *gcr = (GCREGISTER *)lParam;
- if (gcr == NULL)
- return GC_REGISTER_ERROR;
-
- if (gcr->cbSize != sizeof(GCREGISTER))
- return GC_REGISTER_WRONGVER;
-
- mir_cslock lock(cs);
- MODULEINFO *mi = MM_AddModule(gcr->pszModule);
- if (mi == NULL)
- return GC_REGISTER_ERROR;
-
- mi->ptszModDispName = mir_tstrdup(gcr->ptszDispName);
- mi->bBold = gcr->dwFlags & GC_BOLD;
- mi->bUnderline = gcr->dwFlags & GC_UNDERLINE ;
- mi->bItalics = gcr->dwFlags & GC_ITALICS ;
- mi->bColor = gcr->dwFlags & GC_COLOR ;
- mi->bBkgColor = gcr->dwFlags & GC_BKGCOLOR ;
- mi->bFontSize = gcr->dwFlags & GC_FONTSIZE;
- mi->bAckMsg = gcr->dwFlags & GC_ACKMSG ;
- mi->bChanMgr = gcr->dwFlags & GC_CHANMGR ;
- mi->bSingleFormat = gcr->dwFlags & GC_SINGLEFORMAT;
- mi->iMaxText= gcr->iMaxText;
- mi->nColorCount = gcr->nColors;
- if ( gcr->nColors > 0) {
- mi->crColors = (COLORREF *)mir_alloc(sizeof(COLORREF) * gcr->nColors);
- memcpy(mi->crColors, gcr->pColors, sizeof(COLORREF) * gcr->nColors);
- }
-
- CheckColorsInModule((char*)gcr->pszModule);
- CList_SetAllOffline(TRUE, gcr->pszModule);
- return 0;
-}
-
-static INT_PTR Service_NewChat(WPARAM wParam, LPARAM lParam)
-{
- GCSESSION *gcw = (GCSESSION*)lParam;
- if (gcw == NULL)
- return GC_NEWSESSION_ERROR;
-
- if (gcw->cbSize != sizeof(GCSESSION))
- return GC_NEWSESSION_WRONGVER;
-
- mir_cslock lock(cs);
- MODULEINFO *mi = MM_FindModule(gcw->pszModule);
- if (mi == NULL)
- return GC_NEWSESSION_ERROR;
-
- SESSION_INFO *si = SM_AddSession(gcw->ptszID, gcw->pszModule);
- if (mi->hOfflineIcon == NULL)
- LoadModuleIcons(mi);
-
- // create a new session and set the defaults
- if (si != NULL) {
- TCHAR szTemp[256];
-
- si->dwItemData = gcw->dwItemData;
- if ( gcw->iType != GCW_SERVER )
- si->wStatus = ID_STATUS_ONLINE;
- si->iType = gcw->iType;
- si->dwFlags = gcw->dwFlags;
- si->ptszName = mir_tstrdup(gcw->ptszName);
- si->ptszStatusbarText = mir_tstrdup(gcw->ptszStatusbarText);
- si->iSplitterX = g_Settings.iSplitterX;
- si->iSplitterY = g_Settings.iSplitterY;
- si->iLogFilterFlags = (int)db_get_dw(NULL, "Chat", "FilterFlags", 0x03E0);
- si->bFilterEnabled = db_get_b(NULL, "Chat", "FilterEnabled", 0);
- si->bNicklistEnabled = db_get_b(NULL, "Chat", "ShowNicklist", 1);
-
- if (mi->bColor) {
- si->iFG = 4;
- si->bFGSet = TRUE;
- }
- if (mi->bBkgColor) {
- si->iBG = 2;
- si->bBGSet = TRUE;
- }
- if (si->iType == GCW_SERVER)
- mir_sntprintf(szTemp, SIZEOF(szTemp), LPGENT("Server: %s"), si->ptszName);
- else
- mir_sntprintf(szTemp, SIZEOF(szTemp), _T("%s"), si->ptszName);
- si->windowData.hContact = CList_AddRoom(gcw->pszModule, gcw->ptszID, szTemp, si->iType);
- si->windowData.codePage = db_get_w(si->windowData.hContact, si->pszModule, "CodePage", (WORD)CP_ACP);
- si->pszHeader = Log_CreateRtfHeader(mi, si);
- db_set_s(si->windowData.hContact, si->pszModule, "Topic", "");
- db_unset(si->windowData.hContact, "CList", "StatusMsg");
- if (si->ptszStatusbarText)
- db_set_ts(si->windowData.hContact, si->pszModule, "StatusBar", si->ptszStatusbarText);
- else
- db_set_s(si->windowData.hContact, si->pszModule, "StatusBar", "");
- }
- else {
- SESSION_INFO *si2 = SM_FindSession(gcw->ptszID, gcw->pszModule);
- if (si2) {
- UM_RemoveAll(&si2->pUsers);
- TM_RemoveAll(&si2->pStatuses);
-
- si2->iStatusCount = 0;
- si2->nUsersInNicklist = 0;
-
- if (si2->hWnd )
- RedrawWindow(GetDlgItem(si2->hWnd, IDC_CHAT_LIST), NULL, NULL, RDW_INVALIDATE);
- }
- }
-
- return 0;
-}
-
-static INT_PTR DoControl(GCEVENT *gce, WPARAM wp)
-{
- SESSION_INFO *si;
-
- if ( gce->pDest->iType == GC_EVENT_CONTROL ) {
- switch (wp) {
- case WINDOW_HIDDEN:
- if (si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule)) {
- si->bInitDone = TRUE;
- SetActiveSession(si->ptszID, si->pszModule);
- if (si->hWnd)
- ShowRoom(si, wp, FALSE);
- }
- return 0;
-
- case WINDOW_MINIMIZE:
- case WINDOW_MAXIMIZE:
- case WINDOW_VISIBLE:
- case SESSION_INITDONE:
- if (si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule)) {
- si->bInitDone = TRUE;
- if (wp != SESSION_INITDONE || db_get_b(NULL, "Chat", "PopupOnJoin", 0) == 0)
- ShowRoom(si, wp, TRUE);
- return 0;
- }
- break;
-
- case SESSION_OFFLINE:
- SM_SetOffline(gce->pDest->ptszID, gce->pDest->pszModule);
- // fall through
-
- case SESSION_ONLINE:
- SM_SetStatus( gce->pDest->ptszID, gce->pDest->pszModule, wp==SESSION_ONLINE?ID_STATUS_ONLINE:ID_STATUS_OFFLINE);
- break;
-
- case WINDOW_CLEARLOG:
- if (si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule)) {
- LM_RemoveAll(&si->pLog, &si->pLogEnd);
- si->iEventCount = 0;
- si->LastTime = 0;
- }
- break;
-
- case SESSION_TERMINATE:
- return SM_RemoveSession(gce->pDest->ptszID, gce->pDest->pszModule, (gce->dwFlags & GCEF_REMOVECONTACT) != 0);
- }
- SM_SendMessage(gce->pDest->ptszID, gce->pDest->pszModule, GC_EVENT_CONTROL + WM_USER + 500, wp, 0);
- }
- else if (gce->pDest->iType == GC_EVENT_CHUID && gce->ptszText)
- {
- SM_ChangeUID( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszNick, gce->ptszText);
- }
- else if (gce->pDest->iType == GC_EVENT_CHANGESESSIONAME && gce->ptszText)
- {
- if (si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule)) {
- replaceStrT(si->ptszName, gce->ptszText);
- if (si->hWnd)
- SendMessage(si->hWnd, DM_UPDATETITLEBAR, 0, 0);
- }
- }
- else if (gce->pDest->iType == GC_EVENT_SETITEMDATA) {
- if (si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule))
- si->dwItemData = gce->dwItemData;
- }
- else if (gce->pDest->iType ==GC_EVENT_GETITEMDATA) {
- if (si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule)) {
- gce->dwItemData = si->dwItemData;
- return si->dwItemData;
- }
- return 0;
- }
- else if (gce->pDest->iType ==GC_EVENT_SETSBTEXT)
- {
- if (si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule)) {
- replaceStrT(si->ptszStatusbarText, gce->ptszText);
- if (si->ptszStatusbarText)
- db_set_ts(si->windowData.hContact, si->pszModule, "StatusBar", si->ptszStatusbarText);
- else
- db_set_s(si->windowData.hContact, si->pszModule, "StatusBar", "");
- if (si->hWnd)
- SendMessage(si->hWnd, DM_UPDATESTATUSBAR, 0, 0);
- }
- }
- else if (gce->pDest->iType == GC_EVENT_ACK)
- {
- SM_SendMessage(gce->pDest->ptszID, gce->pDest->pszModule, GC_ACKMESSAGE, 0, 0);
- }
- else if (gce->pDest->iType == GC_EVENT_SENDMESSAGE && gce->ptszText)
- {
- SM_SendUserMessage( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszText);
- }
- else if (gce->pDest->iType == GC_EVENT_SETSTATUSEX)
- {
- SM_SetStatusEx( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszText, gce->dwItemData);
- }
- else return 1;
-
- return 0;
-}
-
-static void AddUser(GCEVENT *gce)
-{
- SESSION_INFO *si = SM_FindSession( gce->pDest->ptszID, gce->pDest->pszModule);
- if (si == NULL) return;
-
- WORD status = TM_StringToWord(si->pStatuses, gce->ptszStatus);
- USERINFO *ui = SM_AddUser(si, gce->ptszUID, gce->ptszNick, status);
- if (ui == NULL) return;
-
- ui->pszNick = mir_tstrdup(gce->ptszNick);
- if (gce->bIsMe)
- si->pMe = ui;
- ui->Status = status;
- ui->Status |= si->pStatuses->Status;
- if (si->hWnd)
- SendMessage(si->hWnd, GC_UPDATENICKLIST, 0, 0);
-}
-
-void ShowRoom(SESSION_INFO *si, WPARAM wp, BOOL bSetForeground)
-{
- HWND hParent = NULL;
- if (!si)
- return;
-
- //Do we need to create a window?
- if (si->hWnd == NULL)
- {
- hParent = GetParentWindow(si->windowData.hContact, TRUE);
- si->hWnd = CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_CHANNEL), hParent, RoomWndProc, (LPARAM)si);
- }
- SendMessage(si->hWnd, DM_UPDATETABCONTROL, -1, (LPARAM)si);
- SendMessage(GetParent(si->hWnd), CM_ACTIVATECHILD, 0, (LPARAM)si->hWnd);
- SendMessage(GetParent(si->hWnd), CM_POPUPWINDOW, 0, (LPARAM)si->hWnd);
- SendMessage(si->hWnd, WM_MOUSEACTIVATE, 0, 0);
- SetFocus(GetDlgItem(si->hWnd, IDC_CHAT_MESSAGE));
-}
-
-static INT_PTR Service_AddEvent(WPARAM wParam, LPARAM lParam)
-{
- GCEVENT *gce = (GCEVENT*)lParam;
- SESSION_INFO *si;
- BOOL bIsHighlighted = FALSE;
- BOOL bRemoveFlag = FALSE;
-
- if (gce == NULL)
- return GC_EVENT_ERROR;
-
- GCDEST *gcd = gce->pDest;
- if (gcd == NULL)
- return GC_EVENT_ERROR;
-
- if (gce->cbSize != sizeof(GCEVENT))
- return GC_EVENT_WRONGVER;
-
- if (!IsEventSupported(gcd->iType))
- return GC_EVENT_ERROR;
-
- mir_cslock lck(cs);
-
- // Do different things according to type of event
- switch(gcd->iType) {
- case GC_EVENT_ADDGROUP:
- {
- STATUSINFO *si = SM_AddStatus(gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszStatus);
- if (si && gce->dwItemData)
- si->hIcon = CopyIcon((HICON)gce->dwItemData);
- }
- return 0;
-
- case GC_EVENT_CHUID:
- case GC_EVENT_CHANGESESSIONAME:
- case GC_EVENT_SETITEMDATA:
- case GC_EVENT_GETITEMDATA:
- case GC_EVENT_CONTROL:
- case GC_EVENT_SETSBTEXT:
- case GC_EVENT_ACK:
- case GC_EVENT_SENDMESSAGE :
- case GC_EVENT_SETSTATUSEX :
- return DoControl(gce, wParam);
-
- case GC_EVENT_SETCONTACTSTATUS:
- return SM_SetContactStatus(gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszUID, (WORD)gce->dwItemData);
-
- case GC_EVENT_TOPIC:
- if (si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule)) {
- if (gce->ptszText) {
- replaceStrT(si->ptszTopic, gce->ptszText);
- db_set_ts(si->windowData.hContact, si->pszModule , "Topic", RemoveFormatting(si->ptszTopic));
- if (db_get_b(NULL, "Chat", "TopicOnClist", 0))
- db_set_ts(si->windowData.hContact, "CList" , "StatusMsg", RemoveFormatting(si->ptszTopic));
- }
- }
- break;
-
- case GC_EVENT_ADDSTATUS:
- SM_GiveStatus( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszUID, gce->ptszStatus);
- break;
-
- case GC_EVENT_REMOVESTATUS:
- SM_TakeStatus( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszUID, gce->ptszStatus);
- break;
-
- case GC_EVENT_MESSAGE:
- case GC_EVENT_ACTION:
- if (!gce->bIsMe && gce->pDest->ptszID && gce->ptszText) {
- if (si = SM_FindSession( gce->pDest->ptszID, gce->pDest->pszModule))
- if ( IsHighlighted(si, gce->ptszText))
- bIsHighlighted = TRUE;
- }
- break;
-
- case GC_EVENT_NICK:
- SM_ChangeNick( gce->pDest->ptszID, gce->pDest->pszModule, gce);
- break;
-
- case GC_EVENT_JOIN:
- AddUser(gce);
- break;
-
- case GC_EVENT_PART:
- case GC_EVENT_QUIT:
- case GC_EVENT_KICK:
- bRemoveFlag = TRUE;
- break;
- }
-
- // Decide which window (log) should have the event
- LPCTSTR pWnd = NULL;
- LPCSTR pMod = NULL;
- if (gcd->ptszID) {
- pWnd = gcd->ptszID;
- pMod = gcd->pszModule;
- }
- else if (gcd->iType == GC_EVENT_NOTICE || gcd->iType == GC_EVENT_INFORMATION) {
- SESSION_INFO *si = GetActiveSession();
- if (si && !lstrcmpA(si->pszModule, gcd->pszModule)) {
- pWnd = si->ptszID;
- pMod = si->pszModule;
- }
- else return 0;
- }
- else {
- // Send the event to all windows with a user pszUID. Used for broadcasting QUIT etc
- SM_AddEventToAllMatchingUID(gce);
- if (!bRemoveFlag)
- return 0;
- }
-
- // add to log
- if (pWnd) {
- si = SM_FindSession(pWnd, pMod);
-
- // fix for IRC's old stuyle mode notifications. Should not affect any other protocol
- if ((gce->pDest->iType == GC_EVENT_ADDSTATUS || gce->pDest->iType == GC_EVENT_REMOVESTATUS) && !(gce->dwFlags & GCEF_ADDTOLOG))
- return 0;
-
- if (gce && gce->pDest->iType == GC_EVENT_JOIN && gce->time == 0)
- return 0;
-
- if (si && (si->bInitDone || gce->pDest->iType == GC_EVENT_TOPIC || (gce->pDest->iType == GC_EVENT_JOIN && gce->bIsMe))) {
- if (SM_AddEvent(pWnd, pMod, gce, bIsHighlighted) && si->hWnd)
- SendMessage(si->hWnd, GC_ADDLOG, 0, 0);
- else if (si->hWnd)
- SendMessage(si->hWnd, GC_REDRAWLOG2, 0, 0);
-
- if (!(gce->dwFlags & GCEF_NOTNOTIFY))
- DoSoundsFlashPopupTrayStuff(si, gce, bIsHighlighted, 0);
- if ((gce->dwFlags & GCEF_ADDTOLOG) && g_Settings.LoggingEnabled)
- LogToFile(si, gce);
- }
-
- if (!bRemoveFlag)
- return 0;
- }
-
- if (bRemoveFlag)
- return SM_RemoveUser( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszUID ) == 0;
-
- return GC_EVENT_ERROR;
-}
-
-static INT_PTR Service_GetAddEventPtr(WPARAM wParam, LPARAM lParam)
-{
- GCPTRS *gp = (GCPTRS*)lParam;
-
- mir_cslock lck(cs);
- gp->pfnAddEvent = Service_AddEvent;
- return 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Service creation
-
-void HookEvents(void)
-{
- HookEvent(ME_CLIST_PREBUILDCONTACTMENU, CList_PrebuildContactMenu);
-}
-
-void CreateServiceFunctions(void)
-{
- CreateServiceFunction(MS_GC_REGISTER, Service_Register);
- CreateServiceFunction(MS_GC_NEWSESSION, Service_NewChat);
- CreateServiceFunction(MS_GC_EVENT, Service_AddEvent);
- CreateServiceFunction(MS_GC_GETEVENTPTR, Service_GetAddEventPtr);
- CreateServiceFunction(MS_GC_GETINFO, Service_GetInfo);
- CreateServiceFunction(MS_GC_GETSESSIONCOUNT, Service_GetCount);
-
- CreateServiceFunction("GChat/DblClickEvent", CList_EventDoubleclickedSvc);
- CreateServiceFunction("GChat/PrebuildMenuEvent", CList_PrebuildContactMenuSvc);
- CreateServiceFunction("GChat/JoinChat", CList_JoinChat);
- CreateServiceFunction("GChat/LeaveChat", CList_LeaveChat);
-}
-
-void CreateHookableEvents(void)
-{
- hSendEvent = CreateHookableEvent(ME_GC_EVENT);
- hBuildMenuEvent = CreateHookableEvent(ME_GC_BUILDMENU);
-}
-
-void DestroyHookableEvents(void)
-{
- DestroyHookableEvent(hSendEvent);
- DestroyHookableEvent(hBuildMenuEvent);
-}
diff --git a/plugins/Scriver/src/chat/tools.cpp b/plugins/Scriver/src/chat/tools.cpp
index 62679fbe0f..0745ad83c6 100644
--- a/plugins/Scriver/src/chat/tools.cpp
+++ b/plugins/Scriver/src/chat/tools.cpp
@@ -21,344 +21,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "../commonheaders.h"
-TCHAR* RemoveFormatting(const TCHAR* pszWord)
-{
- static TCHAR szTemp[10000];
- int i = 0;
- int j = 0;
-
- if (pszWord == 0 || lstrlen(pszWord) == 0)
- return NULL;
-
- while (j < 9999 && i <= lstrlen(pszWord)) {
- if (pszWord[i] == '%') {
- switch (pszWord[i + 1]) {
- case '%':
- szTemp[j] = '%';
- j++;
- i++; i++;
- break;
- case 'b':
- case 'u':
- case 'i':
- case 'B':
- case 'U':
- case 'I':
- case 'r':
- case 'C':
- case 'F':
- i++; i++;
- break;
-
- case 'c':
- case 'f':
- i += 4;
- break;
-
- default:
- szTemp[j] = pszWord[i];
- j++;
- i++;
- break;
- }
- }
- else {
- szTemp[j] = pszWord[i];
- j++;
- i++;
- }
- }
-
- return (TCHAR*)&szTemp;
-}
-
-static void __stdcall ShowRoomFromPopup(void * pi)
-{
- SESSION_INFO *si = (SESSION_INFO*) pi;
- ShowRoom(si, WINDOW_VISIBLE, TRUE);
-}
-
-static LRESULT CALLBACK PopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message) {
- case WM_COMMAND:
- if (HIWORD(wParam) == STN_CLICKED) {
- SESSION_INFO *si = (SESSION_INFO*)PUGetPluginData(hWnd);
- CallFunctionAsync(ShowRoomFromPopup, si);
- PUDeletePopup(hWnd);
- return TRUE;
- }
- break;
- case WM_CONTEXTMENU:
- SESSION_INFO *si = (SESSION_INFO*)PUGetPluginData(hWnd);
- if (si->windowData.hContact)
- if (CallService(MS_CLIST_GETEVENT, (WPARAM)si->windowData.hContact, 0))
- CallService(MS_CLIST_REMOVEEVENT, (WPARAM)si->windowData.hContact, (LPARAM)"chaticon");
-
- PUDeletePopup( hWnd );
- break;
- }
- return DefWindowProc(hWnd, message, wParam, lParam);
-}
-
-static int ShowPopup (HANDLE hContact, SESSION_INFO *si, HICON hIcon, char* pszProtoName, TCHAR* pszRoomName, COLORREF crBkg, const TCHAR* fmt, ...)
-{
- static TCHAR szBuf[4*1024];
-
- if (!fmt || lstrlen(fmt) == 0 || lstrlen(fmt) > 2000)
- return 0;
-
- va_list marker;
- va_start(marker, fmt);
- mir_vsntprintf(szBuf, 4096, fmt, marker);
- va_end(marker);
-
- POPUPDATAT pd = { 0 };
- pd.lchContact = hContact;
- pd.lchIcon = (hIcon) ? hIcon : GetCachedIcon("chat_window");
-
- PROTOACCOUNT *pa = ProtoGetAccount(pszProtoName);
- mir_sntprintf(pd.lptzContactName, MAX_CONTACTNAME - 1, _T("%s - %s"),
- (pa == NULL) ? _A2T(pszProtoName) : pa->tszAccountName,
- pcli->pfnGetContactDisplayName(hContact, 0));
-
- lstrcpyn(pd.lptzText, TranslateTS(szBuf), MAX_SECONDLINE);
- pd.iSeconds = g_Settings.iPopupTimeout;
-
- if (g_Settings.iPopupStyle == 2) {
- pd.colorBack = 0;
- pd.colorText = 0;
- }
- else if (g_Settings.iPopupStyle == 3) {
- pd.colorBack = g_Settings.crPUBkgColour;
- pd.colorText = g_Settings.crPUTextColour;
- }
- else {
- pd.colorBack = g_Settings.crLogBackground;
- pd.colorText = crBkg;
- }
-
- pd.PluginWindowProc = PopupDlgProc;
- pd.PluginData = si;
- return PUAddPopupT(&pd);
-}
-
-static BOOL DoTrayIcon(SESSION_INFO *si, GCEVENT *gce)
-{
- int iEvent = gce->pDest->iType;
-
- if (iEvent&g_Settings.dwTrayIconFlags) {
- switch (iEvent) {
- case GC_EVENT_MESSAGE | GC_EVENT_HIGHLIGHT:
- case GC_EVENT_ACTION | GC_EVENT_HIGHLIGHT:
- CList_AddEvent(si->windowData.hContact, LoadSkinnedIcon(SKINICON_EVENT_MESSAGE), "chaticon", 0, TranslateT("%s wants your attention in %s"), gce->ptszNick, si->ptszName);
- break;
- case GC_EVENT_MESSAGE:
- CList_AddEvent(si->windowData.hContact, GetCachedIcon("chat_log_message_in"), "chaticon", CLEF_ONLYAFEW, TranslateT("%s speaks in %s"), gce->ptszNick, si->ptszName);
- break;
- case GC_EVENT_ACTION:
- CList_AddEvent(si->windowData.hContact, GetCachedIcon("chat_log_action"), "chaticon", CLEF_ONLYAFEW, TranslateT("%s speaks in %s"), gce->ptszNick, si->ptszName);
- break;
- case GC_EVENT_JOIN:
- CList_AddEvent(si->windowData.hContact, GetCachedIcon("chat_log_join"), "chaticon", CLEF_ONLYAFEW, TranslateT("%s has joined %s"), gce->ptszNick, si->ptszName);
- break;
- case GC_EVENT_PART:
- CList_AddEvent(si->windowData.hContact, GetCachedIcon("chat_log_part"), "chaticon", CLEF_ONLYAFEW, TranslateT("%s has left %s"), gce->ptszNick, si->ptszName);
- break;
- case GC_EVENT_QUIT:
- CList_AddEvent(si->windowData.hContact, GetCachedIcon("chat_log_quit"), "chaticon", CLEF_ONLYAFEW, TranslateT("%s has disconnected"), gce->ptszNick);
- break;
- case GC_EVENT_NICK:
- CList_AddEvent(si->windowData.hContact, GetCachedIcon("chat_log_nick"), "chaticon", CLEF_ONLYAFEW, TranslateT("%s is now known as %s"), gce->ptszNick, gce->ptszText);
- break;
- case GC_EVENT_KICK:
- CList_AddEvent(si->windowData.hContact, GetCachedIcon("chat_log_kick"), "chaticon", CLEF_ONLYAFEW, TranslateT("%s kicked %s from %s"), gce->ptszStatus, gce->ptszNick, si->ptszName);
- break;
- case GC_EVENT_NOTICE:
- CList_AddEvent(si->windowData.hContact, GetCachedIcon("chat_log_notice"), "chaticon", CLEF_ONLYAFEW, TranslateT("Notice from %s"), gce->ptszNick);
- break;
- case GC_EVENT_TOPIC:
- CList_AddEvent(si->windowData.hContact, GetCachedIcon("chat_log_topic"), "chaticon", CLEF_ONLYAFEW, TranslateT("Topic change in %s"), si->ptszName);
- break;
- case GC_EVENT_INFORMATION:
- CList_AddEvent(si->windowData.hContact, GetCachedIcon("chat_log_info"), "chaticon", CLEF_ONLYAFEW, TranslateT("Information in %s"), si->ptszName);
- break;
- case GC_EVENT_ADDSTATUS:
- CList_AddEvent(si->windowData.hContact, GetCachedIcon("chat_log_addstatus"), "chaticon", CLEF_ONLYAFEW, TranslateT("%s enables \'%s\' status for %s in %s"), gce->ptszText, gce->ptszStatus, gce->ptszNick, si->ptszName);
- break;
- case GC_EVENT_REMOVESTATUS:
- CList_AddEvent(si->windowData.hContact, GetCachedIcon("chat_log_removestatus"), "chaticon", CLEF_ONLYAFEW, TranslateT("%s disables \'%s\' status for %s in %s"), gce->ptszText, gce->ptszStatus, gce->ptszNick, si->ptszName);
- break;
- }
- }
-
- return TRUE;
-}
-
-static BOOL DoPopup(SESSION_INFO *si, GCEVENT *gce)
-{
- int iEvent = gce->pDest->iType;
-
- if (iEvent & g_Settings.dwPopupFlags) {
- switch (iEvent) {
- case GC_EVENT_MESSAGE | GC_EVENT_HIGHLIGHT:
- ShowPopup(si->windowData.hContact, si, LoadSkinnedIcon(SKINICON_EVENT_MESSAGE), si->pszModule, si->ptszName, aFonts[16].color, TranslateT("%s says: %s"), gce->ptszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_ACTION | GC_EVENT_HIGHLIGHT:
- ShowPopup(si->windowData.hContact, si, LoadSkinnedIcon(SKINICON_EVENT_MESSAGE), si->pszModule, si->ptszName, aFonts[16].color, _T("%s %s"), gce->ptszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_MESSAGE:
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_message_in"), si->pszModule, si->ptszName, aFonts[9].color, TranslateT("%s says: %s"), gce->ptszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_ACTION:
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_action"), si->pszModule, si->ptszName, aFonts[15].color, _T("%s %s"), gce->ptszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_JOIN:
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_join"), si->pszModule, si->ptszName, aFonts[3].color, TranslateT("%s has joined"), gce->ptszNick);
- break;
- case GC_EVENT_PART:
- if (!gce->ptszText)
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_part"), si->pszModule, si->ptszName, aFonts[4].color, TranslateT("%s has left"), gce->ptszNick);
- else
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_part"), si->pszModule, si->ptszName, aFonts[4].color, TranslateT("%s has left (%s)"), gce->ptszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_QUIT:
- if (!gce->ptszText)
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_quit"), si->pszModule, si->ptszName, aFonts[5].color, TranslateT("%s has disconnected"), gce->ptszNick);
- else
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_quit"), si->pszModule, si->ptszName, aFonts[5].color, TranslateT("%s has disconnected (%s)"), gce->ptszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_NICK:
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_nick"), si->pszModule, si->ptszName, aFonts[7].color, TranslateT("%s is now known as %s"), gce->ptszNick, gce->ptszText);
- break;
- case GC_EVENT_KICK:
- if (!gce->ptszText)
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_kick"), si->pszModule, si->ptszName, aFonts[6].color, TranslateT("%s kicked %s"), gce->ptszStatus, gce->ptszNick);
- else
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_kick"), si->pszModule, si->ptszName, aFonts[6].color, TranslateT("%s kicked %s (%s)"), gce->ptszStatus, gce->ptszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_NOTICE:
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_notice"), si->pszModule, si->ptszName, aFonts[8].color, TranslateT("Notice from %s: %s"), gce->ptszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_TOPIC:
- if (!gce->ptszNick)
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_topic"), si->pszModule, si->ptszName, aFonts[11].color, TranslateT("The topic is \'%s\'"), RemoveFormatting(gce->ptszText));
- else
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_topic"), si->pszModule, si->ptszName, aFonts[11].color, TranslateT("The topic is \'%s\' (set by %s)"), RemoveFormatting(gce->ptszText), gce->ptszNick);
- break;
- case GC_EVENT_INFORMATION:
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_info"), si->pszModule, si->ptszName, aFonts[12].color, _T("%s"), RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_ADDSTATUS:
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_addstatus"), si->pszModule, si->ptszName, aFonts[13].color, TranslateT("%s enables \'%s\' status for %s"), gce->ptszText, gce->ptszStatus, gce->ptszNick);
- break;
- case GC_EVENT_REMOVESTATUS:
- ShowPopup(si->windowData.hContact, si, GetCachedIcon("chat_log_removestatus"), si->pszModule, si->ptszName, aFonts[14].color, TranslateT("%s disables \'%s\' status for %s"), gce->ptszText, gce->ptszStatus, gce->ptszNick);
- break;
- }
- }
-
- return TRUE;
-}
-
-BOOL DoSoundsFlashPopupTrayStuff(SESSION_INFO *si, GCEVENT *gce, BOOL bHighlight, int bManyFix)
-{
- if (!gce || !si || gce->bIsMe || si->iType == GCW_SERVER)
- return FALSE;
-
- BOOL bInactive = si->hWnd == NULL || GetForegroundWindow() != GetParent(si->hWnd);
- // bInactive |= GetActiveWindow() != si->hWnd; // Removed this, because it seemed to be FALSE, even when window was focused, causing incorrect notifications
-
- int iEvent = gce->pDest->iType;
-
- if (bHighlight) {
- gce->pDest->iType |= GC_EVENT_HIGHLIGHT;
- if (bInactive || !g_Settings.SoundsFocus)
- SkinPlaySound("ChatHighlight");
- if (bInactive && si->hWnd && db_get_b(NULL, "Chat", "FlashWindowHighlight", 0) != 0)
- SendMessage(GetParent(si->hWnd), CM_STARTFLASHING, 0, 0);
- if (db_get_b(si->windowData.hContact, "CList", "Hidden", 0) != 0)
- db_unset(si->windowData.hContact, "CList", "Hidden");
- if (bInactive)
- DoTrayIcon(si, gce);
- if (bInactive || !g_Settings.PopupInactiveOnly)
- DoPopup(si, gce);
- if (bInactive && si->hWnd)
- SendMessage(si->hWnd, GC_SETMESSAGEHIGHLIGHT, 0, 0);
- return TRUE;
- }
-
- // do blinking icons in tray
- if (bInactive || !g_Settings.TrayIconInactiveOnly)
- DoTrayIcon(si, gce);
-
- // stupid thing to not create multiple popups for a QUIT event for instance
- if (bManyFix == 0) {
- // do popups
- if (bInactive || !g_Settings.PopupInactiveOnly)
- DoPopup(si, gce);
-
- // do sounds and flashing
- switch (iEvent) {
- case GC_EVENT_JOIN:
- if (bInactive || !g_Settings.SoundsFocus)
- SkinPlaySound("ChatJoin");
- break;
- case GC_EVENT_PART:
- if (bInactive || !g_Settings.SoundsFocus)
- SkinPlaySound("ChatPart");
- break;
- case GC_EVENT_QUIT:
- if (bInactive || !g_Settings.SoundsFocus)
- SkinPlaySound("ChatQuit");
- break;
- case GC_EVENT_ADDSTATUS:
- case GC_EVENT_REMOVESTATUS:
- if (bInactive || !g_Settings.SoundsFocus)
- SkinPlaySound("ChatMode");
- break;
- case GC_EVENT_KICK:
- if (bInactive || !g_Settings.SoundsFocus)
- SkinPlaySound("ChatKick");
- break;
- case GC_EVENT_MESSAGE:
- if (bInactive || !g_Settings.SoundsFocus)
- SkinPlaySound("ChatMessage");
- if (bInactive && g_Settings.FlashWindow && si->hWnd)
- SendMessage(GetParent(si->hWnd), CM_STARTFLASHING, 0, 0);
-
- if (bInactive && !(si->wState & STATE_TALK)) {
- si->wState |= STATE_TALK;
- db_set_w(si->windowData.hContact, si->pszModule, "ApparentMode", (LPARAM)(WORD)40071);
- }
- if (bInactive && si->hWnd)
- SendMessage(si->hWnd, GC_SETTABHIGHLIGHT, 0, 0);
- break;
- case GC_EVENT_ACTION:
- if (bInactive || !g_Settings.SoundsFocus)
- SkinPlaySound("ChatAction");
- break;
- case GC_EVENT_NICK:
- if (bInactive || !g_Settings.SoundsFocus)
- SkinPlaySound("ChatNick");
- break;
- case GC_EVENT_NOTICE:
- if (bInactive || !g_Settings.SoundsFocus)
- SkinPlaySound("ChatNotice");
- break;
- case GC_EVENT_TOPIC:
- if (bInactive || !g_Settings.SoundsFocus)
- SkinPlaySound("ChatTopic");
- break;
- }
- }
-
- return TRUE;
-}
-
int GetColorIndex(const char* pszModule, COLORREF cr)
{
- MODULEINFO *pMod = MM_FindModule(pszModule);
+ MODULEINFO *pMod = pci->MM_FindModule(pszModule);
if (!pMod || pMod->nColorCount == 0)
return -1;
@@ -369,32 +34,6 @@ int GetColorIndex(const char* pszModule, COLORREF cr)
return -1;
}
-// obscure function that is used to make sure that any of the colors
-// passed by the protocol is used as fore- or background color
-// in the messagebox. THis is to vvercome limitations in the richedit
-// that I do not know currently how to fix
-
-void CheckColorsInModule(const char* pszModule)
-{
- MODULEINFO *pMod = MM_FindModule(pszModule);
- COLORREF crFG;
- COLORREF crBG = (COLORREF)db_get_dw(NULL, SRMMMOD, SRMSGSET_INPUTBKGCOLOUR, SRMSGDEFSET_INPUTBKGCOLOUR);
-
- LoadMsgDlgFont(MSGFONTID_MESSAGEAREA, NULL, &crFG, FALSE);
-
- if (!pMod)
- return;
-
- for (int i = 0; i < pMod->nColorCount; i++) {
- if (pMod->crColors[i] == crFG || pMod->crColors[i] == crBG) {
- if (pMod->crColors[i] == RGB(255, 255, 255))
- pMod->crColors[i]--;
- else
- pMod->crColors[i]++;
- }
- }
-}
-
TCHAR* my_strstri(const TCHAR* s1, const TCHAR* s2)
{
for (int i = 0; s1[i]; i++)
@@ -405,254 +44,6 @@ TCHAR* my_strstri(const TCHAR* s1, const TCHAR* s2)
return NULL;
}
-BOOL IsHighlighted(SESSION_INFO *si, const TCHAR* pszText)
-{
- if (g_Settings.HighlightEnabled && g_Settings.pszHighlightWords && pszText && si->pMe) {
- TCHAR* p1 = g_Settings.pszHighlightWords;
- TCHAR* p2 = NULL;
- const TCHAR* p3 = pszText;
- static TCHAR szWord1[1000];
- static TCHAR szWord2[1000];
- static TCHAR szTrimString[] = _T(":,.!?;\'>)");
-
- // compare word for word
- while (*p1 != '\0') {
- // find the next/first word in the highlight word string
- // skip 'spaces' be4 the word
- while (*p1 == ' ' && *p1 != '\0')
- p1 += 1;
-
- //find the end of the word
- p2 = _tcschr(p1, ' ');
- if (!p2)
- p2 = _tcschr(p1, '\0');
- if (p1 == p2)
- return FALSE;
-
- // copy the word into szWord1
- lstrcpyn(szWord1, p1, p2 - p1 > 998 ? 999 : p2 - p1 + 1);
- p1 = p2;
-
- // replace %m with the users nickname
- p2 = _tcschr(szWord1, '%');
- if (p2 && p2[1] == 'm') {
- TCHAR szTemp[50];
-
- p2[1] = 's';
- lstrcpyn(szTemp, szWord1, SIZEOF(szTemp));
- mir_sntprintf(szWord1, SIZEOF(szWord1), szTemp, si->pMe->pszNick);
- }
-
- // time to get the next/first word in the incoming text string
- while (*p3 != '\0') {
- // skip 'spaces' be4 the word
- while (*p3 == ' ' && *p3 != '\0')
- p3 += 1;
-
- //find the end of the word
- p2 = (TCHAR *)_tcschr(p3, ' ');
- if (!p2)
- p2 = (TCHAR *)_tcschr(p3, '\0');
-
-
- if (p3 != p2) {
- // eliminate ending character if needed
- if (p2 - p3 > 1 && _tcschr(szTrimString, p2[-1]))
- p2 -= 1;
-
- // copy the word into szWord2 and remove formatting
- lstrcpyn(szWord2, p3, p2 - p3 > 998 ? 999 : p2 - p3 + 1);
-
- // reset the pointer if it was touched because of an ending character
- if (*p2 != '\0' && *p2 != ' ')
- p2 += 1;
- p3 = p2;
-
- CharLower(szWord1);
- CharLower(szWord2);
-
- // compare the words, using wildcards
- if (WCCmp(szWord1, RemoveFormatting(szWord2)))
- return TRUE;
- }
- }
-
- p3 = pszText;
- }
- }
-
- return FALSE;
-}
-
-BOOL LogToFile(SESSION_INFO *si, GCEVENT *gce)
-{
- TCHAR szBuffer[4096];
- TCHAR szLine[4096];
- TCHAR szTime[100];
- TCHAR tszFile[MAX_PATH];
- TCHAR tszFolder[MAX_PATH];
- TCHAR p = '\0';
-
- if (!si || !gce)
- return FALSE;
-
- MODULEINFO *mi = MM_FindModule(si->pszModule);
- if (!mi)
- return FALSE;
-
- szBuffer[0] = '\0';
-
- lstrcpyn(tszFile, GetChatLogsFilename(si->windowData.hContact, gce->time), MAX_PATH);
- BOOL bFileJustCreated = !PathFileExists(tszFile);
- _tcsncpy(tszFolder, tszFile, MAX_PATH);
- PathRemoveFileSpec(tszFolder);
- if (!PathIsDirectory(tszFolder))
- CreateDirectoryTreeT(tszFolder);
-
- lstrcpyn(szTime, MakeTimeStamp(g_Settings.pszTimeStampLog, gce->time), 99);
-
- FILE *hFile = _tfopen(tszFile, _T("ab+"));
- if (hFile) {
- TCHAR szTemp[512], szTemp2[512];
- TCHAR* pszNick = NULL;
- if (bFileJustCreated)
- fputws((const wchar_t*)"\377\376", hFile); //UTF-16 LE BOM == FF FE
- if (gce->ptszNick) {
- if (g_Settings.LogLimitNames && lstrlen(gce->ptszNick) > 20) {
- lstrcpyn(szTemp2, gce->ptszNick, 20);
- lstrcpyn(szTemp2 + 20, _T("..."), 4);
- }
- else lstrcpyn(szTemp2, gce->ptszNick, 511);
-
- if (gce->ptszUserInfo)
- mir_sntprintf(szTemp, SIZEOF(szTemp), _T("%s (%s)"), szTemp2, gce->ptszUserInfo);
- else
- mir_sntprintf(szTemp, SIZEOF(szTemp), _T("%s"), szTemp2);
- pszNick = szTemp;
- }
- switch (gce->pDest->iType) {
- case GC_EVENT_MESSAGE:
- case GC_EVENT_MESSAGE | GC_EVENT_HIGHLIGHT:
- p = '*';
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), _T("%s * %s"), gce->ptszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_ACTION:
- case GC_EVENT_ACTION | GC_EVENT_HIGHLIGHT:
- p = '*';
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), _T("%s %s"), gce->ptszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_JOIN:
- p = '>';
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s has joined"), pszNick);
- break;
- case GC_EVENT_PART:
- p = '<';
- if (!gce->ptszText)
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s has left"), pszNick);
- else
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s has left (%s)"), pszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_QUIT:
- p = '<';
- if (!gce->ptszText)
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s has disconnected"), pszNick);
- else
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s has disconnected (%s)"), pszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_NICK:
- p = '^';
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s is now known as %s"), gce->ptszNick, gce->ptszText);
- break;
- case GC_EVENT_KICK:
- p = '~';
- if (!gce->ptszText)
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s kicked %s"), gce->ptszStatus, gce->ptszNick);
- else
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s kicked %s (%s)"), gce->ptszStatus, gce->ptszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_NOTICE:
- p = 'o';
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("Notice from %s: %s"), gce->ptszNick, RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_TOPIC:
- p = '#';
- if (!gce->ptszNick)
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("The topic is \'%s\'"), RemoveFormatting(gce->ptszText));
- else
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("The topic is \'%s\' (set by %s)"), RemoveFormatting(gce->ptszText), gce->ptszNick);
- break;
- case GC_EVENT_INFORMATION:
- p = '!';
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), _T("%s"), RemoveFormatting(gce->ptszText));
- break;
- case GC_EVENT_ADDSTATUS:
- p = '+';
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s enables \'%s\' status for %s"), gce->ptszText, gce->ptszStatus, gce->ptszNick);
- break;
- case GC_EVENT_REMOVESTATUS:
- p = '-';
- mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s disables \'%s\' status for %s"), gce->ptszText, gce->ptszStatus, gce->ptszNick);
- break;
- }
- if (p)
- mir_sntprintf(szLine, SIZEOF(szLine), TranslateT("%s %c %s\r\n"), szTime, p, szBuffer);
- else
- mir_sntprintf(szLine, SIZEOF(szLine), TranslateT("%s %s\r\n"), szTime, szBuffer);
-
- if (szLine[0]) {
- _fputts(szLine, hFile);
-
- if (g_Settings.LoggingLimit > 0) {
- long dwSize;
- long trimlimit;
-
- fseek(hFile, 0, SEEK_END);
- dwSize = ftell(hFile);
- rewind(hFile);
- trimlimit = g_Settings.LoggingLimit * 1024 + 1024 * 10;
- if (dwSize > trimlimit) {
- BYTE * pBuffer = 0;
- BYTE * pBufferTemp = 0;
- size_t read = 0;
-
- pBuffer = (BYTE *)mir_alloc(g_Settings.LoggingLimit * 1024 + 2);
- pBuffer[g_Settings.LoggingLimit * 1024] = '\0';
- pBuffer[g_Settings.LoggingLimit * 1024 + 1] = '\0';
- fseek(hFile, -g_Settings.LoggingLimit * 1024, SEEK_END);
- read = fread(pBuffer, 1, g_Settings.LoggingLimit * 1024, hFile);
- fclose(hFile);
- hFile = NULL;
-
- // trim to whole lines, should help with broken log files I hope.
- pBufferTemp = (BYTE*)_tcschr((TCHAR*)pBuffer, _T('\n'));
- if (pBufferTemp) {
- pBufferTemp += sizeof(TCHAR);
- read = read - (pBufferTemp - pBuffer);
- }
- else pBufferTemp = pBuffer;
-
- if (read > 0) {
- hFile = _tfopen(tszFile, _T("wb"));
- if (hFile) {
- fputws((const wchar_t*)"\377\376", hFile); //UTF-16 LE BOM == FF FE
- fwrite(pBufferTemp, 1, read, hFile);
- fclose(hFile);
- hFile = NULL;
- }
- }
- mir_free(pBuffer);
- }
- }
- }
-
- if (hFile)
- fclose(hFile);
- hFile = NULL;
- return TRUE;
- }
- return FALSE;
-}
-
UINT CreateGCMenu(HWND hwnd, HMENU *hMenu, int iIndex, POINT pt, SESSION_INFO *si, TCHAR* pszUID, TCHAR* pszWordText)
{
GCMENUITEMS gcmi = { 0 };
@@ -695,7 +86,7 @@ UINT CreateGCMenu(HWND hwnd, HMENU *hMenu, int iIndex, POINT pt, SESSION_INFO *s
gcmi.Type = MENU_ON_NICKLIST;
}
- NotifyEventHooks(hBuildMenuEvent, 0, (WPARAM)&gcmi);
+ NotifyEventHooks(pci->hBuildMenuEvent, 0, (WPARAM)&gcmi);
if (gcmi.nItems > 0)
AppendMenu(*hMenu, MF_SEPARATOR, 0, 0);
@@ -743,7 +134,7 @@ void DestroyGCMenu(HMENU *hMenu, int iIndex)
BOOL DoEventHookAsync(HWND hwnd, const TCHAR *pszID, const char* pszModule, int iType, TCHAR* pszUID, TCHAR* pszText, DWORD dwItem)
{
- SESSION_INFO *si = SM_FindSession(pszID, pszModule);
+ SESSION_INFO *si = pci->SM_FindSession(pszID, pszModule);
if (si == NULL)
return FALSE;
@@ -761,56 +152,6 @@ BOOL DoEventHookAsync(HWND hwnd, const TCHAR *pszID, const char* pszModule, int
return TRUE;
}
-BOOL DoEventHook(const TCHAR *pszID, const char* pszModule, int iType, const TCHAR* pszUID, const TCHAR* pszText, DWORD dwItem)
-{
- SESSION_INFO *si = SM_FindSession(pszID, pszModule);
- if (si == NULL)
- return FALSE;
-
- GCDEST gcd = { pszModule, pszID, iType };
- GCHOOK gch = { 0 };
- gch.ptszUID = (LPTSTR)pszUID;
- gch.ptszText = (LPTSTR)pszText;
- gch.dwData = dwItem;
- gch.pDest = &gcd;
- NotifyEventHooks(hSendEvent, 0, (WPARAM)&gch);
- return TRUE;
-}
-
-BOOL IsEventSupported(int eventType)
-{
- // Supported events
- switch (eventType) {
- case GC_EVENT_JOIN:
- case GC_EVENT_PART:
- case GC_EVENT_QUIT:
- case GC_EVENT_KICK:
- case GC_EVENT_NICK:
- case GC_EVENT_NOTICE:
- case GC_EVENT_MESSAGE:
- case GC_EVENT_TOPIC:
- case GC_EVENT_INFORMATION:
- case GC_EVENT_ACTION:
- case GC_EVENT_ADDSTATUS:
- case GC_EVENT_REMOVESTATUS:
- case GC_EVENT_CHUID:
- case GC_EVENT_CHANGESESSIONAME:
- case GC_EVENT_ADDGROUP:
- case GC_EVENT_SETITEMDATA:
- case GC_EVENT_GETITEMDATA:
- case GC_EVENT_SETSBTEXT:
- case GC_EVENT_ACK:
- case GC_EVENT_SENDMESSAGE:
- case GC_EVENT_SETSTATUSEX:
- case GC_EVENT_CONTROL:
- case GC_EVENT_SETCONTACTSTATUS:
- return TRUE;
- }
-
- // Other events
- return FALSE;
-}
-
TCHAR* GetChatLogsFilename(HANDLE hContact, time_t tTime)
{
REPLACEVARSARRAY rva[11];
diff --git a/plugins/Scriver/src/chat/window.cpp b/plugins/Scriver/src/chat/window.cpp
index 50930e362e..40ef202c6e 100644
--- a/plugins/Scriver/src/chat/window.cpp
+++ b/plugins/Scriver/src/chat/window.cpp
@@ -122,7 +122,7 @@ static void InitButtons(HWND hwndDlg, SESSION_INFO *si)
SendDlgItemMessage(hwndDlg, IDC_CHAT_COLOR, BUTTONSETASPUSHBTN, TRUE, 0);
SendDlgItemMessage(hwndDlg, IDC_CHAT_BKGCOLOR, BUTTONSETASPUSHBTN, TRUE, 0);
- MODULEINFO *pInfo = MM_FindModule(si->pszModule);
+ MODULEINFO *pInfo = pci->MM_FindModule(si->pszModule);
if (pInfo) {
EnableWindow(GetDlgItem(hwndDlg, IDC_CHAT_BOLD), pInfo->bBold);
EnableWindow(GetDlgItem(hwndDlg, IDC_CHAT_ITALICS), pInfo->bItalics);
@@ -167,7 +167,7 @@ static void MessageDialogResize(HWND hwndDlg, SESSION_INFO *si, int w, int h)
EnableWindow(GetDlgItem(hwndDlg, IDC_CHAT_SHOWNICKLIST), TRUE);
EnableWindow(GetDlgItem(hwndDlg, IDC_CHAT_FILTER), TRUE);
if (si->iType == GCW_CHATROOM)
- EnableWindow(GetDlgItem(hwndDlg, IDC_CHAT_CHANMGR), MM_FindModule(si->pszModule)->bChanMgr);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHAT_CHANMGR), pci->MM_FindModule(si->pszModule)->bChanMgr);
}
hdwp = BeginDeferWindowPos(20);
@@ -270,7 +270,7 @@ LBL_SkipEnd:
pszName = dat->lastSession->ptszName;
}
}
- else pszName = UM_FindUserAutoComplete(si->pUsers, dat->szSearchQuery, dat->szSearchResult);
+ else pszName = pci->UM_FindUserAutoComplete(si->pUsers, dat->szSearchQuery, dat->szSearchResult);
mir_free(pszText);
replaceStrT(dat->szSearchResult, NULL);
@@ -479,7 +479,7 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
cf.dwMask = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_BACKCOLOR | CFM_COLOR;
SendMessage(hwnd, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
- if (MM_FindModule(Parentsi->pszModule) && MM_FindModule(Parentsi->pszModule)->bColor) {
+ if (pci->MM_FindModule(Parentsi->pszModule) && pci->MM_FindModule(Parentsi->pszModule)->bColor) {
int index = GetColorIndex(Parentsi->pszModule, cf.crTextColor);
u = IsDlgButtonChecked(GetParent(hwnd), IDC_CHAT_COLOR);
@@ -494,7 +494,7 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
CheckDlgButton(GetParent(hwnd), IDC_CHAT_COLOR, BST_UNCHECKED);
}
- if (MM_FindModule(Parentsi->pszModule) && MM_FindModule(Parentsi->pszModule)->bBkgColor) {
+ if (pci->MM_FindModule(Parentsi->pszModule) && pci->MM_FindModule(Parentsi->pszModule)->bBkgColor) {
int index = GetColorIndex(Parentsi->pszModule, cf.crBackColor);
COLORREF crB = db_get_dw(NULL, SRMMMOD, SRMSGSET_INPUTBKGCOLOUR, SRMSGDEFSET_INPUTBKGCOLOUR);
u = IsDlgButtonChecked(GetParent(hwnd), IDC_CHAT_BKGCOLOR);
@@ -509,7 +509,7 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
CheckDlgButton(GetParent(hwnd), IDC_CHAT_BKGCOLOR, BST_UNCHECKED);
}
- if (MM_FindModule(Parentsi->pszModule) && MM_FindModule(Parentsi->pszModule)->bBold) {
+ if (pci->MM_FindModule(Parentsi->pszModule) && pci->MM_FindModule(Parentsi->pszModule)->bBold) {
u = IsDlgButtonChecked(GetParent(hwnd), IDC_CHAT_BOLD);
u2 = cf.dwEffects;
u2 &= CFE_BOLD;
@@ -519,7 +519,7 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
CheckDlgButton(GetParent(hwnd), IDC_CHAT_BOLD, BST_UNCHECKED);
}
- if (MM_FindModule(Parentsi->pszModule) && MM_FindModule(Parentsi->pszModule)->bItalics) {
+ if (pci->MM_FindModule(Parentsi->pszModule) && pci->MM_FindModule(Parentsi->pszModule)->bItalics) {
u = IsDlgButtonChecked(GetParent(hwnd), IDC_CHAT_ITALICS);
u2 = cf.dwEffects;
u2 &= CFE_ITALIC;
@@ -529,7 +529,7 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
CheckDlgButton(GetParent(hwnd), IDC_CHAT_ITALICS, BST_UNCHECKED);
}
- if (MM_FindModule(Parentsi->pszModule) && MM_FindModule(Parentsi->pszModule)->bUnderline) {
+ if (pci->MM_FindModule(Parentsi->pszModule) && pci->MM_FindModule(Parentsi->pszModule)->bUnderline) {
u = IsDlgButtonChecked(GetParent(hwnd), IDC_CHAT_UNDERLINE);
u2 = cf.dwEffects;
u2 &= CFE_UNDERLINE;
@@ -726,7 +726,7 @@ static LRESULT CALLBACK LogSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPAR
case IDM_CLEAR:
if (si) {
SetWindowText(hwnd, _T(""));
- LM_RemoveAll(&si->pLog, &si->pLogEnd);
+ pci->LM_RemoveAll(&si->pLog, &si->pLogEnd);
si->iEventCount = 0;
si->LastTime = 0;
PostMessage(GetParent(hwnd), WM_MOUSEACTIVATE, 0, 0);
@@ -804,7 +804,7 @@ static void ProcessNickListHovering(HWND hwnd, int hoveredItem, POINT * pt, SESS
ti.rect = clientRect;
TCHAR tszBuf[1024]; tszBuf[0] = 0;
- USERINFO *ui = SM_GetUserFromIndex(parentdat->ptszID, parentdat->pszModule, currentHovered);
+ USERINFO *ui = pci->SM_GetUserFromIndex(parentdat->ptszID, parentdat->pszModule, currentHovered);
if (ui) {
if (ProtoServiceExists(parentdat->pszModule, MS_GC_PROTO_GETTOOLTIPTEXT)) {
TCHAR *p = (TCHAR*)ProtoCallService(parentdat->pszModule, MS_GC_PROTO_GETTOOLTIPTEXT, (WPARAM)parentdat->ptszID, (LPARAM)ui->pszUID);
@@ -818,7 +818,7 @@ static void ProcessNickListHovering(HWND hwnd, int hoveredItem, POINT * pt, SESS
mir_sntprintf(tszBuf, SIZEOF(tszBuf), _T("%s: %s\r\n%s: %s\r\n%s: %s"),
TranslateT("Nickname"), ui->pszNick,
TranslateT("Unique ID"), ui->pszUID,
- TranslateT("Status"), TM_WordToString(parentdat->pStatuses, ui->Status));
+ TranslateT("Status"), pci->TM_WordToString(parentdat->pStatuses, ui->Status));
ti.lpszText = tszBuf;
}
@@ -905,7 +905,7 @@ static LRESULT CALLBACK NicklistSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
item = (DWORD)(-1);
else
item &= 0xFFFF;
- USERINFO *ui = SM_GetUserFromIndex(si->ptszID, si->pszModule, (int)item);
+ USERINFO *ui = pci->SM_GetUserFromIndex(si->ptszID, si->pszModule, (int)item);
if (ui) {
HMENU hMenu = 0;
UINT uID;
@@ -953,7 +953,7 @@ static LRESULT CALLBACK NicklistSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
if (wParam == VK_RETURN) {
int index = SendMessage(hwnd, LB_GETCURSEL, 0, 0);
if (index != LB_ERR) {
- USERINFO *ui = SM_GetUserFromIndex(si->ptszID, si->pszModule, index);
+ USERINFO *ui = pci->SM_GetUserFromIndex(si->ptszID, si->pszModule, index);
DoEventHookAsync(GetParent(hwnd), si->ptszID, si->pszModule, GC_USER_PRIVMESS, ui->pszUID, NULL, 0);
}
break;
@@ -995,7 +995,7 @@ static LRESULT CALLBACK NicklistSubclassProc(HWND hwnd, UINT msg, WPARAM wParam,
*/
int iItems = SendMessage(hwnd, LB_GETCOUNT, 0, 0);
for (int i = 0; i < iItems; i++) {
- USERINFO *ui = UM_FindUserFromIndex(si->pUsers, i);
+ USERINFO *ui = pci->UM_FindUserFromIndex(si->pUsers, i);
if (ui) {
if (!_tcsnicmp(ui->pszNick, si->szSearch, lstrlen(si->szSearch))) {
SendMessage(hwnd, LB_SETCURSEL, i, 0);
@@ -1141,7 +1141,7 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
break;
case GC_SETWNDPROPS:
- LoadGlobalSettings();
+ // LoadGlobalSettings();
InitButtons(hwndDlg, si);
SendMessage(hwndDlg, DM_UPDATESTATUSBAR, 0, 0);
@@ -1185,7 +1185,7 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
TitleBarData tbd = { 0 };
TCHAR szTemp[100];
if (g_dat.flags & SMF_STATUSICON) {
- MODULEINFO *mi = MM_FindModule(si->pszModule);
+ MODULEINFO *mi = pci->MM_FindModule(si->pszModule);
tbd.hIcon = (si->wStatus == ID_STATUS_ONLINE) ? mi->hOnlineIcon : mi->hOfflineIcon;
tbd.hIconBig = (si->wStatus == ID_STATUS_ONLINE) ? mi->hOnlineIconBig : mi->hOfflineIconBig;
}
@@ -1219,7 +1219,7 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
case DM_UPDATESTATUSBAR:
{
- MODULEINFO *mi = MM_FindModule(si->pszModule);
+ MODULEINFO *mi = pci->MM_FindModule(si->pszModule);
TCHAR szTemp[512];
HICON hIcon = si->wStatus == ID_STATUS_ONLINE ? mi->hOnlineIcon : mi->hOfflineIcon;
mir_sntprintf(szTemp, SIZEOF(szTemp), _T("%s : %s"), mi->ptszModDispName, si->ptszStatusbarText ? si->ptszStatusbarText : _T(""));
@@ -1248,7 +1248,7 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
case DM_SETCODEPAGE:
si->windowData.codePage = (int)lParam;
- si->pszHeader = Log_CreateRtfHeader(MM_FindModule(si->pszModule), si);
+ si->pszHeader = Log_CreateRtfHeader(pci->MM_FindModule(si->pszModule), si);
SendMessage(hwndDlg, GC_REDRAWLOG2, 0, 0);
break;
@@ -1333,9 +1333,9 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
HICON hIcon;
if (!(si->wState & GC_EVENT_HIGHLIGHT)) {
if (si->wState & STATE_TALK)
- hIcon = (si->wStatus == ID_STATUS_ONLINE) ? MM_FindModule(si->pszModule)->hOnlineTalkIcon : MM_FindModule(si->pszModule)->hOfflineTalkIcon;
+ hIcon = (si->wStatus == ID_STATUS_ONLINE) ? pci->MM_FindModule(si->pszModule)->hOnlineTalkIcon : pci->MM_FindModule(si->pszModule)->hOfflineTalkIcon;
else
- hIcon = (si->wStatus == ID_STATUS_ONLINE) ? MM_FindModule(si->pszModule)->hOnlineIcon : MM_FindModule(si->pszModule)->hOfflineIcon;
+ hIcon = (si->wStatus == ID_STATUS_ONLINE) ? pci->MM_FindModule(si->pszModule)->hOnlineIcon : pci->MM_FindModule(si->pszModule)->hOfflineIcon;
}
else hIcon = g_dat.hMsgIcon;
@@ -1420,7 +1420,7 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
int offset;
int height;
int index = dis->itemID;
- USERINFO *ui = SM_GetUserFromIndex(si->ptszID, si->pszModule, index);
+ USERINFO *ui = pci->SM_GetUserFromIndex(si->ptszID, si->pszModule, index);
if (ui) {
int x_offset = 2;
@@ -1432,7 +1432,7 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
offset = 0;
else
offset = height / 2 - 5;
- hIcon = SM_GetStatusIcon(si, ui);
+ hIcon = pci->SM_GetStatusIcon(si, ui);
hFont = (ui->iStatusEx == 0) ? g_Settings.UserListFont : g_Settings.UserListHeadingsFont;
hOldFont = (HFONT)SelectObject(dis->hDC, hFont);
SetBkMode(dis->hDC, TRANSPARENT);
@@ -1469,7 +1469,7 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
SendDlgItemMessage(hwndDlg, IDC_CHAT_LIST, WM_SETREDRAW, FALSE, 0);
SendMessage(GetDlgItem(hwndDlg, IDC_CHAT_LIST), LB_RESETCONTENT, 0, 0);
for (int index = 0; index<si->nUsersInNicklist; index++) {
- USERINFO *ui = SM_GetUserFromIndex(si->ptszID, si->pszModule, index);
+ USERINFO *ui = pci->SM_GetUserFromIndex(si->ptszID, si->pszModule, index);
if (ui) {
char szIndicator = SM_GetStatusIndicator(si, ui);
if (szIndicator>'\0') {
@@ -1544,12 +1544,11 @@ LABEL_SHOWWINDOW:
if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_CHAT_SPLITTERX)) {
POINT pt;
RECT rc;
- int oldSplitterX;
GetClientRect(hwndDlg, &rc);
pt.x = wParam; pt.y = 0;
ScreenToClient(hwndDlg, &pt);
- oldSplitterX = si->iSplitterX;
+ int oldSplitterX = si->iSplitterX;
si->iSplitterX = rc.right - pt.x + 1;
if (si->iSplitterX < 35)
si->iSplitterX = 35;
@@ -1560,11 +1559,10 @@ LABEL_SHOWWINDOW:
else if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_CHAT_SPLITTERY)) {
POINT pt;
RECT rc;
- int oldSplitterY;
GetClientRect(hwndDlg, &rc);
pt.x = 0; pt.y = wParam;
ScreenToClient(hwndDlg, &pt);
- oldSplitterY = si->iSplitterY;
+ int oldSplitterY = si->iSplitterY;
si->iSplitterY = rc.bottom - pt.y;
g_Settings.iSplitterY = si->iSplitterY;
}
@@ -1574,7 +1572,7 @@ LABEL_SHOWWINDOW:
case GC_FIREHOOK:
if (lParam) {
GCHOOK *gch = (GCHOOK *)lParam;
- NotifyEventHooks(hSendEvent, 0, (WPARAM)gch);
+ NotifyEventHooks(pci->hSendEvent, 0, (WPARAM)gch);
if (gch->pDest) {
mir_free((void*)gch->pDest->ptszID);
mir_free((void*)gch->pDest->pszModule);
@@ -1607,7 +1605,7 @@ LABEL_SHOWWINDOW:
COLORCHOOSER * pCC = (COLORCHOOSER *)mir_alloc(sizeof(COLORCHOOSER));
GetWindowRect(GetDlgItem(hwndDlg, bFG ? IDC_CHAT_COLOR : IDC_CHAT_BKGCOLOR), &rc);
pCC->hWndTarget = GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE);
- pCC->pModule = MM_FindModule(si->pszModule);
+ pCC->pModule = pci->MM_FindModule(si->pszModule);
pCC->xPosition = rc.left + 3;
pCC->yPosition = IsWindowVisible(GetDlgItem(hwndDlg, IDC_CHAT_COLOR)) ? rc.top - 1 : rc.top + 20;
pCC->bForeground = bFG;
@@ -1643,7 +1641,7 @@ LABEL_SHOWWINDOW:
if (uMsg != WM_ACTIVATE)
SetFocus(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE));
- SetActiveSession(si->ptszID, si->pszModule);
+ pci->SetActiveSession(si->ptszID, si->pszModule);
if (db_get_w(si->windowData.hContact, si->pszModule, "ApparentMode", 0) != 0)
db_set_w(si->windowData.hContact, si->pszModule, "ApparentMode", (LPARAM)0);
@@ -1701,13 +1699,13 @@ LABEL_SHOWWINDOW:
GetCursorPos(&p);
ScreenToClient(GetDlgItem(hwndDlg, IDC_CHAT_LIST), &p);
int item = LOWORD(SendMessage(GetDlgItem(hwndDlg, IDC_CHAT_LIST), LB_ITEMFROMPOINT, 0, MAKELPARAM(p.x, p.y)));
- USERINFO *ui = SM_GetUserFromIndex(parentdat->ptszID, parentdat->pszModule, item);
+ USERINFO *ui = pci->SM_GetUserFromIndex(parentdat->ptszID, parentdat->pszModule, item);
if (ui != NULL) {
static TCHAR ptszBuf[1024];
mir_sntprintf(ptszBuf, SIZEOF(ptszBuf), _T("%s: %s\r\n%s: %s\r\n%s: %s"),
TranslateT("Nickname"), ui->pszNick,
TranslateT("Unique ID"), ui->pszUID,
- TranslateT("Status"), TM_WordToString(parentdat->pStatuses, ui->Status));
+ TranslateT("Status"), pci->TM_WordToString(parentdat->pStatuses, ui->Status));
lpttd->lpszText = ptszBuf;
}
}
@@ -1729,7 +1727,7 @@ LABEL_SHOWWINDOW:
ScreenToClient(GetDlgItem(hwndDlg, IDC_CHAT_LIST), &hti.pt);
int item = LOWORD(SendMessage(GetDlgItem(hwndDlg, IDC_CHAT_LIST), LB_ITEMFROMPOINT, 0, MAKELPARAM(hti.pt.x, hti.pt.y)));
- USERINFO *ui = SM_GetUserFromIndex(si->ptszID, si->pszModule, item);
+ USERINFO *ui = pci->SM_GetUserFromIndex(si->ptszID, si->pszModule, item);
if (ui) {
if (GetKeyState(VK_SHIFT) & 0x8000) {
LRESULT lResult = (LRESULT)SendMessage(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE), EM_GETSEL, 0, 0);
@@ -1765,15 +1763,9 @@ LABEL_SHOWWINDOW:
si->windowData.cmdList = tcmdlist_append(si->windowData.cmdList, pszRtf, 20, FALSE);
TCHAR *ptszText = DoRtfToTags(pszRtf, si);
- TCHAR *p1 = _tcschr(ptszText, '\0');
+ rtrimt(ptszText);
- //remove trailing linebreaks
- while (p1 > ptszText && (*p1 == '\0' || *p1 == '\r' || *p1 == '\n')) {
- *p1 = '\0';
- p1--;
- }
-
- if (MM_FindModule(si->pszModule)->bAckMsg) {
+ if (pci->MM_FindModule(si->pszModule)->bAckMsg) {
EnableWindow(GetDlgItem(hwndDlg, IDC_CHAT_MESSAGE), FALSE);
SendDlgItemMessage(hwndDlg, IDC_CHAT_MESSAGE, EM_SETREADONLY, TRUE, 0);
}
@@ -1831,7 +1823,7 @@ LABEL_SHOWWINDOW:
case IDC_CHAT_HISTORY:
if (IsWindowEnabled(GetDlgItem(hwndDlg, IDC_CHAT_HISTORY))) {
- MODULEINFO *pInfo = MM_FindModule(si->pszModule);
+ MODULEINFO *pInfo = pci->MM_FindModule(si->pszModule);
if (pInfo)
ShellExecute(hwndDlg, NULL, GetChatLogsFilename(si->windowData.hContact, 0), NULL, NULL, SW_SHOW);
}
@@ -1858,7 +1850,7 @@ LABEL_SHOWWINDOW:
case IDC_CHAT_BKGCOLOR:
if (IsWindowEnabled(GetDlgItem(hwndDlg, IDC_CHAT_BKGCOLOR))) {
- MODULEINFO *pInfo = MM_FindModule(si->pszModule);
+ MODULEINFO *pInfo = pci->MM_FindModule(si->pszModule);
CHARFORMAT2 cf;
cf.cbSize = sizeof(CHARFORMAT2);
cf.dwEffects = 0;
@@ -1888,7 +1880,7 @@ LABEL_SHOWWINDOW:
case IDC_CHAT_COLOR:
{
- MODULEINFO *pInfo = MM_FindModule(si->pszModule);
+ MODULEINFO *pInfo = pci->MM_FindModule(si->pszModule);
CHARFORMAT2 cf;
cf.cbSize = sizeof(CHARFORMAT2);
cf.dwEffects = 0;
@@ -1925,7 +1917,7 @@ LABEL_SHOWWINDOW:
case IDC_CHAT_ITALICS:
case IDC_CHAT_UNDERLINE:
{
- MODULEINFO *pInfo = MM_FindModule(si->pszModule);
+ MODULEINFO *pInfo = pci->MM_FindModule(si->pszModule);
CHARFORMAT2 cf;
cf.cbSize = sizeof(CHARFORMAT2);
cf.dwMask = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE;
@@ -2003,7 +1995,7 @@ LABEL_SHOWWINDOW:
if (res > 0) {
g_dat.chatBbuttonVisibility ^= (1 << (res - 1));
db_set_dw(NULL, SRMMMOD, SRMSGSET_CHATBUTTONVISIBILITY, g_dat.chatBbuttonVisibility);
- SM_BroadcastMessage(NULL, GC_SETWNDPROPS, 0, 0, TRUE);
+ pci->SM_BroadcastMessage(NULL, GC_SETWNDPROPS, 0, 0, TRUE);
}
DestroyMenu(hToolbarMenu);
}
@@ -2035,7 +2027,6 @@ LABEL_SHOWWINDOW:
break;
case WM_DESTROY:
-
NotifyLocalWinEvent(si->windowData.hContact, hwndDlg, MSG_WINDOW_EVT_CLOSING);
si->hWnd = NULL;
SetWindowLongPtr(hwndDlg, GWLP_USERDATA, 0);