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.
- */
- // addrdlg.cpp : implementation file
- //
-
- #include "stdafx.h"
- #include "wfemsg.h"
- #include "msg_srch.h"
- #include "dirprefs.h"
- #include "addrdlg.h"
- #include "apiaddr.h"
- #include "nethelp.h"
- #include "prefapi.h"
- #include "intl_csi.h"
- #include "srchdlg.h"
-
- #ifdef _DEBUG
- #undef THIS_FILE
- static char BASED_CODE THIS_FILE[] = __FILE__;
- #endif
-
- extern "C" {
- #include "xpgetstr.h"
- extern int MK_ADDR_CCNAME;
- extern int MK_ADDR_BCCNAME;
- extern int MK_ADDR_TONAME;
- };
-
- #define ADDRESS_DIALOG_TIMER 7
- #define TYPEDOWN_SPEED 300
- #define LDAP_SEARCH_SPEED 1250
- #define ADDRDLG_OUTLINER_TYPEDOWN_TIMER 251
- #define OUTLINER_TYPEDOWN_SPEED 1250
-
-
- class CAddrDialog;
-
-
- CAddrDialogCX::CAddrDialogCX(CAddrDialog *pDialog)
- : CStubsCX(AddressCX, MWContextAddressBook)
- {
- m_pDialog = pDialog;
- m_lPercent = 0;
- m_bAnimated = FALSE;
- }
-
-
- void CAddrDialogCX::SetProgressBarPercent(MWContext *pContext, int32 lPercent ) {
- // Ensure the safety of the value.
-
- lPercent = lPercent < 0 ? 0 : ( lPercent > 100 ? 100 : lPercent );
-
- if ( m_lPercent == lPercent ) {
- return;
- }
-
- m_lPercent = lPercent;
- if (m_pDialog) {
- m_pDialog->SetProgressBarPercent(lPercent);
- }
- }
-
- void CAddrDialogCX::Progress(MWContext *pContext, const char *pMessage) {
- m_csProgress = pMessage;
- if ( m_pDialog ) {
- m_pDialog->SetStatusText(pMessage);
- }
- }
-
- int32 CAddrDialogCX::QueryProgressPercent() {
- return m_lPercent;
- }
-
-
- void CAddrDialogCX::AllConnectionsComplete(MWContext *pContext)
- {
- // Call the base.
- CStubsCX::AllConnectionsComplete(pContext);
-
- // Also, we can clear the progress bar now.
- m_lPercent = 0;
- if ( m_pDialog ) {
- m_pDialog->SetProgressBarPercent(m_lPercent);
- m_pDialog->AllConnectionsComplete(pContext);
- }
- if (m_pDialog) {
- m_pDialog->SendMessageToDescendants(WM_IDLEUPDATECMDUI, (WPARAM)TRUE, (LPARAM)0);
- }
- }
-
- void CAddrDialogCX::UpdateStopState( MWContext *pContext )
- {
- if (m_pDialog) {
- m_pDialog->SendMessageToDescendants(WM_IDLEUPDATECMDUI, (WPARAM)TRUE, (LPARAM)0);
- }
- }
-
- CWnd *CAddrDialogCX::GetDialogOwner() const {
- return m_pDialog;
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrDialogEntryList
-
- class CAddrDialogEntryList: public IMsgList {
-
- CAddrDialog *m_pAddrDialog;
- unsigned long m_ulRefCount;
-
- public:
- // IUnknown Interface
- STDMETHODIMP QueryInterface(REFIID,LPVOID *);
- STDMETHODIMP_(ULONG) AddRef(void);
- STDMETHODIMP_(ULONG) Release(void);
-
- // IMsgList Interface
- virtual void ListChangeStarting( MSG_Pane* pane, XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
- int32 num);
- virtual void ListChangeFinished( MSG_Pane* pane, XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
- int32 num);
- virtual void GetSelection( MSG_Pane* pane, MSG_ViewIndex **indices, int *count,
- int *focus);
- virtual void SelectItem( MSG_Pane* pane, int item );
-
- virtual void CopyMessagesInto( MSG_Pane *pane, MSG_ViewIndex *indices, int count,
- MSG_FolderInfo *folderInfo) {}
- virtual void MoveMessagesInto( MSG_Pane *pane, MSG_ViewIndex *indices, int count,
- MSG_FolderInfo *folderInfo) {}
-
- CAddrDialogEntryList( CAddrDialog *pAddrDialog ) {
- m_ulRefCount = 0;
- m_pAddrDialog = pAddrDialog;
- }
- };
-
-
- STDMETHODIMP CAddrDialogEntryList::QueryInterface(REFIID refiid, LPVOID * ppv)
- {
- *ppv = NULL;
- if (IsEqualIID(refiid,IID_IUnknown))
- *ppv = (LPUNKNOWN) this;
- else if (IsEqualIID(refiid,IID_IMsgList))
- *ppv = (LPMSGLIST) this;
- else if (IsEqualIID(refiid,IID_IMailFrame))
- *ppv = (LPMAILFRAME) m_pAddrDialog;
-
- if (*ppv != NULL) {
- AddRef();
- return NOERROR;
- }
-
- return ResultFromScode(E_NOINTERFACE);
- }
-
- STDMETHODIMP_(ULONG) CAddrDialogEntryList::AddRef(void)
- {
- return ++m_ulRefCount;
- }
-
- STDMETHODIMP_(ULONG) CAddrDialogEntryList::Release(void)
- {
- ULONG ulRef;
- ulRef = --m_ulRefCount;
- if (m_ulRefCount == 0)
- delete this;
- return ulRef;
- }
-
- void CAddrDialogEntryList::ListChangeStarting( MSG_Pane* pane, XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
- int32 num)
- {
- if (m_pAddrDialog) {
- m_pAddrDialog->ListChangeStarting( pane, asynchronous,
- notify, where, num );
- }
- }
-
- void CAddrDialogEntryList::ListChangeFinished( MSG_Pane* pane, XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
- int32 num)
- {
- if (m_pAddrDialog) {
- m_pAddrDialog->ListChangeFinished( pane, asynchronous,
- notify, where, num );
- }
- }
-
- void CAddrDialogEntryList::GetSelection( MSG_Pane* pane, MSG_ViewIndex **indices, int *count,
- int *focus)
- {
- }
-
- void CAddrDialogEntryList::SelectItem( MSG_Pane* pane, int item )
- {
- }
-
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrDialog
-
- CAddrDialog::CAddrDialog(
- CWnd* pParent, /*=NULL*/
- BOOL isMapi, LPSTR winText, MAPIAddressCallbackProc mapiCB, MAPIAddressGetAddrProc mapiGetProc // rhp - MAPI
- )
- : CDialog(CAddrDialog::IDD, pParent)
- {
-
- CString msg;
- int result = 0;
- INTL_CharSetInfo csi;
-
- m_pCX = new CAddrDialogCX( this );
- csi = LO_GetDocumentCharacterSetInfo(m_pCX->GetContext());
-
- m_pCX->GetContext()->type = MWContextAddressBook;
- m_pCX->GetContext()->fancyFTP = TRUE;
- m_pCX->GetContext()->fancyNews = TRUE;
- m_pCX->GetContext()->intrupt = FALSE;
- m_pCX->GetContext()->reSize = FALSE;
- INTL_SetCSIWinCSID(csi, CIntlWin::GetSystemLocaleCsid());
-
- m_pOutliner = NULL;
- m_addrBookPane = NULL;
- m_bSearching = FALSE;
- m_directory = 0;
- m_pDropTarget = NULL;
- m_idefButtonID = IDC_TO;
-
- CAddrDialogEntryList *pInstance = new CAddrDialogEntryList( this );
- pInstance->QueryInterface( IID_IMsgList, (LPVOID *) &m_pIAddrList );
-
- HandleErrorReturn((result = AB_CreateAddressBookPane(&m_addrBookPane,
- m_pCX->GetContext(),
- WFE_MSGGetMaster())));
-
- // rhp - MAPI stuff...
- m_isMAPI = isMapi;
- m_mapiHeader = NULL;
- m_mapiCBProc = NULL;
- m_mapiGetAddrProc = NULL;
-
- if (m_isMAPI)
- {
- if ( (winText) && (*winText) )
- {
- m_mapiHeader = strdup(winText);
- }
-
- m_mapiCBProc = mapiCB;
- m_mapiGetAddrProc = mapiGetProc;
- }
-
- //{{AFX_DATA_INIT(CAddrDialog)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- }
-
- void CAddrDialog::OnKeyDown ( UINT nChar, UINT nRepCnt, UINT nFlags )
- {
- CDialog::OnKeyDown ( nChar, nRepCnt, nFlags );
- }
-
- void CAddrDialog::CleanupOnClose()
- {
- // DestroyContext will call Interrupt, but if we wait until after DestroyContext
- // to call MSG_SearchFree, the MWContext will be gone, and we'll be reading freed memory
-
- PREF_SetIntPref("mail.addr_picker.sliderwidth", m_pSplitter->GetPaneSize());
-
- if (XP_IsContextBusy (m_pCX->GetContext()))
- XP_InterruptContext (m_pCX->GetContext());
- MSG_SearchFree ((MSG_Pane*) m_addrBookPane);
-
- if (m_pIAddrList)
- m_pIAddrList->Release();
-
- if (m_addrBookPane)
- HandleErrorReturn(AB_CloseAddressBookPane(&m_addrBookPane));
-
- if(!m_pCX->IsDestroyed()) {
- m_pCX->DestroyContext();
- }
- if (m_pFont){
- theApp.ReleaseAppFont(m_pFont);
- }
-
- if (m_pOutlinerParent){
- delete m_pOutlinerParent;
- }
-
- if (m_pDirOutlinerParent){
- delete m_pDirOutlinerParent;
- }
-
- if (m_pSplitter){
- delete m_pSplitter;
- }
-
- if (m_pDropTarget) {
- m_pDropTarget->Revoke();
- delete m_pDropTarget;
- m_pDropTarget = NULL;
- }
-
- // rhp - for MAPI
- if (m_isMAPI)
- {
- if (m_mapiHeader)
- free(m_mapiHeader);
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrDialog Overloaded methods
- /////////////////////////////////////////////////////////////////////////////
-
- // rhp - this is needed for the population of the to address type...
- void
- CAddrDialog::ProcessMAPIAddressPopulation(void)
- {
- int index = 0;
- LPSTR name;
- LPSTR address;
- int addrType;
-
- if (!m_mapiGetAddrProc)
- return;
-
- CListBox *pBucket = GetBucket();
-
- while ( m_mapiGetAddrProc(&name, &address, &addrType) )
- {
- char *formatted;
- char tempString[512] = "";
- int nIndex = -1;
- NSADDRESSLIST *pAddress = new NSADDRESSLIST;
-
- ASSERT(pAddress);
- if (!pAddress)
- continue;
-
- if ((name) && (*name))
- {
- strcat(tempString, name);
- strcat(tempString, " ");
- }
-
- if ( (!address) || (!(*address)) )
- continue;
-
- strcat(tempString, "<");
- strcat(tempString, address);
- strcat(tempString, ">");
-
- pAddress->ulHeaderType = addrType;
- pAddress->idBitmap = 0;
- pAddress->idEntry = 0;
- pAddress->szAddress = strdup (tempString);
-
- GetFormattedString(tempString, addrType, &formatted);
- if (formatted)
- {
- nIndex = pBucket->InsertString( index, formatted );
- free (formatted);
- }
-
- if ( nIndex < 0 )
- return;
-
- pBucket->SetItemDataPtr( nIndex, pAddress );
- ++index;
- }
-
- OnSelchange();
- }
-
- BOOL CAddrDialog::OnInitDialog( )
- {
- if (CDialog::OnInitDialog()) {
- CWnd* widget;
- CRect rect2, rect3, rect4;
- UINT aIDArray[] = { IDS_SECURITY_STATUS, IDS_TRANSFER_STATUS, ID_SEPARATOR};
- int result = 0;
-
- CListBox *pBucket = GetBucket();
-
- DIR_Server* dir = (DIR_Server*)XP_ListGetObjectNum(theApp.m_directories, 1);
-
- XP_ASSERT (dir);
-
- if (!dir)
- return FALSE;
-
- HandleErrorReturn((result = AB_InitializeAddressBookPane(m_addrBookPane,
- dir,
- theApp.m_pABook,
- ABFullName,
- TRUE)));
-
- if (result) {
- EndDialog(IDCANCEL);
- return TRUE;
- }
-
- widget = GetDlgItem(IDC_ADDRESSLIST);
- widget->GetWindowRect(&rect2);
- widget->GetClientRect(&rect3);
- GetClientRect(&rect4);
- ClientToScreen(&rect4);
- rect2.OffsetRect(-rect4.left, -rect4.top);
-
- widget->DestroyWindow ();
-
- // create slider control
- m_pSplitter = (CMailNewsSplitter *) RUNTIME_CLASS(CMailNewsSplitter)->CreateObject();
-
- ASSERT(m_pSplitter);
-
- #ifdef _WIN32
- m_pSplitter->CreateEx(0, NULL, NULL,
- WS_CHILD|WS_VISIBLE|WS_TABSTOP,
- 0, 0, 0, 0,
- this->m_hWnd, (HMENU) IDC_ADDRESSLIST );
- #else
- CCreateContext Context;
- Context.m_pCurrentFrame = NULL; // nothing to base on
- Context.m_pCurrentDoc = NULL; // nothing to base on
- Context.m_pNewViewClass = NULL; // nothing to base on
- Context.m_pNewDocTemplate = NULL; // nothing to base on
- m_pSplitter->Create( NULL, NULL,
- WS_CHILD|WS_VISIBLE |WS_TABSTOP,
- rect2, this, IDC_ADDRESSLIST, &Context );
- #endif
-
- // create the outliner control
- m_pOutlinerParent = new CAddrDialogOutlinerParent;
- #ifdef _WIN32
- m_pOutlinerParent->CreateEx ( WS_EX_CLIENTEDGE, NULL, _T("NSOutlinerParent"),
- WS_TABSTOP|WS_VISIBLE|WS_CHILD|WS_CLIPCHILDREN,
- 0, 0, 0, 0,
- m_pSplitter->m_hWnd, (HMENU) 99);
- #else
- rect2.SetRectEmpty();
- m_pOutlinerParent->Create( NULL, _T("NSOutlinerParent"),
- WS_BORDER|WS_TABSTOP|WS_VISIBLE|WS_CHILD,
- rect2, m_pSplitter, 99);
- #endif
-
- m_pOutlinerParent->CreateColumns ( );
- m_pOutlinerParent->EnableFocusFrame(TRUE);
- m_pOutliner = (CAddrDialogOutliner *) m_pOutlinerParent->m_pOutliner;
- m_pOutliner->SetPane(m_addrBookPane);
- m_pOutliner->SetContext( m_pCX->GetContext() );
-
- // create the directory outliner control
- m_pDirOutlinerParent = new CAddrDialogDirOutlinerParent;
-
- #ifdef _WIN32
- m_pDirOutlinerParent->CreateEx(WS_EX_CLIENTEDGE, NULL, _T("NSOutlinerParent"),
- WS_TABSTOP|WS_VISIBLE|WS_CHILD|WS_CLIPCHILDREN,
- 0,0,0,0, m_pSplitter->m_hWnd, (HMENU) 100 );
- #else
- m_pDirOutlinerParent->Create( NULL, _T("NSOutlinerParent"),
- WS_BORDER|WS_TABSTOP|WS_VISIBLE|WS_CHILD,
- CRect(0,0,0,0), m_pSplitter, 100);
- #endif
-
- m_pDirOutliner = (CAddrDialogDirOutliner *) m_pDirOutlinerParent->m_pOutliner;
- m_pDirOutlinerParent->CreateColumns ( );
- m_pDirOutlinerParent->EnableFocusFrame(TRUE);
- m_pDirOutliner->SetContext( m_pCX->GetContext() );
- m_pDirOutliner->SetPane(m_addrBookPane);
- m_pDirOutliner->SetDirectoryIndex(0);
-
- // 4 seems to work with all the beveled border
- int32 prefInt = 4;
- PREF_GetIntPref("mail.addr_picker.sliderwidth", &prefInt);
- RECT rect;
- GetClientRect(&rect);
- m_pSplitter->AddPanes(m_pDirOutlinerParent, m_pOutlinerParent, prefInt, TRUE);
- m_pSplitter->SetWindowPos(GetDlgItem(ID_NAVIGATE_INTERRUPT), rect2.left, rect2.top, rect3.right, rect3.bottom, SWP_SHOWWINDOW);
-
- m_pDirOutlinerParent->SetWindowPos(GetDlgItem(ID_NAVIGATE_INTERRUPT), 0, 0,
- rect3.right, rect3.bottom, SWP_NOMOVE|SWP_NOSIZE);
- m_pOutlinerParent->SetWindowPos(m_pDirOutlinerParent, 0, 0,
- rect3.right, rect3.bottom, SWP_NOMOVE|SWP_NOSIZE);
- // reset the tab order
- widget = GetDlgItem (IDC_TO);
- widget->SetWindowPos(m_pOutlinerParent, 0, 0,
- rect3.right, rect3.bottom, SWP_NOMOVE|SWP_NOSIZE);
- UpdateDirectories();
-
- // create the status bar
- widget = GetDlgItem(IDC_StatusRect);
- widget->GetWindowRect(&rect2);
- widget->GetClientRect(&rect3);
- ScreenToClient(&rect2);
-
- widget->DestroyWindow ();
-
- m_barStatus.Create(this, TRUE, FALSE);
-
- m_barStatus.MoveWindow(&rect2, TRUE);
-
- m_barStatus.SetIndicators( aIDArray, sizeof(aIDArray) / sizeof(UINT) );
-
- DoUpdateWidget(IDC_DIRSEARCH, AB_LDAPSearchCmd, TRUE);
- DoUpdateWidget(IDC_TO, AB_NewMessageCmd, TRUE);
- UpdateMsgButtons();
-
- CGenericFrame *pCompose = (CGenericFrame *)GetParent();
-
- ApiApiPtr(api);
- LPUNKNOWN pUnk = api->CreateClassInstance(
- APICLASS_ADDRESSCONTROL, NULL, (APISIGNATURE)pCompose);
- if (pUnk)
- {
- LPADDRESSCONTROL pIAddressControl;
- HRESULT hRes = pUnk->QueryInterface(IID_IAddressControl,(LPVOID*)&pIAddressControl);
- ASSERT(hRes==NOERROR);
- LPNSADDRESSLIST pList = NULL;
- int count = pIAddressControl->GetAddressList(&pList);
- pUnk->Release();
- for (int index = 0; index < count; index++)
- {
- if (pList[index].szAddress)
- {
- if (strlen (pList[index].szAddress))
- {
- NSADDRESSLIST *pAddress = new NSADDRESSLIST;
- char * formatted;
- int nIndex = -1;
- ASSERT(pAddress);
- pAddress->ulHeaderType = pList[index].ulHeaderType;
- pAddress->idBitmap = pList[index].idBitmap;
- pAddress->idEntry = pList[index].idEntry;
- pAddress->szAddress = strdup (pList[index].szAddress);
- GetFormattedString(pList[index].szAddress, pList[index].ulHeaderType, &formatted);
- if (formatted)
- {
- nIndex = pBucket->InsertString( index, formatted );
- free (formatted);
- }
- free (pList[index].szAddress);
- if ( nIndex < 0 )
- return 0;
- pBucket->SetItemDataPtr( nIndex, pAddress );
- }
- }
- }
- free(pList);
- OnSelchange();
- } else
- {
- return FALSE;
- }
- } else
- {
- return FALSE;
- }
-
- HDC hDC = ::GetDC(m_hWnd);
- LOGFONT lf;
- memset(&lf,0,sizeof(LOGFONT));
- lf.lfPitchAndFamily = FF_SWISS;
- lf.lfWeight = FW_NORMAL;
- lf.lfCharSet = IntlGetLfCharset(CIntlWin::GetSystemLocaleCsid());
- if (CIntlWin::GetSystemLocaleCsid() == CS_LATIN1)
- _tcscpy(lf.lfFaceName, "MS Sans Serif");
- else
- _tcscpy(lf.lfFaceName, IntlGetUIPropFaceName(CIntlWin::GetSystemLocaleCsid()));
- lf.lfHeight = -MulDiv(9, ::GetDeviceCaps(hDC, LOGPIXELSY), 72);
- m_pFont = theApp.CreateAppFont( lf );
- ::ReleaseDC(m_hWnd,hDC);
-
- ::SendMessage(::GetDlgItem(m_hWnd, IDC_ADDRNAME), WM_SETFONT, (WPARAM)m_pFont, FALSE);
- ::SendMessage(::GetDlgItem(m_hWnd, IDC_ADDRESSBKT), WM_SETFONT, (WPARAM)m_pFont, FALSE);
-
- if(!m_pDropTarget) {
- m_pDropTarget = new CAddressPickerDropTarget(this);
- m_pDropTarget->Register(this);
- }
- DragAcceptFiles();
-
- CComboBox *directory = (CComboBox*) GetDlgItem(IDC_DIRECTORIES);
- directory->SetCurSel (0);
- m_pOutliner->SetDirectoryIndex( directory->GetCurSel());
- m_pDirOutliner->SetFocusLine(0);
- if (m_pOutliner->GetTotalLines())
- m_pOutliner->SelectItem (0);
- GetDlgItem(IDC_ADDRNAME)->SetFocus();
- SendMessage(DM_SETDEFID, m_idefButtonID, TRUE);
- GetDlgItem(m_idefButtonID)->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, MAKELPARAM(TRUE, 0));
- GetDlgItem(IDC_DONE_EDITING)->SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, MAKELPARAM(TRUE, 0));
-
- // rhp - for MAPI
- if (m_isMAPI)
- {
- ProcessMAPIAddressPopulation();
-
- if (m_mapiHeader)
- {
- SetWindowText(m_mapiHeader);
- }
- }
-
- return FALSE;
- }
-
-
- void CAddrDialog::GetFormattedString(char* fullname, MSG_HEADER_SET header, char** formatted)
- {
-
- CString formattedString;
- if (fullname) {
- switch (header) {
- case MSG_TO_HEADER_MASK:
- formattedString.Format(XP_GetString (MK_ADDR_TONAME), fullname);
- break;
- case MSG_CC_HEADER_MASK:
- formattedString.Format(XP_GetString (MK_ADDR_CCNAME), fullname);
- break;
- case MSG_BCC_HEADER_MASK:
- formattedString.Format(XP_GetString (MK_ADDR_BCCNAME), fullname);
- break;
- default:
- formattedString.Format(XP_GetString (MK_ADDR_TONAME), fullname);
- }
- }
- (*formatted) = strdup (formattedString);
- }
-
- void CAddrDialog::Progress(const char *pMessage)
- {
- m_barStatus.SetWindowText( pMessage );
- }
-
-
- void CAddrDialog::SetProgressBarPercent(int32 lPercent)
- {
- m_barStatus.SetPercentDone (lPercent);
- } // END OF FUNCTION CAddrDialog::DrawProgressBar()
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrDialog message handlers
-
- BEGIN_MESSAGE_MAP(CAddrDialog, CDialog)
- //{{AFX_MSG_MAP(CAddrDialog)
- ON_WM_TIMER ()
- ON_EN_SETFOCUS(IDC_ADDRNAME, OnSetFocusName)
- ON_EN_CHANGE(IDC_ADDRNAME, OnChangeName)
- ON_CBN_SELCHANGE(IDC_DIRECTORIES, OnChangeDirectory)
- ON_BN_CLICKED(IDC_DIRSEARCH, OnDirectorySearch)
- ON_BN_CLICKED(ID_NAVIGATE_INTERRUPT, OnStopSearch)
- ON_BN_CLICKED( IDC_DONE_EDITING, OnDone)
- ON_BN_CLICKED( IDCANCEL, OnCancel)
- ON_WM_CREATE()
- ON_WM_DESTROY()
- ON_WM_KEYDOWN()
- ON_COMMAND(IDC_TO, OnComposeMsg)
- ON_COMMAND(IDC_CC, OnComposeCCMsg)
- ON_COMMAND(IDC_BCC, OnComposeBCCMsg)
- ON_COMMAND(ID_ITEM_PROPERTIES, OnGetProperties)
- ON_LBN_SELCHANGE(IDC_ADDRESSBKT, OnSelchange)
- ON_COMMAND(ID_HELP, OnHelp)
- ON_LBN_SETFOCUS(IDC_ADDRESSBKT, OnSetFocusBucket)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- BOOL CAddrDialog::PreTranslateMessage( MSG* pMsg )
- {
- if (pMsg->message == WM_KEYDOWN && pMsg->hwnd == m_pOutliner->GetSafeHwnd())
- {
- if (pMsg->wParam != VK_TAB && pMsg->wParam != VK_ESCAPE && pMsg->wParam != VK_RETURN) {
- ::SendMessage(pMsg->hwnd, WM_KEYDOWN, pMsg->wParam, pMsg->lParam);
- return TRUE;
- }
- }
-
- if (pMsg->message == WM_KEYDOWN && pMsg->hwnd == GetBucket()->GetSafeHwnd())
- {
- if (pMsg->wParam == VK_DELETE || pMsg->wParam == VK_BACK) {
- OnRemove();
- return TRUE;
- }
- }
-
- if (pMsg->message == WM_KEYDOWN && pMsg->hwnd == GetDlgItem(IDC_ADDRNAME)->GetSafeHwnd())
- {
- if (pMsg->wParam == VK_UP || pMsg->wParam == VK_DOWN) {
- ::SendMessage(m_pOutliner->GetSafeHwnd(), WM_KEYDOWN, pMsg->wParam, pMsg->lParam);
- CWnd* widget = NULL;
- widget = GetDlgItem (GetDefaultButtonID());
- if (widget) {
- SendMessage(DM_SETDEFID, GetDefaultButtonID(), TRUE);
- widget->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, MAKELPARAM(TRUE, 0));
- widget = GetDlgItem (IDC_DONE_EDITING);
- widget->SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, MAKELPARAM(TRUE, 0));
- }
- return TRUE;
- }
- }
-
- if (pMsg->message == WM_KEYDOWN) {
- if (pMsg->wParam == VK_TAB) {
- HWND hwndNext = NULL;
- HWND hwndFocus = ::GetFocus();
-
- HWND hwndPossibleNext = ::GetNextDlgTabItem( m_hWnd, pMsg->hwnd, FALSE );
-
- HWND hwndPossiblePrev = ::GetNextDlgTabItem( m_hWnd, pMsg->hwnd, TRUE );
-
- HWND hwndDirOutliner = m_pDirOutliner ? m_pDirOutliner->m_hWnd : NULL;
- HWND hwndOutliner = m_pOutliner ? m_pOutliner->m_hWnd : NULL;
- HWND hwndSlider = m_pSplitter ? m_pSplitter->m_hWnd : NULL;
- HWND hwndDefSendButton = GetDlgItem(m_idefButtonID) ? GetDlgItem(m_idefButtonID)->m_hWnd : NULL;
- HWND hwndPropButton = GetDlgItem(ID_ITEM_PROPERTIES) ? GetDlgItem(ID_ITEM_PROPERTIES)->m_hWnd : NULL;
-
-
- if ( GetKeyState(VK_SHIFT) & 0x8000 ) {
-
- // Tab backward
- if ( hwndFocus == hwndPropButton ) {
- // Handle tabbing back to the to/cc/bcc buttons
- if (::IsWindowEnabled (hwndDefSendButton)) {
- hwndNext = hwndDefSendButton;
- DWORD defID = SendMessage(DM_GETDEFID, 0, 0);
- int defaultID = LOWORD (defID);
- SendMessage(DM_SETDEFID, m_idefButtonID, TRUE);
- GetDlgItem(m_idefButtonID)->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, MAKELPARAM(TRUE, 0));
- if (defaultID != m_idefButtonID)
- GetDlgItem(defaultID)->SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, MAKELPARAM(TRUE, 0));
- }
- } else if (hwndFocus == hwndOutliner) {
- // Handle tabbing out of outliner into the directory list
- if (m_pSplitter->IsOnePaneClosed())
- hwndNext = hwndPossiblePrev;
- else
- hwndNext = hwndDirOutliner;
- } else if ( hwndFocus == hwndDirOutliner ) {
- // Handle tabbing out of the slider
- hwndNext = hwndPossiblePrev;
- } else if ( hwndPossiblePrev == hwndSlider ) {
- // Handle tabbing back to the outliner from the
- // to/cc/bcc buttons the bucket
- hwndNext = hwndOutliner;
- }
-
- } else {
-
- // Tab forward
- if (hwndFocus == hwndOutliner) {
- // Handle tabbing out of outliner
- if (::IsWindowEnabled (hwndDefSendButton)) {
- hwndNext = hwndDefSendButton;
- DWORD defID = SendMessage(DM_GETDEFID, 0, 0);
- int defaultID = LOWORD (defID);
- SendMessage(DM_SETDEFID, m_idefButtonID, TRUE);
- GetDlgItem(m_idefButtonID)->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, MAKELPARAM(TRUE, 0));
- if (defaultID != m_idefButtonID)
- GetDlgItem(defaultID)->SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, MAKELPARAM(TRUE, 0));
- }
- } else if ( hwndPossibleNext == hwndSlider ) {
- // handle tabbing into the directory list
- if (m_pSplitter->IsOnePaneClosed())
- hwndNext = hwndOutliner;
- else
- hwndNext = hwndDirOutliner;
- } else if (hwndFocus == hwndDirOutliner) {
- // Handle tabbing out of the directory list
- // and into the results list
- hwndNext = hwndOutliner;
- }
-
- }
- if ( hwndNext ) {
- ::SetFocus( hwndNext );
- return TRUE;
- }
- }
- } // if tab && keydown
-
- return CDialog::PreTranslateMessage(pMsg);
- }
-
- void CAddrDialog::UpdateDirectories()
- {
- DIR_Server* dir;
- CComboBox *widget = (CComboBox*) GetDlgItem(IDC_DIRECTORIES);
-
- widget->ResetContent();
-
- XP_List *pTraverse = theApp.m_directories;
- while(dir = (DIR_Server *)XP_ListNextObject(pTraverse)) {
- if (dir->dirType == PABDirectory || dir->dirType == LDAPDirectory)
- widget->AddString(dir->description);
- }
- if (m_directory == -1)
- widget->SetCurSel(0);
- else
- widget->SetCurSel(m_directory);
-
- m_pDirOutliner->UpdateCount();
- }
-
-
- DIR_Server * CAddrDialog::GetCurrentDirectoryServer()
- {
- return (DIR_Server*) XP_ListGetObjectNum (theApp.m_directories, m_pOutliner->GetDirectoryIndex() + 1);
- }
-
-
- void CAddrDialog::OnTimer(UINT nID)
- {
- CWnd::OnTimer(nID);
- if (nID == ADDRESS_DIALOG_TIMER) {
- KillTimer(m_uTypedownClock);
- if (!m_name.IsEmpty()) {
- DIR_Server* dir;
- dir = GetCurrentDirectoryServer();
- if (dir->dirType == LDAPDirectory)
- PerformListDirectory (m_name.GetBuffer(0));
- else
- PerformTypedown(m_name.GetBuffer(0));
- m_name.ReleaseBuffer();
- }
- }
- }
-
-
- void CAddrDialog::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CAddrDialog)
- DDX_Text(pDX, IDC_ADDRNAME, m_name);
- DDX_CBIndex(pDX, IDC_DIRECTORIES, m_directory);
- //}}AFX_DATA_MAP
- }
-
-
- void CAddrDialog::OnChangeName()
- {
- // TODO: Add your control notification handler code here
- if (IsSearching()) {
- OnDirectorySearch();
- SendMessage(DM_SETDEFID, m_idefButtonID, TRUE);
- GetDlgItem(m_idefButtonID)->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, MAKELPARAM(TRUE, 0));
- GetDlgItem(IDC_DONE_EDITING)->SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, MAKELPARAM(TRUE, 0));
- return;
- }
-
- UpdateData(TRUE);
-
- if (m_name != m_save) {
- m_save = m_name;
- KillTimer(m_uTypedownClock);
- if (m_name.GetLength())
- {
- DIR_Server* dir = NULL;
- SendMessage(DM_SETDEFID, m_idefButtonID, TRUE);
- GetDlgItem(m_idefButtonID)->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, MAKELPARAM(TRUE, 0));
- GetDlgItem(IDC_DONE_EDITING)->SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, MAKELPARAM(TRUE, 0));
- dir = GetCurrentDirectoryServer();
- if (dir->dirType == PABDirectory)
- m_uTypedownClock = SetTimer(ADDRESS_DIALOG_TIMER, TYPEDOWN_SPEED, NULL);
- else {
- int32 prefInt = LDAP_SEARCH_SPEED;
- PREF_GetIntPref("ldap_1.autoComplete.interval", &prefInt);
- m_uTypedownClock = SetTimer(ADDRESS_DIALOG_TIMER, prefInt, NULL);
- }
- }
- }
- }
-
-
- void CAddrDialog::OnSetFocusName()
- {
- CEdit *widget = (CEdit*) GetDlgItem(IDC_ADDRNAME);
- if (widget)
- widget->SetSel(0, -1, TRUE);
- SendMessage(DM_SETDEFID, m_idefButtonID, TRUE);
- GetDlgItem(m_idefButtonID)->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, MAKELPARAM(TRUE, 0));
- GetDlgItem(IDC_DONE_EDITING)->SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, MAKELPARAM(TRUE, 0));
- }
-
- void CAddrDialog::OnSetFocusBucket()
- {
- CListBox *pBucket = (CListBox*)GetDlgItem(IDC_ADDRESSBKT);
-
- if (pBucket->GetCount()) {
- SendMessage(DM_SETDEFID, IDC_DONE_EDITING, TRUE);
- GetDlgItem(IDC_DONE_EDITING)->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, MAKELPARAM(TRUE, 0));
- GetDlgItem(m_idefButtonID)->SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, MAKELPARAM(TRUE, 0));
- }
- }
-
- void CAddrDialog::OnChangeDirectory()
- {
- // TODO: Add your control notification handler code here
- if (IsSearching())
- return;
-
- UpdateData(TRUE);
-
- if (m_directory != m_savedir) {
- m_savedir = m_directory;
- if (m_directory != -1) {
- if (m_pDirOutliner)
- m_pDirOutliner->SetDirectoryIndex(m_directory);
- PerformChangeDirectory(m_directory);
- }
- }
- }
-
- void CAddrDialog::OnSelchange()
- {
- CListBox *pBucket = (CListBox*)GetDlgItem(IDC_ADDRESSBKT);
-
- BOOL bEnabled = (pBucket->GetCount() > 0)? TRUE : FALSE;
- pBucket->EnableWindow (bEnabled);
- GetDlgItem(IDC_DONE_EDITING)->EnableWindow(bEnabled);
- if (bEnabled) {
- SendMessage(DM_SETDEFID, IDC_DONE_EDITING, TRUE);
- GetDlgItem(IDC_DONE_EDITING)->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, MAKELPARAM(TRUE, 0));
- GetDlgItem(m_idefButtonID)->SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, MAKELPARAM(TRUE, 0));
- }
- else {
- GetDlgItem(IDC_ADDRNAME)->SetFocus();
- SendMessage(DM_SETDEFID, m_idefButtonID, TRUE);
- GetDlgItem(m_idefButtonID)->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, MAKELPARAM(TRUE, 0));
- GetDlgItem(IDC_DONE_EDITING)->SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, MAKELPARAM(TRUE, 0));
- }
-
-
- // TODO: Add your control notification handler code here
- }
-
- void CAddrDialog::DoUpdateWidget( int command, AB_CommandType cmd, BOOL bUseCheck )
- {
-
- CWnd* widget;
-
- XP_Bool bSelectable = FALSE, bPlural = FALSE;
- MSG_COMMAND_CHECK_STATE sState;
-
- if (m_addrBookPane) {
- if (m_pOutliner) {
- MSG_ViewIndex *indices = NULL;
- int count = 0;
- m_pOutliner->GetSelection(indices, count);
- AB_CommandStatus(m_addrBookPane,
- cmd,
- indices, count,
- &bSelectable,
- &sState,
- NULL,
- &bPlural);
- } else {
- AB_CommandStatus(m_addrBookPane,
- cmd,
- NULL, 0,
- &bSelectable,
- &sState,
- NULL,
- &bPlural);
- }
- }
-
- widget = GetDlgItem ( command );
- widget->EnableWindow(bSelectable);
- }
-
-
- void CAddrDialog::OnDirectorySearch()
- {
- // TODO: Add your control notification handler code here
- if (m_directory != -1)
- PerformDirectorySearch();
- }
-
-
- int CAddrDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- m_MailNewsResourceSwitcher.Reset();
- int res = CDialog::OnCreate(lpCreateStruct);
-
- MSG_SetFEData( (MSG_Pane*) m_addrBookPane, (void *) m_pIAddrList );
- return res;
- }
-
- // rhp - This is for MAPI processing...
- void
- CAddrDialog::ProcessMAPIOnDone(void)
- {
- CListBox *pBucket = GetBucket();
-
- int count = pBucket->GetCount();
- if (count != LB_ERR && count > 0)
- {
- for (int index = 0; index < count; index++)
- {
- NSADDRESSLIST * pAddress = (NSADDRESSLIST *)(pBucket->GetItemDataPtr(index));
- ASSERT(pAddress);
- if (m_mapiCBProc)
- {
- m_mapiCBProc(count, index, pAddress->ulHeaderType,
- pAddress->szAddress); // rhp - for MAPI
- }
- delete (pAddress);
- }
- }
-
- CDialog::OnOK();
- CleanupOnClose();
- }
-
- void CAddrDialog::OnDone()
- {
- NSADDRESSLIST* pAddressList;
- CListBox *pBucket = GetBucket();
-
- // rhp - for MAPI...
- if (m_isMAPI)
- {
- ProcessMAPIOnDone();
- return;
- }
-
- int count = pBucket->GetCount();
- if (count != LB_ERR && count > 0)
- {
- pAddressList = (NSADDRESSLIST *)calloc(count, sizeof(NSADDRESSLIST));
- if (pAddressList)
- {
- for (int index = 0; index < count; index++)
- {
- NSADDRESSLIST * pAddress = (NSADDRESSLIST *)(pBucket->GetItemDataPtr(index));
- ASSERT(pAddress);
- pAddressList[index].ulHeaderType = pAddress->ulHeaderType;
- pAddressList[index].idBitmap = pAddress->idBitmap;
- pAddressList[index].idEntry = pAddress->idEntry;
- pAddressList[index].szAddress = pAddress->szAddress;
- delete (pAddress);
- }
- }
-
- CGenericFrame *pCompose = (CGenericFrame *)GetParent();
-
- ApiApiPtr(api);
- LPUNKNOWN pUnk = api->CreateClassInstance(
- APICLASS_ADDRESSCONTROL, NULL, (APISIGNATURE)pCompose);
- if (pUnk)
- {
- LPADDRESSCONTROL pIAddressControl;
- HRESULT hRes = pUnk->QueryInterface(IID_IAddressControl,(LPVOID*)&pIAddressControl);
- ASSERT(hRes==NOERROR);
- int ct = pIAddressControl->SetAddressList(pAddressList, count);
- pUnk->Release();
- }
- }
-
- CDialog::OnOK();
- CleanupOnClose();
- }
-
-
- void CAddrDialog::OnCancel()
- {
- CDialog::OnCancel();
- CleanupOnClose();
- }
-
- void CAddrDialog::ListChangeStarting( MSG_Pane* pane, XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
- int32 num)
- {
- if ( pane == (MSG_Pane*) m_addrBookPane ) {
- if ( m_pOutliner ) {
- m_pOutliner->MysticStuffStarting( asynchronous, notify,
- where, num );
- }
- }
- }
-
- void CAddrDialog::ListChangeFinished( MSG_Pane* pane, XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
- int32 num)
- {
- if ( pane == (MSG_Pane*) m_addrBookPane ) {
- if ( m_pOutliner ) {
- m_pOutliner->MysticStuffFinishing( asynchronous, notify,
- where, num );
- UpdateMsgButtons();
- }
- }
- }
-
-
- void CAddrDialog::SetStatusText(const char* pMessage)
- {
- m_barStatus.SetWindowText( pMessage );
- }
-
-
- void CAddrDialog::SetSearchResults(MSG_ViewIndex index, int32 num)
- {
-
- CString csStatus;
-
- ASSERT(m_pOutliner);
- AB_LDAPSearchResults(m_addrBookPane, index, num);
- if (num > 1 ) {
- csStatus.Format( szLoadString(IDS_SEARCHHITS), num );
- } else if ( num > 0 ) {
- csStatus.LoadString( IDS_SEARCHONEHIT );
- } else {
- csStatus.LoadString( IDS_SEARCHNOHITS );
- }
-
- m_barStatus.SetWindowText( csStatus );
-
- }
-
- STDMETHODIMP CAddrDialog::QueryInterface(REFIID refiid, LPVOID * ppv)
- {
- *ppv = NULL;
- if (IsEqualIID(refiid,IID_IUnknown))
- *ppv = (LPUNKNOWN) (LPMAILFRAME) this;
- else if (IsEqualIID(refiid,IID_IMailFrame))
- *ppv = (LPMAILFRAME) this;
-
- if (*ppv != NULL) {
- AddRef();
- return NOERROR;
- }
-
- return ResultFromScode(E_NOINTERFACE);
- }
-
- STDMETHODIMP_(ULONG) CAddrDialog::AddRef(void)
- {
- return 0; // Not a real component
- }
-
- STDMETHODIMP_(ULONG) CAddrDialog::Release(void)
- {
- return 0; // Not a real component
- }
-
- // IMailFrame interface
- CMailNewsFrame *CAddrDialog::GetMailNewsFrame()
- {
- return (CMailNewsFrame *) NULL;
- }
-
- MSG_Pane *CAddrDialog::GetPane()
- {
- return (MSG_Pane*) m_addrBookPane;
- }
-
- void CAddrDialog::PaneChanged(MSG_Pane *pane, XP_Bool asynchronous,
- MSG_PANE_CHANGED_NOTIFY_CODE notify, int32 value)
- {
- if (notify == MSG_PaneDirectoriesChanged) {
- if (IsSearching())
- OnStopSearch ();
- CComboBox *widget = (CComboBox*) GetDlgItem(IDC_DIRECTORIES);
- m_savedir = -1;
- widget->SetCurSel (0);
- OnChangeDirectory();
- UpdateDirectories();
- }
- }
-
-
- void CAddrDialog::AllConnectionsComplete( MWContext *pContext )
- {
- OnStopSearch();
-
- int total = m_pOutliner->GetTotalLines();
- CString csStatus;
- if ( total > 1 ) {
- csStatus.Format( szLoadString( IDS_SEARCHHITS ), total );
- } else if ( total > 0 ) {
- csStatus.LoadString( IDS_SEARCHONEHIT );
- } else {
- csStatus.LoadString( IDS_SEARCHNOHITS );
- }
- m_barStatus.SetWindowText( csStatus );
-
- SendMessageToDescendants(WM_IDLEUPDATECMDUI, (WPARAM)TRUE, (LPARAM)0);
- }
-
-
- void CAddrDialog::PerformTypedown (char* name)
- {
- if (!m_bSearching)
- m_pOutliner->OnTypedown (name);
- }
-
- void CAddrDialog::PerformListDirectory (char* name)
- {
- // Build Search
- m_barStatus.SetWindowText( szLoadString( IDS_SEARCHING ) );
- m_bSearching = TRUE;
- GetDlgItem(IDC_DIRECTORIES)->EnableWindow(FALSE);
- GetDlgItem( IDC_DIRSEARCH)->EnableWindow(FALSE);
- GetDlgItem( ID_NAVIGATE_INTERRUPT)->EnableWindow(TRUE);
- m_pOutliner->UpdateCount();
- m_barStatus.StartAnimation();
-
- HandleErrorReturn(AB_SearchDirectory(m_addrBookPane, name));
- }
-
-
- void CAddrDialog::MoveSelections(MSG_HEADER_SET header)
- {
- CString csAddress;
- MSG_ViewIndex *indices;
- int count;
- CGenericFrame * pCompose = (CGenericFrame *)GetParent();
- CListBox *pBucket = GetBucket();
- pBucket->EnableWindow (TRUE);
-
- m_pOutliner->GetSelection(indices, count);
-
- // delete the entries
- for (int32 i = 0; i < count; i++) {
- // should we stop on error?
- char* fullname = NULL;
- CString formattedString;
- ABID entryID = AB_GetEntryIDAt((AddressPane*) m_addrBookPane, indices[i]);
- AB_GetExpandedName(GetCurrentDirectoryServer(),
- theApp.m_pABook, entryID, &fullname);
-
- if (fullname){
- ABID type;
-
- // need to change the bitmap based on the type
- AB_GetType (GetCurrentDirectoryServer(),
- theApp.m_pABook, entryID, &type);
- AddStringToBucket(pBucket, header, fullname, type, entryID);
- }
- }
- CEdit *widget = (CEdit*) GetDlgItem(IDC_ADDRNAME);
- if (widget)
- widget->SetSel(0, -1, TRUE);
- pBucket->EnableWindow (TRUE);
- SendMessage(DM_SETDEFID, IDC_DONE_EDITING, TRUE);
- GetDlgItem(IDC_DONE_EDITING)->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, MAKELPARAM(TRUE, 0));
- GetDlgItem(m_idefButtonID)->SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, MAKELPARAM(TRUE, 0));
- }
-
- void CAddrDialog::AddStringToBucket
- (CListBox *pBucket, MSG_HEADER_SET header, char* fullname, ABID type, ABID entryID)
- {
- CString formattedString;
- switch (header) {
- case MSG_TO_HEADER_MASK:
- formattedString.Format(XP_GetString(MK_ADDR_TONAME), fullname);
- break;
- case MSG_CC_HEADER_MASK:
- formattedString.Format(XP_GetString(MK_ADDR_CCNAME), fullname);
- break;
- case MSG_BCC_HEADER_MASK:
- formattedString.Format(XP_GetString(MK_ADDR_BCCNAME), fullname);
- break;
- default:
- formattedString.Format(XP_GetString(MK_ADDR_TONAME), fullname);
- }
-
- if (pBucket->FindStringExact(0, (LPCTSTR) formattedString ) == LB_ERR) {
- int idx = pBucket->AddString(formattedString);
- if ((idx != LB_ERR) || (idx != LB_ERRSPACE))
- {
- NSADDRESSLIST *pAddress = new NSADDRESSLIST;
- ASSERT(pAddress);
- pAddress->ulHeaderType = header;
-
- if (type == ABTypeList)
- pAddress->idBitmap = IDB_MAILINGLIST;
- else
- pAddress->idBitmap = IDB_PERSON;
-
- pAddress->idEntry = entryID;
- pAddress->szAddress = fullname;
- pBucket->SetItemDataPtr( idx, pAddress );
- }
- }
- int total = pBucket->GetCount();
- if (total)
- {
- GetDlgItem(IDC_DONE_EDITING)->EnableWindow(TRUE);
- pBucket->SetCurSel(total - 1);
- }
- else
- GetDlgItem(IDC_DONE_EDITING)->EnableWindow(FALSE);
- }
-
-
- void CAddrDialog::OnRemove()
- {
- CListBox *pBucket = GetBucket();
- int prevSel = pBucket->GetCurSel();
- if (prevSel != -1)
- {
- NSADDRESSLIST * pAddress = (NSADDRESSLIST *)(pBucket->GetItemDataPtr(prevSel));
- if (pAddress->szAddress)
- free (pAddress->szAddress);
- delete pAddress;
-
- int count = pBucket->DeleteString (prevSel);
- if (count) {
- if (prevSel)
- pBucket->SetCurSel (prevSel - 1);
- else
- pBucket->SetCurSel (prevSel);
- }
- OnSelchange();
- }
- }
-
-
- void CAddrDialog::OnComposeMsg()
- {
- MoveSelections(MSG_TO_HEADER_MASK);
- m_idefButtonID = IDC_TO;
- }
-
-
- void CAddrDialog::OnComposeCCMsg()
- {
- MoveSelections(MSG_CC_HEADER_MASK);
- m_idefButtonID = IDC_CC;
- }
-
-
- void CAddrDialog::OnComposeBCCMsg()
- {
- MoveSelections(MSG_BCC_HEADER_MASK);
- m_idefButtonID = IDC_BCC;
- }
-
-
- void CAddrDialog::OnGetProperties()
- {
- MSG_ViewIndex *indices = NULL;
- int count;
- CAddrDialogOutliner *pOutliner = (CAddrDialogOutliner *) m_pOutliner;
-
- if (pOutliner)
- {
- pOutliner->GetSelection(indices, count);
- // AB_Command(pOutliner->GetPane(), AB_ImportLdapEntriesCmd, indices, count);
- }
- }
-
- void CAddrDialog::HandleErrorReturn(int errorid)
- {
- if (errorid) {
- CString s;
- if (s.LoadString( IDS_BOOKMARK_ADDRESSPROPERTIES ))
- ::MessageBox(NULL, XP_GetString(errorid), s, MB_OK);
- }
- }
-
-
- void CAddrDialog::PerformChangeDirectory (int dirIndex)
- {
- m_pOutliner->SetDirectoryIndex(dirIndex);
- DIR_Server* dir = GetCurrentDirectoryServer();
- HandleErrorReturn(AB_ChangeDirectory(m_addrBookPane, dir));
- DoUpdateWidget(IDC_DIRSEARCH, AB_LDAPSearchCmd, TRUE);
- DoUpdateWidget(IDC_TO, AB_NewMessageCmd, TRUE);
- m_pOutliner->UpdateCount( );
-
- int idx = m_barStatus.CommandToIndex(IDS_SECURITY_STATUS);
- if (idx > -1) {
- UINT nID = IDS_SECURITY_STATUS;
- UINT nStyle;
- int nWidth;
- m_barStatus.GetPaneInfo( idx, nID, nStyle, nWidth );
- if (dir->isSecure)
- m_barStatus.SetPaneInfo(idx, IDS_SECURITY_STATUS, SBPS_NORMAL, nWidth);
- else
- m_barStatus.SetPaneInfo(idx, IDS_SECURITY_STATUS, SBPS_DISABLED, nWidth);
- }
- UpdateMsgButtons();
- }
-
-
- void CAddrDialog::OnUpdateDirectorySelection (int dirIndex)
- {
- CComboBox *widget = (CComboBox*) GetDlgItem(IDC_DIRECTORIES);
- widget->SetCurSel(dirIndex);
- PerformChangeDirectory(dirIndex);
- }
-
-
- void CAddrDialog::OnStopSearch ()
- {
- if ( m_bSearching) {
- // We've ended the search
- XP_InterruptContext( m_pCX->GetContext() );
- HandleErrorReturn(AB_FinishSearch(m_addrBookPane, m_pCX->GetContext()));
- m_bSearching = FALSE;
- GetDlgItem(IDC_DIRECTORIES)->EnableWindow(TRUE);
- GetDlgItem( IDC_DIRSEARCH)->EnableWindow(TRUE);
- GetDlgItem(ID_NAVIGATE_INTERRUPT)->EnableWindow (FALSE);
- m_pDirOutliner->EnableWindow(TRUE);
- m_barStatus.StopAnimation();
- if (m_pOutliner->GetTotalLines() && (m_pOutliner->GetFocusLine() != -1))
- m_pOutliner->SelectItem (0);
- return;
- }
- }
-
-
-
- void CAddrDialog::PerformDirectorySearch ()
- {
- if ( m_bSearching) {
- OnStopSearch ();
- return;
- }
-
- CUIntArray buttonLabels;
- buttonLabels.SetSize (4, 1);
- buttonLabels [0] = IDS_SEARCH_PROMPT;
- buttonLabels [1] = IDS_CANCEL_BUTTON;
- buttonLabels [2] = IDS_HELP_BUTTON;
- buttonLabels [3] = IDS_ADVSEARCH;
-
- CSearchDialog searchDlg ((UINT) IDS_ADRSEARCH,
- (MSG_Pane*) m_addrBookPane,
- GetCurrentDirectoryServer(),
- this, 4, BUTTON_RIGHT, &buttonLabels);
- int result = searchDlg.DoModal();
-
- // Build Search
- if (result == IDOK)
- {
- GetDlgItem(IDC_DIRSEARCH)->EnableWindow (FALSE);
- GetDlgItem(ID_NAVIGATE_INTERRUPT)->EnableWindow (TRUE);
- GetDlgItem(IDC_DIRECTORIES)->EnableWindow(FALSE);
- GetDlgItem(IDC_ADDRNAME)->SetWindowText("");
-
- // Build Search
- m_barStatus.SetWindowText( szLoadString( IDS_SEARCHING ) );
- m_bSearching = TRUE;
- m_pOutliner->UpdateCount();
- m_pOutliner->SetFocus();
- m_pDirOutliner->EnableWindow(FALSE);
-
- HandleErrorReturn(AB_SearchDirectory(m_addrBookPane, NULL));
- }
-
- }
-
-
- //////////////////////////////////////////////////////////////////////////////
- // CAddrDialogOutliner
- BEGIN_MESSAGE_MAP(CAddrDialogOutliner, CMSelectOutliner)
- //{{AFX_MSG_MAP(CAddrDialogOutliner)
- ON_WM_KEYDOWN()
- ON_WM_TIMER()
- ON_WM_KILLFOCUS()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- CAddrDialogOutliner::CAddrDialogOutliner ( )
- {
- m_attribSortBy = ID_COLADDR_NAME;
- ApiApiPtr(api);
- m_pUnkUserImage = api->CreateClassInstance(APICLASS_IMAGEMAP);
- if (m_pUnkUserImage) {
- m_pUnkUserImage->QueryInterface(IID_IImageMap,(LPVOID*)&m_pIUserImage);
- ASSERT(m_pIUserImage);
- m_pIUserImage->Initialize(IDB_ADDRESSBOOK,16,16);
- }
- m_bSortAscending = TRUE;
- m_iMysticPlane = 0;
- m_dirIndex = 0;
- m_hFont = NULL;
- m_uTypedownClock = 0;
- }
-
- CAddrDialogOutliner::~CAddrDialogOutliner ( )
- {
- if (m_pUnkUserImage) {
- if (m_pIUserImage)
- m_pUnkUserImage->Release();
- }
-
- if (m_hFont) {
- theApp.ReleaseAppFont(m_hFont);
- }
- }
-
- DIR_Server* CAddrDialogOutliner::GetCurrentDirectoryServer ()
- {
- return (DIR_Server*)XP_ListGetObjectNum(theApp.m_directories, m_dirIndex + 1);
- }
-
- void CAddrDialogOutliner::SetDirectoryIndex(int dirIndex )
- {
- m_dirIndex = dirIndex;
- DIR_Server* pServer = GetCurrentDirectoryServer ();
- int iCount = GetNumColumns();
- for (int i = 0; i < iCount; i++) {
- CString cs;
- int iColumn = GetColumnAtPos(i);
- if (pServer->dirType == LDAPDirectory)
- {
- DIR_AttributeId id;
- const char *text = NULL;
- switch (iColumn) {
- case ID_COLADDR_TYPE:
- text = NULL;
- break;
- case ID_COLADDR_NAME:
- MSG_SearchAttribToDirAttrib(attribCommonName, &id);
- text = DIR_GetAttributeName(pServer, id);
- break;
- case ID_COLADDR_EMAIL:
- MSG_SearchAttribToDirAttrib(attrib822Address, &id);
- text = DIR_GetAttributeName(pServer, id);
- break;
- case ID_COLADDR_COMPANY:
- MSG_SearchAttribToDirAttrib(attribOrganization, &id);
- text = DIR_GetAttributeName(pServer, id);
- break;
- case ID_COLADDR_PHONE:
- MSG_SearchAttribToDirAttrib(attribPhoneNumber, &id);
- text = DIR_GetAttributeName(pServer, id);
- break;
- case ID_COLADDR_LOCALITY:
- MSG_SearchAttribToDirAttrib(attribLocality, &id);
- text = DIR_GetAttributeName(pServer, id);
- break;
- case ID_COLADDR_NICKNAME:
- text = NULL;
- break;
- default:
- break;
- }
- if (text)
- SetColumnName(iColumn, text);
- }
- else
- {
- switch (iColumn) {
- case ID_COLADDR_TYPE:
- cs = "";
- break;
- case ID_COLADDR_NAME:
- cs.LoadString(IDS_USERNAME);
- break;
- case ID_COLADDR_EMAIL:
- cs.LoadString(IDS_EMAILADDRESS);
- break;
- case ID_COLADDR_COMPANY:
- cs.LoadString(IDS_COMPANYNAME);
- break;
- case ID_COLADDR_PHONE:
- cs.LoadString(IDS_PHONE);
- break;
- case ID_COLADDR_LOCALITY:
- cs.LoadString(IDS_LOCALITY);
- break;
- case ID_COLADDR_NICKNAME:
- cs.LoadString(IDS_NICKNAME);
- break;
- default:
- break;
- }
- if (cs.GetLength())
- SetColumnName(iColumn, cs);
- }
- }
- GetParent()->Invalidate();
- GetParent()->UpdateWindow();
- ClearSelection();
- if (m_iTotalLines)
- SelectItem (0);
- }
-
-
- void CAddrDialogOutliner::OnTimer(UINT nID)
- {
- CMSelectOutliner::OnTimer(nID);
- if (nID == ADDRDLG_OUTLINER_TYPEDOWN_TIMER) {
- KillTimer(m_uTypedownClock);
- m_psTypedown = "";
- }
- }
-
- void CAddrDialogOutliner::OnKeyDown ( UINT nChar, UINT nRepCnt, UINT nFlags )
- {
- CMSelectOutliner::OnKeyDown ( nChar, nRepCnt, nFlags );
- KillTimer(m_uTypedownClock);
- if (nChar > VK_HELP) {
- KillTimer(m_uTypedownClock);
- m_psTypedown += nChar;
- OnTypedown (m_psTypedown.GetBuffer (0));
- m_psTypedown.ReleaseBuffer(-1);
- int32 prefInt = OUTLINER_TYPEDOWN_SPEED;
- PREF_GetIntPref("ldap_1.autoComplete.interval", &prefInt);
- m_uTypedownClock = SetTimer(ADDRDLG_OUTLINER_TYPEDOWN_TIMER, prefInt, NULL);
- }
- }
-
- void CAddrDialogOutliner::OnKillFocus( CWnd* pNewWnd )
- {
- CMSelectOutliner::OnKillFocus (pNewWnd );
- m_psTypedown = "";
- KillTimer(m_uTypedownClock);
- }
-
-
- void CAddrDialogOutliner::OnTypedown (char* name)
- {
- MSG_ViewIndex index;
- uint startIndex;
-
- if (GetFocusLine() != -1)
- startIndex = GetFocusLine();
- else
- startIndex = 0;
-
- AB_GetIndexMatchingTypedown(m_pane, &index,
- (LPCTSTR) name, startIndex);
- ScrollIntoView(CASTINT(index));
- SelectItem (CASTINT(index));
- }
-
- void CAddrDialogOutliner::UpdateCount( )
- {
- uint32 count;
-
- AB_GetEntryCount(GetCurrentDirectoryServer (), theApp.m_pABook, &count, ABTypeAll, NULL);
- SetTotalLines(CASTINT(count));
- }
-
-
- void CAddrDialogOutliner::SetPane(ABPane *pane)
- {
- m_pane = pane;
- uint32 count;
-
- if (m_pane) {
- AB_GetEntryCount(GetCurrentDirectoryServer (), theApp.m_pABook, &count, ABTypeAll, NULL);
- SetTotalLines(CASTINT(count));
- Invalidate();
- UpdateWindow();
- }
- }
-
- void CAddrDialogOutliner::MysticStuffStarting( XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify,
- MSG_ViewIndex where,
- int32 num )
- {
- ++m_iMysticPlane;
- }
-
- void CAddrDialogOutliner::MysticStuffFinishing( XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify,
- MSG_ViewIndex where,
- int32 num )
- {
-
- #ifdef _WIN32
- CWnd *pParent = GetParentOwner();
- #else
- CWnd *pParent = GetOwner();
- pParent = pParent->GetParent();
- ASSERT(pParent);
- #endif
-
- switch ( notify )
- {
-
- case MSG_NotifyNone:
- break;
-
- case MSG_NotifyInsertOrDelete:
- // if its insert or delete then tell my frame to add the next chunk of values
- // from the search
- if (notify == MSG_NotifyInsertOrDelete
- && ((CAddrDialog*)pParent)->IsSearching() && num > 0)
- {
- ((CAddrDialog*)pParent)->SetSearchResults(where, num);
- HandleInsert(where, num);
- }
- else
- {
- if (num > 0)
- HandleInsert(where, num);
- else
- HandleDelete(where, -num);
- }
- break;
-
- case MSG_NotifyChanged:
- InvalidateLines( (int) where, (int) num );
- break;
-
- case MSG_NotifyAll:
- case MSG_NotifyScramble:
- Invalidate();
- break;
- }
-
- if (( !--m_iMysticPlane && m_pane))
- {
- uint32 count;
- AB_GetEntryCount(GetCurrentDirectoryServer (), theApp.m_pABook, &count, ABTypeAll, NULL);
- SetTotalLines(CASTINT(count));
- Invalidate();
- UpdateWindow();
- }
- }
-
-
- void CAddrDialogOutliner::SetTotalLines( int count)
- {
- CMSelectOutliner::SetTotalLines(count);
- if (count = 0)
- ClearSelection();
- }
-
-
-
-
- BOOL CAddrDialogOutliner::RenderData ( UINT iColumn, CRect &rect, CDC &dc, const char * text )
- {
- if ( iColumn != ID_COLADDR_TYPE )
- return CMSelectOutliner::RenderData ( iColumn, rect, dc, text );
-
- int idxImage = 0;
-
- if (m_EntryLine.entryType == ABTypeList)
- idxImage = IDX_ADDRESSBOOKLIST;
- else
- idxImage = IDX_ADDRESSBOOKPERSON;
-
- m_pIUserImage->DrawImage ( idxImage,
- rect.left + ( ( rect.Width ( ) - 16 ) / 2 ), rect.top, &dc, FALSE );
- return TRUE;
- }
-
-
- int CAddrDialogOutliner::TranslateIcon ( void * pLineData )
- {
- AB_EntryLine* line = (AB_EntryLine*) pLineData;
- int idxImage = 0;
-
- if (line->entryType == ABTypeList)
- idxImage = IDX_ADDRESSBOOKLIST;
- else
- idxImage = IDX_ADDRESSBOOKPERSON;
- return idxImage;
- }
-
- int CAddrDialogOutliner::TranslateIconFolder (void * pData)
- {
- // We're a flat list, so we're never a folder
- return ( OUTLINER_ITEM );
- }
-
-
- BOOL CAddrDialogOutliner::ColumnCommand ( int iColumn, int iLine )
- {
- // We have no column commands
- return FALSE;
- }
-
- HFONT CAddrDialogOutliner::GetLineFont(void *pLineData)
- {
- if (!m_hFont)
- {
- HDC hDC = ::GetDC(m_hWnd);
- LOGFONT lf;
- memset(&lf,0,sizeof(LOGFONT));
-
- lf.lfPitchAndFamily = FF_SWISS;
- lf.lfWeight = FW_NORMAL;
- lf.lfCharSet = IntlGetLfCharset(CIntlWin::GetSystemLocaleCsid());
- if (CIntlWin::GetSystemLocaleCsid() == CS_LATIN1)
- _tcscpy(lf.lfFaceName, "MS Sans Serif");
- else
- _tcscpy(lf.lfFaceName, IntlGetUIPropFaceName(CIntlWin::GetSystemLocaleCsid()));
- lf.lfHeight = -MulDiv(9, ::GetDeviceCaps(hDC, LOGPIXELSY), 72);
- m_hFont = theApp.CreateAppFont( lf );
- ::ReleaseDC(m_hWnd,hDC);
- }
- return m_hFont;
- }
-
-
- void * CAddrDialogOutliner::AcquireLineData ( int line )
- {
- m_lineindex = line + 1;
- if ( line >= m_iTotalLines)
- return NULL;
- if (!AB_GetEntryLine(m_pane, line, &m_EntryLine ))
- return NULL;
-
- return &m_EntryLine;
- }
-
-
- void CAddrDialogOutliner::GetTreeInfo ( int iLine, uint32 * pFlags, int * pDepth, OutlinerAncestorInfo ** pAncestor )
- {
- if ( pFlags ) *pFlags = 0; // Flags?
- if ( pDepth ) *pDepth = 0; // We're flat, remember?
- }
-
-
- void CAddrDialogOutliner::ReleaseLineData ( void * )
- {
- }
-
-
- LPCTSTR CAddrDialogOutliner::GetColumnText ( UINT iColumn, void * pLineData )
- {
- AB_EntryLine* line = (AB_EntryLine*) pLineData;
-
- switch (iColumn) {
- case ID_COLADDR_NAME:
- return line->fullname;
- break;
- case ID_COLADDR_EMAIL:
- return line->emailAddress;
- break;
- case ID_COLADDR_COMPANY:
- return line->companyName;
- break;
- case ID_COLADDR_PHONE:
- if (line->entryType == ABTypePerson)
- return line->workPhone;
- break;
- case ID_COLADDR_LOCALITY:
- return line->locality;
- break;
- case ID_COLADDR_NICKNAME:
- return line->nickname;
- break;
- default:
- break;
- }
- return ("");
- }
-
- void CAddrDialogOutliner::OnSelChanged()
- {
- #ifdef _WIN32
- CWnd *pParent = GetParentOwner();
- #else
- CWnd *pParent = GetOwner();
- pParent = pParent->GetParent();
- ASSERT(pParent);
- #endif
- ((CAddrDialog*) pParent)->DoUpdateWidget(IDC_TO, AB_NewMessageCmd, TRUE);
- ((CAddrDialog*) pParent)->UpdateMsgButtons();
- CWnd* widget = NULL;
- widget = ((CAddrDialog*) pParent)->GetDlgItem (((CAddrDialog*) pParent)->GetDefaultButtonID());
- if (widget) {
- SendMessage(DM_SETDEFID, ((CAddrDialog*) pParent)->GetDefaultButtonID(), TRUE);
- widget->SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, MAKELPARAM(TRUE, 0));
- widget = ((CAddrDialog*) pParent)->GetDlgItem (IDC_DONE_EDITING);
- widget->SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, MAKELPARAM(TRUE, 0));
- }
- }
-
- void CAddrDialogOutliner::OnSelDblClk()
- {
- #ifdef _WIN32
- CWnd *pParent = GetParentOwner();
- #else
- CWnd *pParent = GetOwner();
- pParent = pParent->GetParent();
- ASSERT(pParent);
- #endif
-
- ((CAddrDialog*) pParent)->SetDefaultButtonID (IDC_TO);
- ((CAddrDialog*) pParent)->MoveSelections (MSG_TO_HEADER_MASK);
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrOutlinerParent
-
- BEGIN_MESSAGE_MAP(CAddrDialogOutlinerParent, COutlinerParent)
- //{{AFX_MSG_MAP(CAddrDialogOutlinerParent)
- ON_WM_LBUTTONUP()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- CAddrDialogOutlinerParent::CAddrDialogOutlinerParent()
- {
-
- }
-
-
- CAddrDialogOutlinerParent::~CAddrDialogOutlinerParent()
- {
- }
-
-
- BOOL CAddrDialogOutlinerParent::RenderData ( int idColumn, CRect & rect, CDC &dc, const char * text )
- {
- int cx = 3, cy = 0;
- CAddrDialogOutliner *pOutliner = (CAddrDialogOutliner *) m_pOutliner;
-
- // Calculate text offset from top using font height.
- TEXTMETRIC tm;
- dc.GetTextMetrics ( &tm );
- cy = ( rect.bottom - rect.top - tm.tmHeight ) / 2;
-
- // Draw Text String
- dc.TextOut (rect.left + cx, rect.top + cy, text, _tcslen(text) );
-
- // Draw Sort Indicator
- MSG_COMMAND_CHECK_STATE sortType = pOutliner->m_attribSortBy == idColumn ? MSG_Checked : MSG_Unchecked;
-
- int idxImage = pOutliner->m_bSortAscending ? IDX_SORTINDICATORDOWN : IDX_SORTINDICATORUP;
- CSize cs = dc.GetTextExtent(text, _tcslen(text));
-
- if (idColumn == pOutliner->m_attribSortBy && cs.cx + 22 <= rect.Width()) {
- m_pIImage->DrawTransImage( idxImage,
- rect.left + 8 + cs.cx,
- (rect.top + rect.bottom) / 2 - 4,
- &dc );
- }
-
- return TRUE;
- }
-
-
- COutliner * CAddrDialogOutlinerParent::GetOutliner ( void )
- {
- return new CAddrDialogOutliner;
- }
-
-
- void CAddrDialogOutlinerParent::CreateColumns ( void )
- {
- CString cs;
-
- m_pOutliner->AddColumn ("", ID_COLADDR_TYPE, 24, 0, ColumnFixed, 0, TRUE );
- cs.LoadString(IDS_USERNAME);
- m_pOutliner->AddColumn (cs, ID_COLADDR_NAME, 175, 0, ColumnVariable, 1500);
- cs.LoadString(IDS_EMAILADDRESS);
- m_pOutliner->AddColumn (cs, ID_COLADDR_EMAIL, 175, 0, ColumnVariable, 1500);
- cs.LoadString(IDS_COMPANYNAME);
- m_pOutliner->AddColumn (cs, ID_COLADDR_COMPANY, 175, 0, ColumnVariable, 1500 );
- cs.LoadString(IDS_PHONE);
- m_pOutliner->AddColumn (cs, ID_COLADDR_PHONE, 175, 0, ColumnVariable, 1500, FALSE);
- cs.LoadString(IDS_LOCALITY);
- m_pOutliner->AddColumn (cs, ID_COLADDR_LOCALITY, 175, 0, ColumnVariable, 1500 );
- cs.LoadString(IDS_NICKNAME);
- m_pOutliner->AddColumn (cs, ID_COLADDR_NICKNAME, 175, 0, ColumnVariable, 1500 );
- m_pOutliner->SetHasPipes( FALSE );
-
- m_pOutliner->SetVisibleColumns(DEF_VISIBLE_COLUMNS);
- m_pOutliner->LoadXPPrefs("mailnews.abook_columns_win");
-
- }
-
-
- BOOL CAddrDialogOutlinerParent::ColumnCommand ( int idColumn )
- {
- ABID lastSelection;
-
- CAddrDialogOutliner *pOutliner = (CAddrDialogOutliner *) m_pOutliner;
-
- if (pOutliner->GetFocusLine() != -1)
- lastSelection = AB_GetEntryIDAt((AddressPane*) pOutliner->GetPane(), pOutliner->GetFocusLine());
-
- SetCursor ( theApp.LoadStandardCursor ( IDC_WAIT ) );
-
- if (idColumn == pOutliner->m_attribSortBy) {
- pOutliner->m_bSortAscending = !pOutliner->m_bSortAscending;
- }
- else
- pOutliner->m_bSortAscending = TRUE;
-
- pOutliner->m_attribSortBy = idColumn;
-
- switch (idColumn) {
- case ID_COLADDR_TYPE:
- AB_Command(pOutliner->GetPane(), AB_SortByTypeCmd, 0, 0);
- break;
- case ID_COLADDR_NAME:
- AB_Command(pOutliner->GetPane(), AB_SortByFullNameCmd, 0, 0);
- break;
- case ID_COLADDR_NICKNAME:
- AB_Command(pOutliner->GetPane(), AB_SortByNickname, 0, 0);
- break;
- case ID_COLADDR_LOCALITY:
- AB_Command(pOutliner->GetPane(), AB_SortByLocality, 0, 0);
- break;
- case ID_COLADDR_COMPANY:
- AB_Command(pOutliner->GetPane(), AB_SortByCompanyName, 0, 0);
- break;
- case ID_COLADDR_EMAIL:
- AB_Command(pOutliner->GetPane(), AB_SortByEmailAddress, 0, 0);
- break;
- default:
- AB_Command(pOutliner->GetPane(), AB_SortByFullNameCmd, 0, 0);
- break;
- }
-
-
- if (pOutliner->GetFocusLine() != -1) {
- uint index = CASTUINT(AB_GetIndexOfEntryID ((AddressPane*) pOutliner->GetPane(), lastSelection));
- pOutliner->SelectItem (index);
- pOutliner->ScrollIntoView(index);
- }
-
- Invalidate();
- pOutliner->Invalidate();
- SetCursor ( theApp.LoadStandardCursor ( IDC_ARROW ) );
- return TRUE;
- }
-
- void CAddrDialogOutlinerParent::OnLButtonUp( UINT nFlags, CPoint point )
- {
- BOOL bSaveColumns = (m_pOutliner &&
- (m_bResizeColumn || m_bDraggingHeader || m_iPusherHit))? TRUE : FALSE;
- COutlinerParent::OnLButtonUp(nFlags, point);
- if (bSaveColumns)
- m_pOutliner->SaveXPPrefs("mailnews.abook_columns_win");
- }
-
-
-
- //////////////////////////////////////////////////////////////////////////////
- // CAddrDialogDirOutliner
- BEGIN_MESSAGE_MAP(CAddrDialogDirOutliner, CMSelectOutliner)
- //{{AFX_MSG_MAP(CAddrDialogDirOutliner)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- CAddrDialogDirOutliner::CAddrDialogDirOutliner ( )
- {
- ApiApiPtr(api);
- m_pUnkUserImage = api->CreateClassInstance(APICLASS_IMAGEMAP);
- if (m_pUnkUserImage) {
- m_pUnkUserImage->QueryInterface(IID_IImageMap,(LPVOID*)&m_pIUserImage);
- ASSERT(m_pIUserImage);
- m_pIUserImage->Initialize(IDB_DIRLIST,16,16);
- }
- m_iMysticPlane = 0;
- m_dirIndex = 0;
- m_hFont = NULL;
- }
-
- CAddrDialogDirOutliner::~CAddrDialogDirOutliner ( )
- {
- if (m_pUnkUserImage) {
- if (m_pIUserImage)
- m_pUnkUserImage->Release();
- }
-
- if (m_hFont) {
- theApp.ReleaseAppFont(m_hFont);
- }
- }
-
-
- void CAddrDialogDirOutliner::SetDirectoryIndex(int dirIndex )
- {
- m_dirIndex = dirIndex;
- SelectItem (CASTINT(m_dirIndex));
- }
-
-
- void CAddrDialogDirOutliner::UpdateCount( )
- {
- m_iTotalLines = XP_ListCount (theApp.m_directories);
- if (!m_iTotalLines)
- ClearSelection();
- Invalidate();
- UpdateWindow();
- }
-
-
- void CAddrDialogDirOutliner::SetPane(ABPane *pane)
- {
- m_pane = pane;
- uint32 count;
-
- if (m_pane) {
- SetTotalLines(XP_ListCount (theApp.m_directories));
- Invalidate();
- UpdateWindow();
- }
- }
-
- void CAddrDialogDirOutliner::MysticStuffStarting( XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify,
- MSG_ViewIndex where,
- int32 num )
- {
- ++m_iMysticPlane;
- }
-
- void CAddrDialogDirOutliner::MysticStuffFinishing( XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify,
- MSG_ViewIndex where,
- int32 num )
- {
-
- #ifdef _WIN32
- CWnd *pParent = GetParentOwner();
- #else
- CWnd *pParent = GetOwner();
- pParent = pParent->GetParent();
- ASSERT(pParent);
- #endif
-
- switch ( notify )
- {
-
- case MSG_NotifyNone:
- break;
-
- case MSG_NotifyInsertOrDelete:
- // if its insert or delete then tell my frame to add the next chunk of values
- // from the search
- if (num > 0)
- HandleInsert(where, num);
- else
- HandleDelete(where, -num);
-
- break;
-
- case MSG_NotifyChanged:
- InvalidateLines( (int) where, (int) num );
- break;
-
- case MSG_NotifyAll:
- case MSG_NotifyScramble:
- Invalidate();
- break;
- }
-
- if (( !--m_iMysticPlane && m_pane)) {
- SetTotalLines(XP_ListCount (theApp.m_directories));
- Invalidate();
- UpdateWindow();
- }
- }
-
-
- void CAddrDialogDirOutliner::SetTotalLines( int count)
- {
- CMSelectOutliner::SetTotalLines(count);
- if (count = 0)
- ClearSelection();
- }
-
-
-
-
- BOOL CAddrDialogDirOutliner::RenderData ( UINT iColumn, CRect &rect, CDC &dc, const char * text )
- {
- if ( iColumn != ID_COLDIR_TYPE )
- return CMSelectOutliner::RenderData ( iColumn, rect, dc, text );
- int idxImage;
-
- if (m_pDirLine->dirType == LDAPDirectory)
- idxImage = IDX_DIRLDAPAB;
- else
- idxImage = IDX_DIRPERSONALAB;
-
- m_pIUserImage->DrawImage ( idxImage,
- rect.left + ( ( rect.Width ( ) - 16 ) / 2 ), rect.top, &dc, FALSE );
- return TRUE;
- }
-
-
- int CAddrDialogDirOutliner::TranslateIcon ( void * pLineData )
- {
- DIR_Server* line = (DIR_Server*) pLineData;
- int idxImage = 0;
-
- if (m_pDirLine->dirType == ABTypeList)
- idxImage = IDX_DIRLDAPAB;
- else
- idxImage = IDX_DIRPERSONALAB;
- return idxImage;
- }
-
- int CAddrDialogDirOutliner::TranslateIconFolder (void * pData)
- {
- // We're a flat list, so we're never a folder
- return ( OUTLINER_ITEM );
- }
-
-
- BOOL CAddrDialogDirOutliner::ColumnCommand ( int iColumn, int iLine )
- {
- // We have no column commands
- return FALSE;
- }
-
- HFONT CAddrDialogDirOutliner::GetLineFont(void *pLineData)
- {
- if (!m_hFont)
- {
- HDC hDC = ::GetDC(m_hWnd);
- LOGFONT lf;
- memset(&lf,0,sizeof(LOGFONT));
-
- lf.lfPitchAndFamily = FF_SWISS;
- lf.lfWeight = FW_NORMAL;
- lf.lfCharSet = IntlGetLfCharset(CIntlWin::GetSystemLocaleCsid());
- if (CIntlWin::GetSystemLocaleCsid() == CS_LATIN1)
- _tcscpy(lf.lfFaceName, "MS Sans Serif");
- else
- _tcscpy(lf.lfFaceName, IntlGetUIPropFaceName(CIntlWin::GetSystemLocaleCsid()));
- lf.lfHeight = -MulDiv(9, ::GetDeviceCaps(hDC, LOGPIXELSY), 72);
- m_hFont = theApp.CreateAppFont( lf );
- ::ReleaseDC(m_hWnd,hDC);
- }
- return m_hFont;
- }
-
-
- void * CAddrDialogDirOutliner::AcquireLineData ( int line )
- {
- m_lineindex = line + 1;
- if ( line >= m_iTotalLines)
- return NULL;
- m_pDirLine = (DIR_Server*) XP_ListGetObjectNum(theApp.m_directories, line + 1);
-
- return m_pDirLine;
- }
-
-
- void CAddrDialogDirOutliner::GetTreeInfo ( int iLine, uint32 * pFlags, int * pDepth, OutlinerAncestorInfo ** pAncestor )
- {
- if ( pFlags ) *pFlags = 0; // Flags?
- if ( pDepth ) *pDepth = 0; // We're flat, remember?
- }
-
-
- void CAddrDialogDirOutliner::ReleaseLineData ( void * )
- {
- }
-
-
- LPCTSTR CAddrDialogDirOutliner::GetColumnText ( UINT iColumn, void * pLineData )
- {
- DIR_Server* line = (DIR_Server*) pLineData;
-
- switch (iColumn) {
- case ID_COLDIR_NAME:
- return line->description;
- break;
- default:
- break;
- }
- return ("");
- }
-
- void CAddrDialogDirOutliner::OnSelChanged()
- {
- #ifdef _WIN32
- CWnd *pParent = GetParentOwner();
- #else
- CWnd *pParent = GetOwner();
- pParent = pParent->GetParent();
- ASSERT(pParent);
- #endif
- MSG_ViewIndex *indices;
- int count;
-
- if (((CAddrDialog*) pParent)->IsSearching())
- return;
-
- GetSelection(indices, count);
-
- if (count == 1)
- ((CAddrDialog*) pParent)->OnUpdateDirectorySelection(indices[0]);
- }
-
- void CAddrDialogDirOutliner::OnSelDblClk()
- {
-
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrOutlinerParent
-
- BEGIN_MESSAGE_MAP(CAddrDialogDirOutlinerParent, COutlinerParent)
- //{{AFX_MSG_MAP(CAddrDialogDirOutlinerParent)
- ON_WM_LBUTTONUP()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- CAddrDialogDirOutlinerParent::CAddrDialogDirOutlinerParent()
- {
-
- }
-
-
- CAddrDialogDirOutlinerParent::~CAddrDialogDirOutlinerParent()
- {
- }
-
-
- BOOL CAddrDialogDirOutlinerParent::RenderData ( int idColumn, CRect & rect, CDC &dc, const char * text )
- {
- int cx = 3, cy = 0;
- CAddrDialogDirOutliner *pOutliner = (CAddrDialogDirOutliner *) m_pOutliner;
-
- // Calculate text offset from top using font height.
- TEXTMETRIC tm;
- dc.GetTextMetrics ( &tm );
- cy = ( rect.bottom - rect.top - tm.tmHeight ) / 2;
-
- // Draw Text String
- dc.TextOut (rect.left + cx, rect.top + cy, text, _tcslen(text) );
-
- return TRUE;
- }
-
-
- COutliner * CAddrDialogDirOutlinerParent::GetOutliner ( void )
- {
- return new CAddrDialogDirOutliner;
- }
-
-
- void CAddrDialogDirOutlinerParent::CreateColumns ( void )
- {
-
- int iCol0 = 0,
- iCol1 = 0;
- CString cs;
-
- m_pOutliner->AddColumn ("", ID_COLDIR_TYPE, 24, 0, ColumnFixed, 0, TRUE );
- cs.LoadString(IDS_USERNAME);
- m_pOutliner->AddColumn (cs, ID_COLDIR_NAME, 1500, 0, ColumnVariable, iCol0 ? iCol0 : 1500 );
- m_pOutliner->SetHasPipes( FALSE );
-
- m_pOutliner->SetVisibleColumns(DEF_DIRVISIBLE_COLUMNS);
- m_pOutliner->LoadXPPrefs("mailnews.abook_dir_columns_win");
-
- }
-
-
- void CAddrDialogDirOutlinerParent::OnLButtonUp( UINT nFlags, CPoint point )
- {
- BOOL bSaveColumns = (m_pOutliner &&
- (m_bResizeColumn || m_bDraggingHeader || m_iPusherHit))? TRUE : FALSE;
- COutlinerParent::OnLButtonUp(nFlags, point);
- if (bSaveColumns)
- m_pOutliner->SaveXPPrefs("mailnews.abook_dir_columns_win");
- }
-
-
-
- void CAddrDialog::OnHelp()
- {
- NetHelp(HELP_SELECT_ADDRESSES);
- }
-
-
- BOOL CAddrDialog::IsDragInListBox(CPoint *pPoint)
- {
- CRect listRect;
-
- CListBox *pBucket = GetBucket();
- pBucket->GetWindowRect(LPRECT(listRect));
- ScreenToClient(LPRECT(listRect));
- if (listRect.PtInRect(*pPoint))
- return TRUE;
- else
- return FALSE;
- }
-
- BOOL CAddrDialog::ProcessVCardData(COleDataObject * pDataObject, CPoint &point)
- {
- UINT clipFormat;
- BOOL retVal = TRUE;;
- CWnd * pWnd = GetFocus();
- XP_List * pEntries;
- int32 iEntries;
-
- if (pDataObject->IsDataAvailable(
- clipFormat = ::RegisterClipboardFormat(vCardClipboardFormat)))
- {
- HGLOBAL hAddresses = pDataObject->GetGlobalData(clipFormat);
- LPSTR pAddresses = (LPSTR)GlobalLock(hAddresses);
- ASSERT(pAddresses);
- if (!AB_ConvertVCardsToExpandedName(theApp.m_pABook,pAddresses,&pEntries,&iEntries))
- {
- CListBox *pBucket = GetBucket();
-
- XP_List * node = pEntries;
- for (int32 i = 0; i < iEntries+1; i++)
- {
- char * pString = (char *)node->object;
- if (pString != NULL)
- AddStringToBucket(pBucket, MSG_TO_HEADER_MASK, pString, ABTypePerson, -1);
- node = node->next;
- if (!node)
- break;
- }
- XP_ListDestroy(pEntries);
- }
- }
-
- if (pWnd && ::IsWindow(pWnd->m_hWnd))
- pWnd->SetFocus();
- return retVal;
- }
-
- void CAddrDialog::UpdateMsgButtons()
- {
- if (m_pOutliner)
- {
- MSG_ViewIndex *indices;
- int count;
- BOOL bEnable;
-
- m_pOutliner->GetSelection(indices, count);
- bEnable = (count > 0) ? TRUE : FALSE;
- GetDlgItem(IDC_TO)->EnableWindow(bEnable);
- GetDlgItem(IDC_CC)->EnableWindow(bEnable);
- GetDlgItem(IDC_BCC)->EnableWindow(bEnable);
- GetDlgItem(ID_ITEM_PROPERTIES)->EnableWindow(bEnable);
- }
- DoUpdateWidget(IDC_DIRSEARCH, AB_LDAPSearchCmd, TRUE);
- if (m_bSearching)
- GetDlgItem(ID_NAVIGATE_INTERRUPT)->EnableWindow(TRUE);
- else
- GetDlgItem(ID_NAVIGATE_INTERRUPT)->EnableWindow(FALSE);
- }
-
- //////////////////////////////////////////////////////////////////////////////
- // CAddressPickerDropTarget
-
- DROPEFFECT CAddressPickerDropTarget::OnDragOver(CWnd * pWnd,
- COleDataObject * pDataObject, DWORD dwKeyState, CPoint point)
- {
- DROPEFFECT deReturn = DROPEFFECT_NONE;
- // Only interested in vcard
- if(pDataObject->IsDataAvailable(
- ::RegisterClipboardFormat(vCardClipboardFormat)) )
- {
- if (m_pOwner->IsDragInListBox(&point))
- deReturn = DROPEFFECT_COPY;
- }
- return(deReturn);
- }
-
- BOOL CAddressPickerDropTarget::OnDrop
- (CWnd * pWnd, COleDataObject * pDataObject, DROPEFFECT, CPoint point)
- {
- if (pDataObject->IsDataAvailable(::RegisterClipboardFormat(vCardClipboardFormat)) )
- {
- return m_pOwner->ProcessVCardData(pDataObject,point);
- }
- return FALSE;
- }
-
-
-