pjs/cmd/winfe/nsadrlst.h

271 строка
9.3 KiB
C++

/* -*- 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