From ef23e540eddbbfbd8e79d2992cbbf2c956fc2e47 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 1 Oct 2024 17:57:34 +0300 Subject: =?UTF-8?q?fixes=20#4688=20(=D0=9F=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD?= =?UTF-8?q?=D1=8B=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9?= =?UTF-8?q?:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82=D1=8C=20=D0=BA?= =?UTF-8?q?=D0=BD=D0=BE=D0=BF=D0=BA=D1=83=20"=D0=9A=D0=BE=D0=B4")?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit also fixes #4699 (Возможность оформить произвольный текст как цитату) --- src/mir_app/res/code.ico | Bin 0 -> 1150 bytes src/mir_app/res/resource.rc | 2 ++ src/mir_app/src/chat_loginfo.cpp | 2 +- src/mir_app/src/ei_services.cpp | 1 + src/mir_app/src/resource.h | 2 ++ src/mir_app/src/srmm_base.cpp | 30 +++++++++++++++++++++++++++++- src/mir_app/src/srmm_toolbar.cpp | 36 ++++++++++++++++++++++++++++++++++++ 7 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 src/mir_app/res/code.ico (limited to 'src') diff --git a/src/mir_app/res/code.ico b/src/mir_app/res/code.ico new file mode 100644 index 0000000000..829effca84 Binary files /dev/null and b/src/mir_app/res/code.ico differ diff --git a/src/mir_app/res/resource.rc b/src/mir_app/res/resource.rc index 858cf54d98..f5330e9413 100644 --- a/src/mir_app/res/resource.rc +++ b/src/mir_app/res/resource.rc @@ -1614,6 +1614,8 @@ IDI_OFF ICON "Off.ico" IDI_CHAT ICON "chat_channel.ico" +IDI_CODE ICON "code.ico" + IDI_MALE ICON "male.ico" IDI_FEMALE ICON "female.ico" diff --git a/src/mir_app/src/chat_loginfo.cpp b/src/mir_app/src/chat_loginfo.cpp index 2a72a77e32..1c05f5ecb8 100644 --- a/src/mir_app/src/chat_loginfo.cpp +++ b/src/mir_app/src/chat_loginfo.cpp @@ -84,7 +84,7 @@ int LOGINFO::getIcon() const return 0; } -void LOGINFO::write(RtfChatLogStreamData *streamData, bool simpleMode, CMStringA &str, const wchar_t *line) const +void LOGINFO::write(RtfChatLogStreamData *streamData, bool /*simpleMode*/, CMStringA &str, const wchar_t *line) const { CMStringA buf; diff --git a/src/mir_app/src/ei_services.cpp b/src/mir_app/src/ei_services.cpp index bbe9e4d596..e13cd514e1 100644 --- a/src/mir_app/src/ei_services.cpp +++ b/src/mir_app/src/ei_services.cpp @@ -467,6 +467,7 @@ static IconItem iconList[] = { LPGEN("Female"), "gender_female", IDI_FEMALE }, { LPGEN("Database"), "database", IDI_DATABASE }, { LPGEN("Attach"), "attach", IDI_ATTACH }, + { LPGEN("Code"), "code", IDI_CODE }, }; void LoadExtraIconsModule() diff --git a/src/mir_app/src/resource.h b/src/mir_app/src/resource.h index 9900567fb1..40da83b5af 100644 --- a/src/mir_app/src/resource.h +++ b/src/mir_app/src/resource.h @@ -46,6 +46,7 @@ #define IDD_OPTIONSPOPUP 137 #define IDI_URL 138 #define IDI_ATTACH 139 +#define IDI_CODE 140 #define IDI_MCMENUOFF 144 #define IDI_MCMENU 145 #define IDI_MCCONVERT 146 @@ -323,6 +324,7 @@ #define IDC_BLINKTIME 1114 #define IDC_BLINKSPIN 1115 #define IDC_ENABLE_TRAY_BLINK 1116 +#define IDC_CODE 1117 #define IDC_FINDWHAT 1131 #define IDC_FIND 1132 #define IDC_FILE 1133 diff --git a/src/mir_app/src/srmm_base.cpp b/src/mir_app/src/srmm_base.cpp index 7a3aa5456d..86236254aa 100644 --- a/src/mir_app/src/srmm_base.cpp +++ b/src/mir_app/src/srmm_base.cpp @@ -606,6 +606,15 @@ INT_PTR CSrmmBaseDialog::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) Srmm_ClickToolbarIcon(m_hContact, wParam, m_hwnd, 0); return 0; } + + if (wParam == IDC_CODE) { + switch (lParam) { + case 1: InsertBbcodeString(L"[code]"); break; + case 2: InsertBbcodeString(L"[quote]"); break; + default: + Srmm_ClickToolbarIcon(m_hContact, wParam, m_hwnd, 0); + } + } break; case WM_ACTIVATE: @@ -670,6 +679,26 @@ void CSrmmBaseDialog::ClearLog() m_pLog->Clear(); } +void CSrmmBaseDialog::InsertBbcodeString(const wchar_t *pwszStr) +{ + CMStringW wszBbcode(pwszStr); + wszBbcode.Insert(1, '/'); + + LRESULT sel = m_message.SendMsg(EM_GETSEL, 0, 0); + if (sel != 0) { + int start = LOWORD(sel), end = HIWORD(sel); + m_message.SendMsg(EM_SETSEL, end, end); + m_message.SendMsg(EM_REPLACESEL, FALSE, (LPARAM)wszBbcode.c_str()); + + m_message.SendMsg(EM_SETSEL, start, start); + m_message.SendMsg(EM_REPLACESEL, FALSE, (LPARAM)pwszStr); + } + else { + wszBbcode.Insert(0, pwszStr); + SetMessageText(wszBbcode, true); + } +} + bool CSrmmBaseDialog::IsSuitableEvent(const LOGINFO &lin) const { return (m_si->iType == GCW_SERVER || (m_iLogFilterFlags & lin.iType)); @@ -1122,4 +1151,3 @@ void CSrmmBaseDialog::SetQuoteEvent(MEVENT hEvent) Resize(); } } - diff --git a/src/mir_app/src/srmm_toolbar.cpp b/src/mir_app/src/srmm_toolbar.cpp index 14cbd62469..b0ddabd7bd 100644 --- a/src/mir_app/src/srmm_toolbar.cpp +++ b/src/mir_app/src/srmm_toolbar.cpp @@ -862,6 +862,39 @@ static int ConvertToolbarData(const char *szSetting, void*) return 0; } +///////////////////////////////////////////////////////////////////////////////////////// + +static int OnToolbarLoaded(WPARAM, LPARAM) +{ + // predefined button + BBButton bbd = {}; + bbd.bbbFlags = BBBF_ISIMBUTTON | BBBF_ISCHATBUTTON | BBBF_NOREADONLY | BBBF_CREATEBYID; + bbd.dwButtonID = IDC_CODE; + bbd.dwDefPos = 150; + bbd.hIcon = g_plugin.getIconHandle(IDI_CODE); + bbd.pszModuleName = SRMM_MODULE; + bbd.pwszTooltip = LPGENW("Custom bbcodes"); + g_plugin.addButton(&bbd); + return 0; +} + +static int OnToolbarClicked(WPARAM, LPARAM lParam) +{ + CustomButtonClickData *cbcd = (CustomButtonClickData *)lParam; + if (mir_strcmp(cbcd->pszModule, SRMM_MODULE)) + return 0; + + HMENU hMenu = CreatePopupMenu(); + AppendMenuW(hMenu, MF_STRING, 1, TranslateT("[code]")); + AppendMenuW(hMenu, MF_STRING, 2, TranslateT("[quote]")); + int ret = TrackPopupMenu(hMenu, TPM_RETURNCMD, cbcd->pt.x, cbcd->pt.y, 0, cbcd->hwndFrom, nullptr); + if (ret != 0) + PostMessage(cbcd->hwndFrom, WM_COMMAND, IDC_CODE, ret); + return 0; +} + +///////////////////////////////////////////////////////////////////////////////////////// + void LoadSrmmToolbarModule() { CreateServiceFunction("SRMsg/BroadcastMessage", BroadcastMessage); @@ -884,6 +917,9 @@ void LoadSrmmToolbarModule() dwSepCount = db_get_dw(0, BB_MODULE_NAME, "SeparatorsCount", 0); CB_RegisterSeparators(); + + HookEvent(ME_MSG_BUTTONPRESSED, OnToolbarClicked); + HookEvent(ME_MSG_TOOLBARLOADED, OnToolbarLoaded); } void UnloadSrmmToolbarModule() -- cgit v1.2.3