diff options
Diffstat (limited to 'plugins/Scriver/src/chat_tools.cpp')
| -rw-r--r-- | plugins/Scriver/src/chat_tools.cpp | 120 | 
1 files changed, 120 insertions, 0 deletions
diff --git a/plugins/Scriver/src/chat_tools.cpp b/plugins/Scriver/src/chat_tools.cpp new file mode 100644 index 0000000000..050d4656c5 --- /dev/null +++ b/plugins/Scriver/src/chat_tools.cpp @@ -0,0 +1,120 @@ +/*
 +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 "stdafx.h"
 +
 +wchar_t* my_strstri(const wchar_t* s1, const wchar_t* s2)
 +{
 +	for (int i = 0; s1[i]; i++)
 +		for (int j = i, k = 0; towlower(s1[j]) == towlower(s2[k]); j++, k++)
 +			if (!s2[k + 1])
 +				return (wchar_t*)(s1 + i);
 +
 +	return nullptr;
 +}
 +
 +UINT CreateGCMenu(HWND hwnd, HMENU *hMenu, int iIndex, POINT pt, SESSION_INFO *si, wchar_t* pszUID, wchar_t* pszWordText)
 +{
 +	GCMENUITEMS gcmi = { 0 };
 +	HMENU hSubMenu = 0;
 +
 +	*hMenu = GetSubMenu(g_hMenu, iIndex);
 +	gcmi.pszID = si->ptszID;
 +	gcmi.pszModule = si->pszModule;
 +	gcmi.pszUID = pszUID;
 +
 +	if (iIndex == 1) {
 +		int iLen = GetRichTextLength(hwnd, CP_ACP, FALSE);
 +
 +		EnableMenuItem(*hMenu, IDM_CLEAR, MF_ENABLED);
 +		EnableMenuItem(*hMenu, ID_COPYALL, MF_ENABLED);
 +		if (!iLen) {
 +			EnableMenuItem(*hMenu, ID_COPYALL, MF_BYCOMMAND | MF_GRAYED);
 +			EnableMenuItem(*hMenu, IDM_CLEAR, MF_BYCOMMAND | MF_GRAYED);
 +		}
 +
 +		if (pszWordText && pszWordText[0]) {
 +			wchar_t szMenuText[4096];
 +			mir_snwprintf(szMenuText, TranslateT("Look up '%s':"), pszWordText);
 +			ModifyMenu(*hMenu, 4, MF_STRING | MF_BYPOSITION, 4, szMenuText);
 +			SetSearchEngineIcons(*hMenu, g_dat.hSearchEngineIconList);
 +		}
 +		else ModifyMenu(*hMenu, 4, MF_STRING | MF_GRAYED | MF_BYPOSITION, 4, TranslateT("No word to look up"));
 +		gcmi.Type = MENU_ON_LOG;
 +	}
 +	else if (iIndex == 0) {
 +		wchar_t szTemp[50];
 +		if (pszWordText)
 +			mir_snwprintf(szTemp, TranslateT("&Message %s"), pszWordText);
 +		else
 +			mir_wstrncpy(szTemp, TranslateT("&Message"), _countof(szTemp) - 1);
 +
 +		if (mir_wstrlen(szTemp) > 40)
 +			mir_wstrncpy(szTemp + 40, L"...", 4);
 +		ModifyMenu(*hMenu, ID_MESS, MF_STRING | MF_BYCOMMAND, ID_MESS, szTemp);
 +		gcmi.Type = MENU_ON_NICKLIST;
 +	}
 +
 +	NotifyEventHooks(pci->hBuildMenuEvent, 0, (WPARAM)&gcmi);
 +
 +	if (gcmi.nItems > 0)
 +		AppendMenu(*hMenu, MF_SEPARATOR, 0, 0);
 +
 +	for (int i = 0; i < gcmi.nItems; i++) {
 +		wchar_t *ptszText = TranslateW(gcmi.Item[i].pszDesc);
 +		DWORD dwState = gcmi.Item[i].bDisabled ? MF_GRAYED : 0;
 +
 +		if (gcmi.Item[i].uType == MENU_NEWPOPUP) {
 +			hSubMenu = CreateMenu();
 +			AppendMenu(*hMenu, dwState | MF_POPUP, (UINT_PTR)hSubMenu, ptszText);
 +		}
 +		else if (gcmi.Item[i].uType == MENU_POPUPHMENU)
 +			AppendMenu(hSubMenu == 0 ? *hMenu : hSubMenu, dwState | MF_POPUP, gcmi.Item[i].dwID, ptszText);
 +		else if (gcmi.Item[i].uType == MENU_POPUPITEM)
 +			AppendMenu(hSubMenu == 0 ? *hMenu : hSubMenu, dwState | MF_STRING, gcmi.Item[i].dwID, ptszText);
 +		else if (gcmi.Item[i].uType == MENU_POPUPCHECK)
 +			AppendMenu(hSubMenu == 0 ? *hMenu : hSubMenu, dwState | MF_CHECKED | MF_STRING, gcmi.Item[i].dwID, ptszText);
 +		else if (gcmi.Item[i].uType == MENU_POPUPSEPARATOR)
 +			AppendMenu(hSubMenu == 0 ? *hMenu : hSubMenu, MF_SEPARATOR, 0, ptszText);
 +		else if (gcmi.Item[i].uType == MENU_SEPARATOR)
 +			AppendMenu(*hMenu, MF_SEPARATOR, 0, ptszText);
 +		else if (gcmi.Item[i].uType == MENU_HMENU)
 +			AppendMenu(*hMenu, dwState | MF_POPUP, gcmi.Item[i].dwID, ptszText);
 +		else if (gcmi.Item[i].uType == MENU_ITEM)
 +			AppendMenu(*hMenu, dwState | MF_STRING, gcmi.Item[i].dwID, ptszText);
 +		else if (gcmi.Item[i].uType == MENU_CHECK)
 +			AppendMenu(*hMenu, dwState | MF_CHECKED | MF_STRING, gcmi.Item[i].dwID, ptszText);
 +	}
 +	return TrackPopupMenu(*hMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwnd, nullptr);
 +}
 +
 +void DestroyGCMenu(HMENU *hMenu, int iIndex)
 +{
 +	MENUITEMINFO mii = { 0 };
 +	mii.cbSize = sizeof(mii);
 +	mii.fMask = MIIM_SUBMENU;
 +	while(GetMenuItemInfo(*hMenu, iIndex, TRUE, &mii))
 +	{
 +		if (mii.hSubMenu != nullptr)
 +			DestroyMenu(mii.hSubMenu);
 +		RemoveMenu(*hMenu, iIndex, MF_BYPOSITION);
 +	}
 +}
  | 
