summaryrefslogtreecommitdiff
path: root/tipper/popwin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tipper/popwin.cpp')
-rw-r--r--tipper/popwin.cpp108
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;