Hans Leidekker : msi: Add support for running the progress bar backwards.
Alexandre Julliard
julliard at winehq.org
Thu Jun 23 04:10:10 CDT 2011
Module: wine
Branch: master
Commit: ebf323cfcb00376e0133255aecb563851d5ae150
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ebf323cfcb00376e0133255aecb563851d5ae150
Author: Hans Leidekker <hans at codeweavers.com>
Date: Thu Jun 23 09:08:04 2011 +0200
msi: Add support for running the progress bar backwards.
---
dlls/msi/dialog.c | 46 ++++++++++++++++++++++++++++++++++------------
1 files changed, 34 insertions(+), 12 deletions(-)
diff --git a/dlls/msi/dialog.c b/dlls/msi/dialog.c
index 08694bc..a6e33e2 100644
--- a/dlls/msi/dialog.c
+++ b/dlls/msi/dialog.c
@@ -66,6 +66,7 @@ struct msi_control_tag
HMODULE hDll;
float progress_current;
float progress_max;
+ BOOL progress_backwards;
DWORD attributes;
WCHAR name[1];
};
@@ -431,6 +432,7 @@ static msi_control *msi_dialog_create_window( msi_dialog *dialog,
control->type = strdupW( MSI_RecordGetString( rec, 3 ) );
control->progress_current = 0;
control->progress_max = 100;
+ control->progress_backwards = FALSE;
x = MSI_RecordGetInteger( rec, 4 );
y = MSI_RecordGetInteger( rec, 5 );
@@ -635,28 +637,47 @@ void msi_dialog_handle_event( msi_dialog* dialog, LPCWSTR control,
}
else if( !strcmpW( attribute, szProgress ) )
{
- DWORD func, val;
+ DWORD func, val1, val2;
- func = MSI_RecordGetInteger( rec , 1 );
- val = MSI_RecordGetInteger( rec , 2 );
+ func = MSI_RecordGetInteger( rec, 1 );
+ val1 = MSI_RecordGetInteger( rec, 2 );
+ val2 = MSI_RecordGetInteger( rec, 3 );
- TRACE("progress: func %u, val %u\n", func, val);
+ TRACE("progress: func %u val1 %u val2 %u\n", func, val1, val2);
switch (func)
{
case 0: /* init */
- ctrl->progress_max = val;
- ctrl->progress_current = 0;
- SendMessageW(ctrl->hwnd, PBM_SETRANGE, 0, MAKELPARAM(0,100));
- SendMessageW(ctrl->hwnd, PBM_SETPOS, 0, 0);
+ SendMessageW( ctrl->hwnd, PBM_SETRANGE, 0, MAKELPARAM(0,100) );
+ if (val2)
+ {
+ ctrl->progress_max = val1 ? val1 : 100;
+ ctrl->progress_current = val1;
+ ctrl->progress_backwards = TRUE;
+ SendMessageW( ctrl->hwnd, PBM_SETPOS, 100, 0 );
+ }
+ else
+ {
+ ctrl->progress_max = val1 ? val1 : 100;
+ ctrl->progress_current = 0;
+ ctrl->progress_backwards = FALSE;
+ SendMessageW( ctrl->hwnd, PBM_SETPOS, 0, 0 );
+ }
break;
case 1: /* FIXME: not sure what this is supposed to do */
break;
case 2: /* move */
- ctrl->progress_current += val;
- if (ctrl->progress_current > ctrl->progress_max)
- ctrl->progress_current = ctrl->progress_max;
- SendMessageW(ctrl->hwnd, PBM_SETPOS, MulDiv(100, ctrl->progress_current, ctrl->progress_max), 0);
+ if (ctrl->progress_backwards)
+ {
+ if (val1 >= ctrl->progress_current) ctrl->progress_current -= val1;
+ else ctrl->progress_current = 0;
+ }
+ else
+ {
+ if (ctrl->progress_current + val1 < ctrl->progress_max) ctrl->progress_current += val1;
+ else ctrl->progress_current = ctrl->progress_max;
+ }
+ SendMessageW( ctrl->hwnd, PBM_SETPOS, MulDiv(100, ctrl->progress_current, ctrl->progress_max), 0 );
break;
default:
FIXME("Unknown progress message %u\n", func);
@@ -1128,6 +1149,7 @@ static UINT msi_dialog_line_control( msi_dialog *dialog, MSIRECORD *rec )
control->type = strdupW( MSI_RecordGetString( rec, 3 ) );
control->progress_current = 0;
control->progress_max = 100;
+ control->progress_backwards = FALSE;
x = MSI_RecordGetInteger( rec, 4 );
y = MSI_RecordGetInteger( rec, 5 );
More information about the wine-cvs
mailing list