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.
- */
-
- // dlghtmrp.cpp : implementation file
- //
-
- #include "stdafx.h"
- #include "msgcom.h"
- #include "dlghtmrp.h"
- #include "nethelp.h"
- #include "xp_help.h"
-
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
-
- /////////////////////////////////////////////////////////////////////////////////////
- ///CListBoxRecipients list box for Prefers HTML and Does not Prefer HTML
-
- CListBoxRecipients::CListBoxRecipients(): CListBox()
- {
- }
-
- int CListBoxRecipients::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
- {
- int value1 = ((MSG_RecipientList*)(lpCompareItemStruct->itemData1))->value;
- int value2 = ((MSG_RecipientList*)(lpCompareItemStruct->itemData2))->value;
-
- if (value1 < value2)
- {
- return -1; //sorts before
- }
- else if (value1 == value2)
- {
- return 0; //sorts same
- }
- else
- {
- return 1; //sorts after
- }
- }
-
- void CListBoxRecipients::DeleteItem( LPDELETEITEMSTRUCT lpDeleteItemStruct)
- {
- //not implemented
- }
-
- void CListBoxRecipients::SetColumnPositions(int iPosIndex, int iPosName, int iPosStatus)
- {
- m_iPosIndex = iPosIndex;
- m_iPosName = iPosName;
- m_iPosStatus = iPosStatus;
- }
-
-
- void CListBoxRecipients::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
- {
- HDC hDC = lpDrawItemStruct->hDC;
- RECT rcItem = lpDrawItemStruct->rcItem;
- MSG_RecipientList *itemData = (MSG_RecipientList *) lpDrawItemStruct->itemData;
- HBRUSH hBrushFill = NULL;
- COLORREF oldBk, oldText;
-
- if ( lpDrawItemStruct->itemState & ODS_SELECTED ) {
- hBrushFill = ::CreateSolidBrush( GetSysColor( COLOR_HIGHLIGHT ) );
- oldBk = ::SetBkColor( hDC, GetSysColor( COLOR_HIGHLIGHT ) );
- oldText = ::SetTextColor( hDC, GetSysColor( COLOR_HIGHLIGHTTEXT ) );
- } else {
- hBrushFill = ::CreateSolidBrush( GetSysColor( COLOR_WINDOW ) );
- oldBk = ::SetBkColor( hDC, GetSysColor( COLOR_WINDOW ) );
- oldText = ::SetTextColor( hDC, GetSysColor( COLOR_WINDOWTEXT ) );
- }
-
- if ( lpDrawItemStruct->itemID != -1 && itemData) {
- RECT rcTemp = rcItem;
- ::FillRect( hDC, &rcItem, hBrushFill );
-
- ::DrawText( hDC, itemData->name, -1,
- &rcTemp, DT_VCENTER|DT_LEFT );
- }
-
- if ( lpDrawItemStruct->itemAction & ODA_FOCUS ) {
- ::DrawFocusRect( hDC, &lpDrawItemStruct->rcItem );
- }
-
- if (hBrushFill)
- VERIFY( ::DeleteObject( hBrushFill ) );
-
- ::SetBkColor( hDC, oldBk );
- ::SetTextColor( hDC, oldText );
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CHtmlRecipientsDlg dialog
-
- CHtmlRecipientsDlg::CHtmlRecipientsDlg(MSG_Pane* pComposePane,
- MSG_RecipientList* nohtml,
- MSG_RecipientList* htmlok,
- CWnd* pParent /*=NULL*/)
- : CDialog(CHtmlRecipientsDlg::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CHtmlRecipientsDlg)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- m_pComposePane = pComposePane;
- m_pNoHtml = nohtml;
- m_pHtmlOk = htmlok;
- }
-
-
- void CHtmlRecipientsDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CHtmlRecipientsDlg)
- // NOTE: the ClassWizard will add DDX and DDV calls here
- //}}AFX_DATA_MAP
- }
-
-
- BEGIN_MESSAGE_MAP(CHtmlRecipientsDlg, CDialog)
- //{{AFX_MSG_MAP(CHtmlRecipientsDlg)
- ON_BN_CLICKED(IDC_HELP_RECIPIENTS, OnHelp)
- ON_BN_CLICKED(ID_BTN_ADD, OnBtnAdd)
- ON_BN_CLICKED(ID_BTN_REMOVE, OnBtnRemove)
- ON_LBN_SETFOCUS(IDC_LIST1, OnSetfocusList1)
- ON_LBN_SETFOCUS(IDC_LIST2, OnSetfocusList2)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- /////////////////////////////////////////////////////////////////////////////
- // CHtmlRecipientsDlg message handlers
-
- void CHtmlRecipientsDlg::OnSetfocusList1()
- {
- // TODO: Add your control notification handler code here
- CWnd *pWnd = GetDlgItem(ID_BTN_ADD);
- if (pWnd)
- pWnd->EnableWindow(TRUE);
- pWnd = GetDlgItem(ID_BTN_REMOVE);
- if (pWnd)
- pWnd->EnableWindow(FALSE);
-
- }
-
-
-
- void CHtmlRecipientsDlg::OnSetfocusList2()
- {
- CWnd *pWnd = GetDlgItem(ID_BTN_REMOVE);
- if (pWnd)
- pWnd->EnableWindow(TRUE);
- pWnd = GetDlgItem(ID_BTN_ADD);
- if (pWnd)
- pWnd->EnableWindow(FALSE);
-
- }
-
-
- void CHtmlRecipientsDlg::OnCancel()
- {
- MSG_ResultsRecipients(m_pComposePane,
- TRUE,
- 0, /* List of IDs, terminated
- with a negative entry. */
- 0/* Another list of IDs. */
- );
- CDialog::OnCancel();
- }
-
-
- void CHtmlRecipientsDlg::OnOK()
- {
- BOOL bFailure = FALSE;
-
- int nCount1 = m_ListBox1.GetCount();
- int nCount2 = m_ListBox2.GetCount();
-
- int32 *pNoHTML = new int32[nCount1 +1];
- int32 *pHtmlOK = new int32[nCount2 +1];
-
- MSG_RecipientList *itemData = NULL;
-
- if (!pNoHTML || !pHtmlOK)
- bFailure = TRUE;
- else
- {
- //get the first list
- for ( int i = 0; i < nCount1; i++)
- {
- itemData = (MSG_RecipientList *)m_ListBox1.GetItemData(i);
- if (itemData)
- pNoHTML[i] = itemData->value;
- else
- {
- bFailure = TRUE;
- break;
- }
- }
- //terminate the array
- if (!bFailure)
- pNoHTML[nCount1] = -1;
-
-
- //get the second list
- for ( i = 0; i < nCount2; i++)
- {
- itemData = (MSG_RecipientList *)m_ListBox2.GetItemData(i);
- if (itemData)
- pHtmlOK[i] = itemData->value;
- else
- {
- bFailure = TRUE;
- break;
- }
- }
- //terminate the second array
- if (!bFailure)
- pHtmlOK[nCount2] = -1;
-
- }
-
-
-
- if (!bFailure)
- { //send back the lists
- MSG_ResultsRecipients(m_pComposePane,
- FALSE,
- pNoHTML, /* List of IDs, terminated
- with a negative entry. */
- pHtmlOK/* Another list of IDs. */
- );
- CDialog::OnOK();
- }
- else
- {
- MSG_ResultsRecipients(m_pComposePane,
- TRUE,
- 0, /* List of IDs, terminated
- with a negative entry. */
- 0/* Another list of IDs. */
- );
- CDialog::OnOK();
- //Failed to modify recipients list!
- }
- //clean up the lists
- if (pNoHTML && pHtmlOK)
- {
- delete [] pNoHTML;
- delete [] pHtmlOK;
- }
- }
-
- void CHtmlRecipientsDlg::OnHelp()
- {
- NetHelp(HELP_HTML_MAIL_QUESTION_RECIPIENT);
- }
-
- void CHtmlRecipientsDlg::OnBtnAdd()
- {
- CWnd *pWnd = GetDlgItem(ID_BTN_ADD);
- CWnd *pListWnd2 = GetDlgItem(IDC_LIST2);
-
- if (pWnd)
- {
- if (pWnd->IsWindowEnabled())
- {
- int nCount = m_ListBox1.GetSelCount();
- if (nCount <= 0 || nCount == LB_ERR)
- return;
-
- LPINT lpIndexes = new int[nCount];
-
- int err = m_ListBox1.GetSelItems(nCount,lpIndexes);
-
- if (err == LB_ERR)
- {
- if (lpIndexes)
- delete [] lpIndexes;
- return;
- }
- if (lpIndexes && pListWnd2)
- {
- MSG_RecipientList* itemData = NULL;
- for (int i = 0; i < nCount; i++)
- {
- itemData = (MSG_RecipientList*)m_ListBox1.GetItemData(lpIndexes[i]);
- if (itemData)
- {
- ::SendMessage( pListWnd2->m_hWnd, LB_ADDSTRING, (WPARAM) 0, (LPARAM) itemData);
- }
- }
-
- for ( i = nCount -1 ; i >= 0; i--)
- {
- ::SendMessage(m_ListBox1.m_hWnd, LB_DELETESTRING, lpIndexes[i], (LPARAM) NULL);
- }
-
- delete [] lpIndexes;
- }
- }
- }
- }
-
- void CHtmlRecipientsDlg::OnBtnRemove()
- {
- CWnd *pWnd = GetDlgItem(ID_BTN_REMOVE);
- CWnd *pListWnd1 = GetDlgItem(IDC_LIST1);
-
- if (pWnd)
- {
- if (pWnd->IsWindowEnabled())
- {
- int nCount = m_ListBox2.GetSelCount();
- if (nCount <= 0 || nCount == LB_ERR)
- return;
-
- LPINT lpIndexes = new int[nCount];
-
- int err = m_ListBox2.GetSelItems(nCount,lpIndexes);
-
- if (err == LB_ERR)
- {
- if (lpIndexes)
- delete [] lpIndexes;
- return;
- }
- if (lpIndexes && pListWnd1)
- {
- MSG_RecipientList* itemData = NULL;
- for (int i = 0; i < nCount; i++)
- {
- itemData = (MSG_RecipientList*)m_ListBox2.GetItemData(lpIndexes[i]);
- if (itemData)
- {
- ::SendMessage( pListWnd1->m_hWnd, LB_ADDSTRING, (WPARAM) 0, (LPARAM) itemData);
- }
-
- }
-
- for ( i = nCount -1 ; i >= 0; i--)
- {
- ::SendMessage(m_ListBox2.m_hWnd, LB_DELETESTRING, lpIndexes[i], (LPARAM) NULL);
-
- }
-
- delete [] lpIndexes;
- }
- }
- }
-
- }
-
- BOOL CHtmlRecipientsDlg::OnInitDialog()
- {
- BOOL ret = CDialog::OnInitDialog();
-
- m_ListBox1.SubclassDlgItem( IDC_LIST1, this );
- m_ListBox2.SubclassDlgItem( IDC_LIST2, this);
-
- RECT rcText;
- int iPosName;
-
- ::SetRect( &rcText, 0, 0, 64, 64 );
-
- iPosName = rcText.right;;
-
- m_ListBox1.SetColumnPositions( 0, iPosName, 0 );
- m_ListBox2.SetColumnPositions( 0, iPosName, 0 );
-
- PopulateLists();
- return TRUE;
- }
-
- BOOL CHtmlRecipientsDlg::PopulateLists()
- {
-
- CWnd *pList1 = (CListBox *)GetDlgItem(IDC_LIST1);
- CWnd *pList2 = (CListBox *)GetDlgItem(IDC_LIST2);
-
- if (!pList1 || !pList2)
- return 0;
-
- int i = 0; //array index into recipient list
- int err;
- for (; m_pNoHtml[i].name != NULL; i++)
- {
- if (m_pNoHtml[i].value == -1 || m_pNoHtml[i].name == NULL)
- break;
-
- err = ::SendMessage( pList1->m_hWnd, LB_ADDSTRING, (WPARAM) 0, (LPARAM) &(m_pNoHtml[i]));
- }
-
- //i is reset in the for loop
- for (i = 0; m_pHtmlOk[i].name != NULL; i++)
- {
- if (m_pHtmlOk[i].value == -1 || m_pHtmlOk[i].name == NULL)
- break;
- err = ::SendMessage( pList2->m_hWnd, LB_ADDSTRING, (WPARAM) 0, (LPARAM) &(m_pHtmlOk[i]));
- }
- return TRUE;
-
- }
-
-
- //Used to launch the dialog when passed in as a callback
- int CreateRecipientsDialog(MSG_Pane* composepane, void* closure,
- MSG_RecipientList* nohtml,
- MSG_RecipientList* htmlok,
- void *pWnd)
- {
- CHtmlRecipientsDlg rRecipientsDlg(composepane, nohtml, htmlok, (CWnd*)pWnd);
-
- int ret = rRecipientsDlg.DoModal();
-
- return ret;
- }
-
-