static INT_PTR CALLBACK inputDlgProc(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam) { static INPUTDLGDATA *dat = (INPUTDLGDATA *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); processTokenListMessage(hwndDlg, msg, wParam, lParam); switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); dat = (INPUTDLGDATA*)mir_alloc(sizeof(INPUTDLGDATA)); memset(dat, 0, sizeof(INPUTDLGDATA)); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat); // splitter things dat->splitterPos = (INT_PTR)db_get_dw(NULL, MODULENAME, SETTING_SPLITTERPOS, -1); { RECT rc; POINT pt; GetWindowRect(GetDlgItem(hwndDlg, IDC_SPLITTER), &rc); pt.y = (rc.top + rc.bottom) / 2; pt.x = 0; ScreenToClient(hwndDlg, &pt); dat->originalSplitterPos = pt.y; if (dat->splitterPos == -1) dat->splitterPos = dat->originalSplitterPos; GetWindowRect(GetDlgItem(hwndDlg, IDC_SHOWHELP), &rc); mir_subclassWindow(GetDlgItem(hwndDlg, IDC_SPLITTER), SplitterSubclassProc); GetWindowRect(GetDlgItem(hwndDlg, IDC_TESTSTRING), &rc); dat->minInputSize.x = rc.right - rc.left; dat->minInputSize.y = rc.bottom - rc.top; GetWindowRect(GetDlgItem(hwndDlg, IDC_RESULT), &rc); dat->minResultSize.x = rc.right - rc.left; dat->minResultSize.y = rc.bottom - rc.top; } dat->hwndHelpDlg = GetParent(hwndDlg); SendMessage(hwndDlg, VARM_PARSE, 0, 0); SetTimer(hwndDlg, IDT_PARSE, 1000, NULL); SetFocus(GetDlgItem(hwndDlg, IDC_TESTSTRING)); break; case DM_SPLITTERMOVED: { POINT pt; RECT rc, rcTeststring, rcResult; int oldSplitterY; if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_SPLITTER)) { GetClientRect(hwndDlg, &rc); pt.x = 0; pt.y = wParam; ScreenToClient(hwndDlg, &pt); oldSplitterY = dat->splitterPos; dat->splitterPos = rc.bottom - pt.y + 223; GetWindowRect(GetDlgItem(hwndDlg, IDC_TESTSTRING), &rcTeststring); GetWindowRect(GetDlgItem(hwndDlg, IDC_RESULT), &rcResult); if ((((rcTeststring.bottom - rcTeststring.top) - (dat->splitterPos - oldSplitterY)) < dat->minInputSize.y) || (((rcResult.bottom - rcResult.top) + (dat->splitterPos - oldSplitterY)) < dat->minResultSize.y)) dat->splitterPos = oldSplitterY; } } SendMessage(hwndDlg, WM_SIZE, 0, 0); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_TESTSTRING: if (HIWORD(wParam) == EN_CHANGE) SendMessage(hwndDlg, VARM_PARSE, 0, 0); break; } break; case WM_GETMINMAXINFO: { RECT rc, rcTeststring; GetWindowRect(GetParent(hwndDlg), &rc); GetWindowRect(GetDlgItem(hwndDlg, IDC_TESTSTRING), &rcTeststring); ((MINMAXINFO*)lParam)->ptMinTrackSize.y = (rc.bottom - rc.top) - (((rcTeststring.bottom - rcTeststring.top) - dat->minResultSize.y)); } break; case WM_SIZE: if (!IsIconic(hwndDlg)) { UTILRESIZEDIALOG urd = { 0 }; urd.cbSize = sizeof(urd); urd.hInstance = hInst; urd.hwndDlg = hwndDlg; urd.lParam = (LPARAM)dat; urd.lpTemplate = MAKEINTRESOURCEA(IDD_INPUT_DIALOG); urd.pfnResizer = inputDialogResize; CallService(MS_UTILS_RESIZEDIALOG, 0, (LPARAM)&urd); } SendMessage(hwndDlg, WM_MOVE, 0, 0); break; case WM_SHOWWINDOW: if (wParam) SendMessage(hwndDlg, VARM_PARSE, 0, 0); break; case WM_NOTIFY: break; case VARM_PARSE: { TCHAR *string = Hlp_GetDlgItemText(hwndDlg, IDC_TESTSTRING), *extraText; int len = SendMessage(GetParent(hwndDlg), VARM_GETEXTRATEXTLENGTH, 0, 0); if (len > 0) { extraText = (TCHAR*)mir_calloc((len + 1)* sizeof(TCHAR)); SendMessage(GetParent(hwndDlg), VARM_GETEXTRATEXT, (WPARAM)len + 1, (LPARAM)extraText); } else extraText = NULL; if (string != NULL) { TCHAR *newString = variables_parsedup(string, extraText, (MCONTACT)SendMessage(GetParent(hwndDlg), VARM_GETSUBJECT, 0, 0)); if (newString != NULL) { TCHAR *oldString = Hlp_GetDlgItemText(hwndDlg, IDC_RESULT); if (oldString == NULL || _tcscmp(oldString, newString)) SetDlgItemText(hwndDlg, IDC_RESULT, newString); mir_free(newString); if (oldString != NULL) mir_free(oldString); } mir_free(string); } } break; case VARM_SETINPUTTEXT: SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, SendDlgItemMessage(hwndDlg, IDC_TESTSTRING, WM_SETTEXT, wParam, lParam)); return TRUE; case VARM_GETINPUTTEXTLENGTH: SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, SendDlgItemMessage(hwndDlg, IDC_TESTSTRING, WM_GETTEXTLENGTH, wParam, lParam)); return TRUE; case VARM_GETINPUTTEXT: SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, GetDlgItemText(hwndDlg, IDC_TESTSTRING, (LPWSTR)lParam, wParam)); return TRUE; case WM_TIMER: SendMessage(hwndDlg, VARM_PARSE, 0, 0); break; case WM_DESTROY: KillTimer(hwndDlg, IDT_PARSE); if (dat == NULL) break; db_set_dw(NULL, MODULENAME, SETTING_SPLITTERPOS, dat->splitterPos); mir_free(dat); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, 0); break; } return FALSE; }
INT_PTR CALLBACK DlgProcOptsCondition(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { DBVARIANT dbv; DWORD conditionID; TranslateDialogDefault(hwndDlg); conditionID = (DWORD)lParam; if (!DBGetConditionSettingTString(conditionID, NULL, MODULENAME, SETTING_PARSESTRING, &dbv)) { SetDlgItemText(hwndDlg, IDC_PARSESTRING, dbv.ptszVal); DBFreeVariant(&dbv); } break; } case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_SHOWHELP: { int flags; VARHELPINFO vhi; TRIGGERINFO ti; ZeroMemory(&vhi, sizeof(VARHELPINFO)); vhi.cbSize = sizeof(VARHELPINFO); ZeroMemory(&ti, sizeof(TRIGGERINFO)); SendMessage(GetParent(hwndDlg), TM_GETTRIGGERINFO, 0, (LPARAM)&ti); vhi.flags = VHF_INPUT; if (ti.dFlags&DF_TEXT) { vhi.flags |= VHF_EXTRATEXT; vhi.szExtraTextDesc = "TriggerData: Text"; } else { flags |= VHF_HIDEEXTRATEXTTOKEN; } if (ti.dFlags&DF_CONTACT) { flags |= VHF_SUBJECT; vhi.szSubjectDesc = "TriggerData: Contact"; } else { flags |= VHF_HIDESUBJECTTOKEN; } vhi.hwndCtrl = GetDlgItem(hwndDlg, IDC_PARSESTRING); CallService(MS_VARS_SHOWHELPEX, (WPARAM)hwndDlg, (LPARAM)&vhi); break; } } break; case TM_ADDCONDITION: { DWORD conditionID; TCHAR *tszText; conditionID = (DWORD)wParam; tszText = Hlp_GetDlgItemText(hwndDlg, IDC_PARSESTRING); if (tszText != NULL) { DBWriteConditionSettingTString(conditionID, NULL, MODULENAME, SETTING_PARSESTRING, tszText); free(tszText); } break; } case WM_DESTROY: break; } return FALSE; }
INT_PTR CALLBACK DlgProcOptsStringChange(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { DBVARIANT dbv; DWORD triggerID; TranslateDialogDefault(hwndDlg); triggerID = (DWORD)lParam; if (!DBGetTriggerSetting(triggerID, NULL, MODULENAME, SETTING_TRIGGERTEXT, &dbv)) { SetDlgItemTextA(hwndDlg, IDC_FORMATTEXT, dbv.pszVal); DBFreeVariant(&dbv); } variables_skin_helpbutton(hwndDlg, IDC_SHOWHELP); break; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_SHOWHELP: { variables_showhelp(hwndDlg, IDC_FORMATTEXT, VHF_FULLDLG|VHF_SETLASTSUBJECT, NULL, NULL); break; } } break; case TM_ADDTRIGGER: { // wParam = trigger ID // lParam = (TRIGGERREGISTER *) DWORD triggerID; TCHAR *tszFormatText; triggerID = (DWORD)wParam; tszFormatText = Hlp_GetDlgItemText(hwndDlg, IDC_FORMATTEXT); if (tszFormatText != NULL) { DBWriteTriggerSettingTString(triggerID, NULL, MODULENAME, SETTING_TRIGGERTEXT, tszFormatText); free(tszFormatText); } addToCache(triggerID); break; } case TM_DELTRIGGER: { // wParam = triggerID // lParam = (TRIGGEREGISTER *) may be 0 DWORD triggerID; REMOVETRIGGERSETTINGS rts; triggerID = (DWORD)wParam; removeFromCache(triggerID); rts.cbSize = sizeof(REMOVETRIGGERSETTINGS); rts.prefix = PREFIX_TRIGGERID; rts.id = triggerID; rts.hContact = NULL; rts.szModule = MODULENAME; CallService(MS_TRIGGER_REMOVESETTINGS, 0, (LPARAM)&rts); break; } } return FALSE; }