windows-nt/Source/XPSP1/NT/base/ntsetup/opktools/setupmgr/oc/iebrowse.c
2020-09-26 16:20:57 +08:00

653 lines
15 KiB
C

//----------------------------------------------------------------------------
//
// Copyright (c) 1997-1999 Microsoft Corporation
// All rights reserved.
//
// File Name:
// iebrowse.c
//
// Description:
// This file contains the dialog procedures for the IE browser settings
// pop-ups.
//
//----------------------------------------------------------------------------
#include "pch.h"
#include "resource.h"
#define MAX_FAVORITE_LEN 1024
static TCHAR *StrFriendlyName;
static TCHAR *StrUrl;
//----------------------------------------------------------------------------
//
// Function: InsertEntryIntoFavorites
//
// Purpose:
//
// Arguments:
//
// Returns: TRUE if the item was added,
// FALSE if it was not
//
//----------------------------------------------------------------------------
static BOOL
InsertEntryIntoFavorites( IN HWND hwnd, TCHAR *pszFriendlyName, TCHAR *pszURL )
{
LVITEM LvItem;
HWND hFavorites;
INT iPosition;
BOOL bSuccess = TRUE;
hFavorites = GetDlgItem( hwnd, IDC_LV_FAVORITES );
iPosition = ListView_GetItemCount( hFavorites );
ZeroMemory( &LvItem, sizeof(LVITEM) );
LvItem.mask = LVIF_TEXT;
LvItem.iItem = iPosition;
LvItem.iSubItem = 0;
LvItem.pszText = pszFriendlyName;
LvItem.cchTextMax = MAX_FAVORITE_LEN;
//
// if ListView_InsertItem returns a non-negative value then it succeeded
//
if( ListView_InsertItem( hFavorites, &LvItem ) < 0 )
{
bSuccess = FALSE;
}
ListView_SetItemText( hFavorites, iPosition, 1, pszURL );
return( bSuccess );
}
//----------------------------------------------------------------------------
//
// Function: OnInitFavoritesDialog
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
static VOID
OnInitFavoritesDialog( IN HWND hwnd )
{
RECT rect;
INT iColWidth;
INT iRetVal;
INT iIndex;
INT iEntries;
LV_COLUMN lvCol;
TCHAR *pFriendlyName;
TCHAR *pUrl;
HWND hFavoritesListView;
INT iCount = 0;
//
// Set the text limit on the edit boxes
//
SendDlgItemMessage( hwnd,
IDC_EB_FRIENDLYNAME,
EM_LIMITTEXT,
(WPARAM) MAX_FAVORITE_LEN,
(LPARAM) 0 );
SendDlgItemMessage( hwnd,
IDC_EB_URL,
EM_LIMITTEXT,
(WPARAM) MAX_FAVORITE_LEN,
(LPARAM) 0 );
//
// Initialize the list box
//
StrFriendlyName = MyLoadString( IDS_FRIENDLY_NAME );
StrUrl = MyLoadString( IDS_URL );
hFavoritesListView = GetDlgItem( hwnd, IDC_LV_FAVORITES );
GetClientRect( hFavoritesListView, &rect );
iColWidth = ( rect.right / 2 );
ListView_SetColumnWidth( hFavoritesListView, 0, iColWidth );
ListView_SetColumnWidth( hFavoritesListView, 1, iColWidth );
lvCol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
lvCol.fmt = LVCFMT_LEFT;
lvCol.cx = iColWidth;
//
// Add the two columns and header text
//
for( iIndex = 0; iIndex < 2; iIndex++ ) {
if ( iIndex == 0 )
lvCol.pszText = (LPTSTR) StrFriendlyName;
else
lvCol.pszText = (LPTSTR) StrUrl;
iRetVal = ListView_InsertColumn( hFavoritesListView, iIndex, &lvCol );
if( iRetVal == -1 )
{
// ISSUE-2002/02/28-stelo- we got a problem if we get here, can't make the column headers
}
}
//
// Populate the favorites dialog
//
iEntries = GetNameListSize( &GenSettings.Favorites );
for( iIndex = 0; iIndex < iEntries; iIndex = iIndex + 2 )
{
pFriendlyName = GetNameListName( &GenSettings.Favorites, iIndex );
pUrl = GetNameListName( &GenSettings.Favorites, iIndex + 1 );
if( *pFriendlyName != _T('\0') && *pUrl != _T('\0') )
{
InsertEntryIntoFavorites( hwnd, pFriendlyName, pUrl );
}
}
iCount = ListView_GetItemCount( hFavoritesListView );
if( iCount > 0 )
{
EnableWindow( GetDlgItem( hwnd, IDC_BUT_REMOVE ), TRUE );
}
else
{
EnableWindow( GetDlgItem( hwnd, IDC_BUT_REMOVE ), FALSE );
}
}
//----------------------------------------------------------------------------
//
// Function: OnAddFavorites
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
static VOID
OnAddFavorites( IN HWND hwnd )
{
TCHAR szFriendlyName[MAX_FAVORITE_LEN + 1];
TCHAR szURL[MAX_FAVORITE_LEN + 1];
GetWindowText( GetDlgItem( hwnd, IDC_EB_FRIENDLYNAME ),
szFriendlyName,
MAX_FAVORITE_LEN + 1 );
GetWindowText( GetDlgItem( hwnd, IDC_EB_URL ),
szURL,
MAX_FAVORITE_LEN + 1 );
if( lstrcmp( szFriendlyName, _T("") ) == 0)
{
ReportErrorId( hwnd,
MSGTYPE_ERR,
IDS_ERR_FRIENDLY_NAME_BLANK );
return;
}
else if( lstrcmp( szURL, _T("") ) == 0)
{
ReportErrorId( hwnd,
MSGTYPE_ERR,
IDS_ERR_URL_BLANK );
return;
}
if( InsertEntryIntoFavorites( hwnd, szFriendlyName, szURL ) )
{
SetWindowText( GetDlgItem( hwnd, IDC_EB_FRIENDLYNAME ),
_T("") );
SetWindowText( GetDlgItem( hwnd, IDC_EB_URL ),
_T("") );
EnableWindow( GetDlgItem( hwnd, IDC_BUT_REMOVE ), TRUE );
}
}
//----------------------------------------------------------------------------
//
// Function: OnRemoveFavorites
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
static VOID
OnRemoveFavorites( IN HWND hwnd )
{
HWND hFavorites;
INT iSelectedItem;
INT iCount;
hFavorites = GetDlgItem( hwnd, IDC_LV_FAVORITES );
iSelectedItem = ListView_GetSelectionMark( hFavorites );
//
// see if nothing was selected
//
if( iSelectedItem == -1 )
{
return;
}
ListView_DeleteItem( hFavorites, iSelectedItem );
//
// Set the state of the remove button appropriately
//
iCount = ListView_GetItemCount( hFavorites );
if( iCount > 0 )
{
EnableWindow( GetDlgItem( hwnd, IDC_BUT_REMOVE ), TRUE );
}
else
{
EnableWindow( GetDlgItem( hwnd, IDC_BUT_REMOVE ), FALSE );
}
}
//----------------------------------------------------------------------------
//
// Function: StoreFavorites
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
static VOID
StoreFavorites( IN HWND hwnd )
{
INT i;
INT iEntries;
LVITEM FriendlyNameItem;
LVITEM UrlItem;
HWND hFavorites;
TCHAR szFriendlyName[MAX_FAVORITE_LEN + 1];
TCHAR szURL[MAX_FAVORITE_LEN + 1];
hFavorites = GetDlgItem( hwnd, IDC_LV_FAVORITES );
ZeroMemory( &FriendlyNameItem, sizeof(LVITEM) );
ZeroMemory( &UrlItem, sizeof(LVITEM) );
ResetNameList( &GenSettings.Favorites );
FriendlyNameItem.mask = LVIF_TEXT;
FriendlyNameItem.pszText = szFriendlyName;
FriendlyNameItem.cchTextMax = MAX_FAVORITE_LEN;
FriendlyNameItem.iSubItem = 0;
UrlItem.mask = LVIF_TEXT;
UrlItem.pszText = szURL;
UrlItem.cchTextMax = MAX_FAVORITE_LEN;
UrlItem.iSubItem = 1;
iEntries = ListView_GetItemCount( hFavorites );
for( i = 0; i < iEntries; i++ )
{
FriendlyNameItem.iItem = i;
UrlItem.iItem = i;
if( ListView_GetItem( hFavorites, &FriendlyNameItem ) &&
ListView_GetItem( hFavorites, &UrlItem ) )
{
if( szFriendlyName[0] != _T('\0') && szURL[0] != _T('\0') )
{
AddNameToNameList( &GenSettings.Favorites,
szFriendlyName );
AddNameToNameList( &GenSettings.Favorites,
szURL );
}
}
}
}
//----------------------------------------------------------------------------
//
// Function: FavoritesDlg
//
// Purpose:
//
// Arguments: standard Win32 dialog proc arguments
//
// Returns: standard Win32 dialog proc return value -- whether the message
// was handled or not
//
//----------------------------------------------------------------------------
INT_PTR CALLBACK FavoritesDlg(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam )
{
BOOL bStatus = TRUE;
switch (uMsg) {
case WM_INITDIALOG:
OnInitFavoritesDialog( hwnd );
break;
case WM_COMMAND:
{
int nButtonId;
switch ( nButtonId = LOWORD(wParam) )
{
case IDOK:
// ISSUE-2002/02/28-stelo- do I need to validate proxy addresses?
if( HIWORD( wParam ) == BN_CLICKED ) {
StoreFavorites( hwnd );
EndDialog( hwnd, TRUE );
}
break;
case IDCANCEL:
if( HIWORD( wParam ) == BN_CLICKED ) {
EndDialog( hwnd, FALSE );
}
break;
case IDC_BUT_ADD:
if( HIWORD( wParam ) == BN_CLICKED ) {
OnAddFavorites( hwnd );
}
break;
case IDC_BUT_REMOVE:
if( HIWORD( wParam ) == BN_CLICKED ) {
OnRemoveFavorites( hwnd );
}
break;
default:
bStatus = FALSE;
break;
}
}
break;
default:
bStatus = FALSE;
break;
}
return( bStatus );
}
//----------------------------------------------------------------------------
//
// Function: OnInitBrowserSettingsDialog
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
static VOID
OnInitBrowserSettingsDialog( IN HWND hwnd )
{
//
// Set the text limit on the edit boxes
//
SendDlgItemMessage( hwnd,
IDC_EB_HOMEPAGE,
EM_LIMITTEXT,
(WPARAM) MAX_HOMEPAGE_LEN,
(LPARAM) 0 );
SendDlgItemMessage( hwnd,
IDC_EB_HELPPAGE,
EM_LIMITTEXT,
(WPARAM) MAX_HELPPAGE_LEN,
(LPARAM) 0 );
SendDlgItemMessage( hwnd,
IDC_EB_SEARCHPAGE,
EM_LIMITTEXT,
(WPARAM) MAX_SEARCHPAGE_LEN,
(LPARAM) 0 );
//
// Set the initial values
//
SetWindowText( GetDlgItem( hwnd, IDC_EB_HOMEPAGE ),
GenSettings.szHomePage );
SetWindowText( GetDlgItem( hwnd, IDC_EB_HELPPAGE ),
GenSettings.szHelpPage );
SetWindowText( GetDlgItem( hwnd, IDC_EB_SEARCHPAGE ),
GenSettings.szSearchPage );
}
//----------------------------------------------------------------------------
//
// Function: OnDestroyBrowserSettings
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
static VOID
OnDestroyBrowserSettings( IN HWND hwnd )
{
//
// Free the strings that were allocated for this page
//
free( StrFriendlyName );
free( StrUrl );
}
//----------------------------------------------------------------------------
//
// Function: StoreBrowserSettings
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
static VOID
StoreBrowserSettings( IN HWND hwnd )
{
GetWindowText( GetDlgItem( hwnd, IDC_EB_HOMEPAGE ),
GenSettings.szHomePage,
MAX_HOMEPAGE_LEN + 1 );
GetWindowText( GetDlgItem( hwnd, IDC_EB_HELPPAGE ),
GenSettings.szHelpPage,
MAX_HELPPAGE_LEN + 1 );
GetWindowText( GetDlgItem( hwnd, IDC_EB_SEARCHPAGE ),
GenSettings.szSearchPage,
MAX_SEARCHPAGE_LEN + 1 );
}
//----------------------------------------------------------------------------
//
// Function: OnAddFavoritesClicked
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
static VOID
OnAddFavoritesClicked( IN HWND hwnd )
{
DialogBox( FixedGlobals.hInstance,
MAKEINTRESOURCE(IDD_IE_FAVORITES),
hwnd,
FavoritesDlg );
}
//----------------------------------------------------------------------------
//
// Function: BrowserSettingsDlg
//
// Purpose:
//
// Arguments: standard Win32 dialog proc arguments
//
// Returns: standard Win32 dialog proc return value -- whether the message
// was handled or not
//
//----------------------------------------------------------------------------
INT_PTR CALLBACK BrowserSettingsDlg(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam )
{
BOOL bStatus = TRUE;
switch (uMsg) {
case WM_INITDIALOG:
OnInitBrowserSettingsDialog( hwnd );
break;
case WM_DESTROY:
OnDestroyBrowserSettings( hwnd );
break;
case WM_COMMAND:
{
int nButtonId;
switch ( nButtonId = LOWORD(wParam) )
{
case IDOK:
// ISSUE-2002/02/28-stelo- do I need to validate proxy addresses?
if( HIWORD( wParam ) == BN_CLICKED ) {
StoreBrowserSettings( hwnd );
EndDialog( hwnd, TRUE );
}
break;
case IDCANCEL:
if( HIWORD( wParam ) == BN_CLICKED ) {
EndDialog( hwnd, FALSE );
}
break;
case IDC_BUT_FAVORITES:
if( HIWORD(wParam) == BN_CLICKED )
OnAddFavoritesClicked( hwnd );
break;
default:
bStatus = FALSE;
break;
}
}
break;
default:
bStatus = FALSE;
break;
}
return( bStatus );
}