diff options
Diffstat (limited to 'tipper/popwin.cpp')
-rw-r--r-- | tipper/popwin.cpp | 108 |
1 files changed, 44 insertions, 64 deletions
diff --git a/tipper/popwin.cpp b/tipper/popwin.cpp index c42467b..72d38c8 100644 --- a/tipper/popwin.cpp +++ b/tipper/popwin.cpp @@ -2,6 +2,7 @@ #include "subst.h" #include "popwin.h" #include "message_pump.h" +#include "str_utils.h" #define TITLE_TEXT_LEN 512 @@ -66,17 +67,16 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa pwd->indent = options.text_indent; pwd->sb_width = options.sidebar_width; - MultiByteToWideChar(code_page, 0, pwd->clcit.proto, -1, pwd->swzTitle, 512); + a2t(pwd->clcit.proto, pwd->swzTitle, TITLE_TEXT_LEN); WORD status = CallProtoService(pwd->clcit.proto, PS_GETSTATUS, 0, 0); char *strptr = (char *)CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, (WPARAM)status, (LPARAM)0);
- int size = MultiByteToWideChar(code_page, 0, strptr, -1, 0, 0);
- if(size) { - wchar_t *swzText = (wchar_t *)malloc(size * sizeof(wchar_t)); - MultiByteToWideChar(code_page, 0, strptr, -1, swzText, size); + if(strptr) {
+ TCHAR *swzText = a2t(strptr); + pwd->rows = (RowData *) realloc(pwd->rows, sizeof(RowData) * (pwd->row_count + 1)); - pwd->rows[pwd->row_count].swzLabel = wcsdup(TranslateT("Status:")); + pwd->rows[pwd->row_count].swzLabel = _tcsdup(TranslateT("Status:")); pwd->rows[pwd->row_count].swzValue = swzText; pwd->rows[pwd->row_count].value_newline = false; pwd->rows[pwd->row_count].line_above = false; @@ -86,19 +86,16 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa if(status >= ID_STATUS_OFFLINE && status <= ID_STATUS_IDLE) { char *status_msg = (char *)CallService(MS_AWAYMSG_GETSTATUSMSG, status, 0); if(status_msg) { - int size = MultiByteToWideChar(code_page, 0, status_msg, -1, 0, 0); - if(size) { - wchar_t *swzText = (wchar_t *)malloc(size * sizeof(wchar_t)); - MultiByteToWideChar(code_page, 0, status_msg, -1, swzText, size); - StripBBCodesInPlace(swzText); - pwd->rows = (RowData *) realloc(pwd->rows, sizeof(RowData) * (pwd->row_count + 1)); - - pwd->rows[pwd->row_count].swzLabel = wcsdup(TranslateT("Status message:")); - pwd->rows[pwd->row_count].swzValue = swzText; - pwd->rows[pwd->row_count].value_newline = true; - pwd->rows[pwd->row_count].line_above = true; - pwd->row_count++; - } + TCHAR *swzText = a2t(status_msg); + StripBBCodesInPlace(swzText); + pwd->rows = (RowData *) realloc(pwd->rows, sizeof(RowData) * (pwd->row_count + 1)); + + pwd->rows[pwd->row_count].swzLabel = _tcsdup(TranslateT("Status message:")); + pwd->rows[pwd->row_count].swzValue = swzText; + pwd->rows[pwd->row_count].value_newline = true; + pwd->rows[pwd->row_count].line_above = true; + pwd->row_count++; + mir_free(status_msg); } } @@ -110,7 +107,7 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa //MessageBox(0, swzText, _T("tip"), MB_OK);
- wchar_t buff[2048], *swzText = pwd->clcit.text; + TCHAR buff[2048], *swzText = pwd->clcit.text; int buff_pos, i = 0, size = _tcslen(pwd->clcit.text); bool top_message = false; @@ -126,7 +123,7 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa pwd->rows[pwd->row_count].line_above = false; pwd->rows[pwd->row_count].value_newline = true; pwd->rows[pwd->row_count].swzLabel = _T(""); - pwd->rows[pwd->row_count].swzValue = wcsdup(buff);
+ pwd->rows[pwd->row_count].swzValue = _tcsdup(buff);
pwd->row_count++; top_message = true; } @@ -135,9 +132,9 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa // parse bold bits into labels and the rest into items while(i < size) { while(i + 2 < size - && (swzText[i] != L'<' - || swzText[i + 1] != L'b' - || swzText[i + 2] != L'>')) + && (swzText[i] != _T('<') + || swzText[i + 1] != _T('b') + || swzText[i + 2] != _T('>'))) { i++; } @@ -147,12 +144,12 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa buff_pos = 0; while(i + 3 < size && buff_pos < 2048 - && (swzText[i] != L'<' - || swzText[i + 1] != L'/' - || swzText[i + 2] != L'b' - || swzText[i + 3] != L'>')) + && (swzText[i] != _T('<') + || swzText[i + 1] != _T('/') + || swzText[i + 2] != _T('b') + || swzText[i + 3] != _T('>'))) { - if(swzText[i] != L'\t') + if(swzText[i] != _T('\t')) buff[buff_pos++] = swzText[i]; i++; } @@ -164,7 +161,7 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa if(buff_pos) { pwd->rows = (RowData *)realloc(pwd->rows, sizeof(RowData) * (pwd->row_count + 1)); pwd->rows[pwd->row_count].value_newline = false; - pwd->rows[pwd->row_count].swzLabel = wcsdup(buff); + pwd->rows[pwd->row_count].swzLabel = _tcsdup(buff); if(pwd->row_count == 1 && top_message) pwd->rows[pwd->row_count].line_above = true; else @@ -173,15 +170,15 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa buff_pos = 0; while(i < size && buff_pos < 2048 - && swzText[i] != L'\n') + && swzText[i] != _T('\n')) { - if(swzText[i] != L'\t' && swzText[i] != L'\r') + if(swzText[i] != _T('\t') && swzText[i] != _T('\r')) buff[buff_pos++] = swzText[i]; i++; } buff[buff_pos] = 0; - pwd->rows[pwd->row_count].swzValue = wcsdup(buff); + pwd->rows[pwd->row_count].swzValue = _tcsdup(buff); pwd->row_count++; } @@ -210,28 +207,11 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa // don't use stored status message DBDeleteContactSetting(pwd->hContact, MODULE, "TempStatusMsg"); - { // get unicode name if possible, else ascii - wchar_t *swzCDN = (wchar_t *) CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)pwd->hContact, GCDNF_UNICODE); - char *szCDN = (char *)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)pwd->hContact, 0); - - if(szCDN) { - // detect if the clist provided unicode display name by comparing with non-unicode - if(swzCDN && strncmp(szCDN, (char *)swzCDN, strlen(szCDN)) != 0) { - wcsncpy(pwd->swzTitle, swzCDN, TITLE_TEXT_LEN); - } else { - // convert to unicode - //swzContactDisplayName = (wchar_t *) _alloca(sizeof(wchar_t) * (strlen(szCDN) + 1)); - int size = MultiByteToWideChar(code_page, 0, (char *) szCDN, -1, 0, 0); - if(size > 0) { - MultiByteToWideChar(code_page, 0, (char *) szCDN, -1, pwd->swzTitle, TITLE_TEXT_LEN); - } else { - wcsncpy(pwd->swzTitle, TranslateT("(Unknown)"), TITLE_TEXT_LEN); - } - } - pwd->swzTitle[TITLE_TEXT_LEN - 1] = 0; - } else { - wcscpy(pwd->swzTitle, TranslateT("(Unknown)")); - } + { + TCHAR *stzCDN = (TCHAR *) CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)pwd->hContact, GCDNF_TCHAR); + + if(stzCDN) _tcsncpy(pwd->swzTitle, stzCDN, TITLE_TEXT_LEN); + else _tcscpy(pwd->swzTitle, TranslateT("(Unknown)")); } SendMessage(hwnd, PUM_REFRESH_VALUES, 0, 0); @@ -393,7 +373,7 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa SetTextColor(ps.hdc, options.title_col); tr.top = r.top + options.padding; tr.bottom = tr.top + pwd->tb_height - options.padding; - DrawText(ps.hdc, pwd->swzTitle, wcslen(pwd->swzTitle), &tr, DT_VCENTER | DT_LEFT | DT_END_ELLIPSIS | DT_SINGLELINE | DT_NOPREFIX);
+ DrawText(ps.hdc, pwd->swzTitle, _tcslen(pwd->swzTitle), &tr, DT_VCENTER | DT_LEFT | DT_END_ELLIPSIS | DT_SINGLELINE | DT_NOPREFIX);
} // values @@ -440,7 +420,7 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa tr.top += options.text_padding; tr.bottom = tr.top + row_height; SetTextColor(ps.hdc, options.label_col); - DrawText(ps.hdc, pwd->rows[i].swzLabel, wcslen(pwd->rows[i].swzLabel), &tr, options.label_valign | ((options.label_halign == DT_RIGHT && !pwd->rows[i].value_newline) ? DT_RIGHT : DT_LEFT) | DT_END_ELLIPSIS | DT_SINGLELINE | DT_NOPREFIX); + DrawText(ps.hdc, pwd->rows[i].swzLabel, _tcslen(pwd->rows[i].swzLabel), &tr, options.label_valign | ((options.label_halign == DT_RIGHT && !pwd->rows[i].value_newline) ? DT_RIGHT : DT_LEFT) | DT_END_ELLIPSIS | DT_SINGLELINE | DT_NOPREFIX); if(pwd->rows[i].value_newline) tr.top = tr.bottom; } else @@ -467,7 +447,7 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa if(pwd->rows[i].value_height) { if(pwd->rows[i].value_newline || !pwd->rows[i].label_height) tr.top += options.text_padding; tr.bottom = tr.top + row_height; - DrawText(ps.hdc, pwd->rows[i].swzValue, wcslen(pwd->rows[i].swzValue), &tr, options.value_valign | options.value_halign | DT_WORDBREAK | DT_WORD_ELLIPSIS | DT_END_ELLIPSIS | DT_NOPREFIX); + DrawText(ps.hdc, pwd->rows[i].swzValue, _tcslen(pwd->rows[i].swzValue), &tr, options.value_valign | options.value_halign | DT_WORDBREAK | DT_WORD_ELLIPSIS | DT_END_ELLIPSIS | DT_NOPREFIX); } } @@ -581,8 +561,8 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa } else pwd->rows = (RowData *) realloc(pwd->rows, sizeof(RowData) * (pwd->row_count + 1)); - pwd->rows[pwd->row_count].swzLabel = wcsdup(buff_label); - pwd->rows[pwd->row_count].swzValue = wcsdup(buff); + pwd->rows[pwd->row_count].swzLabel = _tcsdup(buff_label); + pwd->rows[pwd->row_count].swzValue = _tcsdup(buff); pwd->rows[pwd->row_count].value_newline = node->di.value_newline; pwd->rows[pwd->row_count].line_above = node->di.line_above; pwd->row_count++; @@ -622,7 +602,7 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa // titlebar height if(!pwd->text_tip && pwd->swzTitle && options.title_layout != PTL_NOTITLE) { if(hFontTitle) SelectObject(hdc, (HGDIOBJ)hFontTitle); - GetTextExtentPoint32(hdc, pwd->swzTitle, wcslen(pwd->swzTitle), &size); + GetTextExtentPoint32(hdc, pwd->swzTitle, _tcslen(pwd->swzTitle), &size); width += options.padding + size.cx; if(options.title_layout != PTL_NOICON) { pwd->tb_height = options.padding + max(size.cy, 16); @@ -658,7 +638,7 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa for(i = 0; i < pwd->row_count; i++) { if(pwd->rows[i].swzLabel && pwd->rows[i].value_newline == false) { if(hFontLabels) SelectObject(hdc, (HGDIOBJ)hFontLabels); - GetTextExtentPoint32(hdc, pwd->rows[i].swzLabel, wcslen(pwd->rows[i].swzLabel), &size); + GetTextExtentPoint32(hdc, pwd->rows[i].swzLabel, _tcslen(pwd->rows[i].swzLabel), &size); if(size.cx > pwd->label_width) pwd->label_width = size.cx; } @@ -667,7 +647,7 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa for(i = 0; i < pwd->row_count; i++) { if(hFontLabels) SelectObject(hdc, (HGDIOBJ)hFontLabels); if(pwd->rows[i].swzLabel) - GetTextExtentPoint32(hdc, pwd->rows[i].swzLabel, wcslen(pwd->rows[i].swzLabel), &size); + GetTextExtentPoint32(hdc, pwd->rows[i].swzLabel, _tcslen(pwd->rows[i].swzLabel), &size); else size.cy = size.cx = 0; @@ -685,7 +665,7 @@ LRESULT CALLBACK PopupWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa smr.right -= options.padding; if(!pwd->rows[i].value_newline) smr.right -= pwd->label_width + options.padding; if(pwd->rows[i].swzValue) - DrawText(hdc, pwd->rows[i].swzValue, wcslen(pwd->rows[i].swzValue), &smr, DT_CALCRECT | DT_VCENTER | DT_LEFT | DT_WORDBREAK | DT_WORD_ELLIPSIS | DT_END_ELLIPSIS | DT_NOPREFIX); + DrawText(hdc, pwd->rows[i].swzValue, _tcslen(pwd->rows[i].swzValue), &smr, DT_CALCRECT | DT_VCENTER | DT_LEFT | DT_WORDBREAK | DT_WORD_ELLIPSIS | DT_END_ELLIPSIS | DT_NOPREFIX); // save so we don't have to recalculate pwd->rows[i].value_height = smr.bottom; |