/* -*- 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. */ // NSAdrLst.h : header file // #ifndef __NSADRLST_H__ #define __NSADRLST_H__ #include "nsadrtyp.h" #include "nsadrnam.h" #include "apiaddr.h" #define NS_ADDRESSFONTSIZE 8 class CNSAddressTypeInfo { protected: BOOL m_bHidden; BOOL m_bExclusive; BOOL m_bExpand; UINT m_pidBitmap; DWORD m_dwUserData; char * m_pszValue; public: CNSAddressTypeInfo(UINT pidBitmap = 0, BOOL bHidden = FALSE, BOOL bExclusive = FALSE, DWORD dwUserData = 0, BOOL bExpand = TRUE) { m_pidBitmap = pidBitmap; m_bExclusive = bExclusive; m_bHidden = bHidden; m_dwUserData = dwUserData; m_pszValue = NULL; m_bExpand = bExpand; } ~CNSAddressTypeInfo() { if (m_pszValue) free(m_pszValue); } inline void SetValue(const char * pszValue) { if (m_pszValue) free(m_pszValue); m_pszValue = NULL; if (pszValue && strlen(pszValue)) m_pszValue = strdup(pszValue); } inline char * GetValue(void) { return m_pszValue; } inline BOOL GetHidden(void) { return m_bHidden; } inline BOOL GetExclusive(void) { return m_bExclusive; } inline BOOL GetExpand(void) { return m_bExpand; } inline void SetHidden(BOOL bVal) { m_bHidden = bVal; } inline void SetExclusive(BOOL bVal) { m_bExclusive = bVal; } inline void SetExpand(BOOL bVal) { m_bExpand = bVal; } inline UINT GetBitmap(void) { return m_pidBitmap; } inline DWORD GetUserData(void) { return m_dwUserData; } }; class CNSAddressInfo { protected: char * szType; char * szName; UINT idBitmap; ULONG idEntry; BOOL bAllowExpansion; public: CNSAddressInfo() { szType = NULL; szName = NULL; idBitmap = 0; idEntry = 0xffffffff; bAllowExpansion = FALSE; } ~CNSAddressInfo() { if (szType) free(szType); if (szName) free(szName); } char * GetType(void) { return szType; } char * GetName(void) { return szName; } UINT GetBitmap(void) { return idBitmap; } ULONG GetEntryID(void) { return idEntry; } BOOL GetExpansion(void) { return bAllowExpansion; } void SetExpansion(BOOL bExpand) { bAllowExpansion = bExpand; } void SetName(const char *ptr = NULL) { if (szName) free(szName); if (ptr) szName = strdup(ptr); else szName = NULL; } void SetType(const char * ptr = NULL) { char * temp = szType; if (ptr) szType = strdup(ptr); else szType = NULL; if (temp) free(temp); } void SetBitmap(UINT id = 0) { idBitmap = id; } void SetEntryID(unsigned long id = 0xffffffff) { idEntry = id; } }; ///////////////////////////////////////////////////////////////////////// // These structures and methods are used to set, add, and retrieve // address list entries. The structure AND strings are copied. The // index is 0 based. typedef struct { LPCTSTR szType; // must be in list of address choices LPCTSTR szName; UINT idBitmap; // may be null to use bitmap provider API unsigned long idEntry; } NSAddressListEntry; ///////////////////////////////////////////////////////////////////////////// // CNSAddressList window class CNSAddressList : public CListBox, public CGenericObject, public IAddressControl { protected: BOOL m_bParse; BOOL m_bCreated; HBRUSH m_hBrushNormal; HPEN m_hPenNormal, m_hPenGrid, m_hPenGrey; CNSAddressTypeControl * m_pAddressTypeList; CNSAddressNameEditField * m_pNameField; int m_nCurrentSelection; int m_iFieldControlWidth; int m_iBitmapWidth; int m_iTypeBitmapWidth; BOOL m_bGridLines; BOOL m_bArrowDown; BOOL m_bDrawTypeList; HFONT m_hTextFont; int m_iDefaultBitmapId; int m_lastIndex; LPADDRESSPARENT m_pIAddressParent; int m_iItemHeight; public: CNSAddressList(); // Construction virtual ~CNSAddressList(); // IUnknown STDMETHODIMP QueryInterface(REFIID,LPVOID *); STDMETHODIMP_(ULONG) Release(void); // IAddressControl virtual int GetItemFromPoint(LPPOINT point); virtual BOOL AddAddressType(char * pszChoice, UINT pidBitmap = 0, BOOL bExpande = TRUE, BOOL bHidden = FALSE,BOOL bExclusive = FALSE,DWORD dwUserData = 0); virtual void SetDefaultBitmapId(int id = 0) { m_iDefaultBitmapId = id; } virtual int GetDefaultBitmapId(void) { return m_iDefaultBitmapId; } virtual BOOL RemoveSelection(int nIndex = -1); virtual BOOL DeleteEntry( int nIndex ); virtual int FindEntry( int nStart, LPCTSTR lpszName ); virtual BOOL Create(CWnd *pParent, int id = 1000); virtual CListBox * GetAddressTypeComboBox( void ); virtual CEdit * GetAddressNameField( void ); virtual void SetItemName(int nIndex, char * text); virtual void SetItemBitmap(int nIndex, UINT id); virtual void SetItemEntryID(int nIndex, unsigned long id); virtual void SetControlParent(LPADDRESSPARENT pIAddressParent); virtual int GetAddressList (LPNSADDRESSLIST * ppAddressList); virtual int SetAddressList (LPNSADDRESSLIST pAddressList, int count); virtual CListBox * GetListBox(void) { return (CListBox *)this; } virtual BOOL IsCreated(void) { return m_bCreated; } virtual int AppendEntry(BOOL expandName, LPCTSTR szType, LPCTSTR szName, UINT idBitmap, unsigned long idEntry ); virtual int InsertEntry( int nIndex, BOOL expandName, LPCTSTR szType, LPCTSTR szName, UINT idBitmap, unsigned long idEntry ); virtual BOOL SetEntry( int nIndex, LPCTSTR szType, LPCTSTR szName, UINT idBitmap, unsigned long idEntry); virtual BOOL GetEntry( int nIndex, char **szType, char **szName, UINT *idBitmap, unsigned long *idEntry); virtual void GetTypeInfo(int nIndex, ADDRESS_TYPE_FLAG flag, void ** value); virtual int SetSel(int nIndex, BOOL bSelect); virtual void EnableParsing(BOOL bParse); virtual void SetCSID (int16 csid); protected: int AppendEntry( NSAddressListEntry *pAddressEntry = NULL, BOOL expandName = TRUE ); // to end of list, NULL for empty entry int InsertEntry( int nIndex, NSAddressListEntry *pAddressEntry, BOOL expandName = TRUE); BOOL SetEntry( int nIndex, NSAddressListEntry *pAddressEntry ); BOOL GetEntry( int nIndex, NSAddressListEntry *pAddressEntry ); void EnableGridLines( BOOL bEnable ); void DrawEntryBitmap(int iSel, CNSAddressInfo * pAddress = NULL, CDC * pDC = NULL, BOOL bErase = TRUE); int GetTypeFieldLength(void); BOOL ParseAddressEntry(int nSelection); void SetEditField(char * text) { m_pNameField->SetWindowText(text); } void HeaderCommand(int nID); void UpdateHeaderType(void); void UpdateHeaderContents(void); void DisplayTypeList(int item = -1); inline int GetActiveSelection() { return GetCurSel(); } int SetActiveSelection(int); virtual LRESULT DefWindowProc( UINT message, WPARAM wParam, LPARAM lParam ); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CNSAddressList) public: virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct); virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct); //}}AFX_VIRTUAL int GetItemRect(HWND hwnd, int nIndex, LPRECT lpRect) const; UINT ItemFromPoint(HWND hwnd, LPPOINT lpPoint, BOOL * bOutside) const; BOOL DoCommand( HWND hwnd, WPARAM wParam, LPARAM lParam ); BOOL OnKeyPress( CWnd *pChildControl, UINT nChar, UINT nRepCnt, UINT nFlags ); void DrawAddress( int nIndex, CRect &rect, CDC *pDC, BOOL bSelect = FALSE ); void DrawGridLine(CRect &rect, CDC *pDC); void ComputeFieldWidths(CDC * pDC); BOOL DoEraseBkgnd(HWND hwnd, HDC hdc); void DoSetFocus(HWND); void DoKillFocus(HWND); void DoLButtonUp(HWND hwnd, UINT nFlags, LPPOINT point); void DoLButtonDown(HWND hwmd, UINT nFlags, LPPOINT point); void DoVScroll(HWND hwnd, UINT nSBCode, UINT nPos); void DoChildLostFocus(); int DoNotifySelectionChange(); void DoDisplayTypeList(); friend class CNSAddressNameEditField; friend class CNSAddressTypeControl; }; void DrawTransparentBitmap(HDC hdc, HBITMAP hBitmap, short xStart, short yStart, COLORREF cTransparentColor ); void NS_FillSolidRect(HDC hdc, LPCRECT crRect, COLORREF rgbFill); void NS_Draw3dRect(HDC hdc, LPCRECT crRect, COLORREF rgbTL, COLORREF rgbBR); void NS_DrawRaisedRect( HDC hDC, LPRECT lpRect ); void NS_DrawLoweredRect( HDC hDC, LPRECT lpRect ); void NS_Draw3DButtonRect( HDC hDC, LPRECT lpRect, BOOL bPushed ); #endif __NSADRLST_H__ // end define of CNSAddressList