/* -*- 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. */ // edhdrdlg.cpp : implementation file // #include "stdafx.h" #include "netscape.h" #include "edhdrdlg.h" #include "wfemsg.h" #include "prefapi.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //Edit Header Dialog called from CCustomHeadersDlg CEditHeadersDlg::CEditHeadersDlg(CString strHeader, CWnd* pParent /*=NULL*/ ) : CDialog(CEditHeadersDlg::IDD, pParent) { m_pParent = pParent; //{{AFX_DATA_INIT(CEditHeadersDlg) m_strHeader = strHeader; //}}AFX_DATA_INIT } void CEditHeadersDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CEditHeadersDlg) DDX_Text(pDX, IDC_EDIT_HEADERS, m_strHeader); DDV_MaxChars(pDX, m_strHeader, 65); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CEditHeadersDlg, CDialog) //{{AFX_MSG_MAP(CEditHeadersDlg) ON_EN_CHANGE(IDC_EDIT_HEADERS, OnChangeEditHeader) //}}AFX_MSG_MAP END_MESSAGE_MAP() BOOL CEditHeadersDlg::OnInitDialog() { CDialog::OnInitDialog(); m_MNResourceSwitcher.Reset(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CEditHeadersDlg::OnChangeEditHeader() { CWnd *pWnd = (CWnd*) GetDlgItem(IDOK); CEdit *pEdit = (CEdit*) GetDlgItem(IDC_EDIT_HEADERS); CString strText; pEdit->GetWindowText(strText); if (strText.IsEmpty() ) { UpdateData(); pWnd->EnableWindow(FALSE); return; } char buff; for (int i=0; i < strText.GetLength(); i++) { buff = strText.GetAt(i); if ( (isspace((int)buff)) || (buff == ':') || ((int)buff < 32) || ((int)buff > 127) ) { CString strMessage; CString strCaption; strMessage.LoadString(IDS_HEADER_TEXT_WARN); strCaption.LoadString(IDS_CUSTOM_HEADER_ERROR); ::MessageBox(this->GetSafeHwnd(), strMessage, strCaption, MB_OK); UpdateData(FALSE); pEdit->SetFocus(); return; } } UpdateData(); if (!m_strHeader.IsEmpty() && pWnd) { pWnd->EnableWindow(); } else if(m_strHeader.IsEmpty() && pWnd) { pWnd->EnableWindow(FALSE); } } ///////////////////////////////////////////////////////////////////////////// // CCustomHeadersDlg dialog CCustomHeadersDlg::CCustomHeadersDlg(CWnd* pParent /*=NULL*/) : CDialog(CCustomHeadersDlg::IDD, pParent) { m_pParent = pParent; if (!CDialog::Create(CCustomHeadersDlg::IDD, pParent)) { TRACE0("Warning: creation of CCustomHeadersDlg dialog failed\n"); if (m_pParent) PostMessage(WM_EDIT_CUSTOM_DONE,0,IDCANCEL); return; } if( m_pParent && ::IsWindow(m_pParent->m_hWnd) ){ m_pParent->EnableWindow(FALSE); } m_nReturnCode = IDCANCEL; //initial value this->EnableWindow(TRUE); //{{AFX_DATA_INIT(CCustomHeadersDlg) m_strHeader = _T(""); //}}AFX_DATA_INIT } void CCustomHeadersDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCustomHeadersDlg) DDX_Control(pDX, IDC_HEADER_LIST, m_lbHeaderList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CCustomHeadersDlg, CDialog) //{{AFX_MSG_MAP(CCustomHeadersDlg) ON_BN_CLICKED(IDC_ADD_HEADER, OnAddHeader) ON_BN_CLICKED(IDC_EDIT_HEADER_NAME, OnEditHeader) ON_LBN_SETFOCUS(IDC_HEADER_LIST, OnSetfocusHeaderList) ON_BN_CLICKED(IDC_REMOVE_HEADER, OnRemoveHeader) ON_COMMAND(IDCANCEL, OnClose) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCustomHeadersDlg message handlers BOOL CCustomHeadersDlg::OnInitDialog() { CDialog::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; //something bad happened here!! MSG_GetAttributesForFilterScopes (WFE_MSGGetMaster(), scopeMailFolder, (void**)&pInbox, 1, pHeaderItems, &numItems); for (int i=0; i < numItems; i++) { if ( (pHeaderItems[i].attrib == attribOtherHeader) && pHeaderItems[i].isEnabled ) { m_lbHeaderList.AddString(pHeaderItems[i].name); } } delete pHeaderItems; return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CCustomHeadersDlg::OnAddHeader() { CEditHeadersDlg EditDlg( " ",this); if (IDOK == EditDlg.DoModal()) { if ( !EditDlg.m_strHeader.IsEmpty()) { m_lbHeaderList.AddString(EditDlg.m_strHeader); } else { return; } } else { return; } CWnd *pWnd = (CWnd*) GetDlgItem(IDC_ADD_HEADER); if (pWnd) { pWnd->SetFocus(); } UpdateData(); } void CCustomHeadersDlg::OnEditHeader() { int iSel = m_lbHeaderList.GetCurSel(); CString strHeader; if (iSel >= 0) { m_lbHeaderList.GetText(iSel,strHeader); } else { return; } CEditHeadersDlg EditDlg( strHeader,this); if (IDOK == EditDlg.DoModal()) { if ( !EditDlg.m_strHeader.IsEmpty() && !(EditDlg.m_strHeader.Compare(strHeader) == 0) ) { m_lbHeaderList.DeleteString(iSel); m_lbHeaderList.AddString(EditDlg.m_strHeader); } else { return; } } else { return; } CWnd *pWnd = (CWnd*) GetDlgItem(IDC_ADD_HEADER); if (pWnd) { pWnd->SetFocus(); } UpdateData(); } void CCustomHeadersDlg::OnSetfocusHeaderList() { CWnd *pWndRemove = (CWnd*) GetDlgItem(IDC_REMOVE_HEADER); CWnd *pWndEdit = (CWnd*) GetDlgItem(IDC_EDIT_HEADER_NAME); if (pWndRemove && pWndEdit) { if (m_lbHeaderList.GetCount() != 0) { pWndRemove->EnableWindow(); pWndEdit->EnableWindow(); } } } void CCustomHeadersDlg::OnRemoveHeader() { int iSel = m_lbHeaderList.GetCurSel(); m_lbHeaderList.DeleteString(iSel); if (m_lbHeaderList.GetCount() == 0) { CWnd *pWnd = (CWnd*) GetDlgItem(IDC_REMOVE_HEADER); CWnd *pWnd2 = (CWnd*) GetDlgItem(IDC_EDIT_HEADER_NAME); if (pWnd) { pWnd->EnableWindow(FALSE); pWnd2->EnableWindow(FALSE); } pWnd = (CWnd*) GetDlgItem(IDC_ADD_HEADER); if (pWnd) pWnd->SetFocus(); } else m_lbHeaderList.SetFocus(); } void CCustomHeadersDlg::OnOK() { // TODO: Add extra validation here if (m_lbHeaderList.GetCount() != 0) { int nListCount = m_lbHeaderList.GetCount(); CString strTemp; m_lbHeaderList.GetText(0,strTemp); CString strHeaderPrefList = strTemp; for (int i = 1; i < nListCount; i++) { m_lbHeaderList.GetText(i,strTemp); strHeaderPrefList += ": " + strTemp; } PREF_SetCharPref("mailnews.customHeaders", strHeaderPrefList); } else { PREF_SetCharPref("mailnews.customHeaders",""); } m_nReturnCode = IDOK; OnClose(); } void CCustomHeadersDlg::PostNcDestroy() { CDialog::PostNcDestroy(); if( m_pParent && ::IsWindow(m_pParent->m_hWnd) ){ m_pParent->EnableWindow(TRUE); // Return focus to parent window m_pParent->SetActiveWindow(); m_pParent->SetFocus(); } delete this; } void CCustomHeadersDlg::OnClose() { GetParent()->PostMessage(WM_EDIT_CUSTOM_DONE,0,m_nReturnCode); DestroyWindow(); }