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.
- */
-
- // addrfrm.cpp : implementation file
- //
-
- #include "stdafx.h"
- #include "addrfrm.h"
- #ifdef FEATURE_ADDRPROP
- #include "addrprop.h"
- #endif
- #include "template.h"
- #include "xpgetstr.h"
- #include "wfemsg.h"
- #include "msg_srch.h"
- #include "dirprefs.h"
- #include "nethelp.h"
- #include "xp_help.h"
- #include "prefapi.h"
- #include "intlwin.h"
- #include "srchdlg.h"
- #include "intl_csi.h"
- #include "mailpriv.h"
- #include "mnprefs.h"
-
- //RHP - Need this include for the call in confhook.cpp
- #include "confhook.h"
-
- #ifndef _AFXDLL
- #undef new
- #endif
- IMPLEMENT_DYNCREATE(CAddrFrame, CGenericFrame)
- #ifndef _AFXDLL
- #define new DEBUG_NEW
- #endif
-
- extern "C" {
- #include "xpgetstr.h"
- extern int MK_MSG_CANT_CALL_MAILING_LIST;
- extern int MK_MSG_CALL_NEEDS_IPADDRESS;
- extern int MK_MSG_CALL_NEEDS_EMAILADDRESS;
- extern int MK_MSG_CANT_FIND_CALLPOINT;
- extern int MK_ADDR_BOOK_CARD;
- extern int MK_ADDR_NEW_CARD;
- extern int MK_OUT_OF_MEMORY;
- extern int MK_ADDR_FIRST_LAST_SEP;
- extern int MK_ADDR_LAST_FIRST_SEP;
- };
-
-
- #define ADDRESS_BOOK_TIMER 6
- #define OUTLINER_TYPEDOWN_TIMER 250
- #define TYPEDOWN_SPEED 300
- #define LDAP_SEARCH_SPEED 1250
- #define OUTLINER_TYPEDOWN_SPEED 1250
-
- static UINT AddrCodes[] = {
- ID_ITEM_ADDUSER,
- ID_ITEM_ADDLIST,
- ID_ITEM_PROPERTIES,
- ID_FILE_NEWMESSAGE,
- ID_LIVE_CALL,
- ID_EDIT_DELETE,
- ID_NAVIGATE_INTERRUPT
- };
-
- int FE_ShowPropertySheetFor (MWContext* context, ABID entryID, PersonEntry* pPerson)
- {
- DIR_Server *pab = NULL;
- BOOL result = FALSE;
-
- #ifdef FEATURE_ADDRPROP
- DIR_GetPersonalAddressBook (theApp.m_directories, &pab);
- XP_ASSERT (pab);
-
- if (pab)
- {
- if (entryID != MSG_MESSAGEIDNONE)
- {
- CString formattedString;
- char fullname [kMaxFullNameLength];
- AB_GetFullName(pab, theApp.m_pABook, entryID, fullname);
- formattedString.Format(XP_GetString (MK_ADDR_BOOK_CARD), fullname);
- CAddrEditProperties prop(NULL, pab,
- (const char *) formattedString, ABSTRACTCX(context)->GetDialogOwner(), entryID, pPerson, context);
- prop.SetCurrentPage(0);
- result = prop.DoModal();
- }
- else
- {
- CString formattedString;
- char* name = NULL;
- name = (char *) XP_ALLOC(kMaxFullNameLength);
- if (!name)
- return MK_OUT_OF_MEMORY;
- XP_STRCPY (name, pPerson->pGivenName);
- if (pPerson->pFamilyName)
- {
- XP_STRNCPY_SAFE (name, XP_GetString (MK_ADDR_FIRST_LAST_SEP), kMaxFullNameLength);
- XP_STRNCPY_SAFE (name, pPerson->pFamilyName, kMaxFullNameLength);
- }
-
- formattedString.Format(XP_GetString (MK_ADDR_BOOK_CARD), name);
- XP_FREEIF (name);
- CAddrEditProperties prop(NULL, pab,
- (const char *) formattedString, ABSTRACTCX(context)->GetDialogOwner(), 0, pPerson, context);
- prop.SetCurrentPage(0);
- result = prop.DoModal();
- }
- }
-
- if (result == IDOK)
- result = TRUE;
- if (result == IDCANCEL)
- result = FALSE;
- // if it is -1 then there was a memory problem creating the dialog
- // and we should return that
- #endif
-
- return result;
- }
-
- void CAddrCX::DestroyContext()
- {
- CStubsCX::DestroyContext();
- }
-
-
- CAddrBar::CAddrBar()
- {
- m_iWidth = 0;
- m_uTypedownClock = 0;
- m_save = "";
- m_savedir = -1;
- m_pFont = NULL;
- m_bRemoveLDAPDir = FALSE;
-
- PREF_GetBoolPref("mail.addr_book.ldap.disabled", &m_bRemoveLDAPDir);
-
- //{{AFX_DATA_INIT(CAddrbkView)
- m_name = _T("");
- m_directory = 0;
- //}}AFX_DATA_INIT
- // TODO: add construction code here
- }
-
- CAddrBar::~CAddrBar()
- {
- if (m_pFont) {
- theApp.ReleaseAppFont(m_pFont);
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrBar Message handlers
-
- BEGIN_MESSAGE_MAP(CAddrBar, CDialogBar)
- //{{AFX_MSG_MAP(CAddrFrame)
- ON_WM_CREATE()
- ON_WM_SIZE()
- ON_WM_TIMER ()
- ON_EN_CHANGE(IDC_ADDRNAME, OnChangeName)
- ON_EN_SETFOCUS(IDC_ADDRNAME, OnSetFocusName)
- ON_CBN_SELCHANGE(IDC_DIRECTORIES, OnChangeDirectory)
- ON_BN_CLICKED(IDC_DIRSEARCH, OnExtDirectorySearch)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
-
- BOOL CAddrBar::Create(CWnd* pParentWnd, UINT nIDTemplate, UINT nStyle, UINT nID)
- {
- BOOL res = CDialogBar::Create(pParentWnd, nIDTemplate, nStyle, nID);
-
- m_iWidth = m_sizeDefault.cx;
-
- return res;
- }
-
-
- int CAddrBar::OnCreate( LPCREATESTRUCT lpCreateStruct )
- {
- int retval = CDialogBar::OnCreate( lpCreateStruct);
-
- 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);
-
- CRect rect;
- GetClientRect(&rect);
- m_sizeDefault = rect.Size();
-
- return retval;
- }
-
- void CAddrBar::SetDirectoryIndex( int dirIndex )
- {
- CComboBox *widget = (CComboBox*) GetDlgItem(IDC_DIRECTORIES);
- m_savedir = -1;
- widget->SetCurSel (dirIndex);
- UpdateData(TRUE);
- if (m_directory != m_savedir) {
- m_savedir = m_directory;
- if (m_directory != -1) {
- XP_Bool bSelectable = FALSE, bPlural = FALSE;
- MSG_COMMAND_CHECK_STATE sState;
- CAddrFrame* frame = (CAddrFrame*) GetParentFrame();
- AB_CommandStatus((ABPane*) frame->GetPane(),
- AB_LDAPSearchCmd,
- NULL, NULL,
- &bSelectable,
- &sState,
- NULL,
- &bPlural);
- CWnd* widget = GetDlgItem ( IDC_DIRSEARCH );
- widget->EnableWindow(bSelectable);
- }
- }
- }
-
-
- void CAddrBar::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 (m_bRemoveLDAPDir){
- if (dir->dirType == PABDirectory)
- widget->AddString(dir->description);
- }
- else if (dir->dirType == PABDirectory || dir->dirType == LDAPDirectory)
- widget->AddString(dir->description);
- }
-
- if (m_directory == -1)
- widget->SetCurSel(0);
- else
- widget->SetCurSel(m_directory);
- }
-
- void CAddrBar::OnTimer(UINT nID)
- {
- CWnd::OnTimer(nID);
- if (nID == ADDRESS_BOOK_TIMER) {
- KillTimer(m_uTypedownClock);
- CAddrFrame* frame = (CAddrFrame*) GetParentFrame();
- if (!m_name.IsEmpty()) {
- frame->OnTypedown(m_name.GetBuffer(0));
- m_name.ReleaseBuffer();
- }
- }
- }
-
- void CAddrBar::OnKillFocus( CWnd* pNewWnd )
- {
- KillTimer(m_uTypedownClock);
- }
-
- void CAddrBar::DoDataExchange(CDataExchange* pDX)
- {
- CDialogBar::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CAddrbkView)
- DDX_Text(pDX, IDC_ADDRNAME, m_name);
- DDX_CBIndex(pDX, IDC_DIRECTORIES, m_directory);
- //}}AFX_DATA_MAP
- }
-
-
- void CAddrBar::OnChangeName()
- {
- // TODO: Add your control notification handler code here
- CAddrFrame* frame = (CAddrFrame*) GetParentFrame();
- if (frame->IsSearching()) {
- frame->OnExtendedDirectorySearch();
- }
-
- UpdateData(TRUE);
- if (m_name != m_save) {
- m_save = m_name;
- KillTimer(m_uTypedownClock);
- if (m_name.GetLength())
- {
- DIR_Server* dir;
- CComboBox *widget = (CComboBox*) GetDlgItem(IDC_DIRECTORIES);
- dir = (DIR_Server*) XP_ListGetObjectNum (theApp.m_directories, widget->GetCurSel() + 1);
- if (dir->dirType == PABDirectory)
- m_uTypedownClock = SetTimer(ADDRESS_BOOK_TIMER, TYPEDOWN_SPEED, NULL);
- else {
- int32 prefInt = LDAP_SEARCH_SPEED;
- PREF_GetIntPref("ldap_1.autoComplete.interval", &prefInt);
- m_uTypedownClock = SetTimer(ADDRESS_BOOK_TIMER, prefInt, NULL);
- }
- }
- }
- }
-
-
- void CAddrBar::OnSetFocusName()
- {
- CEdit *widget = (CEdit*) GetDlgItem(IDC_ADDRNAME);
- widget->SetSel(0, -1, TRUE);
- }
-
-
- void CAddrBar::OnChangeDirectory()
- {
- // TODO: Add your control notification handler code here
- CAddrFrame* frame = (CAddrFrame*) GetParentFrame();
- if (frame->IsSearching())
- return;
-
- UpdateData(TRUE);
- if (m_directory != m_savedir) {
- m_savedir = m_directory;
- if (m_directory != -1) {
-
- frame->OnChangeDirectory(m_directory);
- XP_Bool bSelectable = FALSE, bPlural = FALSE;
- MSG_COMMAND_CHECK_STATE sState;
- AB_CommandStatus((ABPane*) frame->GetPane(),
- AB_LDAPSearchCmd,
- NULL, NULL,
- &bSelectable,
- &sState,
- NULL,
- &bPlural);
- CWnd* widget = GetDlgItem ( IDC_DIRSEARCH );
- widget->EnableWindow(bSelectable);
- }
- }
- }
-
-
- void CAddrBar::OnExtDirectorySearch()
- {
- // TODO: Add your control notification handler code here
- CAddrFrame* frame = (CAddrFrame*) GetParentFrame();
- if (m_directory != -1) {
- KillTimer(m_uTypedownClock);
- frame->OnExtendedDirectorySearch();
- }
- }
-
-
- static void GrowWindow( CWnd *pWnd, int dx, int dy )
- {
- CRect rect;
- CWnd *parent;
-
- pWnd->GetWindowRect(&rect);
- if (parent = pWnd->GetParent())
- parent->ScreenToClient(&rect);
-
- rect.bottom += dy;
- if (rect.right + dx > 0)
- rect.right += dx;
-
- pWnd->MoveWindow(&rect);
- }
-
-
- static void SlideWindow( CWnd *pWnd, int dx, int dy )
- {
- CRect rect;
- CWnd *parent;
-
- pWnd->GetWindowRect(&rect);
- if (parent = pWnd->GetParent())
- parent->ScreenToClient(&rect);
-
- rect.top += dy;
- rect.left += dx;
- rect.bottom += dy;
- rect.right += dx;
-
- pWnd->MoveWindow(&rect, TRUE);
- }
-
-
- void CAddrBar::OnSize( UINT nType, int cx, int cy )
- {
- CDialogBar::OnSize( nType, cx, cy );
- if ( cx && m_iWidth && ( cx != m_iWidth ) ) {
- CWnd *widget;
- CRect rect1 (0,0,0,0);
- int dx = cx - m_iWidth;
-
- widget = GetDlgItem(IDC_DIRSEARCH);
- if (widget) {
- SlideWindow(widget, dx, 0);
- widget->GetWindowRect(&rect1);
- }
-
- widget = GetDlgItem(IDC_ADDRNAME);
- if (widget) {
- CWnd *parent;
- CRect rect;
-
- widget->GetWindowRect(&rect);
- if (parent = widget->GetParent()) {
- parent->ScreenToClient(&rect1);
- parent->ScreenToClient(&rect);
- rect.right = rect1.left - 8;
- }
- widget->MoveWindow(&rect);
- }
- m_iWidth = cx;
- }
- }
-
- class CAddrFrame;
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrEntryList
-
- class CAddrEntryList: public IMsgList {
-
- CAddrFrame *m_pAddrFrame;
- 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) {}
-
- CAddrEntryList( CAddrFrame *pAddrFrame ) {
- m_ulRefCount = 0;
- m_pAddrFrame = pAddrFrame;
- }
- };
-
-
- STDMETHODIMP CAddrEntryList::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_pAddrFrame;
-
- if (*ppv != NULL) {
- AddRef();
- return NOERROR;
- }
-
- return ResultFromScode(E_NOINTERFACE);
- }
-
- STDMETHODIMP_(ULONG) CAddrEntryList::AddRef(void)
- {
- return ++m_ulRefCount;
- }
-
- STDMETHODIMP_(ULONG) CAddrEntryList::Release(void)
- {
- ULONG ulRef;
- ulRef = --m_ulRefCount;
- if (m_ulRefCount == 0)
- delete this;
- return ulRef;
- }
-
- void CAddrEntryList::ListChangeStarting( MSG_Pane* pane, XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
- int32 num)
- {
- if (m_pAddrFrame) {
- m_pAddrFrame->ListChangeStarting( pane, asynchronous,
- notify, where, num );
- }
- }
-
- void CAddrEntryList::ListChangeFinished( MSG_Pane* pane, XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
- int32 num)
- {
- if (m_pAddrFrame) {
- m_pAddrFrame->ListChangeFinished( pane, asynchronous,
- notify, where, num );
- }
- }
-
- void CAddrEntryList::GetSelection( MSG_Pane* pane, MSG_ViewIndex **indices, int *count,
- int *focus)
- {
- }
-
- void CAddrEntryList::SelectItem( MSG_Pane* pane, int item )
- {
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrFrame
-
- CAddrFrame *CAddrFrame::Open()
- {
- if (!WFE_MSGCheckWizard())
- return NULL;
-
- if (!theApp.m_pAddressWindow) //starts the address book window
- {
- CCreateContext context;
- context.m_pCurrentFrame = NULL;
- context.m_pCurrentDoc = NULL;
- context.m_pNewViewClass = NULL;
- context.m_pNewDocTemplate = NULL;
-
- theApp.m_pAddressWindow = new CAddrFrame();
- if(!theApp.m_pAddressWindow) return NULL;
- 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
- theApp.m_pAddressWindow->LoadFrame(IDR_ADDRESS_MENU,
- WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE |WS_CLIPCHILDREN|WS_CLIPSIBLINGS, NULL, &Context);
- }
- else
- {
- theApp.m_pAddressWindow->ActivateFrame();
- }
-
- return theApp.m_pAddressWindow;
- }
-
-
- CAddrFrame::CAddrFrame()
- {
- CString msg;
- INTL_CharSetInfo csi = LO_GetDocumentCharacterSetInfo(GetContext());
-
- m_cxType = AddressCX;
-
- GetContext()->type = MWContextAddressBook;
- GetContext()->fancyFTP = TRUE;
- GetContext()->fancyNews = TRUE;
- GetContext()->intrupt = FALSE;
- GetContext()->reSize = FALSE;
- INTL_SetCSIWinCSID(csi, CIntlWin::GetSystemLocaleCsid());
-
- m_pOutliner = NULL;
- m_pOutlinerParent = NULL;
- m_addrBookPane = NULL;
- m_bSearching = FALSE;
- m_iProgress = 0;
- m_iWidth = 0;
- m_pSplitter = NULL;
-
- CAddrEntryList *pInstance = new CAddrEntryList( this );
- pInstance->QueryInterface( IID_IMsgList, (LPVOID *) &m_pIAddrList );
- }
-
-
- CAddrFrame::~CAddrFrame()
- {
- if (m_pIAddrList)
- m_pIAddrList->Release();
-
- if (m_addrBookPane)
- HandleErrorReturn(AB_CloseAddressBookPane(&m_addrBookPane));
-
- theApp.m_pAddressWindow = NULL;
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrFrame Overloaded methods
-
- BOOL CAddrFrame::PreCreateWindow(CREATESTRUCT& cs)
- {
- cs.hwndParent = NULL;
-
- cs.x = cs.y = 0;
- cs.cx = cs.cy = 300; // Arbitrary
-
- BOOL bRet = CGenericFrame::PreCreateWindow(cs);
-
- #ifdef _WIN32
- cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
- #endif
-
- return bRet;
- }
-
-
- BOOL CAddrFrame::LoadFrame( UINT nIDResource, DWORD dwDefaultStyle,
- CWnd* pParentWnd, CCreateContext* pContext)
- {
- BOOL ret = CGenericFrame::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext);
-
- if (ret) {
-
- WINDOWPLACEMENT wp;
- wp.length = sizeof(WINDOWPLACEMENT);
- GetWindowPlacement(&wp);
-
- if (wp.rcNormalPosition.left < 0 || wp.rcNormalPosition.top < 0) {
- SetWindowPos( NULL, 0 , 0, 0, 0, SWP_NOSIZE);
- GetWindowPlacement(&wp);
- SetWindowPos( NULL, abs (wp.rcNormalPosition.left) , abs (wp.rcNormalPosition.top),
- 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
- }
- else
- ShowWindow(SW_SHOW);
- }
-
- return ret;
- }
-
-
- BOOL CAddrFrame::OnCreateClient( LPCREATESTRUCT lpcs, CCreateContext* pContext )
- {
- BOOL res = CGenericFrame::OnCreateClient(lpcs, pContext);
- if (res) {
-
- m_pSplitter = (CMailNewsSplitter *) RUNTIME_CLASS(CMailNewsSplitter)->CreateObject();
-
- ASSERT(m_pSplitter);
-
- #ifdef _WIN32
- m_pSplitter->CreateEx(0, NULL, NULL,
- WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS,
- 0,0,0,0, this->m_hWnd, (HMENU)AFX_IDW_PANE_FIRST, pContext );
- #else
- m_pSplitter->Create( NULL, NULL,
- WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS,
- CRect(0,0,0,0), this, AFX_IDW_PANE_FIRST, pContext );
- #endif
-
- m_pOutlinerParent = new CAddrOutlinerParent;
- #ifdef _WIN32
- m_pOutlinerParent->CreateEx(WS_EX_CLIENTEDGE, NULL, NULL,
- WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
- 0,0,0,0, m_pSplitter->m_hWnd, (HMENU) IDW_RESULTS_PANE, NULL );
- #else
- m_pOutlinerParent->Create( NULL, NULL,
- WS_BORDER|WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS,
- CRect(0,0,0,0), m_pSplitter, IDW_RESULTS_PANE );
- #endif
-
- m_pOutliner = (CAddrOutliner *) m_pOutlinerParent->m_pOutliner;
- m_pOutlinerParent->CreateColumns ( );
- m_pOutlinerParent->EnableFocusFrame(TRUE);
- m_pOutliner->SetContext( GetContext() );
- SetMainContext (this);
- SetActiveContext (this);
-
- m_pDirOutlinerParent = new CDirOutlinerParent;
- #ifdef _WIN32
- m_pDirOutlinerParent->CreateEx(WS_EX_CLIENTEDGE, NULL, NULL,
- WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
- 0,0,0,0, m_pSplitter->m_hWnd, (HMENU) IDW_RESULTS_PANE, NULL );
- #else
- m_pDirOutlinerParent->Create( NULL, NULL,
- WS_BORDER|WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS,
- CRect(0,0,0,0), m_pSplitter, IDW_RESULTS_PANE );
- #endif
-
- m_pDirOutliner = (CDirOutliner *) m_pDirOutlinerParent->m_pOutliner;
- m_pDirOutlinerParent->CreateColumns ( );
- m_pDirOutlinerParent->EnableFocusFrame(TRUE);
- m_pDirOutliner->SetContext( GetContext() );
-
- int32 prefInt = -1;
- PREF_GetIntPref("mail.addr_book.sliderwidth", &prefInt);
- RECT rect;
- GetClientRect(&rect);
- m_pSplitter->AddPanes(m_pDirOutlinerParent, m_pOutlinerParent, prefInt, TRUE);
- }
-
- return res;
- }
-
-
- BOOL CAddrFrame::PreTranslateMessage( MSG* pMsg )
- {
- if (pMsg->message == WM_KEYDOWN)
- {
- if (pMsg->wParam == VK_DELETE)
- {
- if (GetFocus() == m_barAddr.GetDlgItem(IDC_ADDRNAME)) {
- return FALSE;
- }
- }
-
- if (pMsg->wParam == VK_TAB) {
- HWND hwndNext = NULL;
- HWND hwndFocus = ::GetFocus();
-
- HWND hwndDirOutliner = m_pDirOutliner ? m_pDirOutliner->m_hWnd : NULL;
- HWND hwndOutliner = m_pOutliner ? m_pOutliner->m_hWnd : NULL;
-
- HWND hwndAddrBarFirst = ::GetNextDlgTabItem( m_barAddr.m_hWnd, NULL, FALSE );
-
- HWND hwndAddrBarLast = ::GetNextDlgTabItem( m_barAddr.m_hWnd, hwndAddrBarFirst, TRUE );
-
- if ( GetKeyState(VK_SHIFT) & 0x8000 ) {
-
- // Tab backward
- if ( hwndFocus == hwndAddrBarFirst ) {
- // Handle tabbing into outliner
- hwndNext = hwndOutliner;
- } else if (hwndFocus == hwndOutliner) {
- // Handle tabbing out of outliner into the directory list
- if (m_pSplitter->IsOnePaneClosed())
- hwndNext = hwndAddrBarLast;
- else
- hwndNext = hwndDirOutliner;
- } else if ( hwndFocus == hwndDirOutliner ) {
- // Handle tabbing into the outliner
- hwndNext = hwndAddrBarLast;
- }
-
- } else {
-
- // Tab forward
- if (hwndFocus == hwndOutliner) {
- // Handle tabbing out of outliner
- hwndNext = hwndAddrBarFirst;
- } else if ( hwndFocus == hwndAddrBarLast ) {
- // 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
- hwndNext = hwndOutliner;
- }
-
- }
- if ( hwndNext ) {
- ::SetFocus( hwndNext );
- return TRUE;
- }
- } // if tab
- } // if keydown
- return CGenericFrame::PreTranslateMessage(pMsg);
- }
-
-
- void CAddrFrame::OnHelpMenu()
- {
- NetHelp(HELP_ADDRESS_BOOK);
- }
-
-
- void CAddrFrame::Progress(MWContext *pContext, const char *pMessage)
- {
- LPNSSTATUSBAR pIStatusBar = NULL;
- m_pChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
- if ( pIStatusBar ) {
- pIStatusBar->SetStatusText(pMessage);
- pIStatusBar->Release();
- }
- }
-
-
- void CAddrFrame::SetProgressBarPercent(MWContext *pContext, int32 lPercent)
- {
- lPercent = lPercent < 0 ? 0 : ( lPercent > 100 ? 100 : lPercent );
-
- if ( m_iProgress == lPercent ) {
- return;
- }
-
- m_iProgress = lPercent;
- if (GetChrome()) {
- LPNSSTATUSBAR pIStatusBar = NULL;
- GetChrome()->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
- if ( pIStatusBar ) {
- pIStatusBar->SetProgress( CASTINT(lPercent) );
- pIStatusBar->Release();
- }
- }
- }
-
-
- STDMETHODIMP CAddrFrame::QueryInterface(REFIID refiid, LPVOID * ppv)
- {
- *ppv = NULL;
- if (IsEqualIID(refiid,IID_IUnknown))
- *ppv = (LPUNKNOWN) (LPMSGLIST) m_pIAddrList;
- else if (IsEqualIID(refiid,IID_IMailFrame))
- *ppv = (LPMAILFRAME) this;
- else if (IsEqualIID(refiid,IID_IMsgList))
- *ppv = (LPMSGLIST) m_pIAddrList;
-
- if (*ppv != NULL) {
- AddRef();
- return NOERROR;
- }
-
- return ResultFromScode(E_NOINTERFACE);
- }
-
- STDMETHODIMP_(ULONG) CAddrFrame::AddRef(void)
- {
- return 0; // Not a real component
- }
-
- STDMETHODIMP_(ULONG) CAddrFrame::Release(void)
- {
- return 0; // Not a real component
- }
-
- // IMailFrame interface
- CMailNewsFrame *CAddrFrame::GetMailNewsFrame()
- {
- return (CMailNewsFrame *) NULL;
- }
-
- MSG_Pane *CAddrFrame::GetPane()
- {
- return (MSG_Pane*) m_addrBookPane;
- }
-
- void CAddrFrame::PaneChanged(MSG_Pane *pane, XP_Bool asynchronous,
- MSG_PANE_CHANGED_NOTIFY_CODE notify, int32 value)
- {
- if (notify == MSG_PaneDirectoriesChanged) {
- // stop an ldap search if we need to
- if (m_bSearching)
- OnStopSearch();
- UpdateDirectories();
- }
- }
-
-
- #ifdef FEATURE_ADDRESS_BOOK
- #include "addrfrm.i00"
- #endif
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrFrame message handlers
-
- BEGIN_MESSAGE_MAP(CAddrFrame, CGenericFrame)
- //{{AFX_MSG_MAP(CAddrFrame)
- ON_WM_CREATE()
- ON_WM_CLOSE()
- ON_WM_SHOWWINDOW( )
- ON_WM_DESTROY()
- ON_WM_GETMINMAXINFO()
- ON_UPDATE_COMMAND_UI(ID_VIEW_ABTOOLBAR, OnUpdateViewCommandToolbar)
- ON_COMMAND(ID_VIEW_ABTOOLBAR, OnViewCommandToolbar)
- ON_UPDATE_COMMAND_UI(ID_TOOLS_ADDRESSBOOK, OnUpdateShowAddressBookWindow)
- ON_UPDATE_COMMAND_UI(IDS_SECURITY_STATUS, OnUpdateSecureStatus)
- ON_COMMAND(ID_FILE_IMPORT, OnImportFile)
- ON_UPDATE_COMMAND_UI( ID_FILE_IMPORT, OnUpdateImport )
- ON_COMMAND(ID_FILE_SAVEAS, OnExportFile)
- ON_UPDATE_COMMAND_UI( ID_FILE_SAVEAS, OnUpdateExport )
- ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
- ON_UPDATE_COMMAND_UI( IDC_DIRSEARCH, OnUpdateSearch )
- ON_COMMAND(IDC_DIRSEARCH, OnExtDirectorySearch)
- ON_COMMAND(ID_NAVIGATE_INTERRUPT, OnStopSearch)
- ON_UPDATE_COMMAND_UI(ID_NAVIGATE_INTERRUPT, OnUpdateStopSearch)
- ON_COMMAND(ID_FILE_NEWMESSAGE, OnComposeMsg)
- ON_UPDATE_COMMAND_UI(ID_FILE_NEWMESSAGE, OnUpdateComposeMsg)
- ON_COMMAND(ID_LIVE_CALL, OnCall)
- ON_UPDATE_COMMAND_UI(ID_LIVE_CALL, OnUpdateCall)
- ON_COMMAND(ID_ITEM_ADDUSER, OnAddUser)
- ON_UPDATE_COMMAND_UI(ID_ITEM_ADDUSER, OnUpdateAddUser)
- ON_COMMAND(ID_FILE_NEWAB, OnAddAB)
- ON_UPDATE_COMMAND_UI(ID_FILE_NEWAB, OnUpdateAddAB)
- ON_COMMAND(ID_FILE_NEWDIR, OnAddDir)
- ON_UPDATE_COMMAND_UI(ID_FILE_NEWDIR, OnUpdateAddDir)
- ON_COMMAND(ID_EDIT_DOMAINS, OnHTMLDomains)
- ON_UPDATE_COMMAND_UI(ID_EDIT_DOMAINS, OnUpdateHTMLDomains)
- ON_COMMAND(ID_ITEM_ADDLIST, OnAddList)
- ON_UPDATE_COMMAND_UI(ID_ITEM_ADDLIST, OnUpdateAddList)
- ON_COMMAND(ID_SWITCH_SORT, OnSwitchSortFirstLast)
- ON_UPDATE_COMMAND_UI(ID_SWITCH_SORT, OnUpdateSwitchSort)
- ON_COMMAND(ID_EDIT_DELETE, OnDeleteItem)
- ON_UPDATE_COMMAND_UI(ID_EDIT_DELETE, OnUpdateDeleteItem)
- ON_COMMAND(ID_EDIT_UNDO, OnUndo)
- ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateUndo)
- ON_COMMAND(ID_EDIT_REDO, OnRedo)
- ON_UPDATE_COMMAND_UI(ID_EDIT_REDO, OnUpdateRedo)
- ON_COMMAND(ID_ITEM_PROPERTIES, OnItemProperties)
- ON_UPDATE_COMMAND_UI(ID_ITEM_PROPERTIES, OnUpdateItemProperties)
- ON_COMMAND(ID_SORT_TYPE, OnSortType)
- ON_UPDATE_COMMAND_UI(ID_SORT_TYPE, OnUpdateSortType)
- ON_COMMAND(ID_SORT_NAME, OnSortName)
- ON_UPDATE_COMMAND_UI(ID_SORT_NAME, OnUpdateSortName)
- ON_COMMAND(ID_SORT_NICKNAME, OnSortNickName)
- ON_UPDATE_COMMAND_UI(ID_SORT_NICKNAME, OnUpdateSortNickName)
- ON_COMMAND(ID_SORT_EMAILADDRESS, OnSortEmailAddress)
- ON_UPDATE_COMMAND_UI(ID_SORT_EMAILADDRESS, OnUpdateSortEmailAddress)
- ON_COMMAND(ID_SORT_COMPANY, OnSortCompany)
- ON_UPDATE_COMMAND_UI(ID_SORT_COMPANY, OnUpdateSortCompany)
- ON_COMMAND(ID_SORT_LOCALITY, OnSortLocality)
- ON_UPDATE_COMMAND_UI(ID_SORT_LOCALITY, OnUpdateSortLocality)
- ON_COMMAND(ID_ASCENDING, OnSortAscending)
- ON_UPDATE_COMMAND_UI(ID_ASCENDING, OnUpdateSortAscending)
- ON_COMMAND(ID_DECENDING, OnSortDescending)
- ON_UPDATE_COMMAND_UI(ID_DECENDING, OnUpdateSortDescending)
- ON_COMMAND(ID_CREATE_CARD, OnCreateCard)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- int CAddrFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- void WFE_AddNewFrameToFrameList(CGenericFrame * pFrame);
- int res = CGenericFrame::OnCreate(lpCreateStruct);
-
- unsigned long sortby;
- int32 prefInt;
- PREF_GetIntPref("mail.addr_book.sortby",&prefInt);
- switch (prefInt) {
- case ID_COLADDR_TYPE:
- case ID_COLADDR_COMPANY:
- case ID_COLADDR_LOCALITY:
- sortby = ABFullName;
- break;
- case ID_COLADDR_NAME:
- sortby = ABFullName;
- break;
- case ID_COLADDR_EMAIL:
- sortby = ABEmailAddress;
- break;
- case ID_COLADDR_NICKNAME:
- sortby = ABNickname;
- break;
- default:
- sortby = ABFullName;
- break;
- }
-
- int result = 0;
-
- DIR_Server* dir = (DIR_Server*)XP_ListGetObjectNum(theApp.m_directories, 1);
-
- XP_ASSERT (dir);
-
- if (!dir)
- return -1;
-
- XP_Bool prefBool;
- PREF_GetBoolPref("mail.addr_book.sort_ascending",&prefBool);
-
- HandleErrorReturn((result = AB_CreateAddressBookPane(&m_addrBookPane,
- GetContext(),
- WFE_MSGGetMaster())));
-
- if (result)
- return -1;
-
- HandleErrorReturn((result = AB_InitializeAddressBookPane(m_addrBookPane,
- dir,
- theApp.m_pABook,
- sortby,
- prefBool)));
- if (result)
- return -1;
-
- //I'm hardcoding because I don't want this translated
- GetChrome()->CreateCustomizableToolbar("Address_Book"/*ID_ADDRESS_BOOK*/, 3, TRUE);
- CButtonToolbarWindow *pWindow;
- BOOL bOpen, bShowing;
-
- int32 nPos;
-
- //I'm hardcoding because I don't want this translated
- GetChrome()->LoadToolbarConfiguration(ID_ADDRESS_BOOK_TOOLBAR, CString("Address_Book_Toolbar"), nPos, bOpen, bShowing);
-
- LPNSTOOLBAR pIToolBar = NULL;
- GetChrome()->QueryInterface( IID_INSToolBar, (LPVOID *) &pIToolBar );
- if ( pIToolBar ) {
- pIToolBar->Create( this, WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | CBRS_TOP | WS_BORDER);
- pIToolBar->SetButtons( AddrCodes, sizeof(AddrCodes)/sizeof(UINT) );
- pIToolBar->SetSizes( CSize( 30, 27 ), CSize( 23, 21 ) );
- pIToolBar->LoadBitmap( MAKEINTRESOURCE( IDB_ADDRESSTOOLBARP ) );
- pIToolBar->SetToolbarStyle( theApp.m_pToolbarStyle );
- pWindow = new CButtonToolbarWindow(CWnd::FromHandlePermanent(pIToolBar->GetHWnd()), theApp.m_pToolbarStyle, 43, 27, eLARGE_HTAB);
- GetChrome()->GetCustomizableToolbar()->AddNewWindow(ID_ADDRESS_BOOK_TOOLBAR, pWindow,nPos, 50, 37, 0, CString(szLoadString(ID_ADDRESS_BOOK_TOOLBAR)),theApp.m_pToolbarStyle, bOpen, FALSE);
- GetChrome()->ShowToolbar(ID_ADDRESS_BOOK_TOOLBAR, bShowing);
- #ifdef XP_WIN16
- GetChrome()->GetCustomizableToolbar()->SetBottomBorder(TRUE);
- #endif
-
- pIToolBar->Release();
- }
-
- LPNSSTATUSBAR pIStatusBar = NULL;
- GetChrome()->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
- if ( pIStatusBar ) {
- pIStatusBar->Create( this );
- pIStatusBar->Release();
- }
-
-
- m_barAddr.Create( this, IDD_ADDRESSBOOK, CBRS_TOP, 1 );
-
- // Initially size window to only dialog + title bar.
- int BorderX = GetSystemMetrics(SM_CXFRAME);
-
- CRect rect;
- m_barAddr.GetWindowRect(rect);
- #ifdef _WIN32
- CSize size = m_barAddr.CalcFixedLayout(FALSE, FALSE);
- #else
- CSize size = m_barAddr.m_sizeDefault;
- #endif
-
- // Figure height of title bar + bottom border
- m_iWidth = size.cx;
-
- int16 iLeft,iRight,iTop,iBottom;
- PREF_GetRectPref("mail.addr_book_window_rect", &iLeft, &iTop, &iRight, &iBottom);
- int screenY = ::GetSystemMetrics(SM_CYFULLSCREEN);
- int screenX = ::GetSystemMetrics(SM_CXFULLSCREEN);
-
- if ((iLeft >= 0) && (iTop >= 0) && (iRight < screenX) && (iBottom < screenY))
- {
- if (iRight - iLeft > m_iWidth)
- size.cx = iRight - iLeft;
- size.cy = iBottom - iTop;
- SetWindowPos( NULL, iLeft, iTop, size.cx, size.cy,
- SWP_HIDEWINDOW);
- }
- else {
- size.cy = 300;
- SetWindowPos( NULL, 0, 0, size.cx, size.cy,
- SWP_HIDEWINDOW);
-
- }
-
- m_barAddr.UpdateDirectories();
- m_pOutliner->SetPane(m_addrBookPane);
- m_pDirOutliner->SetPane(m_addrBookPane);
- MSG_SetFEData( (MSG_Pane*) m_addrBookPane, (void *) m_pIAddrList );
-
- WFE_AddNewFrameToFrameList(this);
-
- CFrameWnd::RecalcLayout();
-
- if (m_barAddr.m_pFont)
- ::SendMessage(::GetDlgItem(m_barAddr.GetSafeHwnd(), IDC_ADDRNAME),
- WM_SETFONT, (WPARAM)m_barAddr.m_pFont, FALSE);
- if (m_barAddr.m_bRemoveLDAPDir)
- m_barAddr.GetDlgItem(IDC_DIRSEARCH)->ShowWindow(SW_HIDE);
- m_barAddr.GetDlgItem(IDC_ADDRNAME)->SetFocus();
-
- return res;
- }
-
- void CAddrFrame::UpdateDirectories ( void )
- {
- m_barAddr.SetDirectoryIndex(0);
- m_barAddr.OnChangeDirectory();
- m_barAddr.UpdateDirectories();
- m_pDirOutliner->UpdateCount();
- }
-
- void CAddrFrame::OnFileClose ( void )
- {
- PostMessage ( WM_CLOSE );
- }
-
- void CAddrFrame::OnViewCommandToolbar()
- {
- GetChrome()->ShowToolbar(ID_ADDRESS_BOOK_TOOLBAR, !GetChrome()->GetToolbarVisible(ID_ADDRESS_BOOK_TOOLBAR));
- }
-
- void CAddrFrame::OnUpdateViewCommandToolbar(CCmdUI *pCmdUI)
- {
- BOOL bShow = GetChrome()->GetToolbarVisible(ID_ADDRESS_BOOK_TOOLBAR);
- if( pCmdUI->m_pMenu ){
- pCmdUI->m_pMenu->ModifyMenu(CASTUINT(ID_VIEW_ABTOOLBAR), CASTUINT(MF_BYCOMMAND | MF_STRING), CASTUINT(ID_VIEW_ABTOOLBAR),
- szLoadString(CASTUINT(bShow ? IDS_HIDE_ABTOOLBAR : IDS_SHOW_ABTOOLBAR)) );
- } else {
- pCmdUI->SetCheck(bShow);
- }
- }
-
- void CAddrFrame::OnGetMinMaxInfo( MINMAXINFO FAR* lpMMI )
- {
- CGenericFrame::OnGetMinMaxInfo( lpMMI );
-
- if (m_iWidth) {
- lpMMI->ptMinTrackSize.x = m_iWidth;
- }
- }
-
-
- void CAddrFrame::OnDestroy()
- {
- // 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
- if (XP_IsContextBusy (GetContext()))
- XP_InterruptContext (GetContext());
-
- if (m_addrBookPane)
- MSG_SearchFree ((MSG_Pane*) m_addrBookPane);
-
- CGenericFrame::OnDestroy();
-
- if(!IsDestroyed()) {
- DestroyContext();
- }
- }
-
-
- void CAddrFrame::OnClose()
- {
- CRect rect;
- WINDOWPLACEMENT wp;
- int i;
- wp.length = sizeof(WINDOWPLACEMENT);
- GetWindowPlacement(&wp);
-
- ASSERT(theApp.m_pAddressWindow == this);
-
- if ( !IsIconic() && !IsZoomed() )
- {
- GetWindowRect ( &rect );
- PREF_SetRectPref("mail.addr_book_window_rect",
- (int16) rect.left, (int16) rect.top, (int16) rect.right, (int16) rect.bottom);
- }
-
- PREF_SetIntPref("mail.wfe.addr_book.show_value",(int)wp.showCmd);
- PREF_SetIntPref("mail.addr_book.sliderwidth", m_pSplitter->GetPaneSize());
-
- // we should prompt if changes aren't saved
- // MW fix
- for (i = 0; i < m_listPropList.GetSize(); i++) {
- ((CWnd*) m_listPropList.GetAt(i))->DestroyWindow();
- }
-
- for (i = 0; i < m_userPropList.GetSize(); i++) {
- ((CWnd*) m_userPropList.GetAt(i))->DestroyWindow();
- }
-
- //I'm hardcoding because I don't want this translated
- GetChrome()->SaveToolbarConfiguration(ID_ADDRESS_BOOK_TOOLBAR, CString("Address_Book_Toolbar"));
-
- CGenericFrame::OnClose();
- }
-
-
-
- void CAddrFrame::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 CAddrFrame::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 );
- }
- }
- }
-
-
- void CAddrFrame::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 );
- }
-
- if (GetChrome()) {
- LPNSSTATUSBAR pIStatusBar = NULL;
- GetChrome()->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
- if ( pIStatusBar ) {
- pIStatusBar->SetStatusText(csStatus);
- pIStatusBar->Release();
- }
- }
- }
-
-
- void CAddrFrame::AllConnectionsComplete( MWContext *pContext )
- {
- CStubsCX::AllConnectionsComplete( pContext );
-
- if (m_bSearching) {
-
- OnStopSearch();
-
- int32 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 );
- CString s;
- if (s.LoadString( IDS_BOOKMARK_ADDRESSPROPERTIES ))
- MessageBox(csStatus, s, MB_OK | MB_APPLMODAL);
- }
-
- LPNSSTATUSBAR pIStatusBar = NULL;
- m_pChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
- if ( pIStatusBar ) {
- pIStatusBar->SetStatusText( csStatus );
- pIStatusBar->SetProgress( 0 );
- pIStatusBar->Release();
- }
-
- SendMessageToDescendants(WM_IDLEUPDATECMDUI, (WPARAM)TRUE, (LPARAM)0);
- }
- }
-
- void CAddrFrame::Close()
- {
- if (theApp.m_pAddressWindow) {
- theApp.m_pAddressWindow->PostMessage(WM_CLOSE);
- }
- }
-
- void CAddrFrame::OnImportFile()
- {
- HandleErrorReturn(AB_ImportFromFile(m_addrBookPane, GetContext()), this);
- }
-
- void CAddrFrame::OnExportFile()
- {
- HandleErrorReturn(AB_ExportToFile(m_addrBookPane, GetContext()), this);
- }
-
-
- void CAddrFrame::OnTypedown (char* name)
- {
- DIR_Server* dir = GetCurrentDirectoryServer();
-
- if (dir->dirType == LDAPDirectory) {
- OnDirectoryList(name);
- }
- else
- m_pOutliner->OnTypedown (name);
- }
-
-
- void CAddrFrame::DoUpdateAddressBook( CCmdUI* pCmdUI, AB_CommandType cmd, BOOL bUseCheck )
- {
- if(!pCmdUI)
- return;
-
- XP_Bool bSelectable = FALSE, bPlural = FALSE;
- MSG_COMMAND_CHECK_STATE sState;
-
- if (m_addrBookPane) {
- if (m_pOutliner) {
- MSG_ViewIndex *indices;
- int count;
- 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);
- }
- }
- pCmdUI->Enable(bSelectable);
- if (bUseCheck)
- pCmdUI->SetCheck(sState == MSG_Checked);
- else
- pCmdUI->SetRadio(sState == MSG_Checked);
- }
-
-
- void CAddrFrame::OnExtDirectorySearch()
- {
- m_barAddr.OnExtDirectorySearch();
- }
-
- void CAddrFrame::OnUpdateShowAddressBookWindow( CCmdUI *pCmdUI )
- {
- pCmdUI->Enable(FALSE);
- }
-
- void CAddrFrame::OnUpdateSecureStatus(CCmdUI *pCmdUI)
- {
- DIR_Server* dir = GetCurrentDirectoryServer();
-
- if (dir->isSecure)
- pCmdUI->Enable(TRUE);
- else
- pCmdUI->Enable(FALSE);
- }
-
-
- void CAddrFrame::OnUpdateSearch( CCmdUI *pCmdUI )
- {
- DoUpdateAddressBook(pCmdUI, AB_LDAPSearchCmd, TRUE);
- }
-
-
- void CAddrFrame::OnUpdateImport(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_ImportCmd, TRUE);
- }
-
- void CAddrFrame::OnUpdateExport(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_SaveCmd, TRUE);
- }
-
- void CAddrFrame::OnUpdateSortType(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_SortByTypeCmd, TRUE);
- }
-
- void CAddrFrame::OnUpdateSortName(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_SortByFullNameCmd, TRUE);
- }
-
- void CAddrFrame::OnUpdateSortNickName(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_SortByNickname, TRUE);
- }
-
- void CAddrFrame::OnUpdateSortEmailAddress(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_SortByEmailAddress, TRUE);
- }
-
- void CAddrFrame::OnUpdateSortCompany(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_SortByCompanyName, TRUE);
- }
-
- void CAddrFrame::OnUpdateSortLocality(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_SortByLocality, TRUE);
- }
-
- void CAddrFrame::OnUpdateSortAscending(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_SortAscending, TRUE);
- }
-
- void CAddrFrame::OnUpdateSortDescending(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_SortDescending, TRUE);
- }
-
- void CAddrFrame::OnUpdateComposeMsg(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_NewMessageCmd);
- }
-
- void CAddrFrame::OnUpdateStopSearch(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_LDAPSearchCmd);
- }
-
- void CAddrFrame::OnUpdateAddUser(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_AddUserCmd);
- }
-
- void CAddrFrame::OnUpdateAddList(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_AddMailingListCmd);
- }
-
- void CAddrFrame::OnUpdateAddAB(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_NewAddressBook);
- }
-
- void CAddrFrame::OnUpdateAddDir(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_NewLDAPDirectory);
- }
-
- void CAddrFrame::OnUpdateItemProperties(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_PropertiesCmd);
- }
-
- void CAddrFrame::OnUpdateCall(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_CallCmd);
- }
-
- void CAddrFrame::OnUpdateSwitchSort(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_AddUserCmd);
- }
-
- void CAddrFrame::OnUpdateDeleteItem(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_DeleteCmd);
- }
-
- void CAddrFrame::OnUpdateUndo(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_UndoCmd);
- }
-
- void CAddrFrame::OnUpdateRedo(CCmdUI* pCmdUI)
- {
- DoUpdateAddressBook(pCmdUI, AB_RedoCmd);
- }
-
- void CAddrFrame::OnSwitchSortFirstLast()
- {
- SetCursor ( theApp.LoadStandardCursor ( IDC_WAIT ) );
-
- AB_SetSortByFirstName(theApp.m_pABook, !AB_GetSortByFirstName(theApp.m_pABook));
-
- SetCursor ( theApp.LoadStandardCursor ( IDC_ARROW ) );
- }
-
-
- void CAddrFrame::OnAddUser ( void )
- {
- #ifdef FEATURE_ADDRPROP
- CAddrEditProperties* prop;
- prop = new CAddrEditProperties (this,
- GetCurrentDirectoryServer(),
- XP_GetString (MK_ADDR_NEW_CARD), this, 0, NULL, GetContext());
-
- prop->SetCurrentPage(0);
- if (prop->Create(this, WS_SYSMENU | WS_POPUP | WS_CAPTION | WS_VISIBLE,
- WS_EX_DLGMODALFRAME)) {
- m_userPropList.Add (prop);
- }
- #endif
- }
-
- void CAddrFrame::OnAddAB ( void )
- {
- HandleErrorReturn(AB_Command (m_addrBookPane, AB_NewAddressBook, 0, 0), this);
- }
-
-
- void CAddrFrame::OnAddDir ( void )
- {
- #ifdef FEATURE_ADDRPROP
- CString label;
- label.LoadString(IDS_ADD_LDAP_SERVER);
- CAddrLDAPProperties serverProperties(this, GetContext(), NULL, label);
- if (IDOK == serverProperties.DoModal())
- {
- DIR_Server* pServer = &serverProperties.m_serverInfo;
- DIR_Server *pNewServer = (DIR_Server *) XP_ALLOC(sizeof(DIR_Server));
- if (pNewServer)
- {
- DIR_InitServer(pNewServer);
- DIR_CopyServer(pServer, &pNewServer);
- if (pNewServer->dirType == LDAPDirectory) {
- DIR_SetServerFileName(pNewServer, pNewServer->serverName);
- }
- }
- XP_ListAddObjectToEnd(theApp.m_directories, pNewServer);
- DIR_SaveServerPreferences (theApp.m_directories);
- }
- #endif
- }
-
-
- void CAddrFrame::OnHTMLDomains ( void )
- {
- MSG_DisplayHTMLDomainsDialog(GetContext());
- }
-
- void CAddrFrame::OnUpdateHTMLDomains( CCmdUI *pCmdUI )
- {
- pCmdUI->Enable( TRUE );
- }
-
- void CAddrFrame::OnCreateCard ( void )
- {
- #ifdef FEATURE_ADDRPROP
- CAddrEditProperties* prop;
- char* email = NULL;
- char* name = NULL;
- DIR_Server* pab = NULL;
- PersonEntry person;
- person.Initialize();
- ABID entryID = MSG_MESSAGEIDNONE;
- INTL_CharSetInfo csi = LO_GetDocumentCharacterSetInfo(GetContext());
-
- if (FE_UsersMailAddress())
- email = XP_STRDUP (FE_UsersMailAddress());
- if (FE_UsersFullName())
- name = XP_STRDUP (FE_UsersFullName());
- person.pGivenName = name;
- person.pEmailAddress = email;
- person.WinCSID = INTL_GetCSIWinCSID(csi);
-
- DIR_GetPersonalAddressBook (theApp.m_directories, &pab);
- XP_ASSERT (pab);
-
- if (pab) {
-
- AB_GetEntryIDForPerson(pab,
- theApp.m_pABook, &entryID, &person);
-
- if (entryID != MSG_MESSAGEIDNONE) {
- // see it it is already opened
- if (m_userPropList.GetSize()) {
- // try to find it
- for (int i = 0; i < m_userPropList.GetSize(); i++) {
- if (((CAddrEditProperties*)m_userPropList.GetAt(i))->GetEntryID() == entryID) {
- ((CAddrEditProperties*)m_userPropList.GetAt(i))->BringWindowToTop();
- return;
- }
- }
- }
-
- // otherwise open the window
- CString formattedString;
- char fullname [kMaxFullNameLength];
- AB_GetFullName(pab, theApp.m_pABook, entryID, fullname);
- formattedString.Format(XP_GetString (MK_ADDR_BOOK_CARD), fullname);
- prop = new CAddrEditProperties(this,
- pab, (const char *) formattedString, this, entryID, NULL, GetContext());
-
- prop->SetCurrentPage(0);
- if (prop->Create(this, WS_SYSMENU | WS_POPUP | WS_CAPTION | WS_VISIBLE,
- WS_EX_DLGMODALFRAME)) {
- m_userPropList.Add (prop);
- }
- }
- else {
- CString formattedString;
- formattedString.Format(XP_GetString (MK_ADDR_BOOK_CARD), name);
- prop = new CAddrEditProperties (this,
- pab, formattedString, this, 0, &person, GetContext());
- prop->SetCurrentPage(0);
- if (prop->Create(this, WS_SYSMENU | WS_POPUP | WS_CAPTION | WS_VISIBLE,
- WS_EX_DLGMODALFRAME)) {
- m_userPropList.Add (prop);
- }
- }
- }
- if (email)
- XP_FREE (email);
- if (name)
- XP_FREE (name);
- #endif
- }
-
-
- DIR_Server * CAddrFrame::GetCurrentDirectoryServer()
- {
- return (DIR_Server*)XP_ListGetObjectNum(theApp.m_directories, m_pOutliner->GetDirectoryIndex() + 1);
- }
-
- void CAddrFrame::OnAddList ( void )
- {
- CABMLDialog* dialog;
-
- dialog = new CABMLDialog (GetCurrentDirectoryServer(),
- this, 0, GetContext());
-
- if (dialog->Create(this)) {
- m_listPropList.Add (dialog);
- }
- }
-
-
- void CAddrFrame::OnDeleteItem()
- {
- #ifdef FEATURE_ADDRPROP
- MSG_ViewIndex *indices;
- int count;
- m_pOutliner->GetSelection(indices, count);
- for (int i = 0; i < count; i++)
- {
- ABID type;
- ABID entryID;
- // check the entry type and add/remove pages
- entryID = AB_GetEntryIDAt((AddressPane*)m_addrBookPane, indices[i]);
-
- AB_GetType(GetCurrentDirectoryServer(), theApp.m_pABook,
- entryID, &type);
- if (m_userPropList.GetSize() && type == ABTypePerson) {
- // try to find
- for (int i = 0; i < m_userPropList.GetSize(); i++) {
- if (((CAddrEditProperties*)m_userPropList.GetAt(i))->GetEntryID() == entryID) {
- ((CAddrEditProperties*)m_userPropList.GetAt(i))->DestroyWindow();
- }
- }
- }
-
- if (m_listPropList.GetSize() && type == ABTypeList) {
- for (int i = 0; i < m_listPropList.GetSize(); i++) {
- if (((CABMLDialog*)m_listPropList.GetAt(i))->GetEntryID() == entryID) {
- ((CABMLDialog*)m_listPropList.GetAt(i))->DestroyWindow();
- }
- }
- }
- }
-
- SetCursor ( theApp.LoadStandardCursor ( IDC_WAIT ) );
-
- HandleErrorReturn(AB_Command (m_addrBookPane, AB_DeleteCmd, indices, count), this);
- m_pOutliner->UpdateCount();
- if ((m_pOutliner->GetFocusLine() > m_pOutliner->GetTotalLines() - 1))
- m_pOutliner->SelectItem(m_pOutliner->GetTotalLines() - 1);
- else
- m_pOutliner->SelectItem(m_pOutliner->GetFocusLine());
- SetCursor ( theApp.LoadStandardCursor ( IDC_ARROW ) );
- #endif
- }
-
-
- void CAddrFrame::OnUndo()
- {
- SetCursor ( theApp.LoadStandardCursor ( IDC_WAIT ) );
- HandleErrorReturn(AB_Command (m_addrBookPane, AB_UndoCmd, 0, 0), this);
- m_pOutliner->UpdateCount();
- if ((m_pOutliner->GetFocusLine() > m_pOutliner->GetTotalLines() - 1))
- m_pOutliner->SelectItem(m_pOutliner->GetTotalLines() - 1);
- else
- m_pOutliner->SelectItem(m_pOutliner->GetFocusLine());
- SetCursor ( theApp.LoadStandardCursor ( IDC_ARROW ) );
- }
-
-
- void CAddrFrame::OnRedo()
- {
- SetCursor ( theApp.LoadStandardCursor ( IDC_WAIT ) );
- HandleErrorReturn(AB_Command (m_addrBookPane, AB_RedoCmd, 0, 0), this);
- m_pOutliner->UpdateCount();
- if ((m_pOutliner->GetFocusLine() > m_pOutliner->GetTotalLines() - 1))
- m_pOutliner->SelectItem(m_pOutliner->GetTotalLines() - 1);
- else
- m_pOutliner->SelectItem(m_pOutliner->GetFocusLine());
- SetCursor ( theApp.LoadStandardCursor ( IDC_ARROW ) );
- }
-
- void CAddrFrame::OnComposeMsg()
- {
- MSG_ViewIndex *indices;
- int count;
- m_pOutliner->GetSelection(indices, count);
- HandleErrorReturn(AB_Command (m_addrBookPane, AB_NewMessageCmd, indices, count), this);
- }
-
-
- void CAddrFrame::CloseUserProperties (CAddrEditProperties* wnd, ABID entryID)
- {
- #ifdef FEATURE_ADDRPROP
- CAddrEditProperties* prop;
- for (int i = 0; i < m_userPropList.GetSize(); i++) {
- prop = (CAddrEditProperties*) (m_userPropList.GetAt(i));
- if (prop->GetEntryID() == entryID && prop == wnd) {
- m_userPropList.RemoveAt(i);
- break;
- }
- }
- #endif
- }
-
-
- void CAddrFrame::CloseListProperties (CABMLDialog* wnd, ABID entryID)
- {
- CABMLDialog* prop;
- for (int i = 0; i < m_listPropList.GetSize(); i++) {
- prop = (CABMLDialog*) (m_listPropList.GetAt(i));
- if (prop->GetEntryID() == entryID && prop == wnd) {
- m_listPropList.RemoveAt(i);
- break;
- }
- }
- }
-
-
- void CAddrFrame::OnItemProperties()
- {
- #ifdef FEATURE_ADDRPROP
- if (GetCurrentDirectoryServer()->dirType == LDAPDirectory) {
- MSG_ViewIndex *indices;
- int count;
- m_pOutliner->GetSelection(indices, count);
- HandleErrorReturn(AB_Command (m_addrBookPane, AB_PropertiesCmd, indices, count), this);
- }
- else {
- MSG_ViewIndex *indices;
- int count;
- m_pOutliner->GetSelection(indices, count);
- for (int i = 0; i < count; i++) {
- ABID type;
- ABID entryID;
- // check the entry type and add/remove pages
- entryID = AB_GetEntryIDAt((AddressPane*)m_addrBookPane, indices[i]);
-
- AB_GetType(GetCurrentDirectoryServer(), theApp.m_pABook,
- entryID, &type);
- if (m_userPropList.GetSize() && type == ABTypePerson) {
- // try to find
- for (int i = 0; i < m_userPropList.GetSize(); i++) {
- if (((CAddrEditProperties*)m_userPropList.GetAt(i))->GetEntryID() == entryID) {
- ((CAddrEditProperties*)m_userPropList.GetAt(i))->BringWindowToTop();
- return;
- }
- }
- }
-
- if (m_listPropList.GetSize() && type == ABTypeList) {
- for (int i = 0; i < m_listPropList.GetSize(); i++) {
- if (((CABMLDialog*)m_listPropList.GetAt(i))->GetEntryID() == entryID) {
- ((CABMLDialog*)m_listPropList.GetAt(i))->BringWindowToTop();
- return;
- }
- }
- }
-
- // otherwise open an new property sheet
- if (type == ABTypePerson) {
- CAddrEditProperties* prop = NULL;
- CString formattedString;
- char fullname [kMaxFullNameLength];
- AB_GetFullName(GetCurrentDirectoryServer(), theApp.m_pABook, entryID, fullname);
- formattedString.Format(XP_GetString (MK_ADDR_BOOK_CARD), fullname);
- prop = new CAddrEditProperties(this,
- GetCurrentDirectoryServer(),
- (const char *) formattedString, this, entryID, NULL, GetContext());
-
- prop->SetCurrentPage(0);
- if (prop->Create(this, WS_SYSMENU | WS_POPUP | WS_CAPTION | WS_VISIBLE,
- WS_EX_DLGMODALFRAME)) {
- m_userPropList.Add (prop);
- }
- }
- else {
- CABMLDialog* dialog;
- dialog = new CABMLDialog (GetCurrentDirectoryServer(),
- this, entryID, GetContext());
- if (dialog->Create(this)) {
- dialog->ShowWindow(SW_SHOW);
- m_listPropList.Add (dialog);
- }
- }
- }
- }
- #endif
- }
-
-
- void CAddrFrame::OnCall()
- {
- ABID type;
- ABID entryID;
- CString ipAddress;
- CString emailAddress;
- short useServer = 0;
-
- char szCommandLine[_MAX_PATH];
-
- // check the entry type and add/remove pages
- entryID = AB_GetEntryIDAt((AddressPane*)m_addrBookPane, m_pOutliner->GetFocusLine());
-
- AB_GetType(GetCurrentDirectoryServer(), theApp.m_pABook,
- entryID, &type);
-
- if (type != ABTypePerson) {
- CString s;
- if (s.LoadString( IDS_BOOKMARK_ADDRESSPROPERTIES ))
- MessageBox(XP_GetString (MK_MSG_CANT_CALL_MAILING_LIST), s, MB_OK | MB_APPLMODAL);
- return;
- }
-
- // check that info exists for this person
- AB_GetCoolAddress (GetCurrentDirectoryServer(),
- theApp.m_pABook, entryID, ipAddress.GetBuffer(kMaxCoolAddress));
- ipAddress.ReleaseBuffer(-1);
- AB_GetEmailAddress (GetCurrentDirectoryServer(),
- theApp.m_pABook, entryID, emailAddress.GetBuffer(kMaxEmailAddressLength));
- emailAddress.ReleaseBuffer(-1);
- AB_GetUseServer (GetCurrentDirectoryServer(),
- theApp.m_pABook, entryID, &useServer);
-
- if ((useServer == kSpecificDLS || useServer == kHostOrIPAddress) && !ipAddress.GetLength()) {
- CString s;
- if (s.LoadString( IDS_BOOKMARK_ADDRESSPROPERTIES ))
- MessageBox(XP_GetString (MK_MSG_CALL_NEEDS_IPADDRESS), s, MB_OK | MB_APPLMODAL);
- OnItemProperties();
- return;
- }
-
- if ((useServer == kSpecificDLS || useServer == kDefaultDLS) && !emailAddress.GetLength()) {
- CString s;
- if (s.LoadString( IDS_BOOKMARK_ADDRESSPROPERTIES ))
- MessageBox(XP_GetString (MK_MSG_CALL_NEEDS_EMAILADDRESS), s, MB_OK | MB_APPLMODAL);
- OnItemProperties();
- return;
- }
-
- strcpy (szCommandLine, "");
-
- if (useServer == 0)
- {
- CString emailFlag = FEU_GetConfAppProfileString(IDS_CONFAPP_EMAIL);
-
- if (!emailFlag.IsEmpty())
- {
- strcat(szCommandLine, emailFlag);
- strcat(szCommandLine, " ");
- strcat(szCommandLine, emailAddress);
- }
- }
- else {
- if (useServer == 1)
- {
- CString emailFlag = FEU_GetConfAppProfileString(IDS_CONFAPP_EMAIL);
- if (!emailFlag.IsEmpty())
- {
- strcat(szCommandLine, emailFlag);
- strcat(szCommandLine, " ");
- strcat(szCommandLine, emailAddress);
- strcat(szCommandLine, " ");
- }
-
- CString serverFlag = FEU_GetConfAppProfileString(IDS_CONFAPP_SERVER);
- if (!serverFlag.IsEmpty())
- {
- strcat(szCommandLine, serverFlag);
- strcat(szCommandLine, " ");
- strcat(szCommandLine, ipAddress);
- }
- }
- else {
- CString directFlag = FEU_GetConfAppProfileString(IDS_CONFAPP_DIRECTIP);
-
- if (!directFlag.IsEmpty())
- {
- strcat(szCommandLine, directFlag);
- strcat(szCommandLine, " ");
- strcat(szCommandLine, ipAddress);
- }
- }
- }
-
- //
- // Something a bit new...this will be here for passing a users name at the
- // end of a command line.
- //
- CString userNameFlag = FEU_GetConfAppProfileString(IDS_CONFAPP_USERNAME);
-
- if (!userNameFlag.IsEmpty())
- {
- CString szFullUserName;
- AB_GetFullName (GetCurrentDirectoryServer(),
- theApp.m_pABook, entryID, szFullUserName.GetBuffer(kMaxFullNameLength));
- strcat(szCommandLine, " ");
- strcat(szCommandLine, userNameFlag);
- strcat(szCommandLine, " ");
- strcat(szCommandLine, szFullUserName);
- }
- //
- //RHP - Launch conference app
- //
- LaunchConfEndpoint(szCommandLine, GetSafeHwnd());
-
- }
-
-
- void CAddrFrame::OnSortName()
- {
- m_pOutlinerParent->ColumnCommand ( ID_COLADDR_NAME );
- }
-
- void CAddrFrame::OnSortType()
- {
- m_pOutlinerParent->ColumnCommand ( ID_COLADDR_TYPE );
- }
-
- void CAddrFrame::OnSortNickName()
- {
- m_pOutlinerParent->ColumnCommand ( ID_COLADDR_NICKNAME );
- }
-
- void CAddrFrame::OnSortEmailAddress()
- {
- m_pOutlinerParent->ColumnCommand ( ID_COLADDR_EMAIL );
- }
-
- void CAddrFrame::OnSortCompany()
- {
- m_pOutlinerParent->ColumnCommand ( ID_COLADDR_COMPANY );
- }
-
- void CAddrFrame::OnSortLocality()
- {
- m_pOutlinerParent->ColumnCommand ( ID_COLADDR_LOCALITY );
- }
-
- void CAddrFrame::OnSortAscending()
- {
- m_pOutlinerParent->ColumnCommand ( m_pOutliner->GetSortBy() );
- }
-
- void CAddrFrame::OnSortDescending()
- {
- m_pOutlinerParent->ColumnCommand ( m_pOutliner->GetSortBy() );
- }
-
- void CAddrFrame::HandleErrorReturn(int XPErrorId, CWnd* parent, int errorid)
- {
- if (errorid) {
- CString s;
- HWND parentWnd = NULL;
- if (parent)
- parentWnd = parent->m_hWnd;
- if (s.LoadString( IDS_BOOKMARK_ADDRESSPROPERTIES )) {
- if (XPErrorId)
- ::MessageBox(parentWnd, XP_GetString(XPErrorId), s, MB_OK | MB_APPLMODAL);
- else {
- CString s2;
- s2.LoadString (errorid);
- ::MessageBox(parentWnd, s2, s, MB_OK | MB_APPLMODAL);
- }
- }
- }
- }
-
-
- void CAddrFrame::OnSave()
- {
- }
-
-
- void CAddrFrame::OnChangeDirectory (int dirIndex)
- {
- m_pDirOutliner->SetDirectoryIndex(dirIndex);
- }
-
- void CAddrFrame::OnShowWindow( BOOL bShow, UINT nStatus )
- {
- CFrameWnd::OnShowWindow (bShow, nStatus);
- if (bShow && (nStatus == 0)) {
- m_pOutliner->SetDirectoryIndex(0);
- m_pDirOutliner->SetDirectoryIndex(0);
- }
- }
-
-
- void CAddrFrame::OnUpdateDirectorySelection (int dirIndex)
- {
- // the user has selected a different directory in the left pane
- m_barAddr.SetDirectoryIndex(dirIndex);
- m_pOutliner->SetDirectoryIndex(dirIndex);
- HandleErrorReturn(AB_ChangeDirectory(m_addrBookPane, GetCurrentDirectoryServer()), this);
- }
-
-
- void CAddrFrame::OnStopSearch ()
- {
- CWnd* widget = m_barAddr.GetDlgItem(IDC_DIRECTORIES);
- CWnd* widget2 = m_barAddr.GetDlgItem (IDC_DIRSEARCH);
- // We've turned into stop button
- HandleErrorReturn(AB_FinishSearch(m_addrBookPane, GetContext()), this);
- m_bSearching = FALSE;
- GetChrome()->StopAnimation();
- widget->EnableWindow(TRUE);
- widget2->EnableWindow(TRUE);
- m_pDirOutliner->EnableWindow(TRUE);
-
- MSG_ViewIndex *indices = NULL;
- int count = 0;
- m_pOutliner->GetSelection(indices, count);
- if (!count)
- m_pOutliner->SelectItem (0);
- return;
- }
-
- void CAddrFrame::OnExtendedDirectorySearch ()
- {
- CWnd* widget = m_barAddr.GetDlgItem(IDC_DIRECTORIES);
- CWnd* widget2 = m_barAddr.GetDlgItem (IDC_DIRSEARCH);
-
- if (m_bSearching) {
- OnStopSearch();
- return;
- }
-
- CUIntArray buttonLabels;
- buttonLabels.SetSize (4, 1);
- buttonLabels [0] = IDS_ADRSEARCH;
- 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)
- {
- GetChrome()->StartAnimation();
- LPNSSTATUSBAR pIStatusBar = NULL;
- m_pChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
- if ( pIStatusBar ) {
- pIStatusBar->SetStatusText(szLoadString( IDS_SEARCHING ));
- pIStatusBar->Release();
- }
-
- m_barAddr.GetDlgItem(IDC_ADDRNAME)->SetWindowText("");
- m_bSearching = TRUE;
- widget->EnableWindow(FALSE);
- widget2->EnableWindow(FALSE);
- m_pOutliner->SetTotalLines(0);
- m_pOutliner->SetFocus();
- m_pOutliner->SetFocusLine(0);
- m_pDirOutliner->EnableWindow(FALSE);
-
- HandleErrorReturn(AB_SearchDirectory(m_addrBookPane, NULL), this);
- }
-
- }
-
- void CAddrFrame::OnDirectoryList (char * name)
- {
- CWnd* widget;
- CWnd* widget2;
- CString cs;
- widget = m_barAddr.GetDlgItem(IDC_DIRECTORIES);
- widget2 = m_barAddr.GetDlgItem(IDC_DIRSEARCH);
-
- // Build Search
- GetChrome()->StartAnimation();
- LPNSSTATUSBAR pIStatusBar = NULL;
- m_pChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
- if ( pIStatusBar ) {
- pIStatusBar->SetStatusText(szLoadString( IDS_SEARCHING ));
- pIStatusBar->Release();
- }
- m_bSearching = TRUE;
- widget->EnableWindow(FALSE);
- widget2->EnableWindow(FALSE);
- m_pDirOutliner->EnableWindow(FALSE);
-
- HandleErrorReturn(AB_SearchDirectory(m_addrBookPane, name), this);
- m_pOutliner->UpdateCount();
- }
-
- //////////////////////////////////////////////////////////////////////////////
- // CAddrOutliner
- BEGIN_MESSAGE_MAP(CAddrOutliner, CMSelectOutliner)
- //{{AFX_MSG_MAP(CAddrOutliner)
- ON_WM_KEYDOWN()
- ON_WM_TIMER()
- ON_WM_KILLFOCUS()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- CAddrOutliner::CAddrOutliner ( )
- {
- int32 prefInt;
- PREF_GetIntPref("mail.addr_book.sortby",&prefInt);
- if (prefInt != ID_COLADDR_NAME && prefInt != ID_COLADDR_EMAIL
- && prefInt != ID_COLADDR_NICKNAME)
- prefInt = ID_COLADDR_NAME;
-
- m_attribSortBy = CASTINT(prefInt);
- 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);
- }
- XP_Bool prefBool;
- PREF_GetBoolPref("mail.addr_book.sort_ascending",&prefBool);
- m_bSortAscending = prefBool;
- m_iMysticPlane = 0;
- m_dirIndex = 0;
- m_hFont = NULL;
- m_psTypedown = "";
- m_uTypedownClock = 0;
- }
-
- CAddrOutliner::~CAddrOutliner ( )
- {
- if (m_pUnkUserImage) {
- if (m_pIUserImage)
- m_pUnkUserImage->Release();
- }
- if (m_hFont) {
- theApp.ReleaseAppFont(m_hFont);
- }
-
- }
-
- void CAddrOutliner::OnKillFocus( CWnd* pNewWnd )
- {
- CMSelectOutliner::OnKillFocus (pNewWnd );
- m_psTypedown = "";
- KillTimer(m_uTypedownClock);
- }
-
- void CAddrOutliner::OnTypedown (char* name)
- {
- MSG_ViewIndex index;
- int startIndex;
-
- if (GetFocusLine() != -1)
- startIndex = GetFocusLine();
- else
- startIndex = 0;
-
- AB_GetIndexMatchingTypedown(m_pane, &index,
- (LPCTSTR) name, startIndex);
-
- ScrollIntoView(CASTINT(index));
- SelectItem (CASTINT(index));
- }
-
- HFONT CAddrOutliner::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;
- }
-
-
- DIR_Server* CAddrOutliner::GetCurrentDirectoryServer ()
- {
- return (DIR_Server*)XP_ListGetObjectNum(theApp.m_directories, m_dirIndex + 1);
- }
-
-
- void CAddrOutliner::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_LOCALITY:
- MSG_SearchAttribToDirAttrib(attribLocality, &id);
- text = DIR_GetAttributeName(pServer, id);
- break;
- case ID_COLADDR_PHONE:
- MSG_SearchAttribToDirAttrib(attribPhoneNumber, &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();
- SelectItem(dirIndex);
- }
-
- void CAddrOutliner::UpdateCount( )
- {
- uint32 count;
-
- AB_GetEntryCount(GetCurrentDirectoryServer (), theApp.m_pABook, &count, ABTypeAll, NULL);
- m_iTotalLines = CASTINT(count);
- if (!m_iTotalLines)
- ClearSelection();
- }
-
-
- BOOL CAddrOutliner::DeleteItem ( int iLine )
- {
- XP_Bool bSelectable, bPlural;
- MSG_ViewIndex indices[1];
- indices[0] = (MSG_ViewIndex) iLine;
- MSG_COMMAND_CHECK_STATE sState;
- AB_CommandStatus( m_pane,
- AB_DeleteCmd,
- indices, 1,
- &bSelectable,
- &sState,
- NULL,
- &bPlural);
- if (bSelectable) {
- AB_Command ( m_pane, AB_DeleteCmd, indices, 1 );
- return TRUE;
- }
- else
- MessageBeep(0);
- return FALSE;
- }
-
- void CAddrOutliner::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 CAddrOutliner::MysticStuffStarting( XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify,
- MSG_ViewIndex where,
- int32 num )
- {
- ++m_iMysticPlane;
- }
-
- void CAddrOutliner::MysticStuffFinishing( XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify,
- MSG_ViewIndex where,
- int32 num )
- {
- 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
- && ((CAddrFrame*) GetParentFrame())->IsSearching() && num > 0)
- {
- ((CAddrFrame*) GetParentFrame())->SetSearchResults(where, num);
- HandleInsert(where, num);
- // Invalidate();
- }
- 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 CAddrOutliner::PropertyMenu ( int iSel, UINT flags )
- {
- BOOL bHasItems = FALSE;
- CMenu cmPopup;
- CString cs;
-
- if(cmPopup.CreatePopupMenu() == 0)
- return;
-
- if (iSel < m_iTotalLines) {
- cs.LoadString(ID_POPUP_MAILNEW);
- cmPopup.AppendMenu(MF_ENABLED, ID_FILE_NEWMESSAGE, cs);
- cmPopup.AppendMenu(MF_SEPARATOR);
- cs.LoadString(IDS_AB_NEW_USER);
- cmPopup.AppendMenu(MF_ENABLED, ID_ITEM_ADDUSER, cs);
- cs.LoadString(IDS_AB_NEW_LIST);
- cmPopup.AppendMenu(MF_ENABLED, ID_ITEM_ADDLIST, cs);
- cmPopup.AppendMenu(MF_SEPARATOR);
- cs.LoadString(IDS_COMPOSE_REMOVE);
- cmPopup.AppendMenu(MF_ENABLED, ID_EDIT_DELETE, cs);
- cmPopup.AppendMenu(MF_SEPARATOR);
- cs.LoadString(IDS_AB_PROPERTIES);
- cmPopup.AppendMenu(MF_ENABLED, ID_ITEM_PROPERTIES, cs);
- bHasItems = TRUE;
- }
-
-
- // Track the popup now.
- POINT pt = m_ptHit;
- ClientToScreen(&pt);
-
- cmPopup.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y,
- GetParentFrame(), NULL);
-
- // Cleanup
- cmPopup.DestroyMenu();
- }
-
- void CAddrOutliner::AcceptDrop( int iLineNo, COleDataObject *pDataObject,
- DROPEFFECT dropEffect )
- {
- if(!pDataObject)
- return;
-
- // Dont allow us to drop on ourselves
- if(pDataObject->IsDataAvailable(m_cfSourceTarget))
- return;
-
- if(!pDataObject->IsDataAvailable(m_cfAddresses) &&
- !pDataObject->IsDataAvailable(CF_TEXT))
- return;
-
- if(pDataObject->IsDataAvailable(m_cfAddresses)) {
- HGLOBAL hAddresses = pDataObject->GetGlobalData(m_cfAddresses);
- LPSTR pAddresses = (LPSTR)GlobalLock(hAddresses);
- ASSERT(pAddresses);
- // Parse the vcards and add them to the address book
- AB_ImportFromVcard((AddressPane*) m_pane, pAddresses);
- GlobalUnlock(hAddresses);
- }
- else {
- HGLOBAL hString = pDataObject->GetGlobalData(CF_TEXT);
- char * pAddress = (char*)GlobalLock(hString);
- ASSERT(pAddress);
- // parse the vcard from the text
- AB_ImportFromVcard((AddressPane*) m_pane, pAddress);
- GlobalUnlock(hString);
- }
- }
-
- void CAddrOutliner::InitializeClipFormats(void)
- {
- m_cfAddresses = (CLIPFORMAT)RegisterClipboardFormat(vCardClipboardFormat);
- m_cfSourceTarget = (CLIPFORMAT)RegisterClipboardFormat(ADDRESSBOOK_SOURCETARGET_FORMAT);
- }
-
- CLIPFORMAT * CAddrOutliner::GetClipFormatList(void)
- {
- static CLIPFORMAT cfFormatList[3];
- cfFormatList[0] = m_cfAddresses;
- cfFormatList[1] = m_cfSourceTarget;
- cfFormatList[2] = 0;
- return cfFormatList;
- }
-
-
- COleDataSource * CAddrOutliner::GetDataSource(void)
- {
- COleDataSource * pDataSource = new COleDataSource;
- ABID entryID;
- char* pVcard = NULL;
- char* pVcards = XP_STRDUP("");
- char szTemp[10];
- char szEntryID[20];
- char* pEntryIDs = XP_STRDUP("");
- HANDLE hString = 0;
- MSG_ViewIndex *indices;
- int count;
-
- GetSelection(indices, count);
-
- for (int i = 0 ; i < count; i++) {
- if ((entryID = AB_GetEntryIDAt((AddressPane*) m_pane, indices[i])) != 0) {
- AB_ExportToVCard(theApp.m_pABook,
- GetCurrentDirectoryServer (), entryID, &pVcard);
- pVcards = StrAllocCat(pVcards, pVcard);
- XP_FREE(pVcard);
- pVcard = NULL;
-
- ltoa(entryID, szTemp, 10);
- sprintf(szEntryID, "%s-", szTemp);
- pEntryIDs = StrAllocCat(pEntryIDs, szEntryID);
- }
- }
-
- if (pVcards) {
- hString = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE|GMEM_ZEROINIT,strlen(pVcards)+1);
- LPSTR lpszString = (LPSTR)GlobalLock(hString);
- strcpy(lpszString,pVcards);
- XP_FREE (pVcards);
- GlobalUnlock(hString);
-
- HANDLE hEntryID = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE|GMEM_ZEROINIT,strlen(pEntryIDs)+1);
- LPSTR lpszEntryID = (LPSTR)GlobalLock(hEntryID);
- strcpy(lpszEntryID,pEntryIDs);
- XP_FREE (pEntryIDs);
- GlobalUnlock(hEntryID);
- pDataSource->CacheGlobalData(m_cfAddresses, hString);
- pDataSource->CacheGlobalData(m_cfSourceTarget, hEntryID);
- pDataSource->CacheGlobalData(CF_TEXT, hString);
- }
-
- return pDataSource;
- }
-
-
- BOOL CAddrOutliner::RenderData ( UINT iColumn, CRect &rect, CDC &dc, const char * text )
- {
- if ( iColumn != ID_COLADDR_TYPE )
- return CMSelectOutliner::RenderData ( iColumn, rect, dc, text );
- int idxImage;
-
- 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 CAddrOutliner::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 CAddrOutliner::TranslateIconFolder (void * pData)
- {
- // We're a flat list, so we're never a folder
- return ( OUTLINER_ITEM );
- }
-
-
- BOOL CAddrOutliner::ColumnCommand ( int iColumn, int iLine )
- {
- // We have no column commands
- return FALSE;
- }
-
- void * CAddrOutliner::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 CAddrOutliner::GetTreeInfo ( int iLine, uint32 * pFlags, int * pDepth, OutlinerAncestorInfo ** pAncestor )
- {
- if ( pFlags ) *pFlags = 0; // Flags?
- if ( pDepth ) *pDepth = 0; // We're flat, remember?
- }
-
- void CAddrOutliner::ReleaseLineData ( void * )
- {
- }
-
- LPCTSTR CAddrOutliner::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 CAddrOutliner::OnSelChanged()
- {
- // No Op
- }
-
- void CAddrOutliner::OnSelDblClk()
- {
- GetParentFrame()->SendMessage(WM_COMMAND, ID_ITEM_PROPERTIES, 0);
- }
-
-
- void CAddrOutliner::OnTimer(UINT nID)
- {
- CMSelectOutliner::OnTimer(nID);
- if (nID == OUTLINER_TYPEDOWN_TIMER) {
- KillTimer(m_uTypedownClock);
- m_psTypedown = "";
- }
- }
-
- void CAddrOutliner::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(OUTLINER_TYPEDOWN_TIMER, prefInt, NULL);
- }
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrOutlinerParent
-
- BEGIN_MESSAGE_MAP(CAddrOutlinerParent, COutlinerParent)
- //{{AFX_MSG_MAP(CAddrOutlinerParent)
- ON_WM_DESTROY()
- ON_WM_LBUTTONUP()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- CAddrOutlinerParent::CAddrOutlinerParent()
- {
-
- }
-
-
- CAddrOutlinerParent::~CAddrOutlinerParent()
- {
-
- }
-
-
- BOOL CAddrOutlinerParent::RenderData ( int idColumn, CRect & rect, CDC &dc, const char * text )
- {
- int cx = 3, cy = 0;
- CAddrOutliner *pOutliner = (CAddrOutliner *) 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 * CAddrOutlinerParent::GetOutliner ( void )
- {
- return new CAddrOutliner;
- }
-
- void CAddrOutlinerParent::CreateColumns ( void )
- {
- int iCol0 = 0,
- iCol1 = 0,
- iCol2 = 0,
- iCol3 = 0,
- iCol4 = 0,
- iCol5 = 0;
- CString cs;
-
- m_pOutliner->AddColumn ("", ID_COLADDR_TYPE, 24, 0, ColumnFixed, 0, TRUE );
- cs.LoadString(IDS_USERNAME);
- m_pOutliner->AddColumn (cs, ID_COLADDR_NAME, 1500, 0, ColumnVariable, iCol0 ? iCol0 : 1500 );
- cs.LoadString(IDS_EMAILADDRESS);
- m_pOutliner->AddColumn (cs, ID_COLADDR_EMAIL, 1500, 0, ColumnVariable, iCol2 ? iCol2 : 1500 );
- cs.LoadString(IDS_COMPANYNAME);
- m_pOutliner->AddColumn (cs, ID_COLADDR_COMPANY, 1500, 0, ColumnVariable, iCol5 ? iCol5 : 1500 );
- cs.LoadString(IDS_PHONE);
- m_pOutliner->AddColumn (cs, ID_COLADDR_PHONE, 1500, 0, ColumnVariable, iCol4 ? iCol4 : 1500, FALSE);
- cs.LoadString(IDS_LOCALITY);
- m_pOutliner->AddColumn (cs, ID_COLADDR_LOCALITY, 1500, 0, ColumnVariable, iCol4 ? iCol4 : 1500 );
- cs.LoadString(IDS_NICKNAME);
- m_pOutliner->AddColumn (cs, ID_COLADDR_NICKNAME, 1500, 0, ColumnVariable, iCol3 ? iCol3 : 1500 );
- m_pOutliner->SetHasPipes( FALSE );
-
- m_pOutliner->SetVisibleColumns(DEF_VISIBLE_COLUMNS);
- m_pOutliner->LoadXPPrefs("mailnews.abook_columns_win");
- }
-
- void CAddrOutlinerParent::OnDestroy()
- {
- int32 prefInt = ((CAddrOutliner*)m_pOutliner)->GetSortBy();
- if (prefInt != ID_COLADDR_NAME && prefInt != ID_COLADDR_EMAIL
- && prefInt != ID_COLADDR_NICKNAME)
- prefInt = ID_COLADDR_NAME;
-
- PREF_SetIntPref("mail.addr_book.sortby", prefInt);
- PREF_SetBoolPref("mail.addr_book.sort_ascending",((CAddrOutliner*)m_pOutliner)->GetSortAscending());
-
- COutlinerParent::OnDestroy();
- }
-
- void CAddrOutlinerParent::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");
- }
-
- BOOL CAddrOutlinerParent::ColumnCommand ( int idColumn )
- {
- ABID lastSelection;
-
- CAddrOutliner *pOutliner = (CAddrOutliner *) 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) {
- uint32 index = AB_GetIndexOfEntryID ((AddressPane *) pOutliner->GetPane(), lastSelection);
- pOutliner->SelectItem (CASTINT(index));
- pOutliner->ScrollIntoView(CASTINT(index));
- }
-
- Invalidate();
- pOutliner->Invalidate();
- SetCursor ( theApp.LoadStandardCursor ( IDC_ARROW ) );
- return TRUE;
- }
-
-
-
-
- //////////////////////////////////////////////////////////////////////////////
- // CAddrOutliner
- BEGIN_MESSAGE_MAP(CDirOutliner, CMSelectOutliner)
- //{{AFX_MSG_MAP(CDirOutliner)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- CDirOutliner::CDirOutliner ( )
- {
- m_attribSortBy = 0;
- 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_attribSortBy = 1;
- m_bSortAscending = TRUE;
- m_iMysticPlane = 0;
- m_dirIndex = 0;
- m_hFont = NULL;
- m_pDirLine = NULL;
- }
-
- CDirOutliner::~CDirOutliner ( )
- {
- if (m_pUnkUserImage) {
- if (m_pIUserImage)
- m_pUnkUserImage->Release();
- }
- if (m_hFont) {
- theApp.ReleaseAppFont(m_hFont);
- }
-
- }
-
-
- HFONT CDirOutliner::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 CDirOutliner::SetDirectoryIndex (int dirIndex)
- {
- m_dirIndex = dirIndex;
- SelectItem (CASTINT(m_dirIndex));
- }
-
- void CDirOutliner::UpdateCount( )
- {
- m_iTotalLines = XP_ListCount (theApp.m_directories);
- if (!m_iTotalLines)
- ClearSelection();
- Invalidate();
- UpdateWindow();
- }
-
-
- BOOL CDirOutliner::DeleteItem ( int iLine )
- {
- MSG_ViewIndex indices[1];
- indices[0] = (MSG_ViewIndex) iLine;
- MessageBeep(0);
- return TRUE;
- }
-
- void CDirOutliner::SetPane(ABPane *pane)
- {
- m_pane = pane;
-
- if (m_pane) {
- SetTotalLines(XP_ListCount (theApp.m_directories));
- Invalidate();
- UpdateWindow();
- }
- }
-
- void CDirOutliner::MysticStuffStarting( XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify,
- MSG_ViewIndex where,
- int32 num )
- {
- ++m_iMysticPlane;
- }
-
- void CDirOutliner::MysticStuffFinishing( XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify,
- MSG_ViewIndex where,
- int32 num )
- {
- switch ( notify ) {
- case MSG_NotifyNone:
- break;
-
- case MSG_NotifyInsertOrDelete:
- 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 CDirOutliner::PropertyMenu ( int iSel, UINT flags )
- {
- BOOL bHasItems = FALSE;
- CMenu cmPopup;
- CString cs;
-
- if(cmPopup.CreatePopupMenu() == 0)
- return;
-
- if (iSel < m_iTotalLines) {
- cs.LoadString(IDS_AB_NEW_USER);
- cmPopup.AppendMenu(MF_ENABLED, ID_ITEM_ADDUSER, cs);
- cs.LoadString(IDS_AB_NEW_LIST);
- cmPopup.AppendMenu(MF_ENABLED, ID_ITEM_ADDLIST, cs);
- cmPopup.AppendMenu(MF_SEPARATOR);
- cs.LoadString(IDS_COMPOSE_REMOVE);
- cmPopup.AppendMenu(MF_ENABLED, ID_EDIT_DELETE, cs);
- cmPopup.AppendMenu(MF_SEPARATOR);
- cs.LoadString(IDS_AB_PROPERTIES);
- cmPopup.AppendMenu(MF_ENABLED, ID_ITEM_PROPERTIES, cs);
- bHasItems = TRUE;
- }
-
-
- // Track the popup now.
- POINT pt = m_ptHit;
- ClientToScreen(&pt);
-
- cmPopup.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y,
- GetParentFrame(), NULL);
-
- // Cleanup
- cmPopup.DestroyMenu();
- }
-
- void CDirOutliner::AcceptDrop( int iLineNo, COleDataObject *pDataObject,
- DROPEFFECT dropEffect )
- {
- if(!pDataObject)
- return;
-
- // Dont allow us to drop on ourselves
- if(pDataObject->IsDataAvailable(m_cfSourceTarget))
- return;
-
- if(!pDataObject->IsDataAvailable(m_cfAddresses) &&
- !pDataObject->IsDataAvailable(CF_TEXT))
- return;
-
- if(pDataObject->IsDataAvailable(m_cfAddresses)) {
- HGLOBAL hAddresses = pDataObject->GetGlobalData(m_cfAddresses);
- LPSTR pAddresses = (LPSTR)GlobalLock(hAddresses);
- ASSERT(pAddresses);
- // Parse the vcards and add them to the address book
- // AB_ImportFromVcard((AddressPane*) m_pane, pAddresses);
- GlobalUnlock(hAddresses);
- }
- else {
- HGLOBAL hString = pDataObject->GetGlobalData(CF_TEXT);
- char * pAddress = (char*)GlobalLock(hString);
- ASSERT(pAddress);
- // parse the vcard from the text
- // AB_ImportFromVcard((AddressPane*) m_pane, pAddress);
- GlobalUnlock(hString);
- }
- }
-
- void CDirOutliner::InitializeClipFormats(void)
- {
- m_cfAddresses = (CLIPFORMAT)RegisterClipboardFormat(vCardClipboardFormat);
- m_cfSourceTarget = (CLIPFORMAT)RegisterClipboardFormat(ADDRESSBOOK_SOURCETARGET_FORMAT);
- }
-
- CLIPFORMAT * CDirOutliner::GetClipFormatList(void)
- {
- static CLIPFORMAT cfFormatList[3];
- cfFormatList[0] = m_cfAddresses;
- cfFormatList[1] = m_cfSourceTarget;
- cfFormatList[2] = 0;
- return cfFormatList;
- }
-
-
- COleDataSource * CDirOutliner::GetDataSource(void)
- {
- COleDataSource * pDataSource = new COleDataSource;
- MSG_ViewIndex *indices;
- int count;
-
- /*
- ABID entryID;
- char* pVcard = NULL;
- char* pVcards = XP_STRDUP("");
- char szTemp[10];
- char szEntryID[20];
- char* pEntryIDs = XP_STRDUP("");
- HANDLE hString = 0;
- */
-
- GetSelection(indices, count);
-
- /* for (int i = 0 ; i < count; i++) {
- if ((entryID = AB_GetEntryIDAt((AddressPane*) m_pane, indices[i])) != 0) {
- AB_ExportToVCard(theApp.m_pABook,
- (DIR_Server*)XP_ListGetObjectNum(theApp.m_directories, m_dirIndex + 1), entryID, &pVcard);
- pVcards = StrAllocCat(pVcards, pVcard);
- XP_FREE(pVcard);
- pVcard = NULL;
-
- ltoa(entryID, szTemp, 10);
- sprintf(szEntryID, "%s-", szTemp);
- pEntryIDs = StrAllocCat(pEntryIDs, szEntryID);
- }
- }
-
- if (pVcards) {
- hString = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE|GMEM_ZEROINIT,strlen(pVcards)+1);
- LPSTR lpszString = (LPSTR)GlobalLock(hString);
- strcpy(lpszString,pVcards);
- XP_FREE (pVcards);
- GlobalUnlock(hString);
-
- HANDLE hEntryID = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE|GMEM_ZEROINIT,strlen(pEntryIDs)+1);
- LPSTR lpszEntryID = (LPSTR)GlobalLock(hEntryID);
- strcpy(lpszEntryID,pEntryIDs);
- XP_FREE (pEntryIDs);
- GlobalUnlock(hEntryID);
- pDataSource->CacheGlobalData(m_cfAddresses, hString);
- pDataSource->CacheGlobalData(m_cfSourceTarget, hEntryID);
- pDataSource->CacheGlobalData(CF_TEXT, hString);
- } */
-
- return pDataSource;
- }
-
-
- BOOL CDirOutliner::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 CDirOutliner::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 CDirOutliner::TranslateIconFolder (void * pData)
- {
- // We're a flat list, so we're never a folder
- return ( OUTLINER_ITEM );
- }
-
-
- BOOL CDirOutliner::ColumnCommand ( int iColumn, int iLine )
- {
- // We have no column commands
- return FALSE;
- }
-
- void * CDirOutliner::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 CDirOutliner::GetTreeInfo ( int iLine, uint32 * pFlags, int * pDepth, OutlinerAncestorInfo ** pAncestor )
- {
- if ( pFlags ) *pFlags = 0; // Flags?
- if ( pDepth ) *pDepth = 0; // We're flat, remember?
- }
-
- void CDirOutliner::ReleaseLineData ( void * )
- {
- }
-
- LPCTSTR CDirOutliner::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 CDirOutliner::OnSelChanged()
- {
- MSG_ViewIndex *indices;
- int count;
-
- CAddrFrame* frame = (CAddrFrame*) GetParentFrame();
- if (frame->IsSearching())
- return;
-
- GetSelection(indices, count);
-
- if (count == 1) {
- frame->OnUpdateDirectorySelection(indices[0]);
- }
- }
-
- void CDirOutliner::OnSelDblClk()
- {
- GetParentFrame()->SendMessage(WM_COMMAND, ID_ITEM_PROPERTIES, 0);
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CAddrOutlinerParent
-
- BEGIN_MESSAGE_MAP(CDirOutlinerParent, COutlinerParent)
- //{{AFX_MSG_MAP(CDirOutlinerParent)
- ON_WM_DESTROY()
- ON_WM_LBUTTONUP()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- CDirOutlinerParent::CDirOutlinerParent()
- {
-
- }
-
-
- CDirOutlinerParent::~CDirOutlinerParent()
- {
-
- }
-
-
- BOOL CDirOutlinerParent::RenderData ( int idColumn, CRect & rect, CDC &dc, const char * text )
- {
- int cx = 3, cy = 0;
- CDirOutliner *pOutliner = (CDirOutliner *) 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 * CDirOutlinerParent::GetOutliner ( void )
- {
- return new CDirOutliner;
- }
-
- void CDirOutlinerParent::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 CDirOutlinerParent::OnDestroy()
- {
- int32 prefInt = ((CDirOutliner*)m_pOutliner)->GetSortBy();
-
- COutlinerParent::OnDestroy();
- }
-
- void CDirOutlinerParent::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");
- }
-
- BOOL CDirOutlinerParent::ColumnCommand ( int idColumn )
- {
- ABID lastSelection;
-
- // no sorting for right now
- return TRUE;
-
- CDirOutliner *pOutliner = (CDirOutliner *) 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_COLDIR_TYPE:
- AB_Command(pOutliner->GetPane(), AB_SortByTypeCmd, 0, 0);
- break;
- case ID_COLDIR_NAME:
- AB_Command(pOutliner->GetPane(), AB_SortByFullNameCmd, 0, 0);
- break;
- default:
- AB_Command(pOutliner->GetPane(), AB_SortByFullNameCmd, 0, 0);
- break;
- }
-
-
- if (pOutliner->GetFocusLine() != -1) {
- uint32 index = AB_GetIndexOfEntryID ((AddressPane *) pOutliner->GetPane(), lastSelection);
- pOutliner->SelectItem (CASTINT(index));
- pOutliner->ScrollIntoView(CASTINT(index));
- }
-
- Invalidate();
- pOutliner->Invalidate();
- SetCursor ( theApp.LoadStandardCursor ( IDC_ARROW ) );
- return TRUE;
- }
-
-
- void WFE_MSGOpenAB()
- {
- CAddrFrame::Open();
- }
-
-
- void CAddrFrame::UpdateMenu(HMENU hMenu, UINT &nID)
- {
- // *** If you change the way this menu is built, you also need to
- // change CAddrFrame::FolderInfoFromMenuID
-
- MSG_Master *pMaster = WFE_MSGGetMaster();
- int i, j;
- MSG_FolderInfo **folderInfos;
- int32 iCount;
- MSG_FolderLine folderLine;
- char buffer[_MAX_PATH];
-
- j = 0;
-
- iCount = MSG_GetFolderChildren( pMaster, NULL, NULL, NULL );
-
- folderInfos = new MSG_FolderInfo*[iCount];
- if (folderInfos) {
- MSG_GetFolderChildren( pMaster, NULL, folderInfos, iCount );
-
- for ( i = 0; i < iCount; i++) {
- if ( MSG_GetFolderLineById( pMaster, folderInfos[ i ], &folderLine ) ) {
- if (j < 10) {
- sprintf( buffer, "&%d %s", j, folderLine.name);
- } else if ( j < 36 ) {
- sprintf( buffer, "&%c %s", 'a' + j - 10, folderLine.name);
- } else {
- sprintf( buffer, " %s", folderLine.name);
- }
- ::AppendMenu( hMenu, MF_STRING, nID, buffer);
- nID++;
- j++;
- }
- }
- delete [] folderInfos;
- }
- }
-
- void WFE_MSGBuildAddressBookPopup( HMENU hmenu, BOOL bAddSender )
- {
- UINT nID;
- if (bAddSender)
- nID = FIRST_ADDSENDER_MENU_ID;
- else
- nID = FIRST_ADDALL_MENU_ID;
- HMENU hABAddMenu = CreatePopupMenu();
- HMENU hAddMenu = CreatePopupMenu();
-
- // ::AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT) hFileMenu, szLoadString( IDS_POPUP_FILE ) );
- ::AppendMenu( hAddMenu, MF_STRING, ID_MESSAGE_ADDSENDER, szLoadString( IDS_POPUP_ADDSENDER ) );
- ::AppendMenu( hAddMenu, MF_STRING, ID_MESSAGE_ADDALL, szLoadString( IDS_POPUP_ADDALL ) );
- ::AppendMenu( hmenu, MF_STRING|MF_POPUP, (UINT) hAddMenu, szLoadString( IDS_POPUP_ADDTOADDRESSBOOK ) );
- ::AppendMenu( hmenu, MF_SEPARATOR, 0, NULL );
- CAddrFrame::UpdateMenu( hABAddMenu, nID );
- }
-