зеркало из https://github.com/mozilla/gecko-dev.git
533 строки
13 KiB
C++
533 строки
13 KiB
C++
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
|
|
#include "stdafx.h"
|
|
#include "windowsx.h"
|
|
|
|
#include "wfemsg.h"
|
|
#include "prefapi.h"
|
|
|
|
#include "nethelp.h"
|
|
#include "advprosh.h"
|
|
|
|
/*-----------------------------------------------------------------*/
|
|
/* */
|
|
/* Search options page */
|
|
/* */
|
|
/*-----------------------------------------------------------------*/
|
|
|
|
CSearchOptionsPage::CSearchOptionsPage(CWnd *pParent, UINT nID)
|
|
: CNetscapePropertyPage(nID)
|
|
{
|
|
m_pParent = pParent;
|
|
m_bHasBeenViewed = FALSE;
|
|
}
|
|
|
|
CSearchOptionsPage::~CSearchOptionsPage()
|
|
{
|
|
}
|
|
|
|
void CSearchOptionsPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CAdvSearchOptionsDlg)
|
|
DDX_Check(pDX, IDC_CHECK_SUBFOLDERS, m_bIncludeSubfolders);
|
|
DDX_Check(pDX, IDC_CHECK_SEARCH_LOCALLY, m_iSearchArea);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
BOOL CSearchOptionsPage::OnInitDialog()
|
|
{
|
|
XP_Bool bSubFolders = FALSE;
|
|
XP_Bool bSearchServer = FALSE;
|
|
|
|
PREF_GetBoolPref("mailnews.searchSubFolders",&bSubFolders);
|
|
m_bIncludeSubfolders = bSubFolders;
|
|
|
|
m_bOffline = NET_IsOffline();
|
|
|
|
if(!m_bOffline)
|
|
PREF_GetBoolPref("mailnews.searchServer",&bSearchServer);
|
|
else
|
|
{
|
|
CWnd * pCheck = GetDlgItem(IDC_CHECK_SEARCH_LOCALLY);
|
|
if(pCheck != NULL)
|
|
pCheck->EnableWindow(FALSE);
|
|
}
|
|
|
|
m_iSearchArea = bSearchServer ? 0 : 1;
|
|
|
|
UpdateData(FALSE);
|
|
|
|
m_bHasBeenViewed = TRUE;
|
|
|
|
BOOL ret = CNetscapePropertyPage::OnInitDialog();
|
|
return ret;
|
|
}
|
|
|
|
void CSearchOptionsPage::OnOK()
|
|
{
|
|
if(!m_bHasBeenViewed)
|
|
return;
|
|
UpdateData();
|
|
PREF_SetBoolPref("mailnews.searchSubFolders",(XP_Bool)m_bIncludeSubfolders);
|
|
|
|
if(!m_bOffline)
|
|
{
|
|
XP_Bool bSearchServer = m_iSearchArea ? 0 : 1;
|
|
PREF_SetBoolPref("mailnews.searchServer", bSearchServer);
|
|
}
|
|
}
|
|
|
|
void CSearchOptionsPage::OnCancel()
|
|
{
|
|
CNetscapePropertyPage::OnCancel();
|
|
}
|
|
|
|
BOOL CSearchOptionsPage::OnSetActive()
|
|
{
|
|
if(!CNetscapePropertyPage::OnSetActive())
|
|
return FALSE;
|
|
|
|
return TRUE ;
|
|
}
|
|
|
|
BOOL CSearchOptionsPage::OnKillActive()
|
|
{
|
|
return CNetscapePropertyPage::OnKillActive();
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CSearchOptionsPage, CNetscapePropertyPage)
|
|
END_MESSAGE_MAP()
|
|
|
|
/*-----------------------------------------------------------------*/
|
|
/* */
|
|
/* Edit headers page */
|
|
/* */
|
|
/*-----------------------------------------------------------------*/
|
|
|
|
CCustomHeadersPage::CCustomHeadersPage(CWnd *pParent, UINT nID)
|
|
: CNetscapePropertyPage(nID)
|
|
{
|
|
m_pParent = pParent;
|
|
m_bHasBeenViewed = FALSE;
|
|
}
|
|
|
|
CCustomHeadersPage::~CCustomHeadersPage()
|
|
{
|
|
}
|
|
|
|
void CCustomHeadersPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
}
|
|
|
|
BOOL CCustomHeadersPage::OnInitDialog()
|
|
{
|
|
MSG_FolderInfo *pInbox = NULL;
|
|
MSG_GetFoldersWithFlag (WFE_MSGGetMaster(), MSG_FOLDER_FLAG_INBOX, &pInbox, 1);
|
|
uint16 numItems;
|
|
MSG_GetNumAttributesForFilterScopes (WFE_MSGGetMaster(), scopeMailFolder, (void**)&pInbox, 1, &numItems);
|
|
MSG_SearchMenuItem * pHeaderItems = new MSG_SearchMenuItem [numItems];
|
|
|
|
if (!pHeaderItems)
|
|
return FALSE;
|
|
|
|
MSG_GetAttributesForFilterScopes (WFE_MSGGetMaster(), scopeMailFolder, (void**)&pInbox, 1, pHeaderItems, &numItems);
|
|
|
|
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
|
|
|
|
for (int i=0; i < numItems; i++)
|
|
{
|
|
if ( (pHeaderItems[i].attrib == attribOtherHeader) && pHeaderItems[i].isEnabled )
|
|
pList->AddString(pHeaderItems[i].name);
|
|
}
|
|
|
|
delete pHeaderItems;
|
|
|
|
updateUI();
|
|
|
|
m_bHasBeenViewed = TRUE;
|
|
|
|
return CNetscapePropertyPage::OnInitDialog();
|
|
}
|
|
|
|
void CCustomHeadersPage::OnAddHeader()
|
|
{
|
|
CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT_NEW_HEADER);
|
|
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
|
|
|
|
char szString[256] = {'\0'};
|
|
pEdit->GetWindowText(szString, sizeof(szString));
|
|
if(strlen(szString) == 0)
|
|
return;
|
|
pList->AddString(szString);
|
|
pEdit->SetWindowText("");
|
|
pEdit->SetFocus();
|
|
}
|
|
|
|
void CCustomHeadersPage::OnRemoveHeader()
|
|
{
|
|
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
|
|
|
|
int iSel = pList->GetCurSel();
|
|
if(iSel < 0)
|
|
return;
|
|
|
|
pList->DeleteString(iSel);
|
|
|
|
int iNewCount = pList->GetCount();
|
|
|
|
if(iNewCount > 0)
|
|
pList->SetCurSel((iSel >= iNewCount) ? iNewCount - 1 : iSel);
|
|
|
|
OnSelChangeHeaderList();
|
|
|
|
if(iNewCount == 0)
|
|
{
|
|
CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT_NEW_HEADER);
|
|
pEdit->SetFocus();
|
|
}
|
|
}
|
|
|
|
void CCustomHeadersPage::OnReplaceHeader()
|
|
{
|
|
CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT_NEW_HEADER);
|
|
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
|
|
|
|
char szString[256] = {'\0'};
|
|
pEdit->GetWindowText(szString, sizeof(szString));
|
|
if(strlen(szString) == 0)
|
|
return;
|
|
|
|
int iSel = pList->GetCurSel();
|
|
if(iSel != LB_ERR)
|
|
{
|
|
pList->DeleteString(iSel);
|
|
pList->InsertString(iSel, szString);
|
|
}
|
|
else
|
|
pList->AddString(szString);
|
|
|
|
updateUI();
|
|
pEdit->SetFocus();
|
|
}
|
|
|
|
void CCustomHeadersPage::OnChangeEditHeader()
|
|
{
|
|
updateUI();
|
|
char szString[256];
|
|
GetDlgItemText(IDC_EDIT_NEW_HEADER, szString, sizeof(szString));
|
|
if(strlen(szString) > 0)
|
|
SetDefID(IDC_ADD_HEADER);
|
|
}
|
|
|
|
void CCustomHeadersPage::OnSelChangeHeaderList()
|
|
{
|
|
CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT_NEW_HEADER);
|
|
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
|
|
|
|
char szString[256] = {'\0'};
|
|
|
|
int iSel = pList->GetCurSel();
|
|
|
|
if(iSel >= 0)
|
|
{
|
|
pList->GetText(iSel, szString);
|
|
pEdit->SetWindowText(szString);
|
|
}
|
|
else
|
|
pEdit->SetWindowText("");
|
|
|
|
updateUI();
|
|
}
|
|
|
|
BOOL CCustomHeadersPage::OnSetActive()
|
|
{
|
|
if(!CNetscapePropertyPage::OnSetActive())
|
|
return FALSE;
|
|
|
|
return TRUE ;
|
|
}
|
|
|
|
BOOL CCustomHeadersPage::OnKillActive()
|
|
{
|
|
return CNetscapePropertyPage::OnKillActive();
|
|
}
|
|
|
|
void CCustomHeadersPage::OnOK()
|
|
{
|
|
if(!m_bHasBeenViewed)
|
|
return;
|
|
|
|
CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT_NEW_HEADER);
|
|
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
|
|
|
|
int iCount = pList->GetCount();
|
|
|
|
if(iCount != 0)
|
|
{
|
|
CString strTemp;
|
|
pList->GetText(0, strTemp);
|
|
CString strHeaderPrefList = strTemp;
|
|
|
|
for (int i = 1; i < iCount; i++)
|
|
{
|
|
pList->GetText(i,strTemp);
|
|
strHeaderPrefList += ": " + strTemp;
|
|
}
|
|
PREF_SetCharPref("mailnews.customHeaders", strHeaderPrefList);
|
|
}
|
|
else
|
|
{
|
|
PREF_SetCharPref("mailnews.customHeaders","");
|
|
}
|
|
CPropertyPage::OnOK();
|
|
}
|
|
|
|
void CCustomHeadersPage::OnCancel()
|
|
{
|
|
CNetscapePropertyPage::OnCancel();
|
|
}
|
|
|
|
void CCustomHeadersPage::enableDlgItem(int iId, BOOL bEnable)
|
|
{
|
|
CWnd * pItem = GetDlgItem(iId);
|
|
if(pItem == NULL)
|
|
return;
|
|
pItem->EnableWindow(bEnable);
|
|
}
|
|
|
|
void CCustomHeadersPage::updateUI()
|
|
{
|
|
CListBox * pList = (CListBox *)GetDlgItem(IDC_HEADER_LIST);
|
|
|
|
char szString[256] = {'\0'};
|
|
int iSel = pList->GetCurSel();
|
|
|
|
GetDlgItemText(IDC_EDIT_NEW_HEADER, szString, sizeof(szString));
|
|
enableDlgItem(IDC_ADD_HEADER, (strlen(szString) > 0));
|
|
|
|
enableDlgItem(IDC_REMOVE_HEADER, (iSel >= 0));
|
|
|
|
char szToReplace[256] = {'\0'};
|
|
pList->GetText(iSel, szToReplace);
|
|
enableDlgItem(IDC_REPLACE_HEADER, ((strlen(szString) > 0) && (iSel >= 0) && (0 != strcmp(szString, szToReplace))));
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CCustomHeadersPage, CNetscapePropertyPage)
|
|
ON_BN_CLICKED(IDC_ADD_HEADER, OnAddHeader)
|
|
ON_BN_CLICKED(IDC_REMOVE_HEADER, OnRemoveHeader)
|
|
ON_BN_CLICKED(IDC_REPLACE_HEADER, OnReplaceHeader)
|
|
ON_EN_CHANGE(IDC_EDIT_NEW_HEADER, OnChangeEditHeader)
|
|
ON_LBN_SELCHANGE(IDC_HEADER_LIST, OnSelChangeHeaderList)
|
|
END_MESSAGE_MAP()
|
|
|
|
/*-----------------------------------------------------------------*/
|
|
/* */
|
|
/* Advanced search property sheet */
|
|
/* */
|
|
/*-----------------------------------------------------------------*/
|
|
|
|
CAdvancedOptionsPropertySheet::CAdvancedOptionsPropertySheet(CWnd *pParent,
|
|
const char* pName,
|
|
DWORD dwPagesBitFlag)
|
|
: CNetscapePropertySheet(pName, pParent, 0, NULL),
|
|
m_pParent(pParent),
|
|
m_iReturnCode(IDCANCEL),
|
|
m_dwPagesBitFlag(dwPagesBitFlag),
|
|
m_OptionsPage(NULL),
|
|
m_HeadersPage(NULL)
|
|
{
|
|
assert(m_dwPagesBitFlag != AOP_NOPAGES);
|
|
|
|
if(m_dwPagesBitFlag & AOP_SEARCH_OPTIONS)
|
|
{
|
|
m_OptionsPage = new CSearchOptionsPage(pParent, IDD_ADVANCED_SEARCH);
|
|
AddPage(m_OptionsPage);
|
|
}
|
|
|
|
if(m_dwPagesBitFlag & AOP_CUSTOM_HEADERS)
|
|
{
|
|
m_HeadersPage = new CCustomHeadersPage(pParent, IDD_HEADER_LIST);
|
|
AddPage(m_HeadersPage);
|
|
}
|
|
}
|
|
|
|
CAdvancedOptionsPropertySheet::~CAdvancedOptionsPropertySheet()
|
|
{
|
|
if(m_OptionsPage!= NULL)
|
|
delete m_OptionsPage;
|
|
if(m_HeadersPage!= NULL)
|
|
delete m_HeadersPage;
|
|
}
|
|
|
|
CNetscapePropertyPage * CAdvancedOptionsPropertySheet::GetCurrentPage()
|
|
{
|
|
return (CNetscapePropertyPage *)GetActivePage();
|
|
}
|
|
|
|
BOOL CAdvancedOptionsPropertySheet::OnCommand(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
#ifdef _WIN32
|
|
int id = LOWORD(wParam);
|
|
#else
|
|
int id = (int)wParam;
|
|
#endif
|
|
|
|
if((id == IDOK) || (id == IDCANCEL))
|
|
{
|
|
m_iReturnCode = id;
|
|
OnClose();
|
|
return TRUE;
|
|
}
|
|
|
|
return CNetscapePropertySheet::OnCommand(wParam, lParam);
|
|
}
|
|
|
|
#define BUTTON_CONTAINER 33
|
|
#define BUTTON_WIDTH 75
|
|
#define BUTTON_HEIGHT 23
|
|
#define BUTTON_TO_RIGHT 9
|
|
#define BUTTON_TO_BOTTOM 10
|
|
#define BUTTON_TO_BUTTON 6
|
|
#define X_ADJUSTMENT 9
|
|
#define Y_ADJUSTMENT 3
|
|
|
|
#define SetWinFont(hwnd, hfont, fRedraw) FORWARD_WM_SETFONT((hwnd), (hfont), (fRedraw), ::SendMessage)
|
|
#define GetWinFont(hwnd) FORWARD_WM_GETFONT((hwnd), ::SendMessage)
|
|
|
|
#ifdef _WIN32
|
|
|
|
BOOL CAdvancedOptionsPropertySheet::OnInitDialog()
|
|
{
|
|
BOOL ret = CNetscapePropertySheet::OnInitDialog();
|
|
|
|
#else
|
|
|
|
int CAdvancedOptionsPropertySheet::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
int ret = CNetscapePropertySheet::OnCreate(lpCreateStruct);
|
|
|
|
#endif
|
|
|
|
if(m_pParent && ::IsWindow(m_pParent->m_hWnd))
|
|
m_pParent->EnableWindow(FALSE);
|
|
|
|
EnableWindow(TRUE);
|
|
|
|
RECT rc;
|
|
GetWindowRect(&rc);
|
|
int iWidth = rc.right - rc.left;
|
|
int iHeight = rc.bottom - rc.top + BUTTON_CONTAINER;
|
|
SetWindowPos(NULL,0,0, iWidth, iHeight, SWP_NOZORDER | SWP_NOMOVE);
|
|
|
|
DWORD dwStyle = WS_VISIBLE | WS_CHILD;
|
|
HINSTANCE hInst = AfxGetInstanceHandle();
|
|
|
|
GetClientRect(&rc);
|
|
HFONT hFont = GetWinFont(m_hWnd);
|
|
|
|
int y = rc.bottom - rc.top - BUTTON_TO_BOTTOM - BUTTON_HEIGHT + Y_ADJUSTMENT;
|
|
int w = BUTTON_WIDTH;
|
|
int h = BUTTON_HEIGHT;
|
|
int x;
|
|
HWND hWnd;
|
|
|
|
x = rc.right - rc.left - BUTTON_TO_RIGHT - (BUTTON_TO_BUTTON + BUTTON_WIDTH) + X_ADJUSTMENT;
|
|
hWnd = CreateWindow("button", "Help", dwStyle, x,y, w, h, m_hWnd, (HMENU)IDHELP, hInst, NULL);
|
|
SetWinFont(hWnd, hFont, TRUE);
|
|
|
|
x -= BUTTON_TO_BUTTON + BUTTON_WIDTH;
|
|
hWnd = CreateWindow("button", "Cancel", dwStyle, x,y, w, h, m_hWnd, (HMENU)IDCANCEL, hInst, NULL);
|
|
SetWinFont(hWnd, hFont, TRUE);
|
|
|
|
x -= BUTTON_TO_BUTTON + BUTTON_WIDTH;
|
|
hWnd = CreateWindow("button", "OK", dwStyle, x,y, w, h, m_hWnd, (HMENU)IDOK, hInst, NULL);
|
|
SetWinFont(hWnd, hFont, TRUE);
|
|
|
|
return ret;
|
|
}
|
|
|
|
void CAdvancedOptionsPropertySheet::OnDestroy()
|
|
{
|
|
CNetscapePropertySheet::OnDestroy();
|
|
}
|
|
|
|
void CAdvancedOptionsPropertySheet::OnClose()
|
|
{
|
|
if(m_dwPagesBitFlag & AOP_SEARCH_OPTIONS)
|
|
{
|
|
if(m_iReturnCode == IDOK)
|
|
m_OptionsPage->OnOK();
|
|
m_pParent->PostMessage(WM_ADVANCED_OPTIONS_DONE, 0, m_iReturnCode);
|
|
}
|
|
|
|
if(m_dwPagesBitFlag & AOP_CUSTOM_HEADERS)
|
|
{
|
|
if(m_iReturnCode == IDOK)
|
|
m_HeadersPage->OnOK();
|
|
m_pParent->PostMessage(WM_EDIT_CUSTOM_DONE, 0, m_iReturnCode);
|
|
}
|
|
|
|
if(m_pParent && ::IsWindow(m_pParent->m_hWnd))
|
|
m_pParent->EnableWindow(TRUE);
|
|
|
|
DestroyWindow();
|
|
}
|
|
|
|
void CAdvancedOptionsPropertySheet::OnNcDestroy()
|
|
{
|
|
delete this;
|
|
}
|
|
|
|
void CAdvancedOptionsPropertySheet::OnHelp()
|
|
{
|
|
if(GetActivePage() == m_OptionsPage)
|
|
NetHelp(HELP_SEARCH_MAILNEWS_OPTIONS);
|
|
if(GetActivePage() == m_HeadersPage)
|
|
NetHelp(HELP_SEARCH_MAILNEWS_HEADERS);
|
|
}
|
|
|
|
BOOL CAdvancedOptionsPropertySheet::PreTranslateMessage(MSG * pMsg)
|
|
{
|
|
if(pMsg->message == WM_KEYDOWN)
|
|
{
|
|
switch ((int)pMsg->wParam)
|
|
{
|
|
case VK_ESCAPE:
|
|
OnClose();
|
|
break;
|
|
default:
|
|
return CNetscapePropertySheet::PreTranslateMessage(pMsg);
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
return CNetscapePropertySheet::PreTranslateMessage(pMsg);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CAdvancedOptionsPropertySheet, CNetscapePropertySheet)
|
|
#ifndef _WIN32
|
|
ON_WM_CREATE()
|
|
#endif
|
|
ON_WM_CLOSE()
|
|
ON_WM_DESTROY()
|
|
END_MESSAGE_MAP()
|