Ejemplo n.º 1
0
static void ReplaceContactSmileys(RichEditData *rdt, const CHARRANGE &sel, bool ignoreLast, bool unFreeze)
{
	if ((rdt->inputarea && !opt.InputSmileys) || rdt->dontReplace) return;
	SmileyPackCType *smcp = NULL;
	SmileyPackType* SmileyPack = GetSmileyPack(NULL, rdt->hContact, rdt->inputarea ? NULL : &smcp);
	ReplaceSmileys(rdt->hwnd, SmileyPack, smcp, sel, false, ignoreLast, unFreeze);
}
Ejemplo n.º 2
0
bool SmileyPackCListType::AddSmiley(HANDLE hContact, TCHAR* path)
{
	SmileyPackCType* smpack = GetSmileyPack(hContact);
	if (smpack == NULL)
	{  
		smpack = new SmileyPackCType;

		smpack->SetId(hContact);
		m_SmileyPacks.insert(smpack);
	}
	return smpack->LoadSmiley(path);
}
Ejemplo n.º 3
0
bool SmileyPackListType::AddSmileyPack(CMString& filename, CMString& packname)
{
	bool res = true;
	if (GetSmileyPack(filename) == NULL) {  //not exist yet, so add
		SmileyPackType *smileyPack = new SmileyPackType;

		res = smileyPack->LoadSmileyFile(filename, packname, FALSE);
		if (res)
			m_SmileyPacks.insert(smileyPack);
		else
			delete smileyPack;
	}
	return res;
}
Ejemplo n.º 4
0
bool SmileyPackCListType::AddSmileyPack(HANDLE hContact, TCHAR* dir)
{
	bool res = true;
	if (GetSmileyPack(hContact) == NULL)
	{
		SmileyPackCType *smileyPack = new SmileyPackCType;

		res = smileyPack->LoadSmileyDir(dir);
		if (res)
		{
			smileyPack->SetId(hContact);
			m_SmileyPacks.insert(smileyPack);
		}
		else
			delete smileyPack;
	}
	return res;
}
Ejemplo n.º 5
0
//global subclass function for all dialogs
static LRESULT CALLBACK MessageDlgSubclass(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	MsgWndData* dat = IsMsgWnd(hwnd);
	if (dat == NULL)
		return 0;

	switch(uMsg) {
	case DM_OPTIONSAPPLIED:
		dat->clear();
		dat->CreateSmileyButton();
		break;

	case DM_APPENDTOLOG:
		if (opt.PluginSupportEnabled) {
			//get length of text now before things can get added...
			GETTEXTLENGTHEX gtl;
			gtl.codepage = 1200;
			gtl.flags = GTL_PRECISE | GTL_NUMCHARS;
			dat->idxLastChar = (int)SendMessage(dat->REdit, EM_GETTEXTLENGTHEX, (WPARAM) &gtl, 0);
		}
		break;
	}

	LRESULT result = mir_callNextSubclass(hwnd, MessageDlgSubclass, uMsg, wParam, lParam); 
	if (!opt.PluginSupportEnabled)
		return result;

	switch(uMsg) {
	case WM_DESTROY:
		WaitForSingleObject(g_hMutex, 2000);
		{
			int ind = g_MsgWndList.getIndex((MsgWndData*)&hwnd);
			if ( ind != -1 ) {
				delete g_MsgWndList[ind];
				g_MsgWndList.remove(ind);
			}
		}
		ReleaseMutex(g_hMutex);
		break;

	case WM_SIZE:
		if (dat->doSmileyButton) {
			RECT rect = dat->CalcSmileyButtonPos();
			SetWindowPos(dat->hSmlButton, NULL, rect.left, rect.top, 
				0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE);
		}
		break;

	case DM_APPENDTOLOG:
		if (dat->doSmileyReplace) {
			SmileyPackCType* smcp;
			SmileyPackType* SmileyPack = GetSmileyPack(dat->ProtocolName, dat->hContact, &smcp);
			if (SmileyPack != NULL) {
				const CHARRANGE sel = { dat->idxLastChar, LONG_MAX };
				ReplaceSmileys(dat->REdit, SmileyPack, smcp, sel, false, false, false);
			}
		}
		break;

	case DM_REMAKELOG:
		if (dat->doSmileyReplace) {
			SmileyPackCType* smcp;
			SmileyPackType* SmileyPack = GetSmileyPack(dat->ProtocolName, dat->hContact, &smcp);
			if (SmileyPack != NULL) {
				static const CHARRANGE sel = { 0, LONG_MAX };
				ReplaceSmileys(dat->REdit, SmileyPack, smcp, sel, false, false, false);
			}
		}
		break;

	case WM_COMMAND:
		if (LOWORD(wParam) == IDC_SMLBUTTON && HIWORD(wParam) == BN_CLICKED) {
			SmileyToolWindowParam *stwp = new SmileyToolWindowParam;
			stwp->pSmileyPack = GetSmileyPack(dat->ProtocolName, dat->hContact);

			stwp->hWndParent = hwnd;
			stwp->hWndTarget = dat->MEdit;
			stwp->targetMessage = EM_REPLACESEL;
			stwp->targetWParam = TRUE;

			RECT rect;
			GetWindowRect(dat->hSmlButton, &rect);

			if (dat->OldButtonPlace) {
				stwp->direction = 3;
				stwp->xPosition = rect.left;
				stwp->yPosition = rect.top + 4;
			}
			else {
				stwp->direction = 0;
				stwp->xPosition = rect.left;
				stwp->yPosition = rect.top + 24;
			}

			mir_forkthread(SmileyToolThread, stwp);
		}

		if (LOWORD(wParam) == MI_IDC_ADD && HIWORD(wParam) == BN_CLICKED && dat->doSmileyButton) {
			RECT rect = dat->CalcSmileyButtonPos();
			SetWindowPos(dat->hSmlButton, NULL, rect.left, rect.top, 
				0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE);
		}
		break;
	}

	return result;
}
Ejemplo n.º 6
0
	void CreateSmileyButton(void)
	{
		doSmileyButton = opt.ButtonStatus != 0;
		OldButtonPlace = opt.ButtonStatus == 2;

		SmileyPackType* SmileyPack = GetSmileyPack(ProtocolName, hContact);
		doSmileyButton &= SmileyPack != NULL && SmileyPack->VisibleSmileyCount() != 0;

		bool showButtonLine;
		if (IsOldSrmm()) {
			isSplit = db_get_b(NULL,"SRMsg","Split", TRUE) != 0;

			doSmileyReplace = (isSplit || !isSend);
			doSmileyButton &= isSplit ||  isSend;
			showButtonLine = db_get_b(NULL, "SRMsg", "ShowButtonLine", TRUE) != 0;
		}
		else {
			doSmileyReplace = true;
			OldButtonPlace = false;
			showButtonLine = db_get_b(NULL, "SRMM", "ShowButtonLine", TRUE) != 0;
		}

		doSmileyButton &= OldButtonPlace || showButtonLine;

		if (ProtocolName[0] != 0) {
			INT_PTR cap = CallProtoService(ProtocolName, PS_GETCAPS, PFLAGNUM_1, 0);
			doSmileyButton  &= ((cap & (PF1_IMSEND | PF1_CHAT)) != 0);
			doSmileyReplace &= ((cap & (PF1_IMRECV | PF1_CHAT)) != 0);
		}

		if (doSmileyButton && opt.PluginSupportEnabled) {
			//create smiley button
			RECT rect = CalcSmileyButtonPos();

			hSmlButton = CreateWindowEx(
				WS_EX_LEFT | WS_EX_NOPARENTNOTIFY | WS_EX_TOPMOST,
				MIRANDABUTTONCLASS,
				_T("S"),
				WS_CHILD|WS_VISIBLE|WS_TABSTOP, // window style
				rect.left,                      // horizontal position of window
				rect.top,                       // vertical position of window
				rect.bottom - rect.top + 1,     // window width
				rect.bottom - rect.top + 1,     // window height
				GetParent(LButton),             // handle to parent or owner window
				(HMENU) IDC_SMLBUTTON,          // menu handle or child identifier
				NULL,                           // handle to application instance
				NULL);                          // window-creation data

			// Conversion to bitmap done to prevent Miranda from scaling the image
			SmileyType* sml = FindButtonSmiley(SmileyPack);
			if (sml != NULL) {
				hSmlBmp = sml->GetBitmap(GetSysColor(COLOR_BTNFACE), 0, 0);
				SendMessage(hSmlButton, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hSmlBmp);
			}
			else {
				hSmlIco = GetDefaultIcon(); 
				SendMessage(hSmlButton, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hSmlIco);
			}

			SendMessage(hSmlButton, BUTTONADDTOOLTIP, (WPARAM)LPGEN("Show smiley selection window"), 0);
			SendMessage(hSmlButton, BUTTONSETASFLATBTN, TRUE, 0);
		}
	}