summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2024-10-01 17:57:34 +0300
committerGeorge Hazan <george.hazan@gmail.com>2024-10-01 17:57:34 +0300
commitef23e540eddbbfbd8e79d2992cbbf2c956fc2e47 (patch)
tree55ea1cb895ca51feab9352554ba991daecc34dcb
parent92d3baa8b7f1b5a70aea6c61df77b7d165f8949c (diff)
fixes #4688 (Плагины сообщений: добавить кнопку "Код")
also fixes #4699 (Возможность оформить произвольный текст как цитату)
-rw-r--r--include/m_srmm_int.h1
-rw-r--r--src/mir_app/res/code.icobin0 -> 1150 bytes
-rw-r--r--src/mir_app/res/resource.rc2
-rw-r--r--src/mir_app/src/chat_loginfo.cpp2
-rw-r--r--src/mir_app/src/ei_services.cpp1
-rw-r--r--src/mir_app/src/resource.h2
-rw-r--r--src/mir_app/src/srmm_base.cpp30
-rw-r--r--src/mir_app/src/srmm_toolbar.cpp36
8 files changed, 72 insertions, 2 deletions
diff --git a/include/m_srmm_int.h b/include/m_srmm_int.h
index 31f5b38ec0..f925844733 100644
--- a/include/m_srmm_int.h
+++ b/include/m_srmm_int.h
@@ -299,6 +299,7 @@ protected:
INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override;
bool AllowTyping() const;
+ void InsertBbcodeString(const wchar_t *pwszStr);
int NotifyEvent(int code);
#ifdef _WINDOWS
bool ProcessFileDrop(HDROP hDrop, MCONTACT hContact);
diff --git a/src/mir_app/res/code.ico b/src/mir_app/res/code.ico
new file mode 100644
index 0000000000..829effca84
--- /dev/null
+++ b/src/mir_app/res/code.ico
Binary files 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()