home *** CD-ROM | disk | FTP | other *** search
- /* -*- 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();
- }
-