From a1c32d8bf1118b20e9a701e2b6ac0300cf704e55 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 16 Apr 2020 18:52:33 +0300 Subject: code cleaning --- plugins/ChangeKeyboardLayout/src/main.cpp | 2 +- plugins/ChangeKeyboardLayout/src/stdafx.h | 2 +- .../ChangeKeyboardLayout/src/text_operations.cpp | 368 ++++++++++----------- 3 files changed, 184 insertions(+), 188 deletions(-) (limited to 'plugins') diff --git a/plugins/ChangeKeyboardLayout/src/main.cpp b/plugins/ChangeKeyboardLayout/src/main.cpp index 96e6a7135e..fc27d27f9f 100644 --- a/plugins/ChangeKeyboardLayout/src/main.cpp +++ b/plugins/ChangeKeyboardLayout/src/main.cpp @@ -5,7 +5,7 @@ wchar_t *ptszLayStrings[20]; HANDLE hChangeLayout, hGetLayoutOfText, hChangeTextLayout; HICON hPopupIcon, hCopyIcon; HKL hklLayouts[20]; -BYTE bLayNum; +int bLayNum; HHOOK kbHook_All; MainOptions moOptions; PopupOptions poOptions; diff --git a/plugins/ChangeKeyboardLayout/src/stdafx.h b/plugins/ChangeKeyboardLayout/src/stdafx.h index eaeabd1e5a..37a7317347 100644 --- a/plugins/ChangeKeyboardLayout/src/stdafx.h +++ b/plugins/ChangeKeyboardLayout/src/stdafx.h @@ -101,7 +101,7 @@ extern HICON hPopupIcon, hCopyIcon; extern LPCTSTR ptszKeybEng; extern HKL hklEng; -extern BYTE bLayNum; +extern int bLayNum; extern HKL hklLayouts[20]; extern wchar_t *ptszLayStrings[20]; diff --git a/plugins/ChangeKeyboardLayout/src/text_operations.cpp b/plugins/ChangeKeyboardLayout/src/text_operations.cpp index 06a6da11e2..54c0db8f81 100644 --- a/plugins/ChangeKeyboardLayout/src/text_operations.cpp +++ b/plugins/ChangeKeyboardLayout/src/text_operations.cpp @@ -12,7 +12,7 @@ struct EditStreamData static DWORD CALLBACK EditStreamOutRtf(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) { - EditStreamData *esd = (EditStreamData*)dwCookie; + EditStreamData *esd = (EditStreamData *)dwCookie; esd->cbBuff += cb; esd->pbBuff = (PBYTE)realloc(esd->pbBuff, esd->cbBuff + sizeof(wchar_t)); memcpy(esd->pbBuff + esd->iCurrent, pbBuff, cb); @@ -24,13 +24,13 @@ static DWORD CALLBACK EditStreamOutRtf(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG c return 0; } -wchar_t *GeTStringFromStreamData(EditStreamData *esd) +wchar_t* GeTStringFromStreamData(EditStreamData *esd) { DWORD i, k; - wchar_t *ptszOutText = (LPTSTR)mir_alloc(MaxTextSize*sizeof(wchar_t)); - wchar_t *ptszTemp = (wchar_t*)esd->pbBuff; - + wchar_t *ptszOutText = (LPTSTR)mir_alloc(MaxTextSize * sizeof(wchar_t)); + wchar_t *ptszTemp = (wchar_t *)esd->pbBuff; + for (i = k = 0; i < mir_wstrlen(ptszTemp); i++) { if ((ptszTemp[i] == 0x0A) || (ptszTemp[i] == 0x2028)) ptszOutText[k++] = 0x0D; @@ -51,9 +51,9 @@ BOOL CopyTextToClipboard(wchar_t *ptszText) if (!OpenClipboard(nullptr)) return FALSE; - EmptyClipboard(); - HGLOBAL hCopy = GlobalAlloc(GMEM_MOVEABLE, (mir_wstrlen(ptszText) + 1)*sizeof(wchar_t)); - mir_wstrcpy((wchar_t*)GlobalLock(hCopy), ptszText); + EmptyClipboard(); + HGLOBAL hCopy = GlobalAlloc(GMEM_MOVEABLE, (mir_wstrlen(ptszText) + 1) * sizeof(wchar_t)); + mir_wstrcpy((wchar_t *)GlobalLock(hCopy), ptszText); GlobalUnlock(hCopy); SetClipboardData(CF_UNICODETEXT, hCopy); CloseClipboard(); @@ -67,12 +67,12 @@ LPSTR GetNameOfLayout(HKL hklLayout) return ptszLayName; } -wchar_t *GetShortNameOfLayout(HKL hklLayout) +wchar_t* GetShortNameOfLayout(HKL hklLayout) { wchar_t szLI[20]; - wchar_t *ptszLiShort = (LPTSTR)mir_alloc(3*sizeof(wchar_t)); + wchar_t *ptszLiShort = (LPTSTR)mir_alloc(3 * sizeof(wchar_t)); DWORD dwLcid = MAKELCID(LOWORD(hklLayout), 0); - GetLocaleInfo(dwLcid, LOCALE_SISO639LANGNAME, szLI, 10); + GetLocaleInfoW(dwLcid, LOCALE_SISO639LANGNAME, szLI, 10); ptszLiShort[0] = toupper(szLI[0]); ptszLiShort[1] = toupper(szLI[1]); ptszLiShort[2] = 0; @@ -81,28 +81,26 @@ wchar_t *GetShortNameOfLayout(HKL hklLayout) HKL GetNextLayout(HKL hklCurLay) { - for (DWORD i = 0; i < bLayNum; i++) + for (int i = 0; i < bLayNum; i++) if (hklLayouts[i] == hklCurLay) - return hklLayouts[(i+1)%(bLayNum)]; - + return hklLayouts[(i + 1) % (bLayNum)]; + return nullptr; } -wchar_t *GenerateLayoutString(HKL hklLayout) +wchar_t* GenerateLayoutString(HKL hklLayout) { - BYTE bState[256] = {0}; + BYTE bState[256] = { 0 }; - wchar_t *ptszLayStr = (LPTSTR)mir_alloc(100 * sizeof(wchar_t)); - wchar_t *ptszTemp = (LPTSTR)mir_alloc(3 * sizeof(wchar_t)); - ptszTemp[0] = 0; + wchar_t ptszTemp[3]; ptszTemp[0] = 0; + CMStringW res; - DWORD i; + size_t i; for (i = 0; i < mir_wstrlen(ptszKeybEng); i++) { SHORT shVirtualKey = VkKeyScanEx(ptszKeybEng[i], hklEng); UINT iScanCode = MapVirtualKeyEx(shVirtualKey & 0x00FF, 0, hklEng); - for (DWORD j = 0; j < 256; j++) - bState[j] = 0; + memset(bState, 0, sizeof(bState)); if (shVirtualKey & 0x0100) bState[VK_SHIFT] = 0x80; if (shVirtualKey & 0x0200) bState[VK_CONTROL] = 0x80; @@ -118,31 +116,29 @@ wchar_t *GenerateLayoutString(HKL hklLayout) // Если нам вернули нулевой символ, или не вернули ничего, то присвоим "звоночек" if (ptszTemp[0] == 0) - ptszLayStr[i] = 3; + res.AppendChar(3); else - ptszLayStr[i] = ptszTemp[0]; + res.AppendChar(ptszTemp[0]); } - ptszLayStr[i] = 0; - mir_free(ptszTemp); - return ptszLayStr; + return res.Detach(); } wchar_t* GetLayoutString(HKL hklLayout) { - for (DWORD i = 0; i < bLayNum; i++) + for (int i = 0; i < bLayNum; i++) if (hklLayouts[i] == hklLayout) return ptszLayStrings[i]; - + return nullptr; } wchar_t* ChangeTextCase(LPCTSTR ptszInText) { - wchar_t *ptszOutText = (LPTSTR)mir_alloc(MaxTextSize*sizeof(wchar_t)); + wchar_t *ptszOutText = (LPTSTR)mir_alloc(MaxTextSize * sizeof(wchar_t)); mir_wstrcpy(ptszOutText, ptszInText); - for (DWORD i = 0; i < mir_wstrlen(ptszInText); i++) { + for (size_t i = 0; i < mir_wstrlen(ptszInText); i++) { CharUpperBuff(&ptszOutText[i], 1); if (ptszOutText[i] == ptszInText[i]) CharLowerBuff(&ptszOutText[i], 1); @@ -152,7 +148,7 @@ wchar_t* ChangeTextCase(LPCTSTR ptszInText) wchar_t* ChangeTextLayout(LPCTSTR ptszInText, HKL hklCurLay, HKL hklToLay, BOOL TwoWay) { - wchar_t *ptszOutText = (LPTSTR)mir_alloc(MaxTextSize*sizeof(wchar_t)); + wchar_t *ptszOutText = (LPTSTR)mir_alloc(MaxTextSize * sizeof(wchar_t)); mir_wstrcpy(ptszOutText, ptszInText); if (hklCurLay == nullptr || hklToLay == nullptr) @@ -166,19 +162,19 @@ wchar_t* ChangeTextLayout(LPCTSTR ptszInText, HKL hklCurLay, HKL hklToLay, BOOL for (DWORD i = 0; i < mir_wstrlen(ptszInText); i++) { BOOL Found = FALSE; for (DWORD j = 0; j < mir_wstrlen(ptszKeybCur) && !Found; j++) - if (ptszKeybCur[j] == ptszInText[i]) { - Found = TRUE; - if (mir_wstrlen(ptszKeybNext) >= j) - ptszOutText[i] = ptszKeybNext[j]; - } + if (ptszKeybCur[j] == ptszInText[i]) { + Found = TRUE; + if (mir_wstrlen(ptszKeybNext) >= j) + ptszOutText[i] = ptszKeybNext[j]; + } if (TwoWay && !Found) - for (DWORD j = 0; j < mir_wstrlen(ptszKeybNext) && !Found; j++) - if (ptszKeybNext[j] == ptszInText[i]) { - Found = TRUE; - if (mir_wstrlen(ptszKeybCur) >= j) - ptszOutText[i] = ptszKeybCur[j]; - } + for (DWORD j = 0; j < mir_wstrlen(ptszKeybNext) && !Found; j++) + if (ptszKeybNext[j] == ptszInText[i]) { + Found = TRUE; + if (mir_wstrlen(ptszKeybCur) >= j) + ptszOutText[i] = ptszKeybCur[j]; + } } return ptszOutText; } @@ -193,17 +189,17 @@ HKL GetLayoutOfText(LPCTSTR ptszInText) if (wcschr(ptszKeybBuff, ptszInText[j]) != nullptr) ++dwMaxSymbols; - for (DWORD i = 1; i < bLayNum; i++) { + for (int i = 1; i < bLayNum; i++) { ptszKeybBuff = ptszLayStrings[i]; DWORD dwCountSymbols = 0; - - for (DWORD j = 0; jdwMaxSymbols) { + else if (dwCountSymbols > dwMaxSymbols) { dwMaxSymbols = dwCountSymbols; hklCurLay = hklLayouts[i]; } @@ -211,7 +207,7 @@ HKL GetLayoutOfText(LPCTSTR ptszInText) if (dwMaxSymbols == dwTemp) hklCurLay = GetKeyboardLayout(0); - + return hklCurLay; } @@ -222,7 +218,6 @@ int ChangeLayout(HWND hTextWnd, BYTE TextOperation, BOOL CurrentWord) ptrW ptszInText; CHARRANGE crSelection = { 0 }, crTemp = { 0 }; DWORD dwStartWord, dwEndWord; - int i, iRes; BYTE WindowType = WTYPE_Unknown; BOOL WindowIsReadOnly, TwoWay; @@ -240,7 +235,7 @@ int ChangeLayout(HWND hTextWnd, BYTE TextOperation, BOOL CurrentWord) if (ServiceExists(MS_HPP_EG_EVENT)) { // То же самое для History++ ieEvent.hwnd = hTextWnd; - ptszInText = (wchar_t*)CallService(MS_HPP_EG_EVENT, 0, (LPARAM)&ieEvent); + ptszInText = (wchar_t *)CallService(MS_HPP_EG_EVENT, 0, (LPARAM)&ieEvent); if (!IsBadStringPtr(ptszInText, MaxTextSize)) WindowType = WTYPE_HistoryPP; @@ -250,14 +245,14 @@ int ChangeLayout(HWND hTextWnd, BYTE TextOperation, BOOL CurrentWord) // Извращенное определение хэндла IEView ieEvent.hwnd = GetParent(GetParent(hTextWnd)); - ptszInText = (wchar_t*)CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&ieEvent); + ptszInText = (wchar_t *)CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&ieEvent); if (!IsBadStringPtr(ptszInText, MaxTextSize)) WindowType = WTYPE_IEView; } if (WindowType == WTYPE_Unknown) { ptrW ptszTemp((LPTSTR)mir_alloc(255 * sizeof(wchar_t))); - i = GetClassName(hTextWnd, ptszTemp, 255); + int i = GetClassName(hTextWnd, ptszTemp, 255); ptszTemp[i] = 0; if (wcsstr(CharUpper(ptszTemp), L"RICHEDIT") != nullptr) { @@ -268,7 +263,7 @@ int ChangeLayout(HWND hTextWnd, BYTE TextOperation, BOOL CurrentWord) if (WindowType == WTYPE_Unknown) { SendMessage(hTextWnd, EM_GETSEL, (WPARAM)&crSelection.cpMin, (LPARAM)&crSelection.cpMax); - if ((SendMessage(hTextWnd, WM_GETDLGCODE, 0, 0)&(DLGC_HASSETSEL)) && (crSelection.cpMin >= 0)) + if ((SendMessage(hTextWnd, WM_GETDLGCODE, 0, 0) & (DLGC_HASSETSEL)) && (crSelection.cpMin >= 0)) WindowType = WTYPE_Edit; } @@ -297,9 +292,9 @@ int ChangeLayout(HWND hTextWnd, BYTE TextOperation, BOOL CurrentWord) } } if (WindowType == WTYPE_Edit) { - ptrW ptszTemp((LPTSTR)mir_alloc(MaxTextSize*sizeof(wchar_t))); - ptszInText = (LPTSTR)mir_alloc(MaxTextSize*sizeof(wchar_t)); - iRes = GetWindowText(hTextWnd, ptszTemp, MaxTextSize); + ptrW ptszTemp((LPTSTR)mir_alloc(MaxTextSize * sizeof(wchar_t))); + ptszInText = (LPTSTR)mir_alloc(MaxTextSize * sizeof(wchar_t)); + int iRes = GetWindowText(hTextWnd, ptszTemp, MaxTextSize); if (!IsBadStringPtr(ptszInText, MaxTextSize) && (iRes > 0)) { wcsncpy(ptszInText, &ptszTemp[crSelection.cpMin], crSelection.cpMax - crSelection.cpMin); ptszInText[crSelection.cpMax - crSelection.cpMin] = 0; @@ -334,8 +329,8 @@ int ChangeLayout(HWND hTextWnd, BYTE TextOperation, BOOL CurrentWord) } } if (WindowType == WTYPE_Edit) { - ptszInText = (LPTSTR)mir_alloc(MaxTextSize*sizeof(wchar_t)); - iRes = GetWindowText(hTextWnd, ptszInText, MaxTextSize); + ptszInText = (LPTSTR)mir_alloc(MaxTextSize * sizeof(wchar_t)); + int iRes = GetWindowText(hTextWnd, ptszInText, MaxTextSize); if (!IsBadStringPtr(ptszInText, MaxTextSize) && (iRes > 0)) { crTemp.cpMin = 0; @@ -374,7 +369,7 @@ int ChangeLayout(HWND hTextWnd, BYTE TextOperation, BOOL CurrentWord) } if (WindowType == WTYPE_Edit) { - ptrW ptszTemp((LPTSTR)mir_alloc(MaxTextSize*sizeof(wchar_t))); + ptrW ptszTemp((LPTSTR)mir_alloc(MaxTextSize * sizeof(wchar_t))); wcsncpy(ptszTemp, &ptszInText[crTemp.cpMin], crTemp.cpMax - crTemp.cpMin); ptszTemp[crTemp.cpMax - crTemp.cpMin] = 0; mir_wstrcpy(ptszInText, ptszTemp); @@ -397,151 +392,152 @@ int ChangeLayout(HWND hTextWnd, BYTE TextOperation, BOOL CurrentWord) // if ((SendMessage(hTextWnd, EM_GETOPTIONS, 0, 0)&ECO_READONLY)) if (WindowType == WTYPE_RichEdit || WindowType == WTYPE_Edit) - if (GetWindowLongPtr(hTextWnd, GWL_STYLE) & ES_READONLY) - WindowIsReadOnly = TRUE; + if (GetWindowLongPtr(hTextWnd, GWL_STYLE) & ES_READONLY) + WindowIsReadOnly = TRUE; // Лог Иевью и ХисториПП в режиме эмуляции Иевью и поля только для чтения. - if (WindowType != WTYPE_Unknown && !IsBadStringPtr(ptszInText, MaxTextSize)) - if (WindowIsReadOnly) { - ptrW ptszMBox((LPTSTR)mir_alloc(MaxTextSize*sizeof(wchar_t))); - ptszMBox[0] = 0; - - if (TextOperation == TOT_Layout) { - hklCurLay = GetLayoutOfText(ptszInText); - hklToLay = GetNextLayout(hklCurLay); - TwoWay = (moOptions.TwoWay) && (bLayNum == 2); - - if (bLayNum == 2) - ptszMBox = ChangeTextLayout(ptszInText, hklCurLay, hklToLay, TwoWay); - else { - for (i = 0; i < bLayNum; i++) - if (hklLayouts[i] != hklCurLay) { - if (mir_wstrlen(ptszMBox) != 0) - mir_wstrcat(ptszMBox, L"\n\n"); - ptrW ptszTemp(GetShortNameOfLayout(hklLayouts[i])); - mir_wstrcat(ptszMBox, ptszTemp); - mir_wstrcat(ptszMBox, L":\n"); - ptrW ptszOutText(ChangeTextLayout(ptszInText, hklCurLay, hklLayouts[i], FALSE)); - mir_wstrcat(ptszMBox, ptszOutText); - } + if (WindowType != WTYPE_Unknown && !IsBadStringPtr(ptszInText, MaxTextSize)) { + if (WindowIsReadOnly) { + ptrW ptszMBox((LPTSTR)mir_alloc(MaxTextSize * sizeof(wchar_t))); + ptszMBox[0] = 0; + + if (TextOperation == TOT_Layout) { + hklCurLay = GetLayoutOfText(ptszInText); + hklToLay = GetNextLayout(hklCurLay); + TwoWay = (moOptions.TwoWay) && (bLayNum == 2); + + if (bLayNum == 2) + ptszMBox = ChangeTextLayout(ptszInText, hklCurLay, hklToLay, TwoWay); + else { + for (int i = 0; i < bLayNum; i++) + if (hklLayouts[i] != hklCurLay) { + if (mir_wstrlen(ptszMBox) != 0) + mir_wstrcat(ptszMBox, L"\n\n"); + ptrW ptszTemp(GetShortNameOfLayout(hklLayouts[i])); + mir_wstrcat(ptszMBox, ptszTemp); + mir_wstrcat(ptszMBox, L":\n"); + ptrW ptszOutText(ChangeTextLayout(ptszInText, hklCurLay, hklLayouts[i], FALSE)); + mir_wstrcat(ptszMBox, ptszOutText); + } + } } - } - else if (TextOperation == TOT_Case) - ptszMBox = ChangeTextCase(ptszInText); + else if (TextOperation == TOT_Case) + ptszMBox = ChangeTextCase(ptszInText); - if ((WindowType == WTYPE_Edit) || (WindowType == WTYPE_RichEdit)) { - SendMessage(hTextWnd, EM_EXSETSEL, 0, (LPARAM)&crSelection); - SendMessage(hTextWnd, WM_SETREDRAW, TRUE, 0); - InvalidateRect(hTextWnd, nullptr, FALSE); - } - - if (TextOperation == TOT_Layout) - Skin_PlaySound(SND_ChangeLayout); - else if (TextOperation == TOT_Case) - Skin_PlaySound(SND_ChangeCase); - - if (moOptions.CopyToClipboard) - CopyTextToClipboard(ptszMBox); - - //-------------------------------Покажем попапы------------------------------------------ - if (moOptions.ShowPopup) { - wchar_t *ptszPopupText = (LPTSTR)mir_alloc(MaxTextSize*sizeof(wchar_t)); - mir_wstrcpy(ptszPopupText, ptszMBox); - - POPUPDATAW ppd; - wcsncpy(ppd.lpwzContactName, TranslateT(MODULENAME), MAX_CONTACTNAME); - wcsncpy(ppd.lpwzText, ptszPopupText, MAX_SECONDLINE); - - switch (poOptions.bColourType) { - case PPC_POPUP: - ppd.colorBack = ppd.colorText = 0; - break; - case PPC_WINDOWS: - ppd.colorBack = GetSysColor(COLOR_BTNFACE); - ppd.colorText = GetSysColor(COLOR_WINDOWTEXT); - break; - case PPC_CUSTOM: - ppd.colorBack = poOptions.crBackColour; - ppd.colorText = poOptions.crTextColour; - break; + if ((WindowType == WTYPE_Edit) || (WindowType == WTYPE_RichEdit)) { + SendMessage(hTextWnd, EM_EXSETSEL, 0, (LPARAM)&crSelection); + SendMessage(hTextWnd, WM_SETREDRAW, TRUE, 0); + InvalidateRect(hTextWnd, nullptr, FALSE); } - switch (poOptions.bTimeoutType) { - case PPT_POPUP: - ppd.iSeconds = 0; - break; - case PPT_PERMANENT: - ppd.iSeconds = -1; - break; - case PPC_CUSTOM: - ppd.iSeconds = poOptions.bTimeout; - break; - } - ppd.PluginData = ptszPopupText; - ppd.PluginWindowProc = (WNDPROC)CKLPopupDlgProc; + if (TextOperation == TOT_Layout) + Skin_PlaySound(SND_ChangeLayout); + else if (TextOperation == TOT_Case) + Skin_PlaySound(SND_ChangeCase); + + if (moOptions.CopyToClipboard) + CopyTextToClipboard(ptszMBox); + + //-------------------------------Покажем попапы------------------------------------------ + if (moOptions.ShowPopup) { + wchar_t *ptszPopupText = (LPTSTR)mir_alloc(MaxTextSize * sizeof(wchar_t)); + mir_wstrcpy(ptszPopupText, ptszMBox); + + POPUPDATAW ppd; + wcsncpy(ppd.lpwzContactName, TranslateT(MODULENAME), MAX_CONTACTNAME); + wcsncpy(ppd.lpwzText, ptszPopupText, MAX_SECONDLINE); + + switch (poOptions.bColourType) { + case PPC_POPUP: + ppd.colorBack = ppd.colorText = 0; + break; + case PPC_WINDOWS: + ppd.colorBack = GetSysColor(COLOR_BTNFACE); + ppd.colorText = GetSysColor(COLOR_WINDOWTEXT); + break; + case PPC_CUSTOM: + ppd.colorBack = poOptions.crBackColour; + ppd.colorText = poOptions.crTextColour; + break; + } - ppd.lchIcon = hPopupIcon; - poOptions.paActions[0].lchIcon = hCopyIcon; - ppd.lpActions = poOptions.paActions; - ppd.actionCount = 1; + switch (poOptions.bTimeoutType) { + case PPT_POPUP: + ppd.iSeconds = 0; + break; + case PPT_PERMANENT: + ppd.iSeconds = -1; + break; + case PPC_CUSTOM: + ppd.iSeconds = poOptions.bTimeout; + break; + } + ppd.PluginData = ptszPopupText; + ppd.PluginWindowProc = (WNDPROC)CKLPopupDlgProc; - if (PUAddPopupW(&ppd) < 0) { - mir_free(ptszPopupText); - MessageBox(nullptr, ptszMBox, TranslateT(MODULENAME), MB_ICONINFORMATION); - } - } - } - //------------------Редактируемые поля ---------------------------- - else { - ptrW ptszOutText; - if (TextOperation == TOT_Layout) { - hklCurLay = GetLayoutOfText(ptszInText); - hklToLay = GetNextLayout(hklCurLay); - TwoWay = (moOptions.TwoWay) && (bLayNum == 2); - ptszOutText = ChangeTextLayout(ptszInText, hklCurLay, hklToLay, TwoWay); - } - else if (TextOperation == TOT_Case) - ptszOutText = ChangeTextCase(ptszInText); + ppd.lchIcon = hPopupIcon; + poOptions.paActions[0].lchIcon = hCopyIcon; + ppd.lpActions = poOptions.paActions; + ppd.actionCount = 1; - if (WindowType == WTYPE_RichEdit) { - SendMessage(hTextWnd, EM_EXSETSEL, 0, (LPARAM)&crTemp); - SendMessage(hTextWnd, EM_REPLACESEL, FALSE, (LPARAM)ptszOutText); - SendMessage(hTextWnd, EM_EXSETSEL, 0, (LPARAM)&crSelection); + if (PUAddPopupW(&ppd) < 0) { + mir_free(ptszPopupText); + MessageBox(nullptr, ptszMBox, TranslateT(MODULENAME), MB_ICONINFORMATION); + } + } } + //------------------Редактируемые поля ---------------------------- else { - ptrW ptszTemp((LPTSTR)mir_alloc(MaxTextSize*sizeof(wchar_t))); - GetWindowText(hTextWnd, ptszTemp, MaxTextSize); - for (i = crTemp.cpMin; i < crTemp.cpMax; i++) - ptszTemp[i] = ptszOutText[i - crTemp.cpMin]; - SetWindowText(hTextWnd, ptszTemp); - SendMessage(hTextWnd, EM_SETSEL, crSelection.cpMin, crSelection.cpMax); - } + ptrW ptszOutText; + if (TextOperation == TOT_Layout) { + hklCurLay = GetLayoutOfText(ptszInText); + hklToLay = GetNextLayout(hklCurLay); + TwoWay = (moOptions.TwoWay) && (bLayNum == 2); + ptszOutText = ChangeTextLayout(ptszInText, hklCurLay, hklToLay, TwoWay); + } + else if (TextOperation == TOT_Case) + ptszOutText = ChangeTextCase(ptszInText); - // Переключим раскладку или изменим состояние Caps Lock - if (TextOperation == TOT_Layout && hklToLay != nullptr && moOptions.ChangeSystemLayout) - ActivateKeyboardLayout(hklToLay, KLF_SETFORPROCESS); - else if (TextOperation == TOT_Case) { - // Если нужно инвертнуть - if (moOptions.bCaseOperations == 0) { - keybd_event(VK_CAPITAL, 0x45, 0, 0); - keybd_event(VK_CAPITAL, 0x45, KEYEVENTF_KEYUP, 0); + if (WindowType == WTYPE_RichEdit) { + SendMessage(hTextWnd, EM_EXSETSEL, 0, (LPARAM)&crTemp); + SendMessage(hTextWnd, EM_REPLACESEL, FALSE, (LPARAM)ptszOutText); + SendMessage(hTextWnd, EM_EXSETSEL, 0, (LPARAM)&crSelection); + } + else { + ptrW ptszTemp((LPTSTR)mir_alloc(MaxTextSize * sizeof(wchar_t))); + GetWindowText(hTextWnd, ptszTemp, MaxTextSize); + for (int i = crTemp.cpMin; i < crTemp.cpMax; i++) + ptszTemp[i] = ptszOutText[i - crTemp.cpMin]; + SetWindowText(hTextWnd, ptszTemp); + SendMessage(hTextWnd, EM_SETSEL, crSelection.cpMin, crSelection.cpMax); } - // Если нужно отключить - else if (moOptions.bCaseOperations == 1) { - if (GetKeyState(VK_CAPITAL) & 0x0001) { + + // Переключим раскладку или изменим состояние Caps Lock + if (TextOperation == TOT_Layout && hklToLay != nullptr && moOptions.ChangeSystemLayout) + ActivateKeyboardLayout(hklToLay, KLF_SETFORPROCESS); + else if (TextOperation == TOT_Case) { + // Если нужно инвертнуть + if (moOptions.bCaseOperations == 0) { keybd_event(VK_CAPITAL, 0x45, 0, 0); keybd_event(VK_CAPITAL, 0x45, KEYEVENTF_KEYUP, 0); } + // Если нужно отключить + else if (moOptions.bCaseOperations == 1) { + if (GetKeyState(VK_CAPITAL) & 0x0001) { + keybd_event(VK_CAPITAL, 0x45, 0, 0); + keybd_event(VK_CAPITAL, 0x45, KEYEVENTF_KEYUP, 0); + } + } } - } - SendMessage(hTextWnd, WM_SETREDRAW, TRUE, 0); - InvalidateRect(hTextWnd, nullptr, FALSE); + SendMessage(hTextWnd, WM_SETREDRAW, TRUE, 0); + InvalidateRect(hTextWnd, nullptr, FALSE); - if (TextOperation == TOT_Layout) - Skin_PlaySound(SND_ChangeLayout); - else if (TextOperation == TOT_Case) - Skin_PlaySound(SND_ChangeCase); + if (TextOperation == TOT_Layout) + Skin_PlaySound(SND_ChangeLayout); + else if (TextOperation == TOT_Case) + Skin_PlaySound(SND_ChangeCase); + } } return 0; -- cgit v1.2.3