diff options
author | George Hazan <ghazan@miranda.im> | 2016-12-06 14:22:46 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2016-12-06 14:23:55 +0300 |
commit | c8e8e884a6a632c5766eddab2d84c6a6b2216d6c (patch) | |
tree | db983f5c371bd7f3c5190dcd6f6f3171947ad105 /plugins/SmileyAdd/src/dlgboxsubclass.cpp | |
parent | 8271ae317370f9c27de576075a2d779ccaf9a560 (diff) |
StdMsg & Scriver:
- switched to the toolbar buttons instead of the fixed button set;
- switched to the shared windows list
Diffstat (limited to 'plugins/SmileyAdd/src/dlgboxsubclass.cpp')
-rw-r--r-- | plugins/SmileyAdd/src/dlgboxsubclass.cpp | 193 |
1 files changed, 58 insertions, 135 deletions
diff --git a/plugins/SmileyAdd/src/dlgboxsubclass.cpp b/plugins/SmileyAdd/src/dlgboxsubclass.cpp index 70f5082737..5fddca1ebe 100644 --- a/plugins/SmileyAdd/src/dlgboxsubclass.cpp +++ b/plugins/SmileyAdd/src/dlgboxsubclass.cpp @@ -23,72 +23,13 @@ static mir_cs csWndList; // type definitions
-class MsgWndData : public MZeroedObject
+struct MsgWndData : public MZeroedObject
{
-public:
- HWND hwnd;
- char ProtocolName[52];
- HWND REdit;
- HWND MEdit;
- HWND LButton;
- mutable HWND hSmlButton;
- mutable HBITMAP hSmlBmp;
- mutable HICON hSmlIco;
- int idxLastChar;
+ HWND hwnd, hwndLog, hwndInput;
+ int idxLastChar;
+ bool doSmileyReplace, doSmileyButton;
MCONTACT hContact;
- bool doSmileyReplace;
- bool doSmileyButton;
- bool isSplit;
- bool isSend;
-
- MsgWndData()
- {
- }
-
- ~MsgWndData()
- {
- clear();
- }
-
- void clear(void)
- {
- if (hSmlBmp != NULL) {
- DeleteObject(hSmlBmp);
- hSmlBmp = NULL;
- }
- if (hSmlIco != NULL) {
- DestroyIcon(hSmlIco);
- hSmlIco = NULL;
- }
- if (hSmlButton != NULL) {
- DestroyWindow(hSmlButton);
- hSmlButton = NULL;
- }
- }
-
- RECT CalcSmileyButtonPos(void)
- {
- RECT rect;
- GetWindowRect(LButton, &rect);
-
- POINT pt;
- pt.y = rect.top;
-
- MUUID muidScriver = { 0x84636f78, 0x2057, 0x4302, { 0x8a, 0x65, 0x23, 0xa1, 0x6d, 0x46, 0x84, 0x4c } };
- int iShift = (IsPluginLoaded(muidScriver)) ? 28 : -28;
-
- if ((GetWindowLongPtr(LButton, GWL_STYLE) & WS_VISIBLE) != 0)
- pt.x = rect.left + iShift;
- else
- pt.x = rect.left;
-
- ScreenToClient(GetParent(LButton), &pt);
- rect.bottom += pt.y - rect.top;
- rect.right += pt.x - rect.left;
- rect.top = pt.y;
- rect.left = pt.x;
- return rect;
- }
+ char ProtocolName[52];
void CreateSmileyButton(void)
{
@@ -98,7 +39,6 @@ public: doSmileyButton &= SmileyPack != NULL && SmileyPack->VisibleSmileyCount() != 0;
doSmileyReplace = true;
- doSmileyButton &= db_get_b(NULL, "SRMM", "ShowButtonLine", TRUE) != 0;
if (ProtocolName[0] != 0) {
INT_PTR cap = CallProtoService(ProtocolName, PS_GETCAPS, PFLAGNUM_1, 0);
@@ -106,37 +46,13 @@ public: 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,
- L"S",
- WS_CHILD | WS_VISIBLE | WS_TABSTOP,
- rect.left,
- rect.top,
- rect.bottom - rect.top + 1,
- rect.bottom - rect.top + 1,
- GetParent(LButton),
- (HMENU)IDC_SMLBUTTON,
- NULL, NULL);
-
- // 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);
- }
+ BBButton bbd = {};
+ bbd.pszModuleName = MODULENAME;
+ if (!doSmileyButton)
+ bbd.bbbFlags = BBBF_DISABLED;
+ else if (!opt.PluginSupportEnabled)
+ bbd.bbbFlags = BBBF_HIDDEN;
+ Srmm_SetButtonState(hContact, &bbd);
}
};
@@ -172,7 +88,6 @@ static LRESULT CALLBACK MessageDlgSubclass(HWND hwnd, UINT uMsg, WPARAM wParam, switch (uMsg) {
case DM_OPTIONSAPPLIED:
- dat->clear();
dat->CreateSmileyButton();
break;
@@ -182,7 +97,7 @@ static LRESULT CALLBACK MessageDlgSubclass(HWND hwnd, UINT uMsg, WPARAM wParam, GETTEXTLENGTHEX gtl;
gtl.codepage = 1200;
gtl.flags = GTL_PRECISE | GTL_NUMCHARS;
- dat->idxLastChar = (int)SendMessage(dat->REdit, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0);
+ dat->idxLastChar = (int)SendMessage(dat->hwndLog, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0);
}
break;
}
@@ -203,20 +118,13 @@ static LRESULT CALLBACK MessageDlgSubclass(HWND hwnd, UINT uMsg, WPARAM wParam, }
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);
+ ReplaceSmileys(dat->hwndLog, SmileyPack, smcp, sel, false, false, false);
}
}
break;
@@ -227,38 +135,56 @@ static LRESULT CALLBACK MessageDlgSubclass(HWND hwnd, UINT uMsg, WPARAM wParam, 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);
+ ReplaceSmileys(dat->hwndLog, SmileyPack, smcp, sel, false, false, false);
}
}
break;
-
- case WM_COMMAND:
- if (LOWORD(wParam) == IDC_SMLBUTTON && HIWORD(wParam) == BN_CLICKED) {
- RECT rect;
- GetWindowRect(dat->hSmlButton, &rect);
-
- 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;
- 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;
}
+/////////////////////////////////////////////////////////////////////////////////////////
+// toolbar button processing
+
+int SmileyButtonCreate(WPARAM, LPARAM)
+{
+ BBButton bbd = {};
+ bbd.pszModuleName = MODULENAME;
+ bbd.pwszTooltip = LPGENW("Show smiley selection window");
+ bbd.dwDefPos = 31;
+ bbd.hIcon = IcoLib_GetIconHandle("SmileyAdd_ButtonSmiley");
+ bbd.bbbFlags = BBBF_ISIMBUTTON | BBBF_ISCHATBUTTON;
+ Srmm_AddButton(&bbd);
+ return 0;
+}
+
+int SmileyButtonPressed(WPARAM, LPARAM lParam)
+{
+ CustomButtonClickData *pcbc = (CustomButtonClickData*)lParam;
+ if (mir_strcmp(pcbc->pszModule, MODULENAME))
+ return 0;
+
+ MsgWndData *dat = IsMsgWnd(pcbc->hwndFrom);
+ if (dat == NULL)
+ return 0;
+
+ SmileyToolWindowParam *stwp = new SmileyToolWindowParam;
+ stwp->pSmileyPack = GetSmileyPack(dat->ProtocolName, dat->hContact);
+ stwp->hWndParent = pcbc->hwndFrom;
+ stwp->hWndTarget = dat->hwndInput;
+ stwp->targetMessage = EM_REPLACESEL;
+ stwp->targetWParam = TRUE;
+ stwp->direction = 0;
+ stwp->xPosition = pcbc->pt.x;
+ stwp->yPosition = pcbc->pt.y;
+ mir_forkthread(SmileyToolThread, stwp);
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// window hook
+
static int MsgDlgHook(WPARAM, LPARAM lParam)
{
const MessageWindowEventData *wndEvtData = (MessageWindowEventData*)lParam;
@@ -268,11 +194,8 @@ static int MsgDlgHook(WPARAM, LPARAM lParam) MsgWndData *msgwnd = new MsgWndData();
msgwnd->hwnd = wndEvtData->hwndWindow;
msgwnd->hContact = wndEvtData->hContact;
- msgwnd->REdit = wndEvtData->hwndLog;
- msgwnd->MEdit = wndEvtData->hwndInput;
- msgwnd->LButton = GetDlgItem(wndEvtData->hwndWindow, MI_IDC_ADD);
- if (msgwnd->LButton == NULL)
- msgwnd->LButton = GetDlgItem(wndEvtData->hwndWindow, 5019);
+ msgwnd->hwndLog = wndEvtData->hwndLog;
+ msgwnd->hwndInput = wndEvtData->hwndInput;
// Get the protocol for this contact to display correct smileys.
char *protonam = GetContactProto(DecodeMetaContact(msgwnd->hContact));
|