Huw Davies : oledlg: Update the result text.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Oct 20 04:46:01 CDT 2006
Module: wine
Branch: master
Commit: 15768f85721ab6734156ac3409479c8e450aea27
URL: http://source.winehq.org/git/wine.git/?a=commit;h=15768f85721ab6734156ac3409479c8e450aea27
Author: Huw Davies <huw at codeweavers.com>
Date: Thu Oct 19 11:13:21 2006 +0100
oledlg: Update the result text.
---
dlls/oledlg/pastespl.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 68 insertions(+), 1 deletions(-)
diff --git a/dlls/oledlg/pastespl.c b/dlls/oledlg/pastespl.c
index 23c9985..86997e4 100644
--- a/dlls/oledlg/pastespl.c
+++ b/dlls/oledlg/pastespl.c
@@ -32,8 +32,10 @@ #include "winnls.h"
#include "oledlg.h"
#include "oledlg_private.h"
+#include "resource.h"
#include "wine/debug.h"
+#include "wine/unicode.h"
WINE_DEFAULT_DEBUG_CHANNEL(ole);
@@ -288,6 +290,60 @@ static void init_lists(HWND hdlg, ps_str
EnableWindow(GetDlgItem(hdlg, IDOK), 0);
}
+static void update_result_text(HWND hdlg, ps_struct_t *ps_struct)
+{
+ WCHAR resource_txt[200];
+ UINT res_id;
+ OLEUIPASTEENTRYW *pent;
+ LONG cur_sel;
+ static const WCHAR percent_s[] = {'%','s',0};
+ WCHAR *result_txt, *ptr;
+
+ cur_sel = SendMessageW(GetDlgItem(hdlg, IDC_PS_DISPLAYLIST), LB_GETCURSEL, 0, 0);
+ if(cur_sel == -1) return;
+ pent = (OLEUIPASTEENTRYW*)SendMessageW(GetDlgItem(hdlg, IDC_PS_DISPLAYLIST), LB_GETITEMDATA, cur_sel, 0);
+
+ if(ps_struct->flags & PSF_SELECTPASTE)
+ {
+ if(ps_struct->flags & PSF_CHECKDISPLAYASICON)
+ res_id = IDS_PS_PASTE_OBJECT_AS_ICON;
+ else
+ res_id = IDS_PS_PASTE_DATA;
+ }
+ else
+ {
+ if(ps_struct->flags & PSF_CHECKDISPLAYASICON)
+ res_id = IDS_PS_PASTE_LINK_OBJECT_AS_ICON;
+ else
+ res_id = IDS_PS_PASTE_LINK_DATA;
+ }
+
+ LoadStringW(OLEDLG_hInstance, res_id, resource_txt, sizeof(resource_txt)/sizeof(WCHAR));
+ if((ptr = strstrW(resource_txt, percent_s)))
+ {
+ /* FIXME handle %s in ResultText. Sub appname if IDS_PS_PASTE_OBJECT{_AS_ICON}. Else sub appropiate type name */
+ size_t result_txt_len = strlenW(pent->lpstrResultText);
+ ptrdiff_t offs = (char*)ptr - (char*)resource_txt;
+ result_txt = HeapAlloc(GetProcessHeap(), 0, (strlenW(resource_txt) + result_txt_len - 1) * sizeof(WCHAR));
+ memcpy(result_txt, resource_txt, offs);
+ memcpy((char*)result_txt + offs, pent->lpstrResultText, result_txt_len * sizeof(WCHAR));
+ memcpy((char*)result_txt + offs + result_txt_len * sizeof(WCHAR), ptr + 2, (strlenW(ptr + 2) + 1) * sizeof(WCHAR));
+ }
+ else
+ result_txt = resource_txt;
+
+ SetDlgItemTextW(hdlg, IDC_PS_RESULTTEXT, result_txt);
+
+ if(result_txt != resource_txt)
+ HeapFree(GetProcessHeap(), 0, result_txt);
+
+}
+
+static void selection_change(HWND hdlg, ps_struct_t *ps_struct)
+{
+ update_result_text(hdlg, ps_struct);
+}
+
static void post_help_msg(HWND hdlg, ps_struct_t *ps_struct)
{
PostMessageW(ps_struct->ps->hWndOwner, oleui_msg_help, (WPARAM)hdlg, IDD_PASTESPECIAL);
@@ -342,16 +398,27 @@ static INT_PTR CALLBACK ps_dlg_proc(HWND
EnableWindow(GetDlgItem(hdlg, IDC_OLEUIHELP), 0);
}
- if(ps_struct->ps->lpszCaption)
+ if(ps_struct->ps->lpszCaption)
SetWindowTextW(hdlg, ps_struct->ps->lpszCaption);
init_lists(hdlg, ps_struct);
+ selection_change(hdlg, ps_struct);
+
return TRUE; /* use default focus */
}
case WM_COMMAND:
switch(LOWORD(wp))
{
+ case IDC_PS_DISPLAYLIST:
+ switch(HIWORD(wp))
+ {
+ case LBN_SELCHANGE:
+ selection_change(hdlg, ps_struct);
+ return FALSE;
+ default:
+ return FALSE;
+ }
case IDC_OLEUIHELP:
switch(HIWORD(wp))
{
More information about the wine-cvs
mailing list