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.
408 lines
14 KiB
408 lines
14 KiB
/////////////////////////////////////////////////////////////////////////////
|
|
// Copyright (C) 1993-1996 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// MODULE: layout.cpp
|
|
//
|
|
// PURPOSE: Implements the layout property sheet
|
|
//
|
|
|
|
#include "pch.hxx"
|
|
#include "resource.h"
|
|
#include "goptions.h"
|
|
#include "browser.h"
|
|
#include "layout.h"
|
|
#include "thormsgs.h"
|
|
#include <mailnews.h>
|
|
#include "instance.h"
|
|
|
|
ASSERTDATA
|
|
|
|
static const char c_szPropBrowser[] = "Browser";
|
|
static const char c_szPropLayout[] = "Layout";
|
|
|
|
INT_PTR CALLBACK LayoutProp_General(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
BOOL LayoutProp_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam);
|
|
void LayoutProp_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
|
|
LRESULT LayoutProp_OnNotify(HWND hwnd, int idFrom, LPNMHDR pnmhdr);
|
|
void LayoutProp_SetOption(HWND hwndDlg, int idCtl, DWORD dwOpt);
|
|
void LayoutProp_EnableToolbarControls(HWND hwnd, BOOL fEnable);
|
|
void LayoutProp_EnablePreviewControls(HWND hwnd, BOOL fEnable);
|
|
|
|
typedef struct tagLAYOUT_INFO {
|
|
IAthenaBrowser *pBrowser;
|
|
LAYOUT *pLayout;
|
|
} LAYOUT_INFO, *PLAYOUT_INFO;
|
|
|
|
//
|
|
// FUNCTION: LayoutProp_Create()
|
|
//
|
|
// PURPOSE: Invokes the Window Layout property sheet
|
|
//
|
|
// PARAMETERS:
|
|
// <in> hwndParent - Handle of the parent of the dialog box
|
|
//
|
|
// RETURN VALUE:
|
|
// <???>
|
|
//
|
|
// COMMENTS:
|
|
// <???>
|
|
//
|
|
BOOL LayoutProp_Create(HWND hwndParent, IAthenaBrowser *pBrowser, LAYOUT *pLayout)
|
|
{
|
|
PROPSHEETPAGE psp;
|
|
PROPSHEETHEADER psh;
|
|
BOOL fReturn;
|
|
HICON hIconSmall;
|
|
TCHAR szTitle[CCHMAX_STRINGRES];
|
|
LAYOUT_INFO rLayout= { pBrowser, pLayout };
|
|
|
|
// Load the title bar icon
|
|
hIconSmall = (HICON) LoadImage(g_hLocRes, MAKEINTRESOURCE(idiWindowLayout),
|
|
IMAGE_ICON, 16, 16, 0);
|
|
|
|
// Load the title bar caption
|
|
AthLoadString(idsWindowLayout, szTitle, ARRAYSIZE(szTitle));
|
|
|
|
ZeroMemory(&psp, sizeof(PROPSHEETPAGE));
|
|
psp.dwSize = sizeof(PROPSHEETPAGE);
|
|
psp.dwFlags = PSP_DEFAULT;
|
|
psp.hInstance = g_hLocRes;
|
|
psp.pszTemplate = MAKEINTRESOURCE(iddViewLayout);
|
|
psp.pfnDlgProc = LayoutProp_General;
|
|
psp.lParam = (LPARAM) pBrowser;
|
|
|
|
psh.dwSize = sizeof(PROPSHEETHEADER);
|
|
psh.dwFlags = PSH_USEHICON | PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_USEPAGELANG;
|
|
psh.hwndParent = hwndParent;
|
|
psh.hInstance = g_hLocRes;
|
|
psh.hIcon = hIconSmall;
|
|
psh.pszCaption = szTitle;
|
|
psh.nPages = 1;
|
|
psh.nStartPage = 0;
|
|
psh.ppsp = &psp;
|
|
|
|
fReturn = !!PropertySheet(&psh);
|
|
|
|
if (hIconSmall)
|
|
SideAssert(DestroyIcon(hIconSmall));
|
|
|
|
return (fReturn);
|
|
}
|
|
|
|
const static HELPMAP g_rgCtxMapLayout[] = {
|
|
{IDC_CHECK_FOLDERLIST, IDH_LAYOUT_FOLDER_LIST},
|
|
{IDC_CHECK_FOLDERBAR, IDH_LAYOUT_FOLDER_BAR},
|
|
{IDC_CHECK_CONTACTS, 35702},
|
|
{IDC_CHECK_OUTLOOKBAR, 35700},
|
|
{IDC_CHECK_STATUSBAR, 35704},
|
|
{IDC_CHECK_TOOLBAR, 35706},
|
|
{IDC_CHECK_FILTERBAR, 35708},
|
|
{IDC_CHECK_INFOPANE, 35712},
|
|
{IDC_BUTTON_CUSTOMIZE, IDH_LAYOUT_CUSTOMIZE_BUTTONS},
|
|
{IDC_CHECK_PREVIEW, IDH_LAYOUT_PREVIEW_PANE},
|
|
{IDC_RADIO_SPLIT_HORZ, IDH_LAYOUT_PREVIEW_PANE_MOVE},
|
|
{IDC_RADIO_SPLIT_VERT, IDH_LAYOUT_PREVIEW_PANE_MOVE},
|
|
{IDC_CHECK_PREVIEW_HEADER, IDH_LAYOUT_SHOW_HEADERS},
|
|
{idcStatic1, IDH_NEWS_COMM_GROUPBOX},
|
|
{idcStatic2, IDH_NEWS_COMM_GROUPBOX},
|
|
{idcStatic3, IDH_NEWS_COMM_GROUPBOX},
|
|
{idcStatic4, IDH_NEWS_COMM_GROUPBOX},
|
|
{idcStatic5, IDH_NEWS_COMM_GROUPBOX},
|
|
{idcStatic6, IDH_NEWS_COMM_GROUPBOX},
|
|
{idcStatic7, IDH_NEWS_COMM_GROUPBOX},
|
|
{idcStatic8, IDH_NEWS_COMM_GROUPBOX},
|
|
{0, 0}};
|
|
|
|
INT_PTR CALLBACK LayoutProp_General(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
LRESULT lResult;
|
|
LAYOUT *pLayout;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
return (BOOL) HANDLE_WM_INITDIALOG(hwnd, wParam, lParam,
|
|
LayoutProp_OnInitDialog);
|
|
|
|
case WM_COMMAND:
|
|
HANDLE_WM_COMMAND(hwnd, wParam, lParam, LayoutProp_OnCommand);
|
|
return (TRUE);
|
|
|
|
case WM_NOTIFY:
|
|
lResult = HANDLE_WM_NOTIFY(hwnd, wParam, lParam, LayoutProp_OnNotify);
|
|
SetDlgMsgResult(hwnd, WM_NOTIFY, lResult);
|
|
return (TRUE);
|
|
|
|
case WM_DESTROY:
|
|
RemoveProp(hwnd, c_szPropBrowser);
|
|
pLayout = (LAYOUT *)GetProp(hwnd, c_szPropLayout);
|
|
if (pLayout != NULL)
|
|
MemFree(pLayout);
|
|
RemoveProp(hwnd, c_szPropLayout);
|
|
return (TRUE);
|
|
|
|
case WM_HELP:
|
|
case WM_CONTEXTMENU:
|
|
return(OnContextHelp(hwnd, uMsg, wParam, lParam, g_rgCtxMapLayout));
|
|
}
|
|
return (FALSE);
|
|
}
|
|
|
|
|
|
BOOL LayoutProp_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
|
|
{
|
|
IAthenaBrowser *pBrowser = NULL;
|
|
CBands *pCoolbar = NULL;
|
|
BOOL fText = TRUE;
|
|
FOLDERTYPE ftType = FOLDER_ROOTNODE;
|
|
BOOL fEnabled = FALSE;
|
|
DWORD dwHybrid = hybridNone;
|
|
DWORD dwSplitDir = 0;
|
|
LAYOUT *pLayout;
|
|
BOOL fPreviewPaneHeader = 0;
|
|
|
|
Assert(lParam);
|
|
|
|
pBrowser = (IAthenaBrowser *)(((PROPSHEETPAGE *) lParam)->lParam);
|
|
Assert(pBrowser != NULL);
|
|
|
|
if (!MemAlloc((void **)&pLayout, sizeof(LAYOUT)))
|
|
return(FALSE);
|
|
|
|
pLayout->cbSize = sizeof(LAYOUT);
|
|
SideAssert(SUCCEEDED(pBrowser->GetLayout(pLayout)));
|
|
|
|
// Stash the pointer to the browser
|
|
SetProp(hwnd, c_szPropBrowser, (HANDLE) pBrowser);
|
|
SetProp(hwnd, c_szPropLayout, (HANDLE) pLayout);
|
|
|
|
// Set the basic checks
|
|
Button_SetCheck(GetDlgItem(hwnd, IDC_CHECK_FOLDERBAR), pLayout->fFolderBar);
|
|
Button_SetCheck(GetDlgItem(hwnd, IDC_CHECK_FOLDERLIST), pLayout->fFolderList);
|
|
Button_SetCheck(GetDlgItem(hwnd, IDC_CHECK_STATUSBAR), pLayout->fStatusBar);
|
|
Button_SetCheck(GetDlgItem(hwnd, IDC_CHECK_INFOPANE), pLayout->fInfoPane);
|
|
Button_SetCheck(GetDlgItem(hwnd, IDC_CHECK_OUTLOOKBAR), pLayout->fOutlookBar);
|
|
Button_SetCheck(GetDlgItem(hwnd, IDC_CHECK_CONTACTS), pLayout->fContacts);
|
|
|
|
EnableWindow(GetDlgItem(hwnd, IDC_CHECK_CONTACTS), !(g_dwAthenaMode & MODE_OUTLOOKNEWS));
|
|
|
|
if (!pLayout->fInfoPaneEnabled)
|
|
ShowWindow(GetDlgItem(hwnd, IDC_CHECK_INFOPANE), SW_HIDE);
|
|
|
|
|
|
Button_SetCheck(GetDlgItem(hwnd, IDC_CHECK_TOOLBAR), pLayout->fToolbar);
|
|
if (!pLayout->fToolbar)
|
|
LayoutProp_EnableToolbarControls(hwnd, FALSE);
|
|
|
|
Button_SetCheck(GetDlgItem(hwnd, IDC_CHECK_FILTERBAR), pLayout->fFilterBar);
|
|
|
|
|
|
// Set the preview pane options
|
|
pBrowser->GetFolderType(&ftType);
|
|
|
|
if (ftType == FOLDER_HTTPMAIL)
|
|
ShowWindow(GetDlgItem(hwnd, IDC_CHECK_INFOPANE), SW_HIDE);
|
|
|
|
if (FOLDER_NEWS == ftType || FOLDER_LOCAL == ftType || FOLDER_HTTPMAIL == ftType || FOLDER_IMAP == ftType)
|
|
{
|
|
// Mail and news have different preview pane options. We need to
|
|
// load those controls separately
|
|
if (ftType == FOLDER_NEWS)
|
|
{
|
|
dwHybrid = pLayout->fNewsPreviewPane;
|
|
dwSplitDir = pLayout->fNewsSplitVertically;
|
|
fPreviewPaneHeader = pLayout->fNewsPreviewPaneHeader;
|
|
}
|
|
else
|
|
{
|
|
dwHybrid = pLayout->fMailPreviewPane;
|
|
dwSplitDir = pLayout->fMailSplitVertically;
|
|
fPreviewPaneHeader = pLayout->fMailPreviewPaneHeader;
|
|
}
|
|
|
|
Button_SetCheck(GetDlgItem(hwnd, IDC_CHECK_PREVIEW),
|
|
hybridNone != dwHybrid);
|
|
Button_SetCheck(GetDlgItem(hwnd, IDC_RADIO_SPLIT_HORZ),
|
|
dwSplitDir == 0);
|
|
Button_SetCheck(GetDlgItem(hwnd, IDC_RADIO_SPLIT_VERT),
|
|
dwSplitDir == 1);
|
|
Button_SetCheck(GetDlgItem(hwnd, IDC_CHECK_PREVIEW_HEADER),
|
|
fPreviewPaneHeader);
|
|
|
|
if (dwHybrid == hybridNone)
|
|
LayoutProp_EnablePreviewControls(hwnd, FALSE);
|
|
}
|
|
else
|
|
{
|
|
EnableWindow(GetDlgItem(hwnd, IDC_CHECK_PREVIEW), FALSE);
|
|
LayoutProp_EnablePreviewControls(hwnd, FALSE);
|
|
}
|
|
|
|
|
|
PropSheet_UnChanged(GetParent(hwnd), hwnd);
|
|
return (TRUE);
|
|
}
|
|
|
|
void LayoutProp_EnableToolbarControls(HWND hwnd, BOOL fEnable)
|
|
{
|
|
|
|
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_CUSTOMIZE), fEnable);
|
|
}
|
|
|
|
void LayoutProp_EnablePreviewControls(HWND hwnd, BOOL fEnable)
|
|
{
|
|
EnableWindow(GetDlgItem(hwnd, IDC_RADIO_SPLIT_HORZ), fEnable);
|
|
EnableWindow(GetDlgItem(hwnd, IDC_RADIO_SPLIT_VERT), fEnable);
|
|
EnableWindow(GetDlgItem(hwnd, IDC_CHECK_PREVIEW_HEADER), fEnable);
|
|
}
|
|
|
|
void LayoutProp_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
|
|
{
|
|
BOOL fChecked;
|
|
|
|
switch (id)
|
|
{
|
|
case IDC_CHECK_PREVIEW:
|
|
fChecked = Button_GetCheck(hwndCtl);
|
|
LayoutProp_EnablePreviewControls(hwnd, fChecked);
|
|
break;
|
|
|
|
case IDC_CHECK_TOOLBAR:
|
|
fChecked = Button_GetCheck(hwndCtl);
|
|
LayoutProp_EnableToolbarControls(hwnd, fChecked);
|
|
break;
|
|
|
|
case IDC_BUTTON_CUSTOMIZE:
|
|
{
|
|
CBands *pCoolbar = NULL;
|
|
IAthenaBrowser *pBrowser = (IAthenaBrowser *) GetProp(hwnd, c_szPropBrowser);
|
|
|
|
if (pBrowser)
|
|
{
|
|
pBrowser->GetCoolbar(&pCoolbar);
|
|
if (pCoolbar)
|
|
{
|
|
pCoolbar->Invoke(idCustomize, 0);
|
|
SetForegroundWindow(GetParent(hwnd));
|
|
pCoolbar->Release();
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
PropSheet_Changed(GetParent(hwnd), hwnd);
|
|
return;
|
|
}
|
|
|
|
|
|
LRESULT LayoutProp_OnNotify(HWND hwnd, int idFrom, LPNMHDR pnmhdr)
|
|
{
|
|
CBands *pCoolbar = NULL;
|
|
IAthenaBrowser *pBrowser = (IAthenaBrowser *) GetProp(hwnd, c_szPropBrowser);
|
|
LAYOUT *pLayout = (LAYOUT *) GetProp(hwnd, c_szPropLayout);
|
|
FOLDERTYPE ftType;
|
|
HWND hwndBrowser;
|
|
register BOOL fChecked;
|
|
BOOL fSplit;
|
|
BOOL fHeader;
|
|
|
|
switch (pnmhdr->code)
|
|
{
|
|
case PSN_APPLY:
|
|
Assert(pBrowser != NULL);
|
|
|
|
// Basic Options
|
|
fChecked = IsDlgButtonChecked(hwnd, IDC_CHECK_FOLDERBAR);
|
|
if (fChecked != (BOOL) pLayout->fFolderBar)
|
|
{
|
|
pBrowser->SetViewLayout(DISPID_MSGVIEW_FOLDERBAR, LAYOUT_POS_NA, fChecked, 0, 0);
|
|
pLayout->fFolderBar = fChecked;
|
|
}
|
|
|
|
fChecked = IsDlgButtonChecked(hwnd, IDC_CHECK_FOLDERLIST);
|
|
if (fChecked != (BOOL) pLayout->fFolderList)
|
|
{
|
|
pBrowser->SetViewLayout(DISPID_MSGVIEW_FOLDERLIST, LAYOUT_POS_NA, fChecked, 0, 0);
|
|
pLayout->fFolderList = fChecked;
|
|
}
|
|
|
|
fChecked = IsDlgButtonChecked(hwnd, IDC_CHECK_STATUSBAR);
|
|
if (fChecked != (BOOL) pLayout->fStatusBar)
|
|
{
|
|
pBrowser->SetViewLayout(DISPID_MSGVIEW_STATUSBAR, LAYOUT_POS_NA, fChecked, 0, 0);
|
|
pLayout->fStatusBar = fChecked;
|
|
}
|
|
|
|
fChecked = IsDlgButtonChecked(hwnd, IDC_CHECK_OUTLOOKBAR);
|
|
if (fChecked != (BOOL) pLayout->fOutlookBar)
|
|
{
|
|
pBrowser->SetViewLayout(DISPID_MSGVIEW_OUTLOOK_BAR, LAYOUT_POS_NA, fChecked, 0, 0);
|
|
pLayout->fOutlookBar = fChecked;
|
|
}
|
|
|
|
fChecked = IsDlgButtonChecked(hwnd, IDC_CHECK_CONTACTS);
|
|
if (fChecked != (BOOL) pLayout->fContacts)
|
|
{
|
|
pBrowser->SetViewLayout(DISPID_MSGVIEW_CONTACTS, LAYOUT_POS_NA, fChecked, 0, 0);
|
|
pLayout->fContacts = fChecked;
|
|
}
|
|
|
|
if (pLayout->fInfoPaneEnabled)
|
|
{
|
|
fChecked = IsDlgButtonChecked(hwnd, IDC_CHECK_INFOPANE);
|
|
if (fChecked != (BOOL) pLayout->fInfoPane)
|
|
{
|
|
pBrowser->SetViewLayout(DISPID_MSGVIEW_INFOPANE, LAYOUT_POS_NA, fChecked, 0, 0);
|
|
pLayout->fInfoPane = fChecked;
|
|
}
|
|
}
|
|
|
|
// Toolbar
|
|
fChecked = IsDlgButtonChecked(hwnd, IDC_CHECK_TOOLBAR);
|
|
if (fChecked != (BOOL) pLayout->fToolbar)
|
|
{
|
|
pBrowser->SetViewLayout(DISPID_MSGVIEW_TOOLBAR, LAYOUT_POS_NA, fChecked, 0, 0);
|
|
pLayout->fToolbar = fChecked;
|
|
}
|
|
|
|
//Filter Bar
|
|
fChecked = IsDlgButtonChecked(hwnd, IDC_CHECK_FILTERBAR);
|
|
if (fChecked != (BOOL)pLayout->fFilterBar)
|
|
{
|
|
pBrowser->SetViewLayout(DISPID_MSGVIEW_FILTERBAR, LAYOUT_POS_NA, fChecked, 0, 0);
|
|
pLayout->fFilterBar = fChecked;
|
|
}
|
|
|
|
// Preview Pane
|
|
if (IsWindowEnabled(GetDlgItem(hwnd, IDC_CHECK_PREVIEW)))
|
|
{
|
|
pBrowser->GetFolderType(&ftType);
|
|
fChecked = IsDlgButtonChecked(hwnd, IDC_CHECK_PREVIEW);
|
|
fSplit = IsDlgButtonChecked(hwnd, IDC_RADIO_SPLIT_VERT);
|
|
fHeader = IsDlgButtonChecked(hwnd, IDC_CHECK_PREVIEW_HEADER);
|
|
|
|
if (ftType == FOLDER_NEWS)
|
|
{
|
|
pBrowser->SetViewLayout(DISPID_MSGVIEW_PREVIEWPANE_NEWS,
|
|
fSplit ? LAYOUT_POS_LEFT : LAYOUT_POS_BOTTOM,
|
|
fChecked,
|
|
fHeader, 0);
|
|
}
|
|
else
|
|
{
|
|
pBrowser->SetViewLayout(DISPID_MSGVIEW_PREVIEWPANE_MAIL,
|
|
fSplit ? LAYOUT_POS_LEFT : LAYOUT_POS_BOTTOM,
|
|
fChecked,
|
|
fHeader, 0);
|
|
}
|
|
}
|
|
|
|
PropSheet_UnChanged(GetParent(hwnd), hwnd);
|
|
return (0);
|
|
}
|
|
|
|
return (0);
|
|
}
|
|
|