|
|
#include "pch.hxx"
#include "syncprop.h"
#include "imnact.h"
#include "grplist2.h"
static CSyncPropDlg *s_pSyncPropDlg = NULL;
CSyncPropDlg::CSyncPropDlg(): m_cRef(1), m_pGrpList(NULL), m_pColumns(NULL), m_pszAcctName(NULL) { IF_DEBUG(m_fInit = FALSE;) }
CSyncPropDlg::~CSyncPropDlg() { // We handed this out, so release it
SafeRelease(m_pColumns);
if (m_pGrpList) delete m_pGrpList; if (m_pszAcctName) MemFree(m_pszAcctName); }
STDMETHODIMP CSyncPropDlg::QueryInterface(REFIID riid, LPVOID FAR *ppvObj) { TraceCall("CSyncPropDlg::QueryInterface");
if(!ppvObj) return E_INVALIDARG;
*ppvObj = NULL;
if (IsEqualIID(riid, IID_IUnknown)) *ppvObj = SAFECAST(this, IUnknown *); else if (IsEqualIID(riid, IID_IGroupListAdvise)) *ppvObj = SAFECAST(this, IGroupListAdvise *); else return E_NOINTERFACE; InterlockedIncrement(&m_cRef); return NOERROR; }
STDMETHODIMP_(ULONG) CSyncPropDlg::AddRef() { TraceCall("CSyncPropDlg::AddRef"); return InterlockedIncrement(&m_cRef); }
STDMETHODIMP_(ULONG) CSyncPropDlg::Release() { TraceCall("CSyncPropDlg::Release"); LONG cRef = InterlockedDecrement(&m_cRef); if (cRef > 0) return (ULONG)cRef;
delete this; return 0; }
STDMETHODIMP CSyncPropDlg::ItemUpdate(void) { return S_OK; }
STDMETHODIMP CSyncPropDlg::ItemActivate(FOLDERID id) { return S_OK; }
BOOL CSyncPropDlg::Initialize(HWND hwnd, LPCSTR pszAcctID, LPCSTR pszAcctName, ACCTTYPE accttype) { Assert(g_hLocRes); Assert(pszAcctID); Assert(pszAcctName);
if (!(m_pColumns = new CColumns) || !(m_pGrpList = new CGroupList)) return FALSE;
ZeroMemory(&m_pspage, sizeof(PROPSHEETPAGE)); ZeroMemory(&m_pshdr, sizeof(PROPSHEETHEADER));
m_accttype = accttype; ULONG cchAcctName = lstrlen(pszAcctName)+1; if (MemAlloc((LPVOID*) &m_pszAcctName, cchAcctName)) { StrCpyNA(m_pszAcctName, pszAcctName, cchAcctName); } else m_pszAcctName = NULL;
// BUGBUG: Need to get some sync icons here...
switch (accttype) { case ACCT_MAIL: m_dwIconID = idiMail; break; case ACCT_NEWS: m_dwIconID = idiDLNews; break; default: m_dwIconID = idiPhone; }
m_pspage.dwSize = sizeof(PROPSHEETPAGE); m_pspage.hInstance = g_hLocRes; m_pspage.pszTemplate = MAKEINTRESOURCE(iddSyncSettings); m_pspage.pfnDlgProc = DlgProc; m_pshdr.dwSize = sizeof(PROPSHEETHEADER); m_pshdr.dwFlags = PSH_USEICONID | PSH_PROPSHEETPAGE | PSH_USEPAGELANG; m_pshdr.hwndParent = hwnd; m_pshdr.hInstance = g_hLocRes; m_pshdr.pszCaption = (LPCSTR) m_pszAcctName; m_pshdr.nPages = 1; m_pshdr.nStartPage = 0; m_pshdr.ppsp = &m_pspage; m_pshdr.pszIcon = MAKEINTRESOURCE(m_dwIconID); IF_DEBUG(m_fInit = TRUE;)
return TRUE; }
void CSyncPropDlg::Show() { Assert(m_fInit);
// Stash our this pointer somewhere where the static dlgproc can access it
s_pSyncPropDlg = this;
// Actually show the dlg (modal)
PropertySheet(&m_pshdr); }
BOOL CSyncPropDlg::InitDlg(HWND hwnd) { COLUMN_SET_TYPE set; m_hwndList = GetDlgItem(hwnd, idcList); m_pColumns->Initialize(m_hwndList, COLUMN_SET_OFFLINE); m_pColumns->ApplyColumns(COLUMN_LOAD_DEFAULT, NULL, 0);
if (FAILED(m_pGrpList->Initialize((IGroupListAdvise *)this, m_pColumns, m_hwndList, m_accttype, FALSE))) return FALSE;
SendDlgItemMessage (hwnd, idcIcon, STM_SETICON, (WPARAM)LoadIcon(g_hLocRes, MAKEINTRESOURCE(m_dwIconID)), 0); SendDlgItemMessageA(hwnd, idcAccountName, WM_SETTEXT, 0, (LPARAM)m_pszAcctName); return TRUE; }
BOOL CALLBACK CSyncPropDlg::DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { BOOL fHandledRet = TRUE; CSyncPropDlg *pThis = (CSyncPropDlg*)GetWindowLong(hwnd, GWL_USERDATA); switch (msg) { case WM_INITDIALOG: // Let the dlg know which CSyncPropDlg controls it
Assert(s_pSyncPropDlg); SetWindowLong(hwnd, GWL_USERDATA, (LONG)(pThis = s_pSyncPropDlg)); s_pSyncPropDlg = NULL; fHandledRet = pThis->InitDlg(hwnd); break;
case WM_COMMAND: break;
case WM_NOTIFY: { LPNMHDR pnmh = (LPNMHDR) lParam; } break;
default: return FALSE;
}
return fHandledRet; }
// Normal way to get a sync properties dlg
void ShowPropSheet(HWND hwnd, LPCSTR pszAcctID, LPCSTR pszAcctName, ACCTTYPE accttype) { CSyncPropDlg *pDlg;
if (pDlg = new CSyncPropDlg()) { if (pDlg->Initialize(hwnd, pszAcctID, pszAcctName, accttype)) pDlg->Show(); delete pDlg; } }
|