mirror of https://github.com/lianthony/NT4.0
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.
3914 lines
119 KiB
3914 lines
119 KiB
/*
|
|
Enhanced NCSA Mosaic from Spyglass
|
|
"Guitar"
|
|
|
|
Copyright 1994 Spyglass, Inc.
|
|
All Rights Reserved
|
|
|
|
Author(s):
|
|
Eric W. Sink [email protected]
|
|
Jeff Hostetler [email protected]
|
|
*/
|
|
|
|
/* w32cmd.c -- handle dispatch of WM_COMMAND (for menus, accelerators, etc.) */
|
|
|
|
#include "all.h"
|
|
#include <commctrl.h>
|
|
#include <intshcut.h>
|
|
#include <ispriv.h>
|
|
#include <mapi.h>
|
|
#include <shlobj.h>
|
|
#include "contxids.h"
|
|
#include "history.h"
|
|
#include "htmlutil.h"
|
|
#include "wc_html.h"
|
|
#include "mime.h"
|
|
#include "htatom.h"
|
|
#include <objbase.h>
|
|
#include "w32cmd.h"
|
|
#include "olestock.h"
|
|
#include "dataobjm.h"
|
|
|
|
extern BOOL bFavorVisibleImages;
|
|
BOOL bFavorVisibleImages = TRUE;
|
|
extern BOOL bNNTP_Changed;
|
|
extern RegSet NewsDefaultRegSet;
|
|
extern RegSet NewsEnabledRegSet;
|
|
|
|
|
|
#ifndef NO_BUILDNUMBER
|
|
#include "oharever.h"
|
|
#endif
|
|
|
|
#define RUNNING_NT351 ((DWORD)(LOWORD(GetVersion())) == 0x00003303)
|
|
|
|
#pragma data_seg(DATA_SEG_READ_ONLY)
|
|
|
|
PRIVATE_DATA const char IDS_HELPFILE[] = "iexplore.hlp";
|
|
|
|
PRIVATE_DATA const char s_cszEmpty[] = "";
|
|
PRIVATE_DATA const char s_cszMailBody[] = " ";
|
|
|
|
PRIVATE_DATA const char s_cszMAPISection[] = "Mail";
|
|
PRIVATE_DATA const char s_cszMAPIKey[] = "CMCDLLName32";
|
|
PRIVATE_DATA const char s_cszMAPISendMail[] = "MAPISendMail";
|
|
|
|
#pragma data_seg()
|
|
|
|
static int cxEdge;
|
|
static int cyEdge;
|
|
|
|
// Dialog ID -> context help ID mapping tables
|
|
|
|
DWORD mapCtrlToContextIds[] = {
|
|
IDC_APPEARANCE_SHOW_HUMAN_URL, IDH_APPEARANCE_SHOW_SIMPLE_URL,
|
|
IDC_APPEARANCE_SHOW_FULL_URL, IDH_APPEARANCE_SHOW_FULL_URL,
|
|
IDC_APPEARANCE_SHOW_URL_IN_SB, IDH_APPEARANCE_SHOW_URL_IN_SB,
|
|
IDC_APPEARANCE_SHOW_LABEL, IDH_APPEARANCE_SHOW_URL,
|
|
IDC_APPEARANCE_UNDERLINE_LINKS, IDH_APPEARANCE_UNDERLINE_SHORTCUTS,
|
|
IDC_APPEARANCE_SHOW_PICTURES, IDH_APPEARANCE_SHOW_PICTURES,
|
|
IDC_APPEARANCE_USE_CUSTOM_COLORS, IDH_APPEARANCE_USE_CUSTOM_COLORS,
|
|
IDC_APPEARANCE_COLOR_TEXT, IDH_APPEARANCE_COLORS_TEXT,
|
|
IDC_APPEARANCE_COLOR_TEXT_LABEL, IDH_APPEARANCE_COLORS_TEXT,
|
|
IDC_APPEARANCE_COLOR_BACKGROUND, IDH_APPEARANCE_COLORS_BACKGROUND,
|
|
IDC_APPEARANCE_COLOR_BACKGROUND_LABEL, IDH_APPEARANCE_COLORS_BACKGROUND,
|
|
IDC_APPEARANCE_COLOR_LINKS, IDH_APPEARANCE_COLORS_NOT_VIEWED,
|
|
IDC_APPEARANCE_NYVIEWED_LABEL, IDH_APPEARANCE_COLORS_NOT_VIEWED,
|
|
IDC_APPEARANCE_COLOR_VISITED_LINKS, IDH_APPEARANCE_COLORS_VIEWED,
|
|
IDC_APPEARANCE_VIEWED_LABEL, IDH_APPEARANCE_COLORS_VIEWED,
|
|
IDC_APPEARANCE_COLORS_GROUPBOX, IDH_GROUPBOX,
|
|
IDC_APPEARANCE_SHORTCUTS_GROUPBOX, IDH_GROUPBOX,
|
|
IDC_APPEARANCE_ADDRESSES_GROUPBOX, IDH_GROUPBOX,
|
|
IDC_SOUNDS_USE_BGSOUND, IDH_APPEARANCE_PLAY_SOUNDS,
|
|
IDC_APPEARANCE_SHOW_VIDEO, IDH_APPEARANCE_SHOW_VIDEO,
|
|
|
|
IDC_FONT_PROP_COMBO, IDH_APPEARANCE_PROPORTIONAL_FONT,
|
|
IDC_FONT_PROP_LABEL, IDH_APPEARANCE_PROPORTIONAL_FONT,
|
|
IDC_FONT_FIXED_COMBO, IDH_APPEARANCE_FIXED_FONT,
|
|
IDC_FONT_FIXED_LABEL, IDH_APPEARANCE_FIXED_FONT,
|
|
IDC_APPEARANCE_SHOW_URL_IN_SB, IDH_APPEARANCE_SHOW_URL,
|
|
|
|
IDC_ADVANCED_HST_NUM_PLACES, IDH_ADVANCED_HST_NUM_PLACES,
|
|
IDC_ADVANCED_HST_NP_BUDDY, IDH_ADVANCED_HST_NUM_PLACES,
|
|
IDC_ADVANCED_HST_LOCATION, IDH_ADVANCED_HST_LOCATION,
|
|
IDC_ADVANCED_HST_BROWSE, IDH_ADVANCED_HST_BROWSE,
|
|
IDC_ADVANCED_CACHE_LOCATION, IDH_ADVANCED_CACHE_LOCATION,
|
|
IDC_ADVANCED_CACHE_BROWSE, IDH_ADVANCED_CACHE_BROWSE,
|
|
IDC_ADVANCED_CACHE_PERCENT, IDH_ADVANCED_CACHE_PERCENT,
|
|
IDC_ADVANCED_CACHE_TEXT_PERCENT, IDH_ADVANCED_CACHE_PERCENT,
|
|
IDC_ADVANCED_HST_EMPTY, IDH_ADVANCED_HST_EMPTY,
|
|
IDC_ADVANCED_CACHE_EMPTY, IDH_ADVANCED_CACHE_EMPTY,
|
|
|
|
IDC_ADVANCED_HST_NUM_PLACES_LABEL2, IDH_ADVANCED_HST_NUM_PLACES,
|
|
IDC_ADVANCED_HST_NUM_PLACES_LABEL1, IDH_ADVANCED_HST_NUM_PLACES,
|
|
IDC_ADVANCED_HST_GROUPBOX, IDH_GROUPBOX,
|
|
IDC_ADVANCED_HST_LOCATION_LABEL, IDH_ADVANCED_HST_LOCATION,
|
|
IDC_ADVANCED_CACHE_GROUPBOX, IDH_GROUPBOX,
|
|
IDC_ADVANCED_CACHE_LOCATION_LABEL, IDH_ADVANCED_CACHE_LOCATION,
|
|
IDC_ADVANCED_CACHE_LABEL, IDH_ADVANCED_CACHE_PERCENT,
|
|
IDC_ADVANCED_CACHE_LABEL2, IDH_ADVANCED_CACHE_PERCENT,
|
|
IDC_ADVANCED_CACHE_ONCEPERSESS, IDH_ADVANCED_CACHE_ONCEPERSESS,
|
|
IDC_ADVANCED_CACHE_NEVER, IDH_ADVANCED_CACHE_NEVER,
|
|
IDC_ADVANCED_ASSOC_CHECK, IDH_ADVANCED_ASSOC_CHECK,
|
|
|
|
IDC_GOTOURL_COMBO, IDH_GOTOURL_COMBO,
|
|
IDC_GOTO_LABEL, IDH_GOTOURL_COMBO,
|
|
IDC_GOTOURL_NEWWINDOW, IDH_GOTOURL_NEWWINDOW,
|
|
IDC_GOTOURL_OPENFILE, IDH_GOTOURL_OPENFILE,
|
|
|
|
RES_DLG_PAGE_LEFT, IDH_PAGESETUP_MARGIN_LEFT,
|
|
RES_DLG_PAGE_TOP, IDH_PAGESETUP_MARGIN_TOP,
|
|
RES_DLG_PAGE_RIGHT, IDH_PAGESETUP_MARGIN_RIGHT,
|
|
RES_DLG_PAGE_BOTTOM, IDH_PAGESETUP_MARGIN_BOTTOM,
|
|
RES_DLG_PAGE_LH, IDH_PAGESETUP_HEADER_LEFT,
|
|
RES_DLG_PAGE_RH, IDH_PAGESETUP_HEADER_RIGHT,
|
|
RES_DLG_PAGE_LF, IDH_PAGESETUP_FOOTER_LEFT,
|
|
RES_DLG_PAGE_RF, IDH_PAGESETUP_FOOTER_RIGHT,
|
|
RES_DLG_PAGE_LH_LABEL, IDH_PAGESETUP_HEADER_LEFT,
|
|
RES_DLG_PAGE_RH_LABEL, IDH_PAGESETUP_HEADER_RIGHT,
|
|
RES_DLG_PAGE_LF_LABEL, IDH_PAGESETUP_FOOTER_LEFT,
|
|
RES_DLG_PAGE_RF_LABEL, IDH_PAGESETUP_FOOTER_RIGHT,
|
|
|
|
0, 0
|
|
};
|
|
|
|
DWORD mapPropsCtrlToContextIds[] = {
|
|
IDI_PROPG, IDH_PROPG_ICON,
|
|
IDT_PROPG_TITLE, IDH_PROPG_TITLE,
|
|
IDT_PROPG_PROTOCOL, IDH_PROPG_PROTOCOL,
|
|
IDT_PROPG_PROTOCOL_LABEL, IDH_PROPG_PROTOCOL,
|
|
IDT_PROPG_TYPE, IDH_PROPG_TYPE,
|
|
IDT_PROPG_TYPE_LABEL, IDH_PROPG_TYPE,
|
|
IDT_PROPG_URL, IDH_PROPG_URL,
|
|
IDT_PROPG_URL_LABEL, IDH_PROPG_URL,
|
|
IDT_PROPG_SIZE, IDH_PROPG_SIZE,
|
|
IDT_PROPG_SIZE_LABEL, IDH_PROPG_SIZE,
|
|
IDT_PROPG_CREATED, IDH_PROPG_CREATED,
|
|
IDT_PROPG_CREATED_LABEL, IDH_PROPG_CREATED,
|
|
IDT_PROPG_MODIFIED, IDH_PROPG_MODIFIED,
|
|
IDT_PROPG_MODIFIED_LABEL, IDH_PROPG_MODIFIED,
|
|
IDT_PROPG_UPDATED, IDH_PROPG_UPDATED,
|
|
IDT_PROPG_UPDATED_LABEL, IDH_PROPG_UPDATED,
|
|
|
|
IDT_PROPS_DESC, IDH_PROPS_DESC,
|
|
IDT_PROPS_CERT, IDH_PROPS_CERT,
|
|
IDT_PROPS_CERT_LABEL, IDH_PROPS_CERT,
|
|
0, 0
|
|
};
|
|
|
|
DWORD mapNewsCtrlToContextIds[] = {
|
|
|
|
IDC_NEWS_ONOFF, IDH_NEWS_ON_OFF,
|
|
IDC_NEWS_SERVLABEL, IDH_NEWS_SERVER,
|
|
IDC_NEWS_SERVER, IDH_NEWS_SERVER,
|
|
IDC_NEWS_AUTHCHECK, IDH_NEWS_ENABLE_AUTH,
|
|
IDC_NEWS_USERLABEL, IDH_NEWS_USERNAME,
|
|
IDC_NEWS_USER, IDH_NEWS_USERNAME,
|
|
IDC_NEWS_PASSLABEL, IDH_NEWS_PASSWORD,
|
|
IDC_NEWS_PASS, IDH_NEWS_PASSWORD,
|
|
IDC_NEWS_GROUPBOX, IDH_COMMON_GROUPBOX,
|
|
IDC_NEWS_NAMELABEL, IDH_NEWS_POSTING_NAME,
|
|
IDC_NEWS_NAME, IDH_NEWS_POSTING_NAME,
|
|
IDC_NEWS_EMAILLABEL, IDH_NEWS_EMAIL_ADDRESS,
|
|
IDC_NEWS_EMAIL, IDH_NEWS_EMAIL_ADDRESS,
|
|
0, 0
|
|
};
|
|
|
|
DWORD mapPagesCtrlToContextIds[] = {
|
|
|
|
IDC_HP_PAGE_COMBO, IDH_PAGES_LISTBOX,
|
|
IDC_HP_CURRENT, IDH_PAGES_START_URL,
|
|
IDC_HP_USE_CURRENT, IDH_PAGES_START_USE_CURRENT,
|
|
IDC_HP_CURRENT_LABEL, IDH_PAGES_LISTBOX,
|
|
IDC_HP_USE_DEFAULT, IDH_PAGES_START_USE_DEFAULT,
|
|
IDC_HP_ADDRESS_GROUPBOX, IDH_COMMON_GROUPBOX,
|
|
0, 0
|
|
};
|
|
|
|
DWORD mapSecurityCtrlToContextIds[] = {
|
|
|
|
IDC_SECURITY_TELL_ME, IDH_SECURITY_TELL_ME,
|
|
IDC_SECURITY_SH_LABEL, IDH_SECURITY_SEND_HIGH,
|
|
IDC_SECURITY_SM_LABEL, IDH_SECURITY_SEND_MED,
|
|
IDC_SECURITY_SL_LABEL, IDH_SECURITY_SEND_LOW,
|
|
|
|
IDC_SECURITY_VH_LABEL, IDH_SECURITY_VIEW_HIGH,
|
|
IDC_SECURITY_VL_LABEL, IDH_SECURITY_VIEW_LOW,
|
|
|
|
IDC_SECURITY_SH, IDH_SECURITY_SEND_HIGH,
|
|
IDC_SECURITY_SM, IDH_SECURITY_SEND_MED,
|
|
IDC_SECURITY_SL, IDH_SECURITY_SEND_LOW,
|
|
IDC_SECURITY_VH, IDH_SECURITY_VIEW_HIGH,
|
|
IDC_SECURITY_VL, IDH_SECURITY_VIEW_LOW,
|
|
|
|
IDC_SECURITY_GROUP_VS, IDH_COMMON_GROUPBOX,
|
|
IDC_SECURITY_GROUP_SS, IDH_COMMON_GROUPBOX,
|
|
IDC_SECURITY_PREF_LABEL, IDH_SECURITY_TELL_ME,
|
|
|
|
IDD_SECURITY_BAD_CN_SEND, IDH_SECURITY_BAD_CN_SEND,
|
|
IDD_SECURITY_BAD_CN_RECV, IDH_SECURITY_BAD_CN_RECV,
|
|
|
|
0, 0
|
|
};
|
|
|
|
#define MAX_ALLOWED_HISTORY 3000
|
|
|
|
char szLastURLTyped[MAX_URL_STRING + 1];
|
|
|
|
//
|
|
// Table of substrings that make up default style sheet names
|
|
// ***Note: must match SSpart enum below
|
|
//
|
|
static char *SSpartTblSizes[] = { "Smallest", "Small", "Medium", "Largest", "Large", NULL };
|
|
static char *SSpartTblStyles[] = { "SansSerif", "Serif", "Mixed", NULL };
|
|
|
|
|
|
//
|
|
// Constants used as index into above table of strings
|
|
// ***Note: must match SSpartTbl above
|
|
//
|
|
enum SSpartSizes { SS_Smallest, SS_Small, SS_Medium, SS_Largest, SS_Large };
|
|
enum SSpartStyles { SS_SansSerif, SS_Serif, SS_Mixed };
|
|
|
|
typedef struct
|
|
{
|
|
VOID(*fn) (HWND);
|
|
}
|
|
CC_DISPATCH;
|
|
|
|
#ifdef XX_DEBUG
|
|
static WORD wIdReceived;
|
|
|
|
static VOID SanityCheck(WORD wIdExpected)
|
|
{
|
|
if (wIdExpected != wIdReceived)
|
|
ER_Message(NO_ERROR, ERR_CODING_ERROR,
|
|
"Command dispatch out of synch [exp %x][rcv %x]",
|
|
wIdExpected, wIdReceived);
|
|
return;
|
|
}
|
|
#else
|
|
#define SanityCheck(x) do { /**/ } while (0)
|
|
#endif /* XX_DEBUG */
|
|
|
|
/*
|
|
* BUGBUG: (DavidDi 4/25/95) Use of static p_sav_gPrefs is busted for multiple
|
|
* threads. We could just make the Options dialog app modal.
|
|
*/
|
|
static struct Preferences *p_sav_gPrefs;
|
|
|
|
static VOID UpdateAllWindows()
|
|
{
|
|
struct Mwin *tw;
|
|
BOOL first = TRUE;
|
|
|
|
if (wg.eColorMode == 8)
|
|
{
|
|
GTR_FixExtraPaletteColors();
|
|
}
|
|
|
|
for (tw = Mlist; tw; tw = tw->next)
|
|
{
|
|
TBar_UpdateTBItems( tw );
|
|
InvalidateRect(tw->win, NULL, TRUE);
|
|
TW_SetWindowName(tw);
|
|
}
|
|
}
|
|
|
|
// ReformatAllWindows - force a redraw, reformat, and update of every
|
|
// darn w3doc, tw, and thing in exsistance
|
|
//
|
|
static VOID ReformatAllWindows()
|
|
{
|
|
struct Mwin *tw;
|
|
BOOL first = TRUE;
|
|
int i;
|
|
int count;
|
|
struct _www *w3doc;
|
|
|
|
if (wg.eColorMode == 8)
|
|
{
|
|
GTR_FixExtraPaletteColors();
|
|
}
|
|
|
|
// loop through each window causing it to reformat
|
|
for (tw = Mlist; tw; tw = tw->next)
|
|
{
|
|
// grab the number of the w3docs for this window
|
|
count = Hash_Count(&tw->doc_cache);
|
|
|
|
// for each w3doc force it to reformat when it gets painted
|
|
for (i = 0; i < count; i++)
|
|
{
|
|
Hash_GetIndexedEntry(&tw->doc_cache, i, NULL, NULL, (void **) &w3doc);
|
|
if ( w3doc )
|
|
w3doc->frame.nLastFormattedLine = -1;
|
|
}
|
|
|
|
// force the reformat on the visible window
|
|
TW_ForceReformat(tw);
|
|
|
|
// change the window caption if needed????
|
|
TW_SetWindowName(tw);
|
|
}
|
|
}
|
|
|
|
|
|
static void BrowseForDir( HWND hDlg, int cbTitleID, UINT dst_fld_id)
|
|
{
|
|
BROWSEINFO bi;
|
|
OPENFILENAME ofn;
|
|
LPITEMIDLIST pidl;
|
|
DWORD dwErr;
|
|
char szBuffer[MAX_PATH + 100];
|
|
char szInitDir[MAX_PATH + 100];
|
|
char szTitle[64];
|
|
|
|
#ifdef DAYTONA_BUILD
|
|
if(RUNNING_NT351)
|
|
{
|
|
lstrcpy(szBuffer, "X");
|
|
GetDlgItemText(hDlg, dst_fld_id, szInitDir, MAX_PATH+100);
|
|
|
|
ofn.lStructSize = sizeof(OPENFILENAME);
|
|
ofn.hwndOwner = hDlg;
|
|
ofn.hInstance = wg.hInstance;
|
|
ofn.lpstrFilter = (LPTSTR) NULL;
|
|
ofn.lpstrCustomFilter = (LPTSTR) NULL;
|
|
ofn.nMaxCustFilter = 0L;
|
|
ofn.nFilterIndex = 0L;
|
|
ofn.lpstrFile = szBuffer;
|
|
ofn.nMaxFile = ARRAYSIZE(szBuffer);
|
|
ofn.lpstrFileTitle = NULL;
|
|
ofn.nMaxFileTitle = 0;
|
|
ofn.lpstrInitialDir = szInitDir;
|
|
ofn.lpstrTitle = GTR_formatmsg(cbTitleID,szTitle,sizeof(szTitle));
|
|
ofn.nFileOffset = 0;
|
|
ofn.nFileExtension = 0;
|
|
ofn.lpstrDefExt = (LPTSTR) NULL;
|
|
ofn.lCustData = 0;
|
|
ofn.lpTemplateName = "DIROPENDLG";
|
|
ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_ENABLETEMPLATE;
|
|
|
|
if(!TW_GetOpenFileName(&ofn))
|
|
{
|
|
if(!(dwErr = TW_CommDlgExtendedError()))
|
|
return; // User canceled the dialog
|
|
}
|
|
else
|
|
szBuffer[lstrlen(szBuffer)-2] = '\0'; // Remove the \X from filename so all we have is the dir
|
|
}
|
|
else
|
|
#endif // DAYTONA_BUILD
|
|
{
|
|
bi.hwndOwner = hDlg;
|
|
bi.pidlRoot = NULL;
|
|
bi.lpszTitle = GTR_formatmsg(cbTitleID,szTitle,sizeof(szTitle));
|
|
bi.pszDisplayName = szBuffer; // output
|
|
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
|
|
bi.lpfn = NULL;
|
|
bi.lParam = 0;
|
|
|
|
pidl = SHBrowseForFolder(&bi);
|
|
if (pidl)
|
|
SHGetPathFromIDList(pidl, szBuffer);
|
|
}
|
|
|
|
if ( szBuffer[0] )
|
|
{
|
|
char windows_dir[MAX_PATH+1];
|
|
BOOL okay = TRUE; // assume it will be okay to use selected directory
|
|
|
|
if ( strlen(szBuffer) <= 3 )
|
|
okay = FALSE; // root dir not allowed
|
|
|
|
if ( GetWindowsDirectory( windows_dir, sizeof(windows_dir) ) )
|
|
{
|
|
if ( _strnicmp( szBuffer, windows_dir, strlen(windows_dir) ) == 0 )
|
|
okay = FALSE; // windows dir or below not allowed
|
|
}
|
|
|
|
if ( okay )
|
|
SetDlgItemText( hDlg, dst_fld_id, szBuffer);
|
|
else
|
|
resourceMessageBox(hDlg, RES_STRING_CHANGE_FOLDER_MSG,
|
|
RES_STRING_CHANGE_FOLDER_TITLE,
|
|
(MB_ICONEXCLAMATION | MB_OK));
|
|
}
|
|
#ifdef DAYTONA_BUILD
|
|
if(!(RUNNING_NT351))
|
|
SHFree(pidl);
|
|
#endif
|
|
}
|
|
|
|
static void Color_DrawButton(HWND hDlg, LPDRAWITEMSTRUCT lpdis, COLORREF the_color )
|
|
{
|
|
SIZE thin = { cxEdge / 2, cyEdge / 2 };
|
|
RECT rc = lpdis->rcItem;
|
|
HDC hdc = lpdis->hDC;
|
|
BOOL bFocus = ((lpdis->itemState & ODS_FOCUS) &&
|
|
!(lpdis->itemState & ODS_DISABLED));
|
|
|
|
if (!thin.cx) thin.cx = 1;
|
|
if (!thin.cy) thin.cy = 1;
|
|
|
|
if (lpdis->itemState & ODS_SELECTED)
|
|
{
|
|
DrawEdge(hdc, &rc, EDGE_SUNKEN, BF_RECT | BF_ADJUST);
|
|
OffsetRect(&rc, 1, 1);
|
|
} else {
|
|
DrawEdge(hdc, &rc, EDGE_RAISED, BF_RECT | BF_ADJUST);
|
|
}
|
|
|
|
FillRect(hdc, &rc, GetSysColorBrush(COLOR_3DFACE));
|
|
|
|
if (bFocus)
|
|
{
|
|
InflateRect(&rc, -thin.cx, -thin.cy);
|
|
DrawFocusRect(hdc, &rc);
|
|
InflateRect(&rc, thin.cx, thin.cy);
|
|
}
|
|
|
|
// color sample
|
|
if ( !(lpdis->itemState & ODS_DISABLED) )
|
|
{
|
|
HBRUSH hBrush;
|
|
|
|
InflateRect(&rc, -2 * thin.cx, -2 * thin.cy);
|
|
FrameRect(hdc, &rc, GetSysColorBrush(COLOR_BTNTEXT));
|
|
InflateRect(&rc, -thin.cx, -thin.cy);
|
|
|
|
hBrush = CreateSolidBrush( the_color );
|
|
FillRect(hdc, &rc, hBrush);
|
|
DeleteObject(hBrush);
|
|
}
|
|
}
|
|
|
|
static COLORREF g_CustomColors[16];
|
|
#define nCustomColors (sizeof(g_CustomColors)/sizeof(COLORREF))
|
|
|
|
static BOOL UseColorPicker( HWND hWnd, COLORREF *the_color, int extra_flags )
|
|
{
|
|
CHOOSECOLOR cc;
|
|
|
|
cc.lStructSize = sizeof(cc);
|
|
cc.hwndOwner = hWnd;
|
|
cc.hInstance = NULL;
|
|
cc.rgbResult = (DWORD) *the_color;
|
|
cc.lpCustColors = g_CustomColors;
|
|
cc.Flags = CC_RGBINIT | CC_PREVENTFULLOPEN | extra_flags;
|
|
cc.lCustData = (DWORD) NULL;
|
|
cc.lpfnHook = NULL;
|
|
cc.lpTemplateName = NULL;
|
|
|
|
if (TW_ChooseColor(&cc))
|
|
{
|
|
*the_color = cc.rgbResult;
|
|
InvalidateRect( hWnd, NULL, FALSE );
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
static void AppearanceDimFields( HWND hDlg )
|
|
{
|
|
BOOL setting = IsDlgButtonChecked( hDlg, IDC_APPEARANCE_USE_CUSTOM_COLORS );
|
|
EnableWindow(GetDlgItem(hDlg, IDC_APPEARANCE_COLOR_TEXT_LABEL), setting);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_APPEARANCE_COLOR_TEXT), setting);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_APPEARANCE_COLOR_BACKGROUND_LABEL), setting);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_APPEARANCE_COLOR_BACKGROUND), setting);
|
|
}
|
|
|
|
#ifndef FEATURE_INTL // move font combo box to encoding/intl dialog
|
|
static void UpdateRegFontSettings( int iSize, char *szFontName,
|
|
struct EnumFontTypeInfo *pEnumFontStuff, char *szRegFontCharSetName, char *szRegFontName )
|
|
{
|
|
if ( iSize > 0 )
|
|
{
|
|
char *pszScriptName;
|
|
char *pszTemp;
|
|
char szOurCharSet[10+1];
|
|
int iScriptIndex = -1;
|
|
int i;
|
|
|
|
ASSERT(szFontName);
|
|
|
|
// make sure this doens't get in the string
|
|
pszScriptName = strchr(szFontName, '(');
|
|
if ( pszScriptName && (pszScriptName > szFontName) )
|
|
{
|
|
*(pszScriptName-1) = '\0'; // nuke space before string
|
|
pszScriptName++; // move after the (
|
|
// mash off the terminating ')' from our string
|
|
pszTemp = strchr(pszScriptName, ')');
|
|
if ( pszTemp )
|
|
*pszTemp = '\0';
|
|
|
|
// find script string's charset index
|
|
for ( i=0; i < NrElements(pEnumFontStuff->apszCharSetToScriptMap); i++ )
|
|
if ( pEnumFontStuff->apszCharSetToScriptMap[i] )
|
|
if ( _stricmp(pEnumFontStuff->apszCharSetToScriptMap[i], pszScriptName ) == 0 )
|
|
{
|
|
iScriptIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
iScriptIndex = pEnumFontStuff->bSystemCharset;
|
|
}
|
|
|
|
|
|
if ( iScriptIndex != -1 )
|
|
{
|
|
wsprintf(szOurCharSet, "%d", iScriptIndex );
|
|
|
|
regWritePrivateProfileString( "Styles", szRegFontCharSetName,
|
|
szOurCharSet, HKEY_CURRENT_USER );
|
|
}
|
|
|
|
|
|
regWritePrivateProfileString( "Styles", szRegFontName,
|
|
szFontName, HKEY_CURRENT_USER );
|
|
|
|
}
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static BOOL CALLBACK AppearanceDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
#ifndef FEATURE_INTL // move font combo box to encoding/intl dialog
|
|
static struct EnumFontTypeInfo *pEnumFontStuff;
|
|
#endif
|
|
static BOOL bBeenChanged;
|
|
static BOOL bNewFontHasBeenApplyed;
|
|
|
|
switch (uMsg) {
|
|
|
|
case WM_INITDIALOG: {
|
|
|
|
// get the frame window, and its DC to gather font info
|
|
|
|
HWND hWnd = GetTopWindow(GetDesktopWindow());
|
|
HDC hDC = GetDC( hWnd );
|
|
|
|
#ifndef FEATURE_INTL // move font combo box to encoding/intl dialog
|
|
pEnumFontStuff = GTR_MALLOC(sizeof(struct EnumFontTypeInfo));
|
|
if ( pEnumFontStuff == NULL )
|
|
{
|
|
DestroyWindow(hDlg);
|
|
return TRUE;
|
|
}
|
|
#endif
|
|
|
|
// nothing has been changed yet .
|
|
|
|
bBeenChanged = FALSE;
|
|
#ifndef FEATURE_INTL // move font combo box to encoding/intl dialog
|
|
bNewFontHasBeenApplyed = FALSE ; // TRUE if we changed a font
|
|
|
|
// fill in this struc so the enum function can place
|
|
// the fonts in the combo box as it gets them
|
|
|
|
pEnumFontStuff->hwndFixed = GetDlgItem(hDlg, IDC_FONT_FIXED_COMBO);
|
|
pEnumFontStuff->hwndProp = GetDlgItem(hDlg, IDC_FONT_PROP_COMBO);
|
|
pEnumFontStuff->Count = 0;
|
|
pEnumFontStuff->SelFixed = 0;
|
|
pEnumFontStuff->SelProp = 0;
|
|
memset(pEnumFontStuff->apszCharSetToScriptMap, 0x00, sizeof(pEnumFontStuff->apszCharSetToScriptMap));
|
|
|
|
|
|
// do an enumeration of the fonts and add them to our
|
|
// combo box if needed .
|
|
|
|
if ( hDC ) {
|
|
|
|
LOGFONT lf;
|
|
|
|
lf.lfFaceName[0] = '\0' ;
|
|
lf.lfCharSet = DEFAULT_CHARSET;
|
|
lf.lfPitchAndFamily = 0;
|
|
pEnumFontStuff->bSystemCharset = GetTextCharset(hDC);
|
|
|
|
EnumFontFamiliesEx(hDC, &lf, (FONTENUMPROC) STY_EnumFontsProc,
|
|
(LPARAM) pEnumFontStuff,0);
|
|
|
|
|
|
ReleaseDC( hWnd, hDC );
|
|
|
|
// highlight the current fonts
|
|
STY_SelectCurrentFonts(pEnumFontStuff);
|
|
}
|
|
|
|
// ***END*** of font init stuff
|
|
#endif
|
|
// now on to other init stuff
|
|
|
|
// Load color fields
|
|
CheckDlgButton( hDlg, IDC_APPEARANCE_USE_CUSTOM_COLORS, !gPrefs.bUseDlgBoxColors );
|
|
CheckDlgButton( hDlg, IDC_APPEARANCE_SHOW_PICTURES, gPrefs.bAutoLoadImages );
|
|
CheckDlgButton( hDlg, IDC_APPEARANCE_SHOW_VIDEO, gPrefs.bAutoLoadVideos );
|
|
|
|
// Load shortcut fields
|
|
CheckRadioButton( hDlg, IDC_APPEARANCE_SHOW_HUMAN_URL,
|
|
IDC_APPEARANCE_SHOW_FULL_URL,
|
|
gPrefs.bShowFullURLS ?
|
|
IDC_APPEARANCE_SHOW_FULL_URL :
|
|
IDC_APPEARANCE_SHOW_HUMAN_URL );
|
|
CheckDlgButton( hDlg, IDC_APPEARANCE_SHOW_URL_IN_SB, gPrefs.bShowURLinSB );
|
|
CheckDlgButton( hDlg, IDC_APPEARANCE_UNDERLINE_LINKS,
|
|
(gPrefs.cAnchorFontBits & FONTBIT_UNDERLINE) ? 1 : 0 );
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_APPEARANCE_SHOW_HUMAN_URL), TRUE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_APPEARANCE_SHOW_FULL_URL), TRUE);
|
|
|
|
AppearanceDimFields( hDlg );
|
|
|
|
// now do stuff for Sounds ..
|
|
|
|
CheckDlgButton( hDlg, IDC_SOUNDS_USE_BGSOUND,gPrefs.bPlayBackgroundSounds);
|
|
}
|
|
return TRUE;
|
|
|
|
case WM_DRAWITEM: {
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDC_APPEARANCE_COLOR_TEXT:
|
|
Color_DrawButton(hDlg, (LPDRAWITEMSTRUCT)lParam, gPrefs.window_text_color );
|
|
return TRUE;
|
|
|
|
case IDC_APPEARANCE_COLOR_BACKGROUND:
|
|
Color_DrawButton(hDlg, (LPDRAWITEMSTRUCT)lParam, gPrefs.window_background_color );
|
|
return TRUE;
|
|
|
|
case IDC_APPEARANCE_COLOR_LINKS:
|
|
Color_DrawButton(hDlg, (LPDRAWITEMSTRUCT)lParam, gPrefs.anchor_color );
|
|
return TRUE;
|
|
|
|
case IDC_APPEARANCE_COLOR_VISITED_LINKS:
|
|
Color_DrawButton(hDlg, (LPDRAWITEMSTRUCT)lParam, gPrefs.anchor_color_beenthere );
|
|
return TRUE;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_NOTIFY: {
|
|
NMHDR *lpnm = (NMHDR *) lParam;
|
|
|
|
switch (lpnm->code) {
|
|
case PSN_QUERYCANCEL:
|
|
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
|
|
gPrefs = *p_sav_gPrefs;
|
|
return TRUE;
|
|
|
|
case PSN_KILLACTIVE:
|
|
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
|
|
return TRUE;
|
|
|
|
case PSN_RESET:
|
|
UpdateAllWindows();
|
|
break;
|
|
|
|
case PSN_APPLY: {
|
|
|
|
#ifndef FEATURE_INTL // move font combo box to encoding/intl dialog
|
|
int iFixedSel;
|
|
int iPropSel;
|
|
int iSize;
|
|
#endif
|
|
BOOL bNeedsReload = FALSE;
|
|
BOOL bNeedsReformat = FALSE;
|
|
#ifndef FEATURE_INTL // move font combo box to encoding/intl dialog
|
|
TCHAR szFontName[LF_FACESIZE+1];
|
|
#endif
|
|
HWND hWnd = GetParent(GetParent(hDlg));
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
// Get sound field value
|
|
gPrefs.bPlayBackgroundSounds = IsDlgButtonChecked(hDlg,IDC_SOUNDS_USE_BGSOUND);
|
|
|
|
// Get AutoLoadImages aka Show Pictures
|
|
gPrefs.bAutoLoadImages = IsDlgButtonChecked( hDlg, IDC_APPEARANCE_SHOW_PICTURES );
|
|
// Get the AutoLoadVideos aka Show Videos
|
|
gPrefs.bAutoLoadVideos = IsDlgButtonChecked( hDlg, IDC_APPEARANCE_SHOW_VIDEO );
|
|
|
|
|
|
// if the user changes the fonts or colors,
|
|
// then we need to redraw the window,
|
|
// but we don't want to it multiple times
|
|
// if the user has already changed it,
|
|
// we've previously updated it
|
|
|
|
if ( ! bBeenChanged )
|
|
break;
|
|
|
|
bBeenChanged = FALSE;
|
|
|
|
// Get color field values
|
|
gPrefs.bUseDlgBoxColors =
|
|
!IsDlgButtonChecked( hDlg, IDC_APPEARANCE_USE_CUSTOM_COLORS );
|
|
|
|
// Get shortcut field values
|
|
gPrefs.bShowFullURLS =
|
|
IsDlgButtonChecked( hDlg, IDC_APPEARANCE_SHOW_FULL_URL );
|
|
gPrefs.bShowURLinSB =
|
|
IsDlgButtonChecked( hDlg, IDC_APPEARANCE_SHOW_URL_IN_SB );
|
|
|
|
// if the underline bit changes we need a reformat of the
|
|
// page, since their may be marquees
|
|
if ( IsDlgButtonChecked( hDlg, IDC_APPEARANCE_UNDERLINE_LINKS ) )
|
|
{
|
|
if ( ! ( gPrefs.cAnchorFontBits & FONTBIT_UNDERLINE) )
|
|
bNeedsReformat = TRUE;
|
|
gPrefs.cAnchorFontBits |= FONTBIT_UNDERLINE;
|
|
}
|
|
else
|
|
{
|
|
if ( gPrefs.cAnchorFontBits & FONTBIT_UNDERLINE )
|
|
bNeedsReformat = TRUE;
|
|
gPrefs.cAnchorFontBits &= (~FONTBIT_UNDERLINE);
|
|
}
|
|
|
|
#ifdef FEATURE_INTL // move font combo box to encoding/intl dialog
|
|
if ( bNeedsReformat )
|
|
ReformatAllWindows();
|
|
else
|
|
UpdateAllWindows();
|
|
|
|
break;
|
|
#else
|
|
// Now do font changing stuff...
|
|
// grab the selected font
|
|
|
|
iFixedSel = SendMessage(pEnumFontStuff->hwndFixed,
|
|
CB_GETCURSEL,
|
|
(WPARAM)0,
|
|
(LPARAM)0L);
|
|
|
|
iPropSel = SendMessage(pEnumFontStuff->hwndProp,
|
|
CB_GETCURSEL,
|
|
(WPARAM)0,
|
|
(LPARAM)0L);
|
|
|
|
// if the user hasn't changed the fonts
|
|
// then there is no need to save anything
|
|
|
|
if ( iFixedSel == pEnumFontStuff->SelFixed &&
|
|
iPropSel == pEnumFontStuff->SelProp &&
|
|
! bNewFontHasBeenApplyed )
|
|
{
|
|
if ( bNeedsReformat )
|
|
ReformatAllWindows();
|
|
else
|
|
UpdateAllWindows();
|
|
|
|
break;
|
|
}
|
|
|
|
// grab the font that needs to be changed
|
|
|
|
iSize = SendMessage(pEnumFontStuff->hwndFixed,
|
|
CB_GETLBTEXT,
|
|
(WPARAM)iFixedSel,
|
|
(LPARAM)&szFontName);
|
|
|
|
|
|
// update the registry
|
|
UpdateRegFontSettings( iSize, szFontName,
|
|
pEnumFontStuff, "IEFixedFontCharSet", "IEFixedFontName" );
|
|
|
|
|
|
// grab the font, and update the registry for the
|
|
// proporitional font
|
|
|
|
iSize = SendMessage(pEnumFontStuff->hwndProp,
|
|
CB_GETLBTEXT,
|
|
(WPARAM)iPropSel,
|
|
(LPARAM)&szFontName);
|
|
|
|
UpdateRegFontSettings( iSize, szFontName,
|
|
pEnumFontStuff, "IEPropFontCharSet", "IEPropFontName" );
|
|
|
|
// now force the font to be changed..
|
|
|
|
bNewFontHasBeenApplyed = TRUE;
|
|
|
|
STY_ChangeFonts();
|
|
|
|
ReformatAllWindows();
|
|
#endif
|
|
|
|
// END of PSN_APPLY stuff ..
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND: {
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
|
|
case IDC_FONT_PROP_COMBO:
|
|
case IDC_FONT_FIXED_COMBO:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == CBN_SELCHANGE ) {
|
|
bBeenChanged = TRUE;
|
|
SendMessage( GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L );
|
|
}
|
|
|
|
case IDC_APPEARANCE_USE_CUSTOM_COLORS:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED ) {
|
|
AppearanceDimFields( hDlg );
|
|
bBeenChanged = TRUE;
|
|
SendMessage( GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L );
|
|
}
|
|
break;
|
|
case IDC_APPEARANCE_SHOW_URL_IN_SB:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED ) {
|
|
AppearanceDimFields( hDlg );
|
|
bBeenChanged = TRUE;
|
|
SendMessage( GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L );
|
|
}
|
|
break;
|
|
|
|
case IDC_APPEARANCE_SHOW_HUMAN_URL:
|
|
case IDC_APPEARANCE_SHOW_FULL_URL:
|
|
case IDC_APPEARANCE_UNDERLINE_LINKS:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED ) {
|
|
bBeenChanged = TRUE;
|
|
SendMessage( GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L );
|
|
}
|
|
break;
|
|
|
|
case IDC_APPEARANCE_COLOR_TEXT:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED ) {
|
|
UseColorPicker( hDlg, &gPrefs.window_text_color, CC_SOLIDCOLOR );
|
|
bBeenChanged = TRUE;
|
|
SendMessage( GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L );
|
|
}
|
|
break;
|
|
case IDC_APPEARANCE_COLOR_BACKGROUND:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED ) {
|
|
UseColorPicker( hDlg, &gPrefs.window_background_color, CC_SOLIDCOLOR );
|
|
bBeenChanged = TRUE;
|
|
SendMessage( GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L );
|
|
}
|
|
break;
|
|
case IDC_APPEARANCE_COLOR_LINKS:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED ) {
|
|
UseColorPicker( hDlg, &gPrefs.anchor_color, CC_SOLIDCOLOR );
|
|
bBeenChanged = TRUE;
|
|
SendMessage( GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L );
|
|
}
|
|
break;
|
|
case IDC_APPEARANCE_COLOR_VISITED_LINKS:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED ) {
|
|
UseColorPicker( hDlg, &gPrefs.anchor_color_beenthere, CC_SOLIDCOLOR );
|
|
bBeenChanged = TRUE;
|
|
SendMessage( GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L );
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_HELP: // F1
|
|
WinHelp( ((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
HELP_WM_HELP, (DWORD)(LPSTR)mapCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
WinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
HELP_CONTEXTMENU, (DWORD)(LPSTR)mapCtrlToContextIds);
|
|
break;
|
|
|
|
#ifndef FEATURE_INTL // move font combo box to encoding/intl dialog
|
|
case WM_DESTROY:
|
|
if (pEnumFontStuff)
|
|
GTR_FREE(pEnumFontStuff);
|
|
break;
|
|
#endif
|
|
|
|
case WM_ENTERIDLE:
|
|
main_EnterIdle(hDlg, wParam);
|
|
return 0;
|
|
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
#ifdef HTTPS_ACCESS_TYPE
|
|
|
|
static BOOL CALLBACK SecurityDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam){
|
|
switch (uMsg) {
|
|
case WM_INITDIALOG: {
|
|
/*Load initial values from registry*/
|
|
CheckRadioButton( hDlg, IDC_SECURITY_SH,
|
|
IDC_SECURITY_SL,
|
|
gPrefs.nSendingSecurity==SECURITY_HIGH ?
|
|
IDC_SECURITY_SH :
|
|
(gPrefs.nSendingSecurity==SECURITY_MEDIUM ?
|
|
IDC_SECURITY_SM : IDC_SECURITY_SL));
|
|
EnableWindow(GetDlgItem(hDlg, IDC_SECURITY_SH), TRUE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_SECURITY_SM), TRUE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_SECURITY_SL), TRUE);
|
|
CheckRadioButton( hDlg, IDC_SECURITY_VH,
|
|
IDC_SECURITY_VL,
|
|
gPrefs.nViewingSecurity==SECURITY_HIGH ?
|
|
IDC_SECURITY_VH : IDC_SECURITY_VL);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_SECURITY_VH), TRUE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_SECURITY_VL), TRUE);
|
|
|
|
CheckDlgButton( hDlg, IDD_SECURITY_BAD_CN_RECV, gPrefs.bChkCNOnRecv );
|
|
CheckDlgButton( hDlg, IDD_SECURITY_BAD_CN_SEND, gPrefs.bChkCNOnSend );
|
|
}
|
|
return TRUE;
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDC_SECURITY_SH:
|
|
case IDC_SECURITY_SM:
|
|
case IDC_SECURITY_SL:
|
|
case IDC_SECURITY_VH:
|
|
case IDC_SECURITY_VL:
|
|
case IDD_SECURITY_BAD_CN_SEND:
|
|
case IDD_SECURITY_BAD_CN_RECV:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED ) {
|
|
SendMessage( GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L );
|
|
}
|
|
return TRUE;
|
|
case IDC_SECURITY_TELL_ME:
|
|
WinHelp( hDlg, IDS_HELPFILE,
|
|
HELP_CONTEXT,
|
|
(DWORD)HELP_TOPIC_SECURITY);
|
|
return TRUE;
|
|
|
|
}
|
|
break;
|
|
|
|
case WM_NOTIFY: {
|
|
NMHDR *lpnm = (NMHDR *) lParam;
|
|
|
|
ASSERT(lpnm);
|
|
switch (lpnm->code) {
|
|
case PSN_QUERYCANCEL:
|
|
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
|
|
gPrefs = *p_sav_gPrefs;
|
|
return TRUE;
|
|
|
|
case PSN_KILLACTIVE:
|
|
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
|
|
return TRUE;
|
|
|
|
case PSN_RESET:
|
|
UpdateAllWindows();
|
|
break;
|
|
|
|
case PSN_APPLY: {
|
|
// Get Security field values
|
|
gPrefs.nSendingSecurity = IsDlgButtonChecked(hDlg, IDC_SECURITY_SH) ? SECURITY_HIGH :
|
|
(IsDlgButtonChecked(hDlg, IDC_SECURITY_SM) ? SECURITY_MEDIUM : SECURITY_LOW);
|
|
gPrefs.nViewingSecurity = IsDlgButtonChecked(hDlg, IDC_SECURITY_VH) ? SECURITY_HIGH : SECURITY_LOW;
|
|
gPrefs.bChkCNOnSend = IsDlgButtonChecked(hDlg, IDD_SECURITY_BAD_CN_SEND);
|
|
gPrefs.bChkCNOnRecv = IsDlgButtonChecked(hDlg, IDD_SECURITY_BAD_CN_RECV);
|
|
|
|
UpdateAllWindows(); // BUGBUG do we really need to this Security doesn't relate to window styles?
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_HELP: // F1
|
|
WinHelp( ((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
HELP_WM_HELP, (DWORD)(LPSTR)mapSecurityCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
WinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
HELP_CONTEXTMENU, (DWORD)(LPSTR)mapSecurityCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_ENTERIDLE:
|
|
main_EnterIdle(hDlg, wParam);
|
|
return 0;
|
|
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
enum SCH_TYPES
|
|
{
|
|
HOME_CURRENT_HOME,
|
|
HOME_CURRENT_PAGE,
|
|
HOME_DEFAULT,
|
|
SCH_CURRENT_SEARCH,
|
|
SCH_CURRENT_PAGE,
|
|
SCH_DEFAULT
|
|
};
|
|
|
|
#define FHomeSetting(set_to) \
|
|
( (set_to == HOME_CURRENT_HOME) \
|
|
|| (set_to == HOME_CURRENT_PAGE) \
|
|
|| (set_to == HOME_DEFAULT))
|
|
|
|
static void SetCurrentHomeSearchTo( HWND hDlg, enum SCH_TYPES set_to )
|
|
{
|
|
HWND hWnd = GetParent( GetParent( hDlg ) );
|
|
|
|
if ( hWnd )
|
|
{
|
|
struct Mwin * tw;
|
|
char msg_txt[MAX_URL_STRING+1];
|
|
PSTR pszURL, pszDefaultURL;
|
|
|
|
if (FHomeSetting(set_to))
|
|
{
|
|
pszURL = gPrefs.szHomeURL;
|
|
pszDefaultURL = gPrefs.szDefaultURL;
|
|
}
|
|
else
|
|
{
|
|
pszURL = gPrefs.szSearchURL;
|
|
pszDefaultURL = gPrefs.szDefaultSearchURL;
|
|
}
|
|
|
|
tw = GetPrivateData(hWnd);
|
|
switch ( set_to ) {
|
|
case SCH_CURRENT_SEARCH:
|
|
case HOME_CURRENT_HOME:
|
|
strcpy( msg_txt, pszURL );
|
|
break;
|
|
case SCH_CURRENT_PAGE:
|
|
case HOME_CURRENT_PAGE:
|
|
if ( tw && tw->w3doc )
|
|
strcpy( msg_txt, tw->w3doc->szActualURL );
|
|
else
|
|
strcpy( msg_txt, pszURL );
|
|
break;
|
|
default:
|
|
XX_Assert(set_to == HOME_DEFAULT || set_to == SCH_DEFAULT, (""));
|
|
strcpy( msg_txt, pszDefaultURL ); /* Home/Search Page - SAVED */
|
|
break;
|
|
}
|
|
strcpy( pszURL, msg_txt );
|
|
// make_URL_HumanReadable( msg_txt, NULL, FALSE );
|
|
SetDlgItemText( hDlg, IDC_HP_CURRENT, msg_txt );
|
|
}
|
|
}
|
|
|
|
/* Note: There must be strings associated with each of these INDEX vals. */
|
|
enum PAGE_TYPES
|
|
{
|
|
INDEX_HOMEPAGE,
|
|
INDEX_SEARCHPAGE,
|
|
INDEX_HOMEPAGE_MAX
|
|
};
|
|
|
|
static void SetHomeSearchLText(HWND hDlg, BOOL fHome)
|
|
{
|
|
char szBuf[MAX_NAME_STRING];
|
|
|
|
GTR_formatmsg( fHome ? RES_STRING_DLGPREF_CURRENT_DESC_HP : RES_STRING_DLGPREF_CURRENT_DESC_SP,
|
|
szBuf,
|
|
sizeof(szBuf));
|
|
SetDlgItemText(hDlg, IDC_HP_CURRENT_DESC, szBuf);
|
|
GTR_formatmsg( fHome ? RES_STRING_DLGPREF_DEFAULT_DESC_HP : RES_STRING_DLGPREF_DEFAULT_DESC_SP,
|
|
szBuf,
|
|
sizeof(szBuf));
|
|
SetDlgItemText(hDlg, IDC_HP_DEFAULT_DESC, szBuf);
|
|
}
|
|
|
|
static BOOL CALLBACK HomePageDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
switch (uMsg) {
|
|
|
|
case WM_INITDIALOG: {
|
|
enum PAGE_TYPES i;
|
|
char szBuf[MAX_NAME_STRING];
|
|
struct Mwin * tw = GetPrivateData( GetParent( GetParent( hDlg ) ) );
|
|
HWND hWndCombo = GetDlgItem(hDlg, IDC_HP_PAGE_COMBO);
|
|
|
|
for(i = 0; i < INDEX_HOMEPAGE_MAX; i++)
|
|
{
|
|
GTR_formatmsg(RES_STRING_HOMEPAGE+i, szBuf, sizeof(szBuf));
|
|
/* String not found/loaded */
|
|
if (*szBuf == '\0')
|
|
break;
|
|
SendMessage(hWndCombo, CB_ADDSTRING, (WPARAM)0,
|
|
(LPARAM)szBuf);
|
|
}
|
|
|
|
SendMessage(hWndCombo, CB_SETCURSEL, (WPARAM)INDEX_HOMEPAGE, 0);
|
|
SetHomeSearchLText(hDlg, /*fHome=*/TRUE);
|
|
SetCurrentHomeSearchTo(hDlg, HOME_CURRENT_HOME);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_HP_USE_CURRENT), (tw && tw->w3doc) );
|
|
return TRUE;
|
|
}
|
|
|
|
case WM_NOTIFY: {
|
|
NMHDR *lpnm = (NMHDR *) lParam;
|
|
|
|
switch (lpnm->code) {
|
|
case PSN_QUERYCANCEL:
|
|
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
|
|
gPrefs = *p_sav_gPrefs;
|
|
return TRUE;
|
|
|
|
case PSN_KILLACTIVE:
|
|
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
|
|
return TRUE;
|
|
|
|
case PSN_RESET:
|
|
case PSN_APPLY:
|
|
UpdateAllWindows();
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND: {
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam))
|
|
{
|
|
int iSel;
|
|
|
|
case IDC_HP_USE_CURRENT:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED )
|
|
{
|
|
iSel = SendMessage(GetDlgItem(hDlg, IDC_HP_PAGE_COMBO), CB_GETCURSEL, (WPARAM)0, (LPARAM)0L);
|
|
XX_Assert(iSel == INDEX_HOMEPAGE || iSel == INDEX_SEARCHPAGE, (""));
|
|
SetCurrentHomeSearchTo( hDlg, (iSel == INDEX_HOMEPAGE ? HOME_CURRENT_PAGE : SCH_CURRENT_PAGE) );
|
|
SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L);
|
|
}
|
|
break;
|
|
|
|
case IDC_HP_USE_DEFAULT:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED )
|
|
{
|
|
iSel = SendMessage(GetDlgItem(hDlg, IDC_HP_PAGE_COMBO), CB_GETCURSEL, (WPARAM)0, (LPARAM)0L);
|
|
XX_Assert(iSel == INDEX_HOMEPAGE || iSel == INDEX_SEARCHPAGE, (""));
|
|
SetCurrentHomeSearchTo( hDlg, (iSel == INDEX_HOMEPAGE ? HOME_DEFAULT : SCH_DEFAULT) );
|
|
SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L);
|
|
}
|
|
break;
|
|
case IDC_HP_PAGE_COMBO:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == CBN_SELCHANGE )
|
|
{
|
|
iSel = SendMessage(GetDlgItem(hDlg, IDC_HP_PAGE_COMBO), CB_GETCURSEL, (WPARAM)0, (LPARAM)0L);
|
|
XX_Assert(iSel == INDEX_HOMEPAGE || iSel == INDEX_SEARCHPAGE, (""));
|
|
SetHomeSearchLText(hDlg, iSel == INDEX_HOMEPAGE);
|
|
SetCurrentHomeSearchTo(hDlg, (iSel == INDEX_HOMEPAGE ? HOME_CURRENT_HOME : SCH_CURRENT_SEARCH));
|
|
SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_HELP: // F1
|
|
WinHelp( ((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
HELP_WM_HELP, (DWORD)(LPSTR)mapPagesCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
WinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
HELP_CONTEXTMENU, (DWORD)(LPSTR)mapPagesCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_ENTERIDLE:
|
|
main_EnterIdle(hDlg, wParam);
|
|
return 0;
|
|
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
static BOOL CALLBACK AdvancedDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
CHAR szNewLoc[MAX_PATH+1];
|
|
|
|
switch (uMsg) {
|
|
|
|
case WM_INITDIALOG: {
|
|
HWND hwndTrack = GetDlgItem( hDlg, IDC_ADVANCED_CACHE_PERCENT );
|
|
|
|
// Load Reg Check Checkbox
|
|
SendDlgItemMessage( hDlg, IDC_ADVANCED_ASSOC_CHECK, BM_SETCHECK, gPrefs.bCheck_Associations, 0);
|
|
|
|
// Load history fields
|
|
SendDlgItemMessage( hDlg, IDC_ADVANCED_HST_NP_BUDDY, UDM_SETRANGE, 0,
|
|
MAKELPARAM(MAX_ALLOWED_HISTORY, 0));
|
|
SetDlgItemText( hDlg, IDC_ADVANCED_HST_LOCATION, gPrefs.szHistoryLocation );
|
|
SendDlgItemMessage( hDlg, IDC_ADVANCED_HST_NP_BUDDY, UDM_SETPOS,
|
|
0, (LPARAM) MAKELONG((short) gPrefs.iHistoryNumPlaces, 0));
|
|
|
|
// Load cache fields
|
|
SendMessage( hwndTrack, TBM_SETTICFREQ, 5, 0 );
|
|
SendMessage( hwndTrack, TBM_SETRANGE, FALSE, MAKELONG(0, 100) );
|
|
SendMessage( hwndTrack, TBM_SETPOS, TRUE, gPrefs.iCachePercent );
|
|
SendMessage( hwndTrack, TBM_SETPAGESIZE, 0, 5 );
|
|
if (gPrefs.bEnableDiskCache)
|
|
SetDlgItemText( hDlg, IDC_ADVANCED_CACHE_LOCATION, gPrefs.szCacheLocation );
|
|
else
|
|
{
|
|
EnableWindow(GetDlgItem(hDlg, IDC_ADVANCED_CACHE_LOCATION), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_ADVANCED_CACHE_EMPTY), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_ADVANCED_CACHE_BROWSE), FALSE);
|
|
}
|
|
CheckRadioButton(hDlg, IDC_ADVANCED_CACHE_ONCEPERSESS, IDC_ADVANCED_CACHE_NEVER,
|
|
IDC_ADVANCED_CACHE_ONCEPERSESS + gPrefs.iCacheUpdFrequency);
|
|
}
|
|
// fall through
|
|
|
|
case WM_HSCROLL: {
|
|
char szPercent[20];
|
|
int iPercent;
|
|
HWND hwndTrack = GetDlgItem( hDlg, IDC_ADVANCED_CACHE_PERCENT );
|
|
|
|
iPercent = SendMessage( hwndTrack, TBM_GETPOS, 0, 0 );
|
|
wsprintf( szPercent, "%d%%", iPercent );
|
|
SetDlgItemText( hDlg, IDC_ADVANCED_CACHE_TEXT_PERCENT, szPercent );
|
|
|
|
if ( iPercent != gPrefs.iCachePercent )
|
|
SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L);
|
|
}
|
|
return TRUE;
|
|
|
|
case WM_NOTIFY: {
|
|
NMHDR *lpnm = (NMHDR *) lParam;
|
|
char szNewLoc[_MAX_PATH+1];
|
|
|
|
switch (lpnm->code) {
|
|
case PSN_QUERYCANCEL:
|
|
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
|
|
gPrefs = *p_sav_gPrefs;
|
|
return TRUE;
|
|
|
|
case PSN_KILLACTIVE:
|
|
SetWindowLong( hDlg,DWL_MSGRESULT, FALSE );
|
|
return TRUE;
|
|
|
|
case PSN_RESET:
|
|
UpdateAllWindows();
|
|
break;
|
|
|
|
case PSN_APPLY: {
|
|
HWND hwndTrack = GetDlgItem( hDlg, IDC_ADVANCED_CACHE_PERCENT );
|
|
long hnp;
|
|
char np_text[10];
|
|
int iCacheUpdFreq;
|
|
|
|
// Get Check Associations Value
|
|
gPrefs.bCheck_Associations = IsDlgButtonChecked(hDlg, IDC_ADVANCED_ASSOC_CHECK);
|
|
|
|
// Get history field values
|
|
GetDlgItemText( hDlg, IDC_ADVANCED_HST_NUM_PLACES, np_text, sizeof(np_text) );
|
|
hnp = SendDlgItemMessage( hDlg, IDC_ADVANCED_HST_NP_BUDDY, UDM_GETPOS, 0, 0 );
|
|
if ( HIWORD(hnp) == 0 && gPrefs.iHistoryNumPlaces != LOWORD(hnp))
|
|
{
|
|
gPrefs.iHistoryNumPlaces = LOWORD(hnp);
|
|
GHist_SortAndPrune(gPrefs.iHistoryNumPlaces, gPrefs.history_expire_days);
|
|
}
|
|
GetDlgItemText( hDlg, IDC_ADVANCED_HST_LOCATION,
|
|
szNewLoc,
|
|
sizeof(szNewLoc));
|
|
UpdateHistoryLocation(szNewLoc);
|
|
GetDlgItemText( hDlg, IDC_ADVANCED_CACHE_LOCATION,
|
|
szNewLoc,
|
|
sizeof(szNewLoc) );
|
|
UpdateDCacheLocation(szNewLoc);
|
|
gPrefs.iCachePercent = SendMessage( hwndTrack, TBM_GETPOS, 0, 0 );
|
|
iCacheUpdFreq =
|
|
IsDlgButtonChecked(hDlg, IDC_ADVANCED_CACHE_NEVER) ? CACHE_UPDATE_FREQ_NEVER :
|
|
CACHE_UPDATE_FREQ_ONCEPERSESS;
|
|
if (gPrefs.iCacheUpdFrequency != iCacheUpdFreq)
|
|
CmdChangeCacheUpdFrequency(iCacheUpdFreq);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND: {
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDC_ADVANCED_HST_NUM_PLACES:
|
|
case IDC_ADVANCED_HST_LOCATION:
|
|
case IDC_ADVANCED_CACHE_LOCATION:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE )
|
|
SendMessage( GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L );
|
|
break;
|
|
|
|
case IDC_ADVANCED_HST_BROWSE:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED )
|
|
{
|
|
BrowseForDir( hDlg, RES_STRING_W32CMD1,
|
|
IDC_ADVANCED_HST_LOCATION);
|
|
GetDlgItemText( hDlg, IDC_ADVANCED_HST_LOCATION,
|
|
szNewLoc,
|
|
sizeof(szNewLoc));
|
|
UpdateHistoryLocation(szNewLoc);
|
|
}
|
|
break;
|
|
case IDC_ADVANCED_CACHE_BROWSE:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED )
|
|
{
|
|
BrowseForDir( hDlg, RES_STRING_W32CMD2,
|
|
IDC_ADVANCED_CACHE_LOCATION);
|
|
GetDlgItemText( hDlg, IDC_ADVANCED_CACHE_LOCATION,
|
|
szNewLoc,
|
|
sizeof(szNewLoc) );
|
|
UpdateDCacheLocation(szNewLoc);
|
|
}
|
|
break;
|
|
case IDC_ADVANCED_CACHE_EMPTY:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED )
|
|
FlushDCache(hDlg);
|
|
break;
|
|
case IDC_ADVANCED_HST_EMPTY:
|
|
if ( GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED )
|
|
{
|
|
if (resourceMessageBox(hDlg, RES_STRING_FLUSH_HIST,
|
|
RES_STRING_FLUSH_TITLE, MB_YESNO | MB_DEFBUTTON2 | MB_ICONEXCLAMATION)
|
|
== IDYES)
|
|
{
|
|
GHist_SortAndPrune(0,0);
|
|
RemoveAllStringsFromCommonPool( );
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_HELP: // F1
|
|
WinHelp( ((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
HELP_WM_HELP, (DWORD)(LPSTR)mapCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
WinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
HELP_CONTEXTMENU, (DWORD)(LPSTR)mapCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_ENTERIDLE:
|
|
main_EnterIdle(hDlg, wParam);
|
|
return 0;
|
|
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
#ifdef FEATURE_INTL
|
|
static VOID RefreshDocument(struct Mwin * tw, BOOL fRefreshAll)
|
|
{
|
|
char *url;
|
|
int ndx;
|
|
|
|
if(!tw)
|
|
return;
|
|
|
|
if (tw->w3doc){
|
|
url = tw->w3doc->szActualURL;
|
|
tw->iMimeCharSet = tw->w3doc->iMimeCharSet;
|
|
}
|
|
else {
|
|
url = (char *) HTList_objectAt(tw->history, tw->history_index);
|
|
tw->iMimeCharSet = (int) HTList_objectAt(tw->MimeHistory, tw->history_index);
|
|
}
|
|
|
|
if(fRefreshAll) /* Purge cache to refresh all loaded document */
|
|
{
|
|
Hash_FreeContents(&tw->doc_cache);
|
|
Hash_Init(&tw->doc_cache);
|
|
} else { /* Purget cache of current document */
|
|
ndx = Hash_Find(&tw->doc_cache, url, NULL, (void **)&tw->w3doc);
|
|
if(ndx != -1)
|
|
Hash_DeleteIndexedEntry(&tw->doc_cache, ndx);
|
|
}
|
|
|
|
/* Refresh current doc */
|
|
TW_LoadDocument( tw, url,
|
|
TW_LD_FL_AUTH_FAIL_CACHE_OK,
|
|
NULL, tw->request->referer);
|
|
}
|
|
|
|
static BOOL CALLBACK LanguagesDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
HDC hDC;
|
|
UINT i, j;
|
|
char szPropFontName[DESC_MAX];
|
|
char szFixedFontName[DESC_MAX];
|
|
LPLANGUAGE lpLang;
|
|
static HWND hwndList, hwndMime;
|
|
static struct EnumFontTypeInfo EnumFontStuff;
|
|
static int idxList;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
char sz[DESC_MAX];
|
|
char szValue[DESC_MAX];
|
|
char szData[DESC_MAX];
|
|
|
|
lpLang = (LPLANGUAGE)GlobalLock(hLang);
|
|
|
|
if (!hLang || !lpLang)
|
|
break;
|
|
if (GetACP()!=1252)
|
|
SetShellFont(hDlg);
|
|
hwndList = GetDlgItem(hDlg, IDC_LANG_SCRIPTLIST);
|
|
hwndMime = GetDlgItem(hDlg, IDC_LANG_MIMECHARSET);
|
|
for (i = 0; i < uLangBuff; i++)
|
|
{
|
|
GetAtomName(lpLang[i].atmScript, szValue, DESC_MAX);
|
|
ListBox_SetItemData(hwndList, ListBox_AddString(hwndList, szValue), i);
|
|
if (aMimeCharSet[gPrefs.iMimeCharSet].CodePage == lpLang[i].CodePage)
|
|
lstrcpy(szData, szValue);
|
|
|
|
for (j = 0; aMimeCharSet[j].CodePage != 0; j++)
|
|
{
|
|
if (aMimeCharSet[j].CodePage == lpLang[i].CodePage)
|
|
{
|
|
wsprintf(sz, "%s (%s)", szValue, aMimeCharSet[j].Mime_str);
|
|
ComboBox_SetItemData(hwndMime, ComboBox_AddString(hwndMime, sz), j);
|
|
}
|
|
}
|
|
}
|
|
wsprintf(sz, "%s (%s)", szData, aMimeCharSet[gPrefs.iMimeCharSet].Mime_str);
|
|
ComboBox_SelectString(hwndMime, -1, sz);
|
|
idxList = ListBox_GetItemData(hwndList, ListBox_SelectString(hwndList, -1, szData));
|
|
EnumFontStuff.hwndProp = GetDlgItem(hDlg, IDC_LANG_PROPFONT);
|
|
EnumFontStuff.hwndFixed = GetDlgItem(hDlg, IDC_LANG_FIXEDFONT);
|
|
EnumFontStuff.Count = 0;
|
|
EnumFontStuff.SelProp = 0;
|
|
EnumFontStuff.SelFixed = 0;
|
|
if (hDC = GetDC(hDlg))
|
|
{
|
|
LOGFONT lf;
|
|
CHARSETINFO cs;
|
|
|
|
TranslateCharsetInfo((LPDWORD)lpLang[idxList].CodePage, &cs, TCI_SRCCODEPAGE);
|
|
lf.lfFaceName[0] = '\0';
|
|
lf.lfPitchAndFamily = 0;
|
|
lf.lfCharSet = cs.ciCharset;
|
|
EnumFontFamiliesEx(hDC, &lf, (FONTENUMPROC)STY_EnumFontsProc, (LPARAM)&EnumFontStuff, 0);
|
|
GetAtomName(lpLang[idxList].atmFixedFontName, szFixedFontName, DESC_MAX);
|
|
GetAtomName(lpLang[idxList].atmPropFontName, szPropFontName, DESC_MAX);
|
|
EnumFontStuff.SelFixed = ComboBox_SelectString(EnumFontStuff.hwndFixed, -1, szFixedFontName);
|
|
EnumFontStuff.SelProp = ComboBox_SelectString(EnumFontStuff.hwndProp, -1, szPropFontName);
|
|
ReleaseDC(hDlg, hDC);
|
|
}
|
|
GlobalUnlock(hLang);
|
|
break;
|
|
}
|
|
case WM_DESTROY:
|
|
if (GetACP() != 1252)
|
|
DeleteShellFont(hDlg);
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
switch (((NMHDR FAR *)lParam)->code)
|
|
{
|
|
case PSN_QUERYCANCEL:
|
|
{
|
|
int i;
|
|
|
|
SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);
|
|
gPrefs = *p_sav_gPrefs;
|
|
lpLang = (LPLANGUAGE)GlobalLock(hLang);
|
|
for (i = 0; i < uLangBuff; i++)
|
|
{
|
|
char szKey[DESC_MAX], sz[DESC_MAX];
|
|
|
|
if (lpLang[i].dwStatus & LANG_SETFONT)
|
|
{
|
|
wsprintf(szKey, "Languages\\%d", lpLang[i].CodePage);
|
|
LoadString(wg.hInstance, RES_STRING_IEFIXEDFONTDEF, sz, DESC_MAX);
|
|
regGetPrivateProfileString(szKey, "IEFixedFontName", sz, sz, DESC_MAX, HKEY_CURRENT_USER);
|
|
if (lpLang[i].atmFixedFontName)
|
|
DeleteAtom(lpLang[i].atmFixedFontName);
|
|
lpLang[i].atmFixedFontName = AddAtom(sz);
|
|
LoadString(wg.hInstance, RES_STRING_IEPROPFONTDEF, sz, DESC_MAX);
|
|
regGetPrivateProfileString(szKey, "IEPropFontName", sz, sz, DESC_MAX, HKEY_CURRENT_USER);
|
|
if (lpLang[i].atmPropFontName)
|
|
DeleteAtom(lpLang[i].atmPropFontName);
|
|
lpLang[i].atmPropFontName = AddAtom(sz);
|
|
lpLang[i].dwStatus &= ~LANG_SETFONT;
|
|
}
|
|
}
|
|
GlobalUnlock(hLang);
|
|
break;
|
|
}
|
|
case PSN_KILLACTIVE:
|
|
SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);
|
|
break;
|
|
|
|
case PSN_RESET:
|
|
UpdateAllWindows();
|
|
return FALSE;
|
|
|
|
case PSN_APPLY:
|
|
{
|
|
int i, idx;
|
|
BOOL bNeedChangeFont = FALSE;
|
|
struct Mwin * tw = GetPrivateData(GetParent(GetParent(hDlg)));
|
|
|
|
lpLang = (LPLANGUAGE)GlobalLock(hLang);
|
|
idx = ComboBox_GetItemData(hwndMime, ComboBox_GetCurSel(hwndMime));
|
|
if (idx != gPrefs.iMimeCharSet)
|
|
{
|
|
regWritePrivateProfileInt("Languages", "Default_MimeCharSet", idx, HKEY_CURRENT_USER);
|
|
p_sav_gPrefs->iMimeCharSet = gPrefs.iMimeCharSet = idx;
|
|
}
|
|
for (i = 0; i < uLangBuff; i++)
|
|
{
|
|
char szKey[DESC_MAX], sz[DESC_MAX];
|
|
|
|
if (lpLang[i].dwStatus & LANG_SETFONT)
|
|
{
|
|
wsprintf(szKey, "Languages\\%d", lpLang[i].CodePage);
|
|
GetAtomName(lpLang[i].atmFixedFontName, sz, DESC_MAX);
|
|
regWritePrivateProfileString(szKey, "IEFixedFontName", sz, HKEY_CURRENT_USER);
|
|
GetAtomName(lpLang[i].atmPropFontName, sz, DESC_MAX);
|
|
regWritePrivateProfileString(szKey, "IEPropFontName", sz, HKEY_CURRENT_USER);
|
|
lpLang[i].dwStatus &= ~LANG_SETFONT;
|
|
bNeedChangeFont = TRUE;
|
|
}
|
|
}
|
|
GlobalUnlock(hLang);
|
|
if (bNeedChangeFont)
|
|
{
|
|
STY_ChangeFonts();
|
|
ReformatAllWindows();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam))
|
|
{
|
|
case IDC_LANG_ADD:
|
|
{
|
|
char szURL[MAX_URL_STRING+1];
|
|
|
|
struct Mwin * tw = GetPrivateData(GetParent(GetParent(hDlg)));
|
|
regGetPrivateProfileString("Main", "Default_Download_URL", "http://www.microsoft.com", szURL, MAX_URL_STRING+1, HKEY_LOCAL_MACHINE);
|
|
TW_LoadDocument(tw, szURL, TW_LD_FL_RECORD | TW_LD_FL_AUTH_FAIL_CACHE_OK, NULL, tw->request->referer);
|
|
PostMessage(GetParent(hDlg), WM_COMMAND, IDCANCEL, 0);
|
|
break;
|
|
}
|
|
case IDC_LANG_SCRIPTLIST:
|
|
{
|
|
int idx;
|
|
|
|
if (HIWORD(wParam) == LBN_SELCHANGE)
|
|
{
|
|
idx = ListBox_GetItemData(hwndList, ListBox_GetCurSel(hwndList));
|
|
if (idx == idxList)
|
|
break;
|
|
|
|
// Clear font ComboBoxes
|
|
EnumFontStuff.Count = 0;
|
|
EnumFontStuff.SelProp = 0;
|
|
EnumFontStuff.SelFixed = 0;
|
|
ComboBox_ResetContent(EnumFontStuff.hwndFixed);
|
|
ComboBox_ResetContent(EnumFontStuff.hwndProp);
|
|
if (hDC = GetDC(hDlg))
|
|
{
|
|
LOGFONT lf;
|
|
CHARSETINFO cs;
|
|
|
|
lpLang = (LPLANGUAGE)GlobalLock(hLang);
|
|
TranslateCharsetInfo((LPDWORD)lpLang[idx].CodePage, &cs, TCI_SRCCODEPAGE);
|
|
lf.lfFaceName[0] = '\0';
|
|
lf.lfPitchAndFamily = 0;
|
|
lf.lfCharSet = cs.ciCharset;
|
|
EnumFontFamiliesEx(hDC, &lf, (FONTENUMPROC)STY_EnumFontsProc, (LPARAM)&EnumFontStuff, 0);
|
|
GetAtomName(lpLang[idx].atmFixedFontName, szFixedFontName, DESC_MAX);
|
|
GetAtomName(lpLang[idx].atmPropFontName, szPropFontName, DESC_MAX);
|
|
EnumFontStuff.SelFixed = ComboBox_SelectString(EnumFontStuff.hwndFixed, -1, szFixedFontName);
|
|
EnumFontStuff.SelProp = ComboBox_SelectString(EnumFontStuff.hwndProp, -1, szPropFontName);
|
|
GlobalUnlock(hLang);
|
|
ReleaseDC(hDlg, hDC);
|
|
}
|
|
idxList = idx;
|
|
}
|
|
break;
|
|
}
|
|
case IDC_LANG_FIXEDFONT:
|
|
{
|
|
if (HIWORD(wParam) == CBN_SELCHANGE &&
|
|
EnumFontStuff.SelFixed != ComboBox_GetCurSel(EnumFontStuff.hwndFixed))
|
|
{
|
|
int idx;
|
|
|
|
idx = ComboBox_GetCurSel(EnumFontStuff.hwndFixed);
|
|
if (idx != EnumFontStuff.SelFixed)
|
|
{
|
|
lpLang = (LPLANGUAGE)GlobalLock(hLang);
|
|
ComboBox_GetLBText(EnumFontStuff.hwndFixed, idx, szFixedFontName);
|
|
if (lpLang[idxList].atmFixedFontName)
|
|
DeleteAtom(lpLang[idxList].atmFixedFontName);
|
|
lpLang[idxList].atmFixedFontName = AddAtom(szFixedFontName);
|
|
lpLang[idxList].dwStatus |= LANG_SETFONT;
|
|
GlobalUnlock(hLang);
|
|
EnumFontStuff.SelFixed = idx;
|
|
}
|
|
SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L);
|
|
}
|
|
break;
|
|
}
|
|
case IDC_LANG_PROPFONT:
|
|
{
|
|
if (HIWORD(wParam) == CBN_SELCHANGE &&
|
|
EnumFontStuff.SelProp != ComboBox_GetCurSel(EnumFontStuff.hwndProp))
|
|
{
|
|
int idx;
|
|
|
|
idx = ComboBox_GetCurSel(EnumFontStuff.hwndProp);
|
|
if (idx != EnumFontStuff.SelProp)
|
|
{
|
|
lpLang = (LPLANGUAGE)GlobalLock(hLang);
|
|
ComboBox_GetLBText(EnumFontStuff.hwndProp, idx, szPropFontName);
|
|
if (lpLang[idxList].atmPropFontName)
|
|
DeleteAtom(lpLang[idxList].atmPropFontName);
|
|
lpLang[idxList].atmPropFontName = AddAtom(szPropFontName);
|
|
lpLang[idxList].dwStatus |= LANG_SETFONT;
|
|
GlobalUnlock(hLang);
|
|
EnumFontStuff.SelProp = idx;
|
|
}
|
|
SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L);
|
|
}
|
|
break;
|
|
}
|
|
case IDC_LANG_MIMECHARSET:
|
|
{
|
|
if (HIWORD(wParam) == CBN_SELCHANGE)
|
|
{
|
|
char sz[DESC_MAX];
|
|
int i, idx, iMimeCharSet;
|
|
|
|
iMimeCharSet = ComboBox_GetItemData(hwndMime, ComboBox_GetCurSel(hwndMime));
|
|
if (gPrefs.iMimeCharSet != iMimeCharSet)
|
|
SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L);
|
|
lpLang = (LPLANGUAGE)GlobalLock(hLang);
|
|
for (i = 0; i < uLangBuff; i++)
|
|
{
|
|
if (aMimeCharSet[iMimeCharSet].CodePage == lpLang[i].CodePage)
|
|
{
|
|
GetAtomName(lpLang[i].atmScript, sz, DESC_MAX);
|
|
break;
|
|
}
|
|
}
|
|
idx = ListBox_GetItemData(hwndList, ListBox_SelectString(hwndList, -1, sz));
|
|
if (idx == idxList)
|
|
break;
|
|
|
|
// Clear font ComboBoxes
|
|
EnumFontStuff.Count = 0;
|
|
EnumFontStuff.SelProp = 0;
|
|
EnumFontStuff.SelFixed = 0;
|
|
ComboBox_ResetContent(EnumFontStuff.hwndFixed);
|
|
ComboBox_ResetContent(EnumFontStuff.hwndProp);
|
|
if (hDC = GetDC(hDlg))
|
|
{
|
|
LOGFONT lf;
|
|
CHARSETINFO cs;
|
|
|
|
TranslateCharsetInfo((LPDWORD)lpLang[idx].CodePage, &cs, TCI_SRCCODEPAGE);
|
|
lf.lfFaceName[0] = '\0';
|
|
lf.lfPitchAndFamily = 0;
|
|
lf.lfCharSet = cs.ciCharset;
|
|
EnumFontFamiliesEx(hDC, &lf, (FONTENUMPROC)STY_EnumFontsProc, (LPARAM)&EnumFontStuff, 0);
|
|
GetAtomName(lpLang[idx].atmFixedFontName, szFixedFontName, DESC_MAX);
|
|
GetAtomName(lpLang[idx].atmPropFontName, szPropFontName, DESC_MAX);
|
|
EnumFontStuff.SelFixed = ComboBox_SelectString(EnumFontStuff.hwndFixed, -1, szFixedFontName);
|
|
EnumFontStuff.SelProp = ComboBox_SelectString(EnumFontStuff.hwndProp, -1, szPropFontName);
|
|
ReleaseDC(hDlg, hDC);
|
|
}
|
|
GlobalUnlock(hLang);
|
|
idxList = idx;
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
#endif // FEATURE_INTL
|
|
|
|
|
|
/*
|
|
* N e w s P a g e D l g P r o c ()
|
|
*
|
|
* Routine: NewsPageDlgProc()
|
|
*
|
|
* Purpose: Dialog Proc for the News tab in the View.Options
|
|
* dialog.
|
|
*
|
|
*/
|
|
|
|
|
|
static BOOL CALLBACK NewsPageDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
NMHDR *lpnm;
|
|
char temp[256];
|
|
|
|
switch (uMsg) {
|
|
case WM_COMMAND:
|
|
switch (wParam) {
|
|
case IDC_NEWS_ONOFF:
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_SERVER), IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF) );
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_AUTHCHECK), IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF) && gPrefs.bNNTP_AuthAllowed);
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_USER), IsDlgButtonChecked(hDlg, IDC_NEWS_AUTHCHECK ) && IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF) && gPrefs.bNNTP_AuthAllowed);
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_PASS), IsDlgButtonChecked(hDlg, IDC_NEWS_AUTHCHECK ) && IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF) && gPrefs.bNNTP_AuthAllowed);
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_NAME), IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF) );
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_EMAIL), IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF) );
|
|
|
|
case IDC_NEWS_AUTHCHECK:
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_USER), IsDlgButtonChecked(hDlg, IDC_NEWS_AUTHCHECK ) && IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF) && gPrefs.bNNTP_AuthAllowed);
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_PASS), IsDlgButtonChecked(hDlg, IDC_NEWS_AUTHCHECK ) && IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF) && gPrefs.bNNTP_AuthAllowed);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_INITDIALOG:
|
|
/*Load initial values from registry*/
|
|
CheckDlgButton( hDlg, IDC_NEWS_ONOFF, gPrefs.bNNTP_Enabled );
|
|
SetDlgItemText( hDlg, IDC_NEWS_SERVER, gPrefs.szNNTP_Server );
|
|
SetDlgItemText( hDlg, IDC_NEWS_NAME, gPrefs.szNNTP_MailName );
|
|
SetDlgItemText( hDlg, IDC_NEWS_EMAIL, gPrefs.szNNTP_MailAddr );
|
|
|
|
if (!gPrefs.bNNTP_AuthAllowed && gPrefs.bNNTP_Use_Authorization) {
|
|
gPrefs.bNNTP_Use_Authorization = FALSE;
|
|
}
|
|
CheckDlgButton( hDlg, IDC_NEWS_AUTHCHECK, gPrefs.bNNTP_Use_Authorization );
|
|
SetDlgItemText( hDlg, IDC_NEWS_USER, gPrefs.szNNTP_UserId );
|
|
SetDlgItemText( hDlg, IDC_NEWS_PASS, gPrefs.szNNTP_Pass );
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_SERVER), IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF));
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_NAME), IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF));
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_EMAIL), IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF));
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_AUTHCHECK), IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF) && gPrefs.bNNTP_AuthAllowed);
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_USER), IsDlgButtonChecked(hDlg, IDC_NEWS_AUTHCHECK ) && IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF) && gPrefs.bNNTP_AuthAllowed);
|
|
EnableWindow( GetDlgItem( hDlg, IDC_NEWS_PASS), IsDlgButtonChecked(hDlg, IDC_NEWS_AUTHCHECK ) && IsDlgButtonChecked(hDlg, IDC_NEWS_ONOFF) && gPrefs.bNNTP_AuthAllowed);
|
|
return TRUE;
|
|
|
|
case WM_NOTIFY:
|
|
lpnm = (NMHDR *) lParam;
|
|
switch (lpnm->code) {
|
|
case PSN_QUERYCANCEL:
|
|
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
|
|
gPrefs = *p_sav_gPrefs;
|
|
return TRUE;
|
|
|
|
case PSN_KILLACTIVE:
|
|
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
|
|
return TRUE;
|
|
|
|
case PSN_RESET:
|
|
UpdateAllWindows();
|
|
break;
|
|
|
|
case PSN_APPLY:
|
|
/*
|
|
* Detect if any of the News settings changed
|
|
* so that we can signal the News protocol
|
|
* handler that a change has occured and
|
|
* that it should reset its connection if
|
|
* it has one open
|
|
*/
|
|
strcpy( temp, gPrefs.szNNTP_Server );
|
|
GetDlgItemText( hDlg, IDC_NEWS_SERVER, gPrefs.szNNTP_Server, 256 );
|
|
if (strcmp(temp, gPrefs.szNNTP_Server) != 0)
|
|
bNNTP_Changed = TRUE;
|
|
|
|
strcpy(temp, gPrefs.szNNTP_UserId );
|
|
GetDlgItemText( hDlg, IDC_NEWS_USER, gPrefs.szNNTP_UserId, 256 );
|
|
if (strcmp(temp, gPrefs.szNNTP_UserId) != 0)
|
|
bNNTP_Changed = TRUE;
|
|
|
|
strcpy(temp, gPrefs.szNNTP_Pass);
|
|
GetDlgItemText( hDlg, IDC_NEWS_PASS, gPrefs.szNNTP_Pass, 256 );
|
|
if (strcmp(temp, gPrefs.szNNTP_Pass) != 0)
|
|
bNNTP_Changed = TRUE;
|
|
|
|
strcpy(temp, gPrefs.szNNTP_MailName);
|
|
GetDlgItemText( hDlg, IDC_NEWS_NAME, gPrefs.szNNTP_MailName, 256 );
|
|
if (strcmp(temp, gPrefs.szNNTP_MailName) != 0)
|
|
bNNTP_Changed = TRUE;
|
|
|
|
strcpy(temp, gPrefs.szNNTP_MailAddr);
|
|
GetDlgItemText( hDlg, IDC_NEWS_EMAIL, gPrefs.szNNTP_MailAddr, 256 );
|
|
if (strcmp(temp, gPrefs.szNNTP_MailAddr) != 0)
|
|
bNNTP_Changed = TRUE;
|
|
|
|
|
|
if (gPrefs.bNNTP_Use_Authorization != IsDlgButtonChecked(hDlg,IDC_NEWS_AUTHCHECK)) {
|
|
gPrefs.bNNTP_Use_Authorization = ! gPrefs.bNNTP_Use_Authorization;
|
|
bNNTP_Changed = TRUE;
|
|
}
|
|
if (gPrefs.bNNTP_Enabled != IsDlgButtonChecked(hDlg,IDC_NEWS_ONOFF)) {
|
|
/*
|
|
* News Enabled changed...if it went from on to off
|
|
* the de-register protocol handler and fix registry
|
|
*
|
|
* If it went from off to on, the re-register and
|
|
* fix registry
|
|
*/
|
|
if (gPrefs.bNNTP_Enabled) {
|
|
HTUnregisterProtocol(&HTNews);
|
|
HTUnregisterProtocol(&HTNewsPost);
|
|
HTUnregisterProtocol(&HTNewsFollowup);
|
|
InstallRegSet( &NewsDefaultRegSet );
|
|
} else {
|
|
HTRegisterProtocol(&HTNews);
|
|
HTRegisterProtocol(&HTNewsPost);
|
|
HTRegisterProtocol(&HTNewsFollowup);
|
|
InstallRegSet( &NewsEnabledRegSet );
|
|
}
|
|
gPrefs.bNNTP_Enabled = ! gPrefs.bNNTP_Enabled;
|
|
bNNTP_Changed = TRUE;
|
|
}
|
|
|
|
UpdateAllWindows();
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_HELP: // F1 Key
|
|
WinHelp( ((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
HELP_WM_HELP, (DWORD)(LPSTR)mapNewsCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
WinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
HELP_CONTEXTMENU, (DWORD)(LPSTR)mapNewsCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_ENTERIDLE:
|
|
main_EnterIdle(hDlg, wParam);
|
|
return 0;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
|
|
|
|
static BOOL DefaultDialogHandler(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam){
|
|
switch (uMsg) {
|
|
case WM_NOTIFY: {
|
|
NMHDR *lpnm = (NMHDR *) lParam;
|
|
|
|
switch (lpnm->code) {
|
|
case PSN_QUERYCANCEL:
|
|
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
|
|
return TRUE;
|
|
|
|
case PSN_KILLACTIVE:
|
|
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
|
|
return TRUE;
|
|
|
|
case PSN_RESET:
|
|
UpdateAllWindows();
|
|
break;
|
|
|
|
case PSN_APPLY: {
|
|
UpdateAllWindows();
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_HELP: // F1
|
|
WinHelp( ((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
HELP_WM_HELP, (DWORD)(LPSTR)mapCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
WinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
HELP_CONTEXTMENU, (DWORD)(LPSTR)mapCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_ENTERIDLE:
|
|
main_EnterIdle(hDlg, wParam);
|
|
return 0;
|
|
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
static void FileTimeToString(const FILETIME *pftUTC, char *pBuf, int nBuf, BOOL fTime){
|
|
SYSTEMTIME st;
|
|
FILETIME ft;
|
|
char szTmp[64];
|
|
|
|
FileTimeToLocalFileTime(pftUTC, &ft);
|
|
FileTimeToSystemTime(&ft, &st);
|
|
|
|
GetDateFormatA(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, pBuf, nBuf);
|
|
|
|
if (fTime){
|
|
lstrcat(pBuf, " ");
|
|
GetTimeFormatA(LOCALE_USER_DEFAULT, 0, &st, NULL, szTmp, sizeof(szTmp));
|
|
lstrcat(pBuf, szTmp);
|
|
}
|
|
}
|
|
|
|
static void DCacheTimeToFileTime(DCACHETIME *pdt, FILETIME *pft){
|
|
SYSTEMTIME st;
|
|
st.wMilliseconds = 0;
|
|
st.wSecond = pdt->uSecs;
|
|
st.wMinute = pdt->uMins;
|
|
st.wHour = pdt->uHrs;
|
|
st.wDay = pdt->uDate;
|
|
st.wDayOfWeek = 8;
|
|
st.wMonth = pdt->uMonth;
|
|
st.wYear = pdt->uYear;
|
|
SystemTimeToFileTime(&st, pft);
|
|
}
|
|
|
|
|
|
static BOOL CALLBACK PropertiesGeneralDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam){
|
|
BY_HANDLE_FILE_INFORMATION fi;
|
|
PPropSheetVars ppsv;
|
|
HWND hwnd;
|
|
char rgBuf[1+(MAX_URL_STRING>MAX_PATH_LEN?MAX_URL_STRING:MAX_PATH_LEN)];
|
|
char *pFileName, *pBuf;
|
|
int z;
|
|
SHFILEINFO sfi;
|
|
HANDLE hFile;
|
|
DWORD dwReturn;
|
|
BOOL fFromCache;
|
|
BOOL fReturn = FALSE;
|
|
DCACHETIME dctLastModif;
|
|
FILETIME fileTime;
|
|
HICON hPropIcon;
|
|
char *pszRealURL;
|
|
|
|
switch (uMsg) {
|
|
/*we must destroy the structure for our vars, only done in here*/
|
|
case WM_DESTROY:
|
|
ppsv = (PPropSheetVars) ((PROPSHEETPAGE*)GetWindowLong(hDlg, DWL_USER))->lParam;
|
|
if (ppsv){
|
|
if (ppsv->dwFlags & PROP_SHEET_VARS_FLAGS_FREE_URL) GTR_FREE(ppsv->szURL);
|
|
GTR_FREE(ppsv);
|
|
}
|
|
((PROPSHEETPAGE*)GetWindowLong(hDlg, DWL_USER))->lParam = 0;
|
|
#ifdef FEATURE_INTL
|
|
if (GetACP()!=1252)
|
|
DeleteShellFont(hDlg);
|
|
#endif
|
|
break;
|
|
|
|
case WM_INITDIALOG:
|
|
#ifdef FEATURE_INTL
|
|
if (GetACP()!=1252)
|
|
SetShellFont(hDlg);
|
|
#endif
|
|
/*store this incase we add stuff and need tw later*/
|
|
SetWindowLong (hDlg, DWL_USER, lParam);
|
|
ppsv = (PPropSheetVars) ((PROPSHEETPAGE*)lParam)->lParam;
|
|
/*copy values into page*/
|
|
// Was Crashing, so added check for szURL
|
|
if (ppsv && ppsv->szURL){
|
|
/*
|
|
* If this is a NNTP News URL then we special case this
|
|
* stuff right here.
|
|
*/
|
|
if (strncmp(ppsv->szURL, "news:", 5) == 0) {
|
|
if (GetURLIcon(ppsv->szURL, (PHICON) &hPropIcon))
|
|
SendDlgItemMessage(hDlg, IDI_PROPG, STM_SETICON, (WPARAM) hPropIcon, 0);
|
|
if (ppsv->szTitle)
|
|
SetWindowText(GetDlgItem(hDlg, IDT_PROPG_TITLE), ppsv->szTitle);
|
|
if (pBuf = ProtocolFriendlyName(ProtocolIdentify(ppsv->szURL))) {
|
|
if (0==memcmp(pBuf, "URL:",4)) z = 4;
|
|
else z = 0;
|
|
SetWindowText(GetDlgItem(hDlg, IDT_PROPG_PROTOCOL), pBuf+z);
|
|
GTR_FREE(pBuf);
|
|
}
|
|
hwnd = GetDlgItem(hDlg, IDT_PROPG_TYPE);
|
|
SetWindowText(hwnd, "NNTP News");
|
|
|
|
hwnd = GetDlgItem(hDlg, IDT_PROPG_URL);
|
|
SetWindowText (hwnd, ppsv->szURL);
|
|
fReturn = TRUE;
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
/*get file that's mapped to our hd*/
|
|
GTR_FREE(GetResolvedURL(ppsv->szURL, NULL, NULL, NULL, &dctLastModif, TRUE));
|
|
pszRealURL = GTR_strdup(ppsv->szURL);
|
|
if (pszRealURL)
|
|
{
|
|
char *pszTemp;
|
|
pszTemp = strchr(pszRealURL,'#');
|
|
if ( pszTemp )
|
|
*pszTemp = '\0';
|
|
|
|
pFileName = PszGetDCachePath(pszRealURL, NULL, NULL);
|
|
GTR_FREE(pszRealURL);
|
|
}
|
|
else
|
|
{
|
|
pFileName = PszGetDCachePath(ppsv->szURL, NULL, NULL);
|
|
}
|
|
|
|
fFromCache = TRUE;
|
|
if (NULL == pFileName) {
|
|
// BUG BUG this + 5 will not work for anything but http: and news:
|
|
// mailto:, ftp: are different than 5.
|
|
pFileName = ppsv->szURL + 5;
|
|
fFromCache = FALSE;
|
|
}
|
|
|
|
/*icon*/
|
|
dwReturn = SHGetFileInfo(pFileName, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
|
|
if ( ! dwReturn )
|
|
{
|
|
if ( GetURLIcon(ppsv->szURL, (PHICON) &hPropIcon) )
|
|
SendDlgItemMessage(hDlg, IDI_PROPG, STM_SETICON, (WPARAM) (HICON) hPropIcon, 0);
|
|
}
|
|
else
|
|
SendDlgItemMessage(hDlg, IDI_PROPG, STM_SETICON, (WPARAM) (HICON) sfi.hIcon, 0);
|
|
|
|
|
|
/*title if available, else friendly name*/
|
|
hwnd = GetDlgItem(hDlg, IDT_PROPG_TITLE);
|
|
if (ppsv->szTitle){
|
|
SetWindowText(hwnd, ppsv->szTitle);
|
|
}
|
|
else{
|
|
strncpy(rgBuf, ppsv->szURL, sizeof(rgBuf));
|
|
make_URL_HumanReadable(rgBuf, ppsv->szURL, FALSE);
|
|
SetWindowText(hwnd, rgBuf);
|
|
}
|
|
|
|
/*get protocol friendly name*/
|
|
hwnd = GetDlgItem(hDlg, IDT_PROPG_PROTOCOL);
|
|
pBuf = ProtocolFriendlyName(ProtocolIdentify(ppsv->szURL));
|
|
if (pBuf){
|
|
if (0==memcmp(pBuf, "URL:",4)) z = 4;
|
|
else z = 0;
|
|
SetWindowText(hwnd, pBuf+z);
|
|
GTR_FREE(pBuf);
|
|
}
|
|
|
|
/*get document type*/
|
|
hwnd = GetDlgItem(hDlg, IDT_PROPG_TYPE);
|
|
dwReturn = SHGetFileInfo(pFileName, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
|
SetWindowText(hwnd, sfi.szTypeName);
|
|
|
|
/*url*/
|
|
hwnd = GetDlgItem(hDlg, IDT_PROPG_URL);
|
|
SetWindowText (hwnd, ppsv->szURL);
|
|
|
|
/*sorta open the file so we can get details*/
|
|
hFile = CreateFile(pFileName, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
|
|
if (hFile && GetFileInformationByHandle(hFile, &fi)){
|
|
wsprintf(rgBuf, "%dK (%d bytes)", (fi.nFileSizeLow+1023)/1024, fi.nFileSizeLow);
|
|
hwnd = GetDlgItem(hDlg, IDT_PROPG_SIZE);
|
|
SetWindowText (hwnd, rgBuf);
|
|
|
|
FileTimeToString(&fi.ftCreationTime, rgBuf, sizeof(rgBuf), TRUE);
|
|
hwnd = GetDlgItem(hDlg, IDT_PROPG_CREATED);
|
|
SetWindowText (hwnd, rgBuf);
|
|
|
|
FileTimeToString(&fi.ftLastWriteTime, rgBuf, sizeof(rgBuf), TRUE);
|
|
hwnd = GetDlgItem(hDlg, IDT_PROPG_MODIFIED);
|
|
SetWindowText (hwnd, rgBuf);
|
|
|
|
if (fFromCache){
|
|
DCacheTimeToFileTime(&dctLastModif, &fileTime);
|
|
FileTimeToString(&fileTime, rgBuf, sizeof(rgBuf), TRUE);
|
|
hwnd = GetDlgItem(hDlg, IDT_PROPG_UPDATED);
|
|
SetWindowText (hwnd, rgBuf);
|
|
}
|
|
else{
|
|
ShowWindow(GetDlgItem(hDlg, IDT_PROPG_UPDATED), SW_HIDE);
|
|
ShowWindow(GetDlgItem(hDlg, IDT_PROPG_UPDATED_LABEL), SW_HIDE);
|
|
}
|
|
}
|
|
else {
|
|
/*We can't get to this file, hide these fields*/
|
|
for (z = IDT_SEP_SIZE; z<=IDT_PROPG_UPDATED;++z){
|
|
hwnd = GetDlgItem(hDlg, z);
|
|
ShowWindow(hwnd, SW_HIDE);
|
|
}
|
|
}
|
|
|
|
/*cleanup this stuff*/
|
|
if (hFile) CloseHandle(hFile);
|
|
if (fFromCache) GTR_FREE(pFileName);
|
|
}
|
|
fReturn = TRUE;
|
|
break;
|
|
|
|
case WM_HELP: // F1
|
|
WinHelp( ((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
HELP_WM_HELP, (DWORD)(LPSTR)mapPropsCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
WinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
HELP_CONTEXTMENU, (DWORD)(LPSTR)mapPropsCtrlToContextIds);
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
return fReturn ? TRUE : DefaultDialogHandler(hDlg,uMsg,wParam,lParam);
|
|
}
|
|
|
|
static BOOL CALLBACK PropertiesSecurityDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam){
|
|
PPropSheetVars ppsv;
|
|
FILETIME ft;
|
|
eProtocol ep;
|
|
HWND hwnd;
|
|
char rgBuf[2048];
|
|
char rgBufSmall[128];
|
|
int z;
|
|
|
|
switch (uMsg) {
|
|
case WM_INITDIALOG:
|
|
/*store this incase we add stuff and need tw later*/
|
|
SetWindowLong (hDlg, DWL_USER, lParam);
|
|
ppsv = (PPropSheetVars) ((PROPSHEETPAGE*)lParam)->lParam;
|
|
/*copy values into page*/
|
|
if (ppsv){
|
|
char rgBuf2[640]; // for loading localized strs
|
|
int nChars;
|
|
|
|
if ( ppsv->szURL )
|
|
ep = ProtocolIdentify(ppsv->szURL);
|
|
|
|
if (!ppsv->szURL || PROT_HTTPS == ep ){
|
|
#ifdef HTTPS_ACCESS_TYPE
|
|
#include "..\..\security\ssl\code\cert.h"
|
|
CertParsed cp;
|
|
const char cszStrCRLF[] = " %s\r\n";
|
|
const char cszCRLF[] = "\r\n";
|
|
|
|
if (ppsv->pCert){
|
|
if(CertParse(&cp, ppsv->pCert, ppsv->nCert)){
|
|
DosDateTimeToFileTime(cp.wDateStart,0,&ft);
|
|
FileTimeToString(&ft, rgBufSmall, sizeof(rgBufSmall), FALSE);
|
|
// load Serial, Hash Alg, and Date Start String
|
|
nChars = LoadString(wg.hInstance, RES_STRING_SERIAL_HASH_DATE,
|
|
rgBuf2, sizeof(rgBuf2)-1);
|
|
rgBuf2[nChars]='\0';
|
|
|
|
wsprintf(rgBuf, rgBuf2,
|
|
cp.szSerialNumber,cp.szHashAlg,rgBufSmall);
|
|
DosDateTimeToFileTime(cp.wDateEnd,0,&ft);
|
|
FileTimeToString(&ft, rgBufSmall, sizeof(rgBufSmall), FALSE);
|
|
|
|
// load Date End and Issuer Info String
|
|
nChars = LoadString(wg.hInstance, RES_STRING_DATE_ISSUER,
|
|
rgBuf2, sizeof(rgBuf2)-1);
|
|
rgBuf2[nChars]='\0';
|
|
|
|
wsprintf(rgBuf+strlen(rgBuf),rgBuf2, rgBufSmall);
|
|
for (z=0;z<cp.nIssuer;++z) wsprintf(rgBuf+strlen(rgBuf),cszStrCRLF,cp.pszIssuer[z]);
|
|
nChars = strlen(rgBuf);
|
|
GTR_formatmsg (RES_STRING_SUBJECT_INFO, rgBuf+nChars, sizeof(rgBuf)-nChars);
|
|
wsprintf(rgBuf+strlen(rgBuf),cszCRLF);
|
|
for (z=0;z<cp.nSubject;++z) wsprintf(rgBuf+strlen(rgBuf),cszStrCRLF,cp.pszSubject[z]);
|
|
rgBuf[strlen(rgBuf)] = 0;
|
|
CertFree(&cp);
|
|
}
|
|
else GTR_formatmsg (RES_STRING_CERT_NOT_PARSED,rgBuf,sizeof(rgBuf));
|
|
}
|
|
else GTR_formatmsg (RES_STRING_CERT_NOT_AVAIL, rgBuf,sizeof(rgBuf));
|
|
hwnd = GetDlgItem(hDlg, IDT_PROPS_DESC);
|
|
SetFocus(hDlg);
|
|
SetWindowText(hwnd, rgBuf);
|
|
#endif
|
|
}
|
|
else{
|
|
hwnd = GetDlgItem(hDlg, IDT_PROPS_DESC);
|
|
GTR_formatmsg (RES_STRING_NO_CERT_FOR_DOC, rgBuf,sizeof(rgBuf));
|
|
SetFocus(hDlg);
|
|
SetWindowText(hwnd, rgBuf);
|
|
}
|
|
}
|
|
return TRUE;
|
|
|
|
case WM_COMMAND:
|
|
if ( HIWORD(wParam) == EN_SETFOCUS && LOWORD(wParam) == IDT_PROPS_DESC)
|
|
{
|
|
ppsv = (PPropSheetVars) ((PROPSHEETPAGE*)GetWindowLong(hDlg, DWL_USER))->lParam;
|
|
ASSERT(ppsv);
|
|
if ( !(ppsv->dwFlags & PROP_SHEET_VARS_FLAGS_UNSELECTED_EDITBOX) )
|
|
{
|
|
// clear any selection
|
|
SendDlgItemMessage(hDlg,IDT_PROPS_DESC,EM_SETSEL,(WPARAM) (INT)-1,0);
|
|
ppsv->dwFlags |= PROP_SHEET_VARS_FLAGS_UNSELECTED_EDITBOX;
|
|
return TRUE;
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
case WM_HELP: // F1
|
|
WinHelp( ((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
HELP_WM_HELP, (DWORD)(LPSTR)mapPropsCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
WinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
HELP_CONTEXTMENU, (DWORD)(LPSTR)mapPropsCtrlToContextIds);
|
|
break;
|
|
|
|
}
|
|
return DefaultDialogHandler(hDlg,uMsg,wParam,lParam);
|
|
}
|
|
|
|
#ifdef FEATURE_VRML_AFTER_BETA
|
|
|
|
// ProperitesVrmlDlgProc - A Callback function for the child dialog proc
|
|
// that controls the VRML properties tab.
|
|
//
|
|
static BOOL CALLBACK PropertiesVrmlDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam){
|
|
PPropSheetVars ppsv;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
/*store this incase we add stuff and need tw later*/
|
|
SetWindowLong (hDlg, DWL_USER, lParam);
|
|
ppsv = (PPropSheetVars) ((PROPSHEETPAGE*)lParam)->lParam;
|
|
/*copy values into page*/
|
|
return TRUE;
|
|
}
|
|
return DefaultDialogHandler(hDlg,uMsg,wParam,lParam);
|
|
}
|
|
#endif
|
|
|
|
|
|
#define MAX_OPTION_PAGES 8
|
|
|
|
static BOOL CALLBACK AddPropSheetPageCallback(HPROPSHEETPAGE hpage,
|
|
LPARAM lParam)
|
|
{
|
|
BOOL bResult;
|
|
|
|
PROPSHEETHEADER FAR *ppsh = (PROPSHEETHEADER FAR *)lParam;
|
|
|
|
bResult = (ppsh->nPages < MAX_OPTION_PAGES);
|
|
|
|
if (bResult)
|
|
ppsh->phpage[ppsh->nPages++] = hpage;
|
|
|
|
return(bResult);
|
|
}
|
|
|
|
static void DestroyPropertySheets(LPPROPSHEETHEADER ppsHeader)
|
|
{
|
|
UINT uFreeIndex;
|
|
|
|
for (uFreeIndex = 0; uFreeIndex < ppsHeader->nPages; uFreeIndex++)
|
|
DestroyPropertySheetPage(ppsHeader->phpage[uFreeIndex]);
|
|
|
|
return;
|
|
}
|
|
|
|
void CALLBACK PropSheet_TimerProc(HWND hwnd,UINT uMsg,UINT idEvent, DWORD dwTime)
|
|
{
|
|
main_EnterIdle(wg.hWndHidden, 0);
|
|
}
|
|
|
|
|
|
|
|
typedef struct tagPropSheet{
|
|
HPROPSHEETPAGE hOptPage[MAX_OPTION_PAGES]; // array to hold handles to pages
|
|
PROPSHEETPAGE psPage; // struct used to create prop sheet pages
|
|
PROPSHEETHEADER psHeader; // struct used to run property sheet
|
|
} PropSheet, *PPropSheet;
|
|
|
|
void PropSheetInit(PPropSheet pps, HWND hwnd, int nCaptionRes, char *pCaption, int nCaption, LPARAM lParam){
|
|
int i;
|
|
|
|
/*Initialize vars common to these multi-page dialogs*/
|
|
// Init color picker custom colors to innocuous grey, since we
|
|
// don't let customer create custom colors.
|
|
for ( i = 0; i < nCustomColors; i++ ) g_CustomColors[i] = RGB(192,192,192);
|
|
//BUGBUG 08-Apr-1995 bens Should use light grey definition instead of RGB value
|
|
|
|
cxEdge = GetSystemMetrics(SM_CXEDGE);
|
|
cyEdge = GetSystemMetrics(SM_CYEDGE);
|
|
// zero out structures
|
|
memset(&pps->hOptPage, 0,sizeof(pps->hOptPage));
|
|
memset(&pps->psPage, 0,sizeof(pps->psPage));
|
|
memset(&pps->psHeader, 0,sizeof(pps->psHeader));
|
|
|
|
// fill out property sheet header struct
|
|
pps->psHeader.dwSize = sizeof(pps->psHeader);
|
|
pps->psHeader.hwndParent = hwnd;
|
|
pps->psHeader.hInstance = wg.hInstance;
|
|
pps->psHeader.phpage = pps->hOptPage;
|
|
pps->psHeader.pszCaption = GTR_formatmsg(nCaptionRes,pCaption,nCaption);
|
|
|
|
// fill out common data property sheet page struct
|
|
pps->psPage.dwSize = sizeof(pps->psPage);
|
|
pps->psPage.hInstance = wg.hInstance;
|
|
pps->psPage.lParam = lParam;
|
|
}
|
|
|
|
|
|
#define SERVICE_INTERVAL 100
|
|
|
|
static VOID PropSheetDlg( struct Mwin *tw ){
|
|
unsigned int uiXTimer;
|
|
char rgCaption[64];
|
|
PropSheet propSheet;
|
|
int iRet, i;
|
|
BOOL bAddPage, bResult = TRUE;
|
|
|
|
// allocate storage for copy of preferences
|
|
p_sav_gPrefs = GTR_MALLOC( sizeof( *p_sav_gPrefs ) );
|
|
|
|
if (p_sav_gPrefs){
|
|
// save a copy of preferences
|
|
*p_sav_gPrefs = gPrefs;
|
|
|
|
PropSheetInit(&propSheet, tw->hWndFrame, RES_STRING_W32CMD3, rgCaption, sizeof(rgCaption), (LPARAM) tw);
|
|
|
|
/*
|
|
* Create a property sheet page for required page, including imported File
|
|
* Types property sheet.
|
|
*/
|
|
|
|
for (i = 0; i <= 4; i++)
|
|
{
|
|
bAddPage = TRUE;
|
|
|
|
switch (i){
|
|
case 0:
|
|
propSheet.psPage.pfnDlgProc = AppearanceDlgProc;
|
|
propSheet.psPage.pszTemplate = MAKEINTRESOURCE( IDD_APPEARANCE );
|
|
break;
|
|
case 1:
|
|
propSheet.psPage.pfnDlgProc = HomePageDlgProc;
|
|
propSheet.psPage.pszTemplate = MAKEINTRESOURCE( IDD_HOMEPAGE );
|
|
break;
|
|
case 2:
|
|
/* Add MIME-enabled File Types property sheets. */
|
|
bResult = (AddMIMEFileTypesPS(&AddPropSheetPageCallback,
|
|
(LPARAM)&propSheet.psHeader) == S_OK);
|
|
bAddPage = FALSE;
|
|
break;
|
|
case 3:
|
|
propSheet.psPage.pfnDlgProc = AdvancedDlgProc;
|
|
propSheet.psPage.pszTemplate = MAKEINTRESOURCE( IDD_ADVANCED );
|
|
break;
|
|
case 4:
|
|
propSheet.psPage.pfnDlgProc = NewsPageDlgProc;
|
|
propSheet.psPage.pszTemplate = MAKEINTRESOURCE( IDD_NEWS );
|
|
break;
|
|
default:
|
|
ERROR_OUT(("PropSheetDlg(): Hit unexpected loop iterator value %d.",i));
|
|
break;
|
|
}
|
|
|
|
if (bResult){
|
|
if (bAddPage){
|
|
propSheet.hOptPage[propSheet.psHeader.nPages] = CreatePropertySheetPage(&propSheet.psPage);
|
|
|
|
if (propSheet.hOptPage[propSheet.psHeader.nPages] != NULL) propSheet.psHeader.nPages++;
|
|
else bResult = FALSE;
|
|
}
|
|
}
|
|
if (! bResult || propSheet.psHeader.nPages >= MAX_OPTION_PAGES) break;
|
|
}
|
|
|
|
#ifdef FEATURE_INTL
|
|
if (bResult && propSheet.psHeader.nPages < MAX_OPTION_PAGES) {
|
|
propSheet.psPage.pfnDlgProc = LanguagesDlgProc;
|
|
propSheet.psPage.pszTemplate = MAKEINTRESOURCE( IDD_LANGUAGES );
|
|
propSheet.hOptPage[propSheet.psHeader.nPages] = CreatePropertySheetPage(&propSheet.psPage);
|
|
if (propSheet.hOptPage[propSheet.psHeader.nPages] != NULL)
|
|
propSheet.psHeader.nPages++;
|
|
else
|
|
bResult = FALSE;
|
|
}
|
|
#endif // FEATURE_INTL
|
|
|
|
#ifdef HTTPS_ACCESS_TYPE
|
|
if (bResult && propSheet.psHeader.nPages < MAX_OPTION_PAGES) {
|
|
propSheet.psPage.pfnDlgProc = SecurityDlgProc;
|
|
propSheet.psPage.pszTemplate = MAKEINTRESOURCE( IDD_SECURITY );
|
|
propSheet.hOptPage[propSheet.psHeader.nPages] = CreatePropertySheetPage(&propSheet.psPage);
|
|
if (propSheet.hOptPage[propSheet.psHeader.nPages] != NULL)
|
|
propSheet.psHeader.nPages++;
|
|
else
|
|
bResult = FALSE;
|
|
}
|
|
#endif HTTPS_ACCESS_TYPE
|
|
|
|
|
|
|
|
if (bResult){
|
|
// run the gizzard
|
|
uiXTimer = SetTimer(NULL, 0, SERVICE_INTERVAL, PropSheet_TimerProc);
|
|
iRet = PropertySheet(&propSheet.psHeader);
|
|
if (uiXTimer) KillTimer(0, uiXTimer);
|
|
}
|
|
GTR_FREE( p_sav_gPrefs );
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
VOID PropertiesSheetDlg( struct Mwin *tw, void *pData){
|
|
PPropSheetVars ppsv = (PPropSheetVars) pData;
|
|
unsigned int uiXTimer;
|
|
int z, nSheets;
|
|
char rgCaption[64];
|
|
PropSheet propSheet;
|
|
BOOL bResult = TRUE;
|
|
|
|
|
|
PropSheetInit(&propSheet, tw->hWndFrame, RES_STRING_W32CMD7, rgCaption, sizeof(rgCaption), (LPARAM) pData);
|
|
propSheet.psHeader.dwFlags |= PSH_NOAPPLYNOW;
|
|
|
|
nSheets = (ppsv->dwFlags & PROP_SHEET_VARS_FLAGS_SHOW_SEC_SHEET) ? 2:1;
|
|
if ( ppsv->dwFlags & PROP_SHEET_VARS_FLAGS_ONLY_SHOW_SECURITY )
|
|
nSheets = 1;
|
|
#ifdef FEATURE_VRML_AFTER_BETA
|
|
// check to see if we have a VRML window
|
|
|
|
if (ppsv->dwFlags & PROP_SHEET_VARS_FLAGS_USE_VRML_SHEET)
|
|
nSheets++;
|
|
|
|
ASSERT ( ! ( (ppsv->dwFlags & PROP_SHEET_VARS_FLAGS_USE_VRML_SHEET) &&
|
|
(ppsv->dwFlags & PROP_SHEET_VARS_FLAGS_SHOW_SEC_SHEET) ) );
|
|
#endif
|
|
|
|
for (z = 0; z < nSheets; z++){
|
|
switch (z){
|
|
case 0:
|
|
if ( ppsv->dwFlags & PROP_SHEET_VARS_FLAGS_ONLY_SHOW_SECURITY )
|
|
goto LMyMostAmazinglyLazyHackBecauseItsLate;
|
|
propSheet.psPage.pfnDlgProc = PropertiesGeneralDlgProc;
|
|
propSheet.psPage.pszTemplate = MAKEINTRESOURCE(IDD_PROP_GENERAL);
|
|
break;
|
|
case 1:
|
|
#ifdef FEATURE_VRML_AFTER_BETA
|
|
if ( (ppsv->dwFlags & PROP_SHEET_VARS_FLAGS_USE_VRML_SHEET) )
|
|
{
|
|
propSheet.psPage.pfnDlgProc = PropertiesVrmlDlgProc;
|
|
propSheet.psPage.pszTemplate = MAKEINTRESOURCE(IDD_PROP_SECURITY);
|
|
}
|
|
else
|
|
#endif
|
|
{
|
|
LMyMostAmazinglyLazyHackBecauseItsLate:
|
|
propSheet.psPage.pfnDlgProc = PropertiesSecurityDlgProc;
|
|
propSheet.psPage.pszTemplate = MAKEINTRESOURCE(IDD_PROP_SECURITY);
|
|
}
|
|
break;
|
|
default:
|
|
ERROR_OUT(("PropertiesSheetDlg(): Hit unexpected loop iterator value %d.",z));
|
|
break;
|
|
}
|
|
|
|
propSheet.hOptPage[propSheet.psHeader.nPages] = CreatePropertySheetPage(&propSheet.psPage);
|
|
if (propSheet.hOptPage[propSheet.psHeader.nPages] != NULL) propSheet.psHeader.nPages++;
|
|
else bResult = FALSE;
|
|
if (!bResult || propSheet.psHeader.nPages >= MAX_OPTION_PAGES) break;
|
|
}
|
|
if (bResult){
|
|
// run the gizzard
|
|
uiXTimer = SetTimer(NULL, 0, SERVICE_INTERVAL, PropSheet_TimerProc);
|
|
PropertySheet(&propSheet.psHeader);
|
|
if (uiXTimer) KillTimer(0, uiXTimer);
|
|
}
|
|
}
|
|
|
|
static VOID CC_Forward(HWND hWnd, int id)
|
|
{
|
|
/* forward message to child (document contents) */
|
|
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
if (tw && tw->win)
|
|
{
|
|
XX_DMsg(DBG_MENU,
|
|
("CC_Forward: forwarding message 0x%x to window 0x%x.\n",
|
|
id, tw->win));
|
|
(void) SendMessage(tw->win, WM_COMMAND, (WPARAM) id, 0L);
|
|
}
|
|
else
|
|
{
|
|
ER_Message(NO_ERROR, ERR_CODING_ERROR,
|
|
"CC_Forward: unable to forward message 0x%x.\n",
|
|
id);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
/*****************************************************************/
|
|
/*****************************************************************/
|
|
/*****************************************************************/
|
|
|
|
#ifdef FEATURE_OPTIONS_MENU
|
|
|
|
static VOID CC_OnItem_HistorySettings(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_OPT_HISTORYSETTINGS);
|
|
// DlgHIST_RunDialog(hWnd, &gPrefs);
|
|
FExecExplorerAtShortcutsDir(ID_HISTORY, NULL);
|
|
return;
|
|
}
|
|
|
|
static void CC_OnItem_ProxyServer(HWND hWnd)
|
|
{
|
|
char buf[MAX_URL_STRING+1];
|
|
char szTitle[64];
|
|
|
|
SanityCheck(RES_MENU_ITEM_OPT_PROXYSERVER);
|
|
|
|
GTR_formatmsg(RES_STRING_W32CMD3, szTitle, sizeof(szTitle));
|
|
if (0 == DlgPrompt_RunDialog(hWnd, RES_MENU_LABEL_OPT_PROXYSERVER_SHORT, szTitle, gPrefs.szProxy, buf, MAX_URL_STRING))
|
|
{
|
|
strcpy(gPrefs.szProxy, buf);
|
|
SavePreferences();
|
|
}
|
|
}
|
|
|
|
static VOID CC_OnItem_Styles(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_OPT_STYLES);
|
|
DlgSTY_RunDialog(hWnd, &gPrefs);
|
|
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_Temp(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_OPT_TEMPDIRECTORY);
|
|
DlgTemp_RunDialog(hWnd, &gPrefs);
|
|
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_LoadImagesAuto(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_OPT_LOADIMAGESAUTO);
|
|
|
|
gPrefs.bAutoLoadImages = !gPrefs.bAutoLoadImages;
|
|
}
|
|
|
|
|
|
static VOID CC_OnItem_Viewers(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_VIEWERS);
|
|
DlgViewers_RunDialog(hWnd);
|
|
|
|
return;
|
|
}
|
|
#endif /* FEATURE_OPTIONS_MENU */
|
|
|
|
static VOID CC_OnItem_Stop(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_STOP);
|
|
TW_AbortAndRefresh(GetPrivateData(hWnd));
|
|
}
|
|
|
|
void OpenLocalDocument(HWND hWnd, char *s, BOOL inNewWindow )
|
|
{
|
|
char path[_MAX_PATH + 1];
|
|
char buf[MAX_URL_STRING + 1];
|
|
struct Mwin * tw;
|
|
|
|
strcpy(path, s);
|
|
|
|
FixPathName(path);
|
|
|
|
strcpy(buf, "file:///");
|
|
strcat(buf, path);
|
|
|
|
if ( inNewWindow ) {
|
|
GTR_NewWindow(buf, NULL, 0, 0, 0, NULL, NULL);
|
|
} else {
|
|
tw = GetPrivateData(hWnd);
|
|
CreateOrLoad(tw, buf, NULL);
|
|
}
|
|
}
|
|
|
|
static VOID CC_OnNewWindow(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_NEWWINDOW);
|
|
|
|
GTR_NewWindow(NULL, NULL, 0, 0, GTR_NW_FL_NO_AUTO_DESTROY, NULL, NULL);
|
|
|
|
return;
|
|
}
|
|
|
|
static VOID DoOpenLocal(HWND hWnd, char *string, BOOL inNewWindow)
|
|
{
|
|
DlgOpen_RunDialog(hWnd, string, inNewWindow );
|
|
}
|
|
|
|
#ifdef FEATURE_CHANGEURL
|
|
static VOID CC_OnChangeURL(HWND hWnd)
|
|
{
|
|
extern char szLastURLTyped[MAX_URL_STRING + 1];
|
|
char szTitle[64];
|
|
|
|
SanityCheck(RES_MENU_ITEM_CHANGEURL);
|
|
|
|
GTR_formatmsg(RES_STRING_W32CMD3, szTitle, sizeof(szTitle));
|
|
if (0 == DlgPrompt_RunDialog(hWnd, RES_MENU_LABEL_CHANGEURL_SHORT, szTitle, szLastURLTyped, szLastURLTyped, MAX_URL_STRING))
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
CreateOrLoad(tw,szLastURLTyped,NULL);
|
|
}
|
|
|
|
return;
|
|
}
|
|
#endif
|
|
|
|
/* This function is called by Prompt dialog created in CC_OnOpenURL if the user selects OK */
|
|
|
|
VOID CC_OnOpenURL_End_Dialog(HWND hWnd)
|
|
{
|
|
#ifdef FEATURE_CHANGEURL
|
|
GTR_NewWindow(szLastURLTyped, NULL, 0, 0, 0, NULL, NULL);
|
|
#else
|
|
CreateOrLoad(GetPrivateData(hWnd), szLastURLTyped, NULL);
|
|
#endif
|
|
}
|
|
|
|
#define GOTOURL_NEWWINDOW 0x0100
|
|
#define GOTOURL_OK 0x0001
|
|
#define GOTOURL_CANCEL 0x0002
|
|
#define GOTOURL_OPENFILE 0x0004
|
|
#define GOTOURL_OPENFILE_STRING 0x0008
|
|
|
|
static char *gotoURLString = NULL; // BUGBUG: mult. top level windows -> move into tw
|
|
|
|
static BOOL CALLBACK GoToURLDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
int result;
|
|
|
|
switch (uMsg) {
|
|
|
|
case WM_INITDIALOG: {
|
|
char szURL[MAX_URL_STRING+1];
|
|
|
|
HWND hWnd = GetParent( hDlg );
|
|
HWND hWndCombo = GetDlgItem( hDlg, IDC_GOTOURL_COMBO );
|
|
|
|
if ( hWnd )
|
|
{
|
|
struct Mwin * tw;
|
|
BOOL has_been_modified;
|
|
|
|
tw = GetPrivateData(hWnd);
|
|
TBar_RefillURLComboBox( hWndCombo );
|
|
has_been_modified = SendMessage( GetWindow( tw->hWndURLComboBox, GW_CHILD),
|
|
EM_GETMODIFY, (WPARAM) 0, (LPARAM) 0 );
|
|
if ( has_been_modified )
|
|
{
|
|
if ( GetWindowText( tw->hWndURLComboBox, szURL, sizeof(szURL ) ) )
|
|
{
|
|
SetWindowText( hWndCombo, szURL );
|
|
SendMessage( hWndCombo, EM_SETSEL, (WPARAM) 0, (LPARAM) -1 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return TRUE;
|
|
|
|
case WM_COMMAND: {
|
|
char szURL[MAX_URL_STRING+1];
|
|
int command = GET_WM_COMMAND_ID(wParam, lParam);
|
|
|
|
result = IsDlgButtonChecked( hDlg, IDC_GOTOURL_NEWWINDOW ) ? GOTOURL_NEWWINDOW : 0;
|
|
switch ( command ) {
|
|
case IDOK:
|
|
GetDlgItemText( hDlg, IDC_GOTOURL_COMBO, szURL, sizeof(szURL) );
|
|
if ( szURL[0] ) {
|
|
AddStringToCommonPool( szURL );
|
|
EndDialog( hDlg, result | GOTOURL_OK );
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case IDC_GOTOURL_OPENFILE:
|
|
GetDlgItemText( hDlg, IDC_GOTOURL_COMBO, szURL, sizeof(szURL) );
|
|
if ( szURL[0] ) {
|
|
if ( gotoURLString )
|
|
GTR_FREE( gotoURLString );
|
|
gotoURLString = GTR_strdup( szURL );
|
|
result |= GOTOURL_OPENFILE_STRING;
|
|
}
|
|
EndDialog( hDlg, result | GOTOURL_OPENFILE );
|
|
return TRUE;
|
|
|
|
case IDCANCEL:
|
|
EndDialog( hDlg, -1 );
|
|
return TRUE;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_HELP: // F1
|
|
WinHelp( ((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
HELP_WM_HELP, (DWORD)(LPSTR)mapCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
WinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
HELP_CONTEXTMENU, (DWORD)(LPSTR)mapCtrlToContextIds);
|
|
break;
|
|
|
|
case WM_ENTERIDLE:
|
|
main_EnterIdle(hDlg, wParam);
|
|
return 0;
|
|
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
static VOID CC_OnOpenURL(HWND hWnd)
|
|
{
|
|
struct Mwin * tw;
|
|
int result;
|
|
|
|
tw = GetPrivateData(hWnd);
|
|
|
|
SanityCheck(RES_MENU_ITEM_OPENURL);
|
|
|
|
result = DialogBox( wg.hInstance, MAKEINTRESOURCE(IDD_GOTOURL), hWnd, GoToURLDlgProc );
|
|
|
|
if ( result != -1 )
|
|
{
|
|
char szURL[MAX_URL_STRING+1];
|
|
|
|
if ( result & GOTOURL_OPENFILE ) {
|
|
szURL[0] = 0;
|
|
if ( gotoURLString && (result & GOTOURL_OPENFILE_STRING) ) {
|
|
strcpy( szURL, gotoURLString );
|
|
GTR_FREE( gotoURLString );
|
|
gotoURLString = NULL;
|
|
}
|
|
/* BUGBUG: For now we don't try to guess if the user typed in
|
|
* a url. Commdlg returns an error if it doesn't understand/finds
|
|
* invalid filename chars in the string. So just pass in a null
|
|
* string.
|
|
* We should (at some point) try and guess if the user typed in
|
|
* a url and if so, do the TW_LoadDocument etc. on it (as done
|
|
* in the else part of this condition).
|
|
*/
|
|
*szURL = '\0';
|
|
DoOpenLocal( hWnd, szURL, (result & GOTOURL_NEWWINDOW) ? TRUE : FALSE );
|
|
} else {
|
|
GetMostRecentTypedURL( szURL );
|
|
ApplyDefaultsToURL( szURL );
|
|
|
|
if ( result & GOTOURL_NEWWINDOW )
|
|
/* New window. */
|
|
GTR_NewWindow(szURL, "", 0, 0, 0, NULL, NULL);
|
|
else
|
|
{
|
|
/* Same window. */
|
|
SetWindowText( tw->hWndURLComboBox, szURL);
|
|
TW_LoadDocument(tw, szURL, TW_LD_FL_RECORD, NULL, "" );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
static VOID CC_OnAboutBox(HWND hWnd)
|
|
{
|
|
DlgAbout_RunDialog( hWnd );
|
|
}
|
|
|
|
static VOID CC_OnItem_Exit(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
SanityCheck(RES_MENU_ITEM_EXIT);
|
|
|
|
PREF_SaveWindowPosition(tw->hWndFrame);
|
|
(void) Plan_CloseAll();
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
static VOID CC_OnItem_Close(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
SanityCheck(RES_MENU_ITEM_CLOSE);
|
|
|
|
(void) SendMessage(tw->hWndFrame, WM_CLOSE, (WPARAM) NULL, 0L);
|
|
return;
|
|
}
|
|
|
|
|
|
static VOID CC_OnItem_Back(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_BACK);
|
|
|
|
CC_Forward(hWnd, RES_MENU_ITEM_BACK);
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_Home(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_HOME);
|
|
|
|
CC_Forward(hWnd, RES_MENU_ITEM_HOME);
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_Search(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_SEARCH);
|
|
|
|
CC_Forward(hWnd, RES_MENU_ITEM_SEARCH);
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_News(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_NEWS);
|
|
|
|
CC_Forward(hWnd, RES_MENU_ITEM_NEWS);
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_EditHTML(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_EDITHTML);
|
|
|
|
CC_Forward(hWnd, RES_MENU_ITEM_EDITHTML);
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_Preferences(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
SanityCheck(RES_MENU_ITEM_PREFERENCES);
|
|
// DlgPREF_RunDialog(hWnd);
|
|
PropSheetDlg( tw );
|
|
SavePreferences();
|
|
return;
|
|
}
|
|
|
|
void* MakePropSheetVars(char *szURL, char *szTitle, char *pCert, int nCert, BOOL fFreeURL, BOOL fShowSecPage){
|
|
PPropSheetVars ppsv;
|
|
|
|
ppsv = GTR_MALLOC(sizeof(*ppsv));
|
|
if (ppsv){
|
|
ppsv->szURL = szURL;
|
|
ppsv->szTitle = szTitle;
|
|
ppsv->pCert = pCert;
|
|
ppsv->nCert = nCert;
|
|
ppsv->dwFlags = (fFreeURL?PROP_SHEET_VARS_FLAGS_FREE_URL:0) | (fShowSecPage?PROP_SHEET_VARS_FLAGS_SHOW_SEC_SHEET:0);
|
|
}
|
|
return ppsv;
|
|
}
|
|
|
|
|
|
VOID PropertiesInternal(HWND hWnd, int nMode, char *pCert, int nCert)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
PPropSheetVars ppsv = NULL;
|
|
|
|
if (tw->w3doc && nMode == PROP_INT_NORMAL)
|
|
{
|
|
ppsv = MakePropSheetVars(tw->w3doc->szActualURL, tw->w3doc->title, tw->w3doc->pCert, tw->w3doc->nCert, FALSE, TRUE);
|
|
}
|
|
else if ( nMode == PROP_INT_JUST_SECURITY )
|
|
{
|
|
ppsv = MakePropSheetVars(NULL, NULL, pCert, nCert, FALSE, TRUE);
|
|
if ( ppsv )
|
|
ppsv->dwFlags |= PROP_SHEET_VARS_FLAGS_ONLY_SHOW_SECURITY;
|
|
}
|
|
|
|
if (ppsv)
|
|
{
|
|
PropertiesSheetDlg( tw, ppsv);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_Properties(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_PROPERTIES);
|
|
|
|
PropertiesInternal(hWnd, PROP_INT_NORMAL, NULL, 0);
|
|
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_Find(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_FIND);
|
|
|
|
CC_Forward(hWnd, RES_MENU_ITEM_FIND);
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_Forward(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_FORWARD);
|
|
|
|
CC_Forward(hWnd, RES_MENU_ITEM_FORWARD);
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_CUT(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_CUT);
|
|
|
|
CC_Forward(hWnd, RES_MENU_ITEM_CUT);
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_COPY(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_COPY);
|
|
|
|
CC_Forward(hWnd, RES_MENU_ITEM_COPY);
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_PASTE(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_PASTE);
|
|
|
|
CC_Forward(hWnd, RES_MENU_ITEM_PASTE);
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_CLEAR(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_CLEAR);
|
|
|
|
CC_Forward(hWnd, RES_MENU_ITEM_CLEAR);
|
|
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_PRINT(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_PRINT);
|
|
CC_Forward(hWnd, RES_MENU_ITEM_PRINT);
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_PAGESETUP(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_PAGESETUP);
|
|
|
|
DlgPage_RunDialog(hWnd, &gPrefs.page);
|
|
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_PRINTSETUP(HWND hWnd)
|
|
{
|
|
BOOL bResult;
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
SanityCheck(RES_MENU_ITEM_PRINTSETUP);
|
|
bResult = DlgPrnt_RunDialog(tw, hWnd, FALSE);
|
|
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItemHelp(HWND hWnd)
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_HELPPAGE);
|
|
|
|
WinHelp( hWnd, IDS_HELPFILE,
|
|
HELP_FINDER,
|
|
(DWORD)(LPSTR)mapCtrlToContextIds);
|
|
}
|
|
|
|
#ifdef FEATURE_WINDOWS_MENU
|
|
static VOID CC_OnItem_TileWindows(HWND hWnd)
|
|
{
|
|
TW_TileWindows();
|
|
}
|
|
|
|
static VOID CC_OnItem_CascadeWindows(HWND hWnd)
|
|
{
|
|
TW_CascadeWindows();
|
|
}
|
|
|
|
static VOID CC_OnItem_SwitchWindow(HWND hWnd)
|
|
{
|
|
HWND hwndNext;
|
|
|
|
/* User pressed Ctrl-Tab. Go to the next window in the following order:
|
|
HTML document window
|
|
Image viewer window
|
|
Sound player window
|
|
This order is consistent with how the windows appear under the window menu */
|
|
|
|
hwndNext = TW_GetNextWindow(hWnd);
|
|
if (hwndNext)
|
|
TW_RestoreWindow(hwndNext);
|
|
}
|
|
#endif // FEATURE_WINDOWS_MENU
|
|
|
|
//
|
|
// Toggle (show/hide) the state of a tool bar window
|
|
//
|
|
// On entry:
|
|
// hWnd: window to be toggled (***note: must be child of frame window)
|
|
//
|
|
// On exit:
|
|
// Show state has been toggled and MD_ChangeSize has been
|
|
// called to re-compute positions of all child windows
|
|
//
|
|
static BOOL ToggleBarState( HWND hWnd )
|
|
{
|
|
BOOL prev_state = IsWindowVisible( hWnd );
|
|
|
|
ShowWindow( hWnd, prev_state ? SW_HIDE : SW_SHOW );
|
|
MD_ChangeSize( GetParent( hWnd ) );
|
|
return !prev_state;
|
|
}
|
|
|
|
static VOID CC_OnItem_ToolBar(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
gPrefs.bShowToolBar = ToggleBarState( tw->hWndToolBar );
|
|
}
|
|
|
|
static VOID CC_OnItem_LocationBar(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
gPrefs.bShowURLToolBar = ToggleBarState( tw->hWndURLToolBar );
|
|
if ( !gPrefs.bShowURLToolBar && FocusInToolbar( tw ) )
|
|
SetFocus( tw->win );
|
|
}
|
|
|
|
static VOID CC_OnItem_StatusBar(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
gPrefs.bShowStatusBar = ToggleBarState( tw->hWndStatusBar );
|
|
}
|
|
|
|
static VOID CC_OnItem_ShowImages(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
gPrefs.bAutoLoadImages = !gPrefs.bAutoLoadImages;
|
|
}
|
|
|
|
void CreateLink(PCMWIN pcmwin)
|
|
{
|
|
ASSERT(IS_VALID_STRUCT_PTR(pcmwin, CMWIN));
|
|
ASSERT(IS_VALID_STRING_PTR(pcmwin->w3doc->szActualURL, STR));
|
|
|
|
if (resourceMessageBox(pcmwin->win, RES_STRING_CREATE_SHORTCUT_MSG,
|
|
RES_STRING_CREATE_SHORTCUT_TITLE,
|
|
(MB_ICONINFORMATION | MB_OK)) == IDOK)
|
|
{
|
|
if (CreateURLShortcut(
|
|
pcmwin->w3doc->szActualURL, pcmwin->w3doc->title, NULL, FOLDER_DESKTOP,
|
|
(NEWSHORTCUT_FL_ALLOW_DUPLICATE_URL | NEWSHORTCUT_FL_NO_HOST_PATH))
|
|
!= S_OK)
|
|
ER_ResourceMessage(NO_ERROR, ERR_ONETIME,
|
|
RES_STRING_CREATE_SHORTCUT_FAILED_MSG);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_CreateShortcut(HWND hwnd)
|
|
{
|
|
PCMWIN pcmwin = GetPrivateData(hwnd);
|
|
|
|
CreateLink(pcmwin);
|
|
|
|
return;
|
|
}
|
|
|
|
/* MAPISendMail() typedef */
|
|
|
|
typedef ULONG (*MAPISENDMAILPROC)(LHANDLE lhSession, ULONG ulUIParam,
|
|
lpMapiMessageA lpMessage, FLAGS flFlags,
|
|
ULONG ulReserved);
|
|
|
|
/*
|
|
** MapiSendMailThread()
|
|
**
|
|
** Wrapper to load MAPI provider DLL, and call MapiSendMail().
|
|
**
|
|
** Arguments:
|
|
**
|
|
** Returns:
|
|
**
|
|
** Side Effects: Displays error ui on failure.
|
|
*/
|
|
ULONG MapiSendMailThread(LPVOID lpvMapiMessage)
|
|
{
|
|
ULONG ulResult = MAPI_E_FAILURE;
|
|
char szMAPIDLL[MAX_PATH_LEN];
|
|
LHANDLE lhSession = 0;
|
|
ULONG ulUIParam = 0;
|
|
FLAGS flFlags = (MAPI_LOGON_UI | MAPI_DIALOG);
|
|
ULONG ulReserved = 0;
|
|
HANDLE hMailMutex;
|
|
lpMapiMessageA lpMessage = (lpMapiMessageA) lpvMapiMessage;
|
|
|
|
ASSERT(lpMessage);
|
|
ASSERT(lpMessage->lpFiles);
|
|
|
|
hMailMutex = CreateMutex(NULL,FALSE,"IEXPLORE.MAILMUTEX");
|
|
|
|
// if we're trying to send a message and someone else is already
|
|
// trying to then give up
|
|
if ( hMailMutex != NULL && GetLastError() == ERROR_ALREADY_EXISTS )
|
|
goto LErrSendMailThread;
|
|
|
|
if (GetProfileString(s_cszMAPISection, s_cszMAPIKey, s_cszEmpty, szMAPIDLL,
|
|
sizeof(szMAPIDLL)) > 0)
|
|
{
|
|
HINSTANCE hinstMAPI;
|
|
|
|
hinstMAPI = LoadLibrary(szMAPIDLL);
|
|
|
|
if (hinstMAPI)
|
|
{
|
|
MAPISENDMAILPROC MAPISendMailProc;
|
|
|
|
MAPISendMailProc = (MAPISENDMAILPROC)GetProcAddress(hinstMAPI,
|
|
s_cszMAPISendMail);
|
|
|
|
if (MAPISendMailProc)
|
|
{
|
|
ulResult = (*MAPISendMailProc)(lhSession, ulUIParam, lpMessage,
|
|
flFlags, ulReserved);
|
|
|
|
if (ulResult == SUCCESS_SUCCESS || ulResult == MAPI_USER_ABORT)
|
|
TRACE_OUT(("MapiSendMail(): MAPISendMail() to succeeded."));
|
|
//else
|
|
// ER_Message(ulResult, ERR_MAPI_MAPISENDMAIL_FAILED);
|
|
}
|
|
//else
|
|
// ER_Message(ulResult, ERR_MAPI_GETPROCADDRESS_FAILED, szMAPIDLL,
|
|
// s_cszMAPISendMail, szMAPIDLL);
|
|
|
|
EVAL(FreeLibrary(hinstMAPI));
|
|
}
|
|
//else
|
|
// ER_Message(ulResult, ERR_MAPI_LOADLIBRARY_FAILED, szMAPIDLL);
|
|
}
|
|
//else
|
|
// ER_Message(ulResult, ERR_NO_MAPI_PROVIDER);
|
|
|
|
LErrSendMailThread:
|
|
if (lpMessage->lpFiles->lpszPathName)
|
|
{
|
|
DeleteFile(lpMessage->lpFiles->lpszPathName);
|
|
GlobalFree(lpMessage->lpFiles->lpszPathName);
|
|
}
|
|
|
|
CloseHandle(hMailMutex);
|
|
if (lpMessage->lpszNoteText)
|
|
GlobalFree(lpMessage->lpszNoteText);
|
|
GlobalFree(lpMessage->lpFiles);
|
|
GlobalFree(lpMessage);
|
|
|
|
return(ulResult);
|
|
}
|
|
|
|
void SendShortcutToPageAsMail(PCMWIN pcmwin)
|
|
{
|
|
char szPath[MAX_PATH_LEN];
|
|
char szFmtStr[MAX_URL_STRING+64];
|
|
DWORD dwThreadID = 0;
|
|
BOOL bCreatedAndOwnShortcutFile = FALSE;
|
|
|
|
ASSERT(IS_VALID_STRUCT_PTR(pcmwin, CMWIN));
|
|
ASSERT(IS_VALID_STRING_PTR(pcmwin->w3doc->szActualURL, STR));
|
|
ASSERT(IS_VALID_STRING_PTR(pcmwin->w3doc->title, STR));
|
|
|
|
/* Create Internet Shortcut in temporary directory to send as mail. */
|
|
|
|
if (GetNewShortcutFilename(pcmwin->w3doc->szActualURL,
|
|
pcmwin->w3doc->title, szPath, NULL,
|
|
FOLDER_HISTORY, (NEWSHORTCUT_FL_NO_HOST_PATH |
|
|
NEWSHORTCUT_FL_ALLOW_DUPLICATE_URL))
|
|
== S_OK &&
|
|
CreateNewURLShortcut(pcmwin->w3doc->szActualURL, szPath) == S_OK)
|
|
{
|
|
MapiFileDesc *pMFD;
|
|
MapiMessage *pMapimsg;
|
|
char szMAPIDLL[MAX_PATH_LEN];
|
|
|
|
TRACE_OUT(("SendShortcutToPageAsMail(): Attempting to mail Internet Shortcut \"%s\".",
|
|
szPath));
|
|
|
|
bCreatedAndOwnShortcutFile = TRUE; // created URL shortcut file
|
|
|
|
if (GetProfileString(s_cszMAPISection, s_cszMAPIKey, s_cszEmpty, szMAPIDLL,
|
|
sizeof(szMAPIDLL)) <= 0)
|
|
{
|
|
ER_Message(0, ERR_NO_MAPI_PROVIDER);
|
|
goto LErrCleanupSend;
|
|
}
|
|
|
|
{
|
|
HKEY hkMAPIKey;
|
|
CHAR szData[20];
|
|
DWORD dwType, dwSize = NrElements(szData);
|
|
|
|
if (RegOpenKey( HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows Messaging Subsystem", &hkMAPIKey ) != ERROR_SUCCESS)
|
|
{
|
|
ER_Message(0, ERR_NO_MAPI_PROVIDER);
|
|
goto LErrCleanupSend;
|
|
}
|
|
|
|
if (RegQueryValueEx( hkMAPIKey, "MAPI", NULL, &dwType, szData, &dwSize ) != ERROR_SUCCESS
|
|
|| dwType != REG_SZ
|
|
|| (_stricmp(szData,"1") != 0))
|
|
{
|
|
ER_Message(0, ERR_NO_MAPI_PROVIDER);
|
|
goto LErrCleanupSend;
|
|
}
|
|
|
|
// otherwise we continue
|
|
|
|
}
|
|
|
|
pMFD = GlobalAlloc(GMEM_ZEROINIT, sizeof(*pMFD) );
|
|
|
|
if ( pMFD == NULL )
|
|
goto LErrCleanupSend;
|
|
|
|
pMFD->lpszPathName = GlobalAlloc(0, (lstrlen(szPath)+1));
|
|
if ( pMFD->lpszPathName )
|
|
lstrcpy(pMFD->lpszPathName, szPath);
|
|
|
|
/*
|
|
* There must be at least one non-null character in the mail note text
|
|
* to replace with the Internet Shortcut file.
|
|
*/
|
|
pMapimsg = GlobalAlloc(GMEM_ZEROINIT, sizeof(*pMapimsg) );
|
|
|
|
if ( pMapimsg == NULL )
|
|
{
|
|
GlobalFree(pMFD);
|
|
goto LErrCleanupSend;
|
|
}
|
|
|
|
if ( pcmwin->w3doc->szActualURL )
|
|
{
|
|
wsprintf(szFmtStr, " \n %s", pcmwin->w3doc->szActualURL );
|
|
pMapimsg->lpszNoteText = (PSTR)szFmtStr;
|
|
}
|
|
else
|
|
pMapimsg->lpszNoteText = (PSTR)s_cszMailBody;
|
|
|
|
{
|
|
LPSTR pszTemp;
|
|
pszTemp = GlobalAlloc(0,(lstrlen(pMapimsg->lpszNoteText)+1));
|
|
if ( pszTemp )
|
|
lstrcpy(pszTemp, pMapimsg->lpszNoteText);
|
|
pMapimsg->lpszNoteText = pszTemp;
|
|
}
|
|
|
|
ASSERT(pMapimsg->lpszNoteText && lstrlen(pMapimsg->lpszNoteText) > 0);
|
|
pMapimsg->nFileCount = 1;
|
|
pMapimsg->lpFiles = pMFD;
|
|
|
|
/*
|
|
* Ignore return value. The MapiSendMail() wrapper will put up error
|
|
* ui.
|
|
*/
|
|
CreateThread( NULL, 2048, MapiSendMailThread, (LPVOID) pMapimsg, 0, &dwThreadID);
|
|
bCreatedAndOwnShortcutFile = FALSE; // the thread now owns the job of deleteing the file
|
|
}
|
|
else
|
|
ER_ResourceMessage(NO_ERROR, ERR_ONETIME,
|
|
RES_STRING_CREATE_SHORTCUT_FAILED_MSG);
|
|
|
|
LErrCleanupSend:
|
|
DlgERR_ShowPending((struct Mwin *)pcmwin);
|
|
|
|
|
|
if ( bCreatedAndOwnShortcutFile )
|
|
DeleteFile(szPath);
|
|
|
|
}
|
|
|
|
static VOID CC_OnItem_SendMail(HWND hwnd)
|
|
{
|
|
PCMWIN pcmwin = GetPrivateData(hwnd);
|
|
|
|
SendShortcutToPageAsMail(pcmwin);
|
|
|
|
return;
|
|
}
|
|
|
|
static VOID CC_OnItem_Font(HWND hWnd)
|
|
{
|
|
}
|
|
|
|
//
|
|
// Transform a style sheet name by replacing one substring with another
|
|
//
|
|
// On entry:
|
|
// szStyleSheet: style sheet name to be transformed
|
|
// newpart: replacement string
|
|
// optable: substring to be replaced (first match found gets replaced)
|
|
//
|
|
// On exit:
|
|
// szStyleSheet: part of string may have been replaced
|
|
// ***note: string may get larger due to replacement
|
|
//
|
|
// Example:
|
|
// char *s = "SansSerifSmall ";
|
|
// ReplaceSSPart( s, "Medium", {"Small", "Medium", "Large", NULL} );
|
|
// /* at this point s will contain "SansSerifMedium " */
|
|
//
|
|
static void ReplaceSSPart( char *szStyleSheet, char *newpart, char **optable, BOOL justOne )
|
|
{
|
|
char *p = NULL;
|
|
char buffer[256+1];
|
|
int front_length;
|
|
|
|
while ( (p == NULL) && *optable ) {
|
|
if ( (p = strstr( szStyleSheet, *optable )) ) {
|
|
if ( p == szStyleSheet || strlen(p) == strlen(*optable) )
|
|
break;
|
|
else
|
|
p = NULL;
|
|
}
|
|
if ( justOne )
|
|
break;
|
|
optable++;
|
|
}
|
|
if ( p == NULL )
|
|
return;
|
|
|
|
front_length = p - szStyleSheet;
|
|
if ( front_length )
|
|
strncpy( buffer, szStyleSheet, front_length );
|
|
strcpy( buffer + front_length, newpart );
|
|
if ( front_length == 0 )
|
|
strcat( buffer, p + strlen( *optable ) );
|
|
|
|
strcpy( szStyleSheet, buffer );
|
|
}
|
|
|
|
static VOID CC_OnItem_FontSmallest(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Smallest], SSpartTblSizes, FALSE );
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_FontSmall(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Small], SSpartTblSizes, FALSE );
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_FontMedium(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Medium], SSpartTblSizes, FALSE );
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_FontLarge(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Large], SSpartTblSizes, FALSE );
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_FontLargest(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Largest], SSpartTblSizes, FALSE );
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_FontSmaller(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Smallest],
|
|
&SSpartTblSizes[SS_Small], TRUE );
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Small],
|
|
&SSpartTblSizes[SS_Medium], TRUE );
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Medium],
|
|
&SSpartTblSizes[SS_Large], TRUE );
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Large],
|
|
&SSpartTblSizes[SS_Largest], TRUE );
|
|
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_FontLarger(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Largest],
|
|
&SSpartTblSizes[SS_Large], TRUE );
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Large],
|
|
&SSpartTblSizes[SS_Medium], TRUE );
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Medium],
|
|
&SSpartTblSizes[SS_Small], TRUE );
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblSizes[SS_Small],
|
|
&SSpartTblSizes[SS_Smallest], TRUE );
|
|
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_FontPlain(HWND hWnd)
|
|
{
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblStyles[SS_SansSerif], SSpartTblStyles, FALSE );
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
}
|
|
|
|
static VOID CC_OnItem_FontFancy(HWND hWnd)
|
|
{
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblStyles[SS_Serif], SSpartTblStyles, FALSE );
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
}
|
|
|
|
static VOID CC_OnItem_FontMixed(HWND hWnd)
|
|
{
|
|
ReplaceSSPart( gPrefs.szStyleSheet, SSpartTblStyles[SS_Mixed], SSpartTblStyles, FALSE );
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
}
|
|
|
|
static VOID CC_OnItem_ChoseURL(HWND hWnd )
|
|
{
|
|
struct Mwin * tw;
|
|
|
|
tw = GetPrivateData(hWnd);
|
|
TBar_ActOnTypedURL( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_UpdateTBar(HWND hWnd )
|
|
{
|
|
struct Mwin * tw;
|
|
|
|
tw = GetPrivateData(hWnd);
|
|
TBar_UpdateTBar( tw );
|
|
}
|
|
|
|
#ifdef TEST_DCACHE_OPTIONS
|
|
static VOID CC_OnItem_TestHeap(HWND hWnd)
|
|
{
|
|
#ifdef DEBUG
|
|
SetDebugModuleIniSwitches();
|
|
SpewHeapSummary(SHS_FL_SPEW_USED_INFO);
|
|
#endif
|
|
}
|
|
|
|
|
|
|
|
static VOID CC_OnItem_DebugVis(HWND hWnd)
|
|
{
|
|
#ifdef DEBUG
|
|
bFavorVisibleImages = TRUE;
|
|
#endif
|
|
}
|
|
static VOID CC_OnItem_DebugNotvis(HWND hWnd)
|
|
{
|
|
#ifdef DEBUG
|
|
bFavorVisibleImages = FALSE;
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
static VOID CC_OnItem_ViewSrc(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
|
|
ASSERT(IS_VALID_STRUCT_PTR(tw, CMWIN));
|
|
|
|
if (tw->w3doc &&
|
|
tw->w3doc->source &&
|
|
CS_GetLength(tw->w3doc->source) > 0)
|
|
ViewHTMLSource(tw->w3doc->szActualURL,
|
|
CS_GetPool(tw->w3doc->source));
|
|
|
|
|
|
return;
|
|
}
|
|
|
|
#ifdef FEATURE_BRADBUTTON
|
|
static VOID CC_OnItem_Update(HWND hWnd) // Requtested by BradSi
|
|
{
|
|
SanityCheck(RES_MENU_ITEM_UPDATE);
|
|
|
|
CC_Forward(hWnd, RES_MENU_ITEM_UPDATE);
|
|
return;
|
|
}
|
|
#endif
|
|
|
|
#ifdef FEATURE_INTL
|
|
static VOID CC_OnItem_Row(HWND hWnd)
|
|
{
|
|
}
|
|
|
|
static VOID CC_OnItem_RowWidest(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
gPrefs.nRowSpace = RES_MENU_ITEM_ROW_WIDEST - RES_MENU_ITEM_ROW;
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_RowWide(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
gPrefs.nRowSpace = RES_MENU_ITEM_ROW_WIDE - RES_MENU_ITEM_ROW;
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_RowMedium(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
gPrefs.nRowSpace = RES_MENU_ITEM_ROW_MEDIUM - RES_MENU_ITEM_ROW;
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_RowNarrow(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
gPrefs.nRowSpace = RES_MENU_ITEM_ROW_NARROW - RES_MENU_ITEM_ROW;
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_RowNarrowest(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
gPrefs.nRowSpace = RES_MENU_ITEM_ROW_NARROWEST - RES_MENU_ITEM_ROW;
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_RowSmaller(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
if(gPrefs.nRowSpace < RES_MENU_ITEM_ROW_NARROWEST - RES_MENU_ITEM_ROW)
|
|
++gPrefs.nRowSpace;
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
|
|
static VOID CC_OnItem_RowLarger(HWND hWnd)
|
|
{
|
|
struct Mwin * tw = GetPrivateData(hWnd);
|
|
if(gPrefs.nRowSpace > RES_MENU_ITEM_ROW_WIDEST - RES_MENU_ITEM_ROW)
|
|
--gPrefs.nRowSpace;
|
|
ChangeStyleSheet( gPrefs.szStyleSheet );
|
|
TBar_UpdateTBItems( tw );
|
|
}
|
|
#endif
|
|
|
|
|
|
/*================================================================*
|
|
*================================================================*
|
|
*================================================================*/
|
|
|
|
#define FORWARD_TO_ACTIVE_MDI_CHILD ((LPVOID)-1)
|
|
|
|
/* values in this table must be in the same order as the associated symbols
|
|
are defined. (see rc_menu.h) */
|
|
|
|
CC_DISPATCH cc_menuitem[] =
|
|
{
|
|
/*****************RES_MENU_ITEM__FIRST__*****************/
|
|
#ifdef FEATURE_CHANGEURL
|
|
CC_OnChangeURL, /* RES_MENU_ITEM_CHANGEURL */
|
|
#endif
|
|
0,
|
|
CC_OnOpenURL, /* RES_MENU_ITEM_OPENURL */
|
|
CC_OnItem_EditHTML, /* RES_MENU_ITEM_EDITHTML */
|
|
FORWARD_TO_ACTIVE_MDI_CHILD, /* RES_MENU_ITEM_HTMLSOURCE */
|
|
FORWARD_TO_ACTIVE_MDI_CHILD, /* RES_MENU_ITEM_SAVEAS */
|
|
CC_OnItem_Close, /* RES_MENU_ITEM_CLOSE */
|
|
CC_OnItem_News, /* RES_MENU_ITEM_NEWS */
|
|
CC_OnItem_PRINT, /* RES_MENU_ITEM_PRINT */
|
|
CC_OnItem_PAGESETUP, /* RES_MENU_ITEM_PAGESETUP */
|
|
CC_OnItem_PRINTSETUP, /* RES_MENU_ITEM_PRINTSETUP */
|
|
CC_OnItem_Exit, /* RES_MENU_ITEM_EXIT */
|
|
|
|
CC_OnItem_CUT, /* RES_MENU_ITEM_CUT */
|
|
CC_OnItem_COPY, /* RES_MENU_ITEM_COPY */
|
|
CC_OnItem_PASTE, /* RES_MENU_ITEM_PASTE */
|
|
CC_OnItem_CLEAR, /* RES_MENU_ITEM_CLEAR */
|
|
|
|
CC_OnItem_Find, /* RES_MENU_ITEM_FIND */
|
|
CC_OnItem_Preferences, /* RES_MENU_ITEM_PREFERENCES */
|
|
|
|
CC_OnItem_Back, /* RES_MENU_ITEM_BACK */
|
|
CC_OnItem_Forward, /* RES_MENU_ITEM_FORWARD */
|
|
0, /* available */
|
|
FORWARD_TO_ACTIVE_MDI_CHILD, /* RES_MENU_ITEM_ADDCURRENTTOHOTLIST */
|
|
0, /* available */
|
|
|
|
#ifdef FEATURE_WINDOWS_MENU
|
|
CC_OnItem_TileWindows, /* RES_MENU_ITEM_TILEWINDOWS */
|
|
CC_OnItem_CascadeWindows, /* RES_MENU_ITEM_CASCADEWINDOWS */
|
|
#else
|
|
0,
|
|
0,
|
|
#endif
|
|
CC_OnItem_Search, /* RES_MENU_ITEM_SEARCH */
|
|
|
|
CC_OnItemHelp, /* RES_MENU_ITEM_HELPPAGE */
|
|
CC_OnAboutBox, /* RES_MENU_ITEM_ABOUTBOX */
|
|
FORWARD_TO_ACTIVE_MDI_CHILD, /* RES_MENU_ITEM_RELOAD */
|
|
FORWARD_TO_ACTIVE_MDI_CHILD, /* RES_MENU_ITEM_LOADALLIMAGES */
|
|
NULL, /* RES_MENU_ITEM_FINDAGAIN */
|
|
CC_OnItem_Home, /* RES_MENU_ITEM_HOME */
|
|
#ifdef FEATURE_OPTIONS_MENU
|
|
CC_OnItem_Viewers, /* RES_MENU_ITEM_VIEWERS */
|
|
CC_OnItem_LoadImagesAuto, /* RES_MENU_ITEM_OPT_LOADIMAGESAUTO */
|
|
CC_OnItem_SetHomePage, /* RES_MENU_ITEM_OPT_SETHOMEPAGE */
|
|
CC_OnItem_HistorySettings, /* RES_MENU_ITEM_OPT_HISTORYSETTINGS */
|
|
CC_OnItem_ProxyServer, /* RES_MENU_ITEM_OPT_PROXYSERVER */
|
|
CC_OnItem_Styles, /* RES_MENU_ITEM_OPT_STYLES */
|
|
CC_OnItem_Temp, /* RES_MENU_ITEM_OPT_TEMPDIRECTORY */
|
|
0, /* RES_MENU_ITEM_OPT_APPLICATIONS */
|
|
#else
|
|
0,
|
|
0, /* unused */
|
|
0, /* unused */
|
|
0, /* unused */
|
|
0, /* unused */
|
|
0, /* unused */
|
|
0, /* unused */
|
|
0, /* unused */
|
|
#endif
|
|
FORWARD_TO_ACTIVE_MDI_CHILD,/* RES_MENU_ITEM_SELECTALL */
|
|
CC_OnItem_Stop, /* RES_MENU_ITEM_STOP */
|
|
#ifdef FEATURE_WINDOWS_MENU
|
|
CC_OnItem_SwitchWindow, /* RES_MENU_ITEM_SWITCHWINDOW */
|
|
#else
|
|
0,
|
|
#endif
|
|
CC_OnItem_ToolBar, // RES_MENU_ITEM_TOOLBAR
|
|
CC_OnItem_LocationBar, // RES_MENU_ITEM_LOCATION
|
|
CC_OnItem_StatusBar, // RES_MENU_ITEM_STATUSBAR
|
|
CC_OnItem_ShowImages, // RES_MENU_ITEM_SHOWIMAGES
|
|
0, // RES_MENU_ITEM_HELPCONTENTS
|
|
0, // RES_MENU_ITEM_HELPSEARCH
|
|
CC_OnItem_CreateShortcut, // RES_MENU_ITEM_SHORTCUT
|
|
CC_OnItem_Font, // RES_MENU_ITEM_FONT
|
|
CC_OnItem_FontSmallest, // RES_MENU_ITEM_FONT_SMALLEST
|
|
CC_OnItem_FontSmall, // RES_MENU_ITEM_FONT_SMALL
|
|
CC_OnItem_FontMedium, // RES_MENU_ITEM_FONT_MEDIUM
|
|
CC_OnItem_FontLarge, // RES_MENU_ITEM_FONT_LARGE
|
|
CC_OnItem_FontLargest, // RES_MENU_ITEM_FONT_LARGEST
|
|
CC_OnItem_FontSmaller, // RES_MENU_ITEM_FONT_SMALLER
|
|
CC_OnItem_FontLarger, // RES_MENU_ITEM_FONT_LARGER
|
|
CC_OnItem_ExploreHistory, // RES_MENU_ITEM_EXPLORE_HISTORY
|
|
CC_OnItem_ExploreHotlist, // RES_MENU_ITEM_EXPLORE_HOTLIST
|
|
0, // RES_MENU_ITEM_NAVIGATE
|
|
CC_OnItem_ChoseURL, // RES_INTERNAL_COMMAND_CHOSE_URL
|
|
CC_OnItem_UpdateTBar, // RES_INTERNAL_COMMAND_UPDATE_TBAR
|
|
CC_OnItem_Properties, // RES_MENU_ITEM_PROPERTIES
|
|
CC_OnItem_SendMail, // RES_MENU_ITEM_SEND_MAIL
|
|
#ifdef TEST_DCACHE_OPTIONS
|
|
CC_OnItem_TestDCacheOptions,// RES_MENU_ITEM_DEBUG_DCACHE
|
|
CC_OnItem_TestHeap, // RES_MENU_ITEM_DEBUG_HEAP
|
|
CC_OnItem_DebugVis, // RES_MENU_ITEM_DEBUG_VISIBLE
|
|
CC_OnItem_DebugNotvis, // RES_MENU_ITEM_DEBUG_NOTVISIBLE
|
|
#endif
|
|
CC_OnItem_ViewSrc, // RES_MENU_ITEM_VIEW_SRC
|
|
#ifdef FEATURE_INTL
|
|
CC_OnItem_Row, // RES_MENU_ITEM_ROW
|
|
CC_OnItem_RowWidest, // RES_MENU_ITEM_ROW_WIDEST
|
|
CC_OnItem_RowWide, // RES_MENU_ITEM_ROW_WIDE
|
|
CC_OnItem_RowMedium, // RES_MENU_ITEM_ROW_MEDIUM
|
|
CC_OnItem_RowNarrow, // RES_MENU_ITEM_ROW_NARROW
|
|
CC_OnItem_RowNarrowest, // RES_MENU_ITEM_ROW_NARROWEST
|
|
CC_OnItem_RowSmaller, // RES_MENU_ITEM_ROW_SMALLER
|
|
CC_OnItem_RowLarger, // RES_MENU_ITEM_ROW_LARGER
|
|
#endif
|
|
#ifdef FEATURE_BRADBUTTON
|
|
CC_OnItem_Update, // RES_MENU_ITEM_UPDATE
|
|
#endif
|
|
CC_OnNewWindow, /* RES_MENU_ITEM_NEWWINDOW */
|
|
/*****************RES_MENU_ITEM__LAST__****************/
|
|
}; /* end of cc_menuitem[] */
|
|
|
|
|
|
VOID CC_GrayUnimplemented(HMENU hMenu)
|
|
{
|
|
register int i;
|
|
for (i = 0; i < NrElements(cc_menuitem); i++)
|
|
if (!cc_menuitem[i].fn)
|
|
(void) EnableMenuItem(hMenu, (RES_MENU_ITEM__FIRST__ + i),
|
|
(MF_BYCOMMAND | MF_GRAYED));
|
|
return;
|
|
}
|
|
|
|
|
|
LRESULT CC_OnCommand(HWND hWnd, int wId, HWND hWndCtl, UINT wNotifyCode)
|
|
{
|
|
register WORD wNdx;
|
|
|
|
struct Mwin * tw;
|
|
|
|
#ifdef XX_DEBUG
|
|
if (NrElements(cc_menuitem) != (RES_MENU_ITEM__LAST__ - RES_MENU_ITEM__FIRST__ + 1))
|
|
ER_Message(NO_ERROR, ERR_CODING_ERROR, "cc_menuitem[] wrong size [%d vs %d]\n",
|
|
NrElements(cc_menuitem), (RES_MENU_ITEM__LAST__ - RES_MENU_ITEM__FIRST__ + 1));
|
|
#endif /* XX_DEBUG */
|
|
|
|
|
|
XX_DMsg(DBG_MENU, ("\nMENU COMMAND %x\n\n", wId));
|
|
|
|
if ( (wId >= RES_MENU_ITEM__FIRST__)
|
|
&& (wId <= RES_MENU_ITEM__LAST__))
|
|
{
|
|
wNdx = wId - RES_MENU_ITEM__FIRST__;
|
|
if (cc_menuitem[wNdx].fn == FORWARD_TO_ACTIVE_MDI_CHILD)
|
|
CC_Forward(hWnd, wId);
|
|
else if (cc_menuitem[wNdx].fn)
|
|
{
|
|
#ifdef XX_DEBUG /* for SanityCheck() */
|
|
wIdReceived = wId;
|
|
#endif /* XX_DEBUG */
|
|
(*(cc_menuitem[wNdx].fn)) (hWnd);
|
|
}
|
|
else
|
|
ER_Message(NO_ERROR, ERR_NOTIMPLEMENTED_sx, "CC_OnCommand", wId);
|
|
return (0);
|
|
}
|
|
|
|
#ifdef CUSTOM_URLMENU
|
|
if ( (wId >= RES_MENU_ITEM_URL__FIRST__)
|
|
&& (wId <= RES_MENU_ITEM_URL__LAST__) )
|
|
{
|
|
tw = GetPrivateData(hWnd);
|
|
wNdx = wId - RES_MENU_ITEM_URL__FIRST__;
|
|
PREF_HandleCustomURLMenuItem(tw,wNdx);
|
|
return (0);
|
|
}
|
|
#endif
|
|
|
|
#ifdef FEATURE_HIDDEN_NOT_HIDDEN
|
|
if ( (wId >= RES_MENU_CHILD__FIRST__)
|
|
&& (wId <= RES_MENU_CHILD__LAST__))
|
|
{
|
|
TW_ActivateWindowFromList(wId, -1, NULL);
|
|
return 0;
|
|
}
|
|
|
|
if (wId == RES_MENU_CHILD_MOREWINDOWS)
|
|
{
|
|
DlgSelectWindow_RunDialog(hWnd);
|
|
return 0;
|
|
}
|
|
#endif // FEATURE_HIDDEN_NOT_HIDDEN
|
|
|
|
#ifdef FEATURE_SECURITY_MENU
|
|
if ( (wId >= RES_MENU_ITEM_SPM__FIRST__)
|
|
&& (wId <= RES_MENU_ITEM_SPM__LAST__))
|
|
{
|
|
tw = GetPrivateData(hWnd);
|
|
if (Hidden_EnableAllChildWindows(FALSE,TRUE))
|
|
{
|
|
OpaqueOSData osd;
|
|
HTSPMStatusCode hsc;
|
|
unsigned char * szMoreInfo;
|
|
|
|
szMoreInfo = NULL;
|
|
osd.tw = tw;
|
|
osd.request = NULL;
|
|
|
|
hsc = HTSPM_OS_DoMenuCommand(&osd,wId,&szMoreInfo);
|
|
Hidden_EnableAllChildWindows(TRUE,TRUE);
|
|
|
|
if (hsc==HTSPM_STATUS_MOREINFO) /* user asked for more information */
|
|
{ /* send them to a spm-defined url. */
|
|
if (szMoreInfo && *szMoreInfo)
|
|
CreateOrLoad(tw,szMoreInfo,NULL);
|
|
if (szMoreInfo)
|
|
GTR_FREE(szMoreInfo);
|
|
}
|
|
}
|
|
return (0);
|
|
}
|
|
#endif // FEATURE_SECURITY_MENU
|
|
|
|
if ( (wId >= HISTHOT_MENUITEM_FIRST)
|
|
&& (wId <= HISTHOT_MENUITEM_LAST))
|
|
{
|
|
CC_Handle_HistoryHotlistMenu(hWnd, wId);
|
|
return 0;
|
|
}
|
|
|
|
if ( wNotifyCode == CBN_SELENDOK )
|
|
{
|
|
tw = GetPrivateData(hWnd);
|
|
if ( hWndCtl == tw->hWndURLComboBox && GetKeyState(VK_CONTROL) >= 0 )
|
|
{
|
|
PostMessage( hWnd, WM_COMMAND, (WPARAM) RES_INTERNAL_COMMAND_CHOSE_URL, (LPARAM) 0 );
|
|
return 0;
|
|
}
|
|
} else if ( wNotifyCode == CBN_SELENDCANCEL )
|
|
{
|
|
tw = GetPrivateData(hWnd);
|
|
if ( hWndCtl == tw->hWndURLComboBox && GetKeyState(VK_CONTROL) >= 0 )
|
|
{
|
|
extern BOOL bIgnoreSelEndCancel;
|
|
|
|
if (!bIgnoreSelEndCancel )
|
|
PostMessage( hWnd, WM_COMMAND, (WPARAM) RES_INTERNAL_COMMAND_UPDATE_TBAR, (LPARAM) 0 );
|
|
return 0;
|
|
}
|
|
#ifdef FEATURE_INTL
|
|
} else if ( wNotifyCode == CBN_SELCHANGE ) {
|
|
tw = GetPrivateData(hWnd);
|
|
|
|
if ( hWndCtl == tw->hWndMIMEComboBox )
|
|
{
|
|
int idx;
|
|
|
|
idx = ComboBox_GetItemData(hWndCtl, ComboBox_GetCurSel(hWndCtl));
|
|
if (idx != tw->iMimeCharSet)
|
|
{
|
|
BOOL fNeedChangeSS = (GETMIMECP(tw) != aMimeCharSet[idx].CodePage)? TRUE: FALSE;
|
|
BOOL fNeedRefresh = (aMimeCharSet[tw->iMimeCharSet].iChrCnv != aMimeCharSet[idx].iChrCnv)? TRUE: FALSE;
|
|
|
|
tw->iMimeCharSet = idx;
|
|
if (tw->w3doc)
|
|
{
|
|
tw->w3doc->iMimeCharSet = idx;
|
|
HTList_changeObject(tw->MimeHistory, tw->history_index, (void *)idx);
|
|
if (fNeedChangeSS)
|
|
STY_ChangeStyleSheet(tw);
|
|
RefreshDocument(tw, FALSE);
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
} else if ( wNotifyCode == CBN_DROPDOWN ) {
|
|
tw = GetPrivateData(hWnd);
|
|
|
|
if ( hWndCtl == tw->hWndURLComboBox )
|
|
TBar_RefillURLComboBox( tw->hWndURLComboBox );
|
|
}
|
|
|
|
/* anything we cannot explain must be forwarded to windows. */
|
|
|
|
FORWARD_WM_COMMAND(hWnd, wId, hWndCtl, wNotifyCode, Frame_DefProc);
|
|
return (0);
|
|
}
|