Commit d5111773 authored by Andreas Mohr's avatar Andreas Mohr Committed by Alexandre Julliard

"Fixed" horribly misaligned pages in property sheets of apparently

newer InstallShields.
parent ad970058
......@@ -127,7 +127,7 @@ static BOOL PROPSHEET_RemovePage(HWND hwndDlg,
static void PROPSHEET_CleanUp();
static int PROPSHEET_GetPageIndex(HPROPSHEETPAGE hpage, PropSheetInfo* psInfo);
static void PROPSHEET_SetWizButtons(HWND hwndDlg, DWORD dwFlags);
static PADDING_INFO PROPSHEET_GetPaddingInfoWizard(HWND hwndDlg);
static PADDING_INFO PROPSHEET_GetPaddingInfoWizard(HWND hwndDlg, const PropSheetInfo* psInfo);
static BOOL PROPSHEET_IsDialogMessage(HWND hwnd, LPMSG lpMsg);
static INT PROPSHEET_DoDialogBox( HWND hwnd, HWND owner);
......@@ -483,7 +483,7 @@ static BOOL PROPSHEET_IsTooSmallWizard(HWND hwndDlg, PropSheetInfo* psInfo)
{
RECT rcSheetRect, rcPage, rcLine, rcSheetClient;
HWND hwndLine = GetDlgItem(hwndDlg, IDC_SUNKEN_LINE);
PADDING_INFO padding = PROPSHEET_GetPaddingInfoWizard(hwndDlg);
PADDING_INFO padding = PROPSHEET_GetPaddingInfoWizard(hwndDlg, psInfo);
GetClientRect(hwndDlg, &rcSheetClient);
GetWindowRect(hwndDlg, &rcSheetRect);
......@@ -605,7 +605,7 @@ static BOOL PROPSHEET_AdjustSizeWizard(HWND hwndDlg, PropSheetInfo* psInfo)
HWND hwndTabCtrl = GetDlgItem(hwndDlg, IDC_TABCONTROL);
RECT rc,tabRect;
int buttonHeight, lineHeight;
PADDING_INFO padding = PROPSHEET_GetPaddingInfoWizard(hwndDlg);
PADDING_INFO padding = PROPSHEET_GetPaddingInfoWizard(hwndDlg, psInfo);
WND * wndPtr = WIN_FindWndPtr( hwndDlg );
DIALOGINFO * dlgInfo = (DIALOGINFO *)wndPtr->wExtra;
......@@ -765,7 +765,7 @@ static BOOL PROPSHEET_AdjustButtonsWizard(HWND hwndParent,
int x, y;
int num_buttons = 3;
int buttonWidth, buttonHeight, lineHeight, lineWidth;
PADDING_INFO padding = PROPSHEET_GetPaddingInfoWizard(hwndParent);
PADDING_INFO padding = PROPSHEET_GetPaddingInfoWizard(hwndParent, psInfo);
if (psInfo->hasHelp)
num_buttons++;
......@@ -886,33 +886,47 @@ static PADDING_INFO PROPSHEET_GetPaddingInfo(HWND hwndDlg)
* PROPSHEET_GetPaddingInfoWizard
*
* Returns the layout information.
* Horizontal spacing is the distance between the Cancel and Help buttons.
* Vertical spacing is the distance between the line and the buttons.
*/
static PADDING_INFO PROPSHEET_GetPaddingInfoWizard(HWND hwndDlg)
* Do NOT use the Help button to gather padding information when it isn't mapped
* (PSH_HASHELP), as app writers aren't forced to supply correct coordinates
* for it in this case !
* FIXME: I'm not sure about any other coordinate problems with these evil
* buttons. Fix it in case additional problems appear or maybe calculate
* a padding in a completely different way, as this is somewhat messy.
*/
static PADDING_INFO PROPSHEET_GetPaddingInfoWizard(HWND hwndDlg, const PropSheetInfo*
psInfo)
{
PADDING_INFO padding;
RECT rc;
HWND hwndControl;
POINT ptHelp, ptCancel, ptLine;
/* Help button */
hwndControl = GetDlgItem(hwndDlg, IDHELP);
GetWindowRect(hwndControl, &rc);
INT idButton;
POINT ptButton, ptLine;
ptHelp.x = rc.left;
ptHelp.y = rc.top;
ScreenToClient(hwndDlg, &ptHelp);
if (psInfo->hasHelp)
{
idButton = IDHELP;
}
else
{
if (psInfo->ppshheader.dwFlags & PSH_WIZARD)
{
idButton = IDC_NEXT_BUTTON;
}
else
{
/* hopefully this is ok */
idButton = IDCANCEL;
}
}
/* Cancel button */
hwndControl = GetDlgItem(hwndDlg, IDCANCEL);
hwndControl = GetDlgItem(hwndDlg, idButton);
GetWindowRect(hwndControl, &rc);
ptCancel.x = rc.right;
ptCancel.y = rc.top;
ptButton.x = rc.left;
ptButton.y = rc.top;
ScreenToClient(hwndDlg, &ptCancel);
ScreenToClient(hwndDlg, &ptButton);
/* Line */
hwndControl = GetDlgItem(hwndDlg, IDC_SUNKEN_LINE);
......@@ -923,9 +937,13 @@ static PADDING_INFO PROPSHEET_GetPaddingInfoWizard(HWND hwndDlg)
ScreenToClient(hwndDlg, &ptLine);
padding.x = ptHelp.x - ptCancel.x;
padding.y = ptHelp.y - ptLine.y;
padding.y = ptButton.y - ptLine.y;
if (padding.y < 0)
ERR("padding negative ! Please report this !\n");
/* this is most probably not correct, but the best we have now */
padding.x = padding.y;
return padding;
}
......@@ -1054,7 +1072,7 @@ static int PROPSHEET_CreatePage(HWND hwndParent,
pageHeight = rc.bottom - rc.top;
if (psInfo->ppshheader.dwFlags & PSH_WIZARD)
padding = PROPSHEET_GetPaddingInfoWizard(hwndParent);
padding = PROPSHEET_GetPaddingInfoWizard(hwndParent, psInfo);
else
{
/*
......@@ -1710,7 +1728,7 @@ static BOOL PROPSHEET_RemovePage(HWND hwndDlg,
index = PROPSHEET_GetPageIndex(hpage, psInfo);
}
/* Make shure that index is within range */
/* Make sure that index is within range */
if (index < 0 || index >= psInfo->nPages)
{
TRACE("Could not find page to remove!\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment