Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

269 lines
7.6 KiB

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
unixui.cxx
Abstract:
Contains Unix fixes
Contents:
//UnixAdjustButtonSpacing
UnixRemoveMoreInfoButton
Author:
Sriram Nambakam (v-sriran) 07-Dec-1998
Revision History:
07-Dec-1998 v-sriran
Created
--*/
#include <wininetp.h>
#include "ierrui.hxx"
#include "iehelpid.h"
#include "unixui.h"
#include <mainwin.h>
#if 0
#define MOVE_LEFT 0
#define MOVE_CENTER 1
#define MOVE_RIGHT 2
static void hAdjustButtonSpacing(HWND hwnd,
short buttonSpacingStyle,
short cButtons,
short dwSpacing,
...);
/* HACKHACK
* On Unix, we draw a focus rectangle around the button that is currently
* selected. And, the focus rectangle will overlap with the next button.
* We programatically move the button to the *left*, to make it look good.
*/
void UnixAdjustButtonSpacing(HWND hwnd, DWORD dwDlgId)
{
switch(dwDlgId)
{
case IDD_HTTP_TO_HTTPS_ZONE_CROSSING:
/* In these the More Info button is ID_TELL_ME_ABOUT_SECURITY */
hAdjustButtonSpacing(hwnd,
MOVE_LEFT,
1,
5,
IDOK);
break;
#ifdef NOT_YET_IMPLEMENTED
case IDD_HTTPS_TO_HTTP_ZONE_CROSSING:
break;
case IDD_MIXED_SECURITY:
break;
case IDD_INVALID_CA:
break;
case IDD_BAD_CN:
break;
case IDD_CONFIRM_COOKIE:
/* In this the More Info button is IDC_COOKIE_DETAILS */
break;
#endif /* NOT_YET_IMPLEMENTED */
}
}
/*
* This function assumes all buttons are of equal width for MOVE_CENTER
*/
void hAdjustButtonSpacing(HWND hwnd,
short buttonSpacingStyle,
short cButtons,
short dwSpacing,
...)
{
va_list Arguments;
DWORD dwButtonId;
va_start(Arguments, dwSpacing);
if (buttonSpacingStyle != MOVE_CENTER && dwSpacing)
{
HWND hCurButton;
RECT rect;
for (short i = 0; i < cButtons; i++)
{
dwButtonId = (DWORD)va_arg(Arguments,ULONG);
if ((hCurButton = GetDlgItem(hwnd, dwButtonId)))
{
GetWindowRect(hCurButton, &rect);
ScreenToClient(hwnd, (LPPOINT)&rect);
SetWindowPos(hCurButton,
NULL,
(buttonSpacingStyle == MOVE_LEFT ? rect.left-dwSpacing : rect.left+dwSpacing),
rect.top,
0,
0,
SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE);
}
}
}
else /* MOVE_CENTER; dwSpacing does not matter */
{
}
va_end(Arguments);
return;
}
#endif /* 0 */
#define MOVE_CENTER 0x0001
static void hRemoveAndAdjust(HWND hwnd,
DWORD dwFlags,
short cButtons,
...);
/* If we have Button1 Button2 "More Info"
* The following function makes it
* <nothing> Button1 Button2
* And, you have to pass the ids of "More Info" Button2 Button1 in the
* variable argument list in that order
*/
void UnixRemoveMoreInfoButton(HWND hwnd, DWORD dwDlgId)
{
switch(dwDlgId)
{
case IDD_HTTP_TO_HTTPS_ZONE_CROSSING:
/* In these the More Info button is ID_TELL_ME_ABOUT_SECURITY */
hRemoveAndAdjust(hwnd,
MOVE_CENTER,
2,
ID_TELL_ME_ABOUT_SECURITY,
IDOK);
break;
case IDD_HTTPS_TO_HTTP_ZONE_CROSSING:
hRemoveAndAdjust(hwnd,
0,
3,
ID_TELL_ME_ABOUT_SECURITY,
IDCANCEL,
IDOK);
break;
#ifdef NOT_YET_IMPLEMENTED
case IDD_MIXED_SECURITY:
break;
case IDD_INVALID_CA:
break;
case IDD_BAD_CN:
break;
case IDD_CONFIRM_COOKIE:
/* In this the More Info button is IDC_COOKIE_DETAILS */
break;
#endif /* NOT_YET_IMPLEMENTED */
}
}
void hRemoveAndAdjust(HWND hwnd,
DWORD dwFlags,
short cButtons,
...)
{
va_list Arguments;
DWORD dwMoreInfoButtonId, dwButtonId;
HWND hMoreInfoButton, hDefButton;
RECT rectCur, rectPrev;
hDefButton = MwRemoveDefPushButtonStyle(hwnd);
/* Expect the first button to be the More Info Button
* Hide the More Info Button, and move the other buttons to
* the appropriate positions
*/
if (cButtons < 2)
goto Cleanup;
/* We should use MOVE_CENTER only if there are two buttons in the move
* list, and we hide the more info button, and move the other one to
* the center
*/
if ((dwFlags & MOVE_CENTER) && cButtons != 2)
goto Cleanup;
va_start(Arguments, cButtons);
dwMoreInfoButtonId = (DWORD)va_arg(Arguments, ULONG);
hMoreInfoButton = GetDlgItem(hwnd, dwMoreInfoButtonId);
if (!hMoreInfoButton)
goto Cleanup;
GetWindowRect(hMoreInfoButton, &rectPrev);
ScreenToClient(hwnd, (LPPOINT)&rectPrev);
if (dwFlags & MOVE_CENTER)
{
HWND hCurButton;
dwButtonId = (DWORD)va_arg(Arguments,ULONG);
if ((hCurButton = GetDlgItem(hwnd, dwButtonId)))
{
RECT rectDlg;
GetWindowRect(hCurButton, &rectCur);
ScreenToClient(hwnd, (LPPOINT)&rectCur);
GetWindowRect(hwnd, &rectDlg);
ScreenToClient(hwnd, (LPPOINT)&rectDlg);
SetWindowPos(hCurButton,
NULL,
((rectDlg.right - rectDlg.left)/2)-((rectCur.right-rectCur.left)/2),
rectCur.top,
0,
0,
SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE);
}
}
else
{
HWND hCurButton;
for (short i = 1; i < cButtons; i++)
{
dwButtonId = (DWORD)va_arg(Arguments,ULONG);
if ((hCurButton = GetDlgItem(hwnd, dwButtonId)))
{
GetWindowRect(hCurButton, &rectCur);
ScreenToClient(hwnd, (LPPOINT)&rectCur);
SetWindowPos(hCurButton,
NULL,
rectPrev.left,
rectPrev.top,
0,
0,
SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE);
memcpy(&rectPrev, &rectCur, sizeof(RECT));
}
}
}
/* Hide the More Info Button */
ShowWindow(hMoreInfoButton, SW_HIDE);
Cleanup:
if (hDefButton)
MwRestoreDefPushButtonStyle(hDefButton);
return;
}