From 551a6399a20b47ba08ece792c8a1795e65241756 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Thu, 23 Apr 2015 22:35:23 +0000 Subject: [PATCH] [SHELL32][BROWSEUI] Implement SetAnimation so that AVIs from shell32 can be used when the progress dialog is in use. Brought to you by Robert Naumann. CORE-9327 svn path=/trunk/; revision=67375 --- .../dll/win32/browseui/CProgressDialog.cpp | 7 +++++++ reactos/dll/win32/shell32/shlfileop.cpp | 5 +++++ reactos/dll/win32/shell32/shresdef.h | 20 ++++++++++--------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/reactos/dll/win32/browseui/CProgressDialog.cpp b/reactos/dll/win32/browseui/CProgressDialog.cpp index 0a03cf3a4a2..fbd3f40b3c3 100644 --- a/reactos/dll/win32/browseui/CProgressDialog.cpp +++ b/reactos/dll/win32/browseui/CProgressDialog.cpp @@ -343,6 +343,13 @@ HRESULT WINAPI CProgressDialog::SetTitle(LPCWSTR pwzTitle) HRESULT WINAPI CProgressDialog::SetAnimation(HINSTANCE hInstance, UINT uiResourceId) { + HWND hAnimation = GetDlgItem(this->hwnd, IDD_PROGRESS_DLG); + SetWindowLongW(hAnimation, GWL_STYLE, + GetWindowLongW(hAnimation, GWL_STYLE)|ACS_TRANSPARENT|ACS_CENTER|ACS_AUTOPLAY); + + if(!Animate_OpenEx(hAnimation,hInstance,MAKEINTRESOURCEW(uiResourceId))) + return S_FALSE; + return S_OK; } diff --git a/reactos/dll/win32/shell32/shlfileop.cpp b/reactos/dll/win32/shell32/shlfileop.cpp index 971adf68249..97e493ac124 100644 --- a/reactos/dll/win32/shell32/shlfileop.cpp +++ b/reactos/dll/win32/shell32/shlfileop.cpp @@ -479,20 +479,24 @@ static void _SetOperationTitle(FILE_OPERATION *op) { if (op->progress == NULL) return; WCHAR szTitle[50], szPreflight[50]; + UINT animation_id = NULL; switch (op->req->wFunc) { case FO_COPY: LoadStringW(shell32_hInstance, IDS_FILEOOP_COPYING, szTitle, sizeof(szTitle)/sizeof(WCHAR)); LoadStringW(shell32_hInstance, IDS_FILEOOP_FROM_TO, op->szBuilderString, sizeof( op->szBuilderString)/sizeof(WCHAR)); + animation_id = IDA_SHELL_COPY; break; case FO_DELETE: LoadStringW(shell32_hInstance, IDS_FILEOOP_DELETING, szTitle, sizeof(szTitle)/sizeof(WCHAR)); LoadStringW(shell32_hInstance, IDS_FILEOOP_FROM, op->szBuilderString, sizeof( op->szBuilderString)/sizeof(WCHAR)); + animation_id = IDA_SHELL_DELETE; break; case FO_MOVE: LoadStringW(shell32_hInstance, IDS_FILEOOP_MOVING, szTitle, sizeof(szTitle)/sizeof(WCHAR)); LoadStringW(shell32_hInstance, IDS_FILEOOP_FROM_TO, op->szBuilderString, sizeof( op->szBuilderString)/sizeof(WCHAR)); + animation_id = IDA_SHELL_COPY; break; default: return; @@ -501,6 +505,7 @@ static void _SetOperationTitle(FILE_OPERATION *op) { op->progress->SetTitle(szTitle); op->progress->SetLine(1, szPreflight, false, NULL); + op->progress->SetAnimation(shell32_hInstance, animation_id); } static void _SetOperationTexts(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest) { diff --git a/reactos/dll/win32/shell32/shresdef.h b/reactos/dll/win32/shell32/shresdef.h index cf163edd08c..5fd5d75d0d4 100644 --- a/reactos/dll/win32/shell32/shresdef.h +++ b/reactos/dll/win32/shell32/shresdef.h @@ -488,16 +488,18 @@ * AVI resources * * windows shell32 has 14 of them: 150-152 and 160-170 - * FIXME: Need to add them, but for now just let them use the same: searching.avi - * (also to limit shell32's size) + * FIXME: Add 150-152 */ -#define IDR_AVI_SEARCH 150 -#define IDR_AVI_SEARCHING 151 -#define IDR_AVI_FINDCOMPUTER 152 -#define IDR_AVI_FILEMOVE 160 -#define IDR_AVI_FILECOPY 161 -#define IDR_AVI_FILENUKE 163 -#define IDR_AVI_FILEDELETE 164 + +#define IDA_SHELL_COPY 160 +#define IDA_SHELL_COPY1 161 +#define IDA_SHELL_COPY2 167 +#define IDA_SHELL_COPY3 168 +#define IDA_SHELL_RECYCLE 162 +#define IDA_SHELL_EMPTY_RECYCLE 163 +#define IDA_SHELL_DELETE 164 +#define IDA_SHELL_DELETE1 169 +#define IDA_SHELL_DOWNLOAD 170 /* Desktop Browser commands */ #define FCIDM_DESKBROWSER_CLOSE 0xA004