Free the lizard
git-svn-id: svn://10.0.0.236/trunk@10 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
280
mozilla/cmd/winfe/nsadrtyp.cpp
Normal file
280
mozilla/cmd/winfe/nsadrtyp.cpp
Normal file
@@ -0,0 +1,280 @@
|
||||
/* -*- 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.
|
||||
*/
|
||||
|
||||
// NSAdrTyp.cpp : implementation file
|
||||
// See NSAdrTyp.h for details on how to use this class
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "resource.h"
|
||||
#include "nsadrlst.h"
|
||||
#include "nsadrtyp.h"
|
||||
#include "compfrm.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CNSAddressTypeComboBox
|
||||
|
||||
CNSAddressTypeControl::CNSAddressTypeControl()
|
||||
{
|
||||
m_iTypeBitmapWidth = 0;
|
||||
|
||||
penFace.CreatePen(PS_SOLID,1,GetSysColor(COLOR_BTNFACE));
|
||||
brushFace.CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
|
||||
#ifdef _WIN32
|
||||
pen3dLight.CreatePen(PS_SOLID,1,GetSysColor(COLOR_3DLIGHT));
|
||||
pen3dShadow.CreatePen(PS_SOLID,1,GetSysColor(COLOR_3DSHADOW));
|
||||
pen3dHilight.CreatePen(PS_SOLID,1,GetSysColor(COLOR_3DHILIGHT));
|
||||
pen3dDkShadow.CreatePen(PS_SOLID,1,GetSysColor(COLOR_3DDKSHADOW));
|
||||
#else
|
||||
pen3dLight.CreatePen(PS_SOLID,1,GetSysColor(COLOR_BTNHIGHLIGHT));
|
||||
pen3dShadow.CreatePen(PS_SOLID,1,GetSysColor(COLOR_BTNSHADOW));
|
||||
pen3dHilight.CreatePen(PS_SOLID,1,GetSysColor(COLOR_BTNHIGHLIGHT));
|
||||
pen3dDkShadow.CreatePen(PS_SOLID,1,GetSysColor(COLOR_BTNSHADOW));
|
||||
#endif
|
||||
}
|
||||
|
||||
CNSAddressTypeControl::~CNSAddressTypeControl()
|
||||
{
|
||||
if (m_cfTextFont) {
|
||||
theApp.ReleaseAppFont(m_cfTextFont);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL CNSAddressTypeControl::Create( CWnd *pParent )
|
||||
{
|
||||
BOOL rv = CListBox::Create(
|
||||
LBS_NOINTEGRALHEIGHT | LBS_NOTIFY | LBS_WANTKEYBOARDINPUT | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS,
|
||||
CRect(0,0,0,0), pParent, (UINT)5000 );
|
||||
CBitmap cbitmap;
|
||||
cbitmap.LoadBitmap(IDB_ARROW3D);
|
||||
BITMAP bitmap;
|
||||
cbitmap.GetObject(sizeof(BITMAP), &bitmap);
|
||||
m_iTypeBitmapWidth = bitmap.bmWidth;
|
||||
cbitmap.DeleteObject();
|
||||
return rv;
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CNSAddressTypeControl, CListBox)
|
||||
//{{AFX_MSG_MAP(CNSAddressTypeControl)
|
||||
ON_WM_KILLFOCUS()
|
||||
ON_WM_SETFOCUS()
|
||||
ON_WM_KEYDOWN()
|
||||
ON_WM_CREATE()
|
||||
ON_WM_LBUTTONDOWN()
|
||||
ON_WM_MOUSEMOVE()
|
||||
ON_WM_ENTERIDLE()
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CNSAddressTypeControl::OnKillFocus(CWnd *pNewWnd)
|
||||
{
|
||||
GetParent()->SendMessage(WM_CHILDLOSTFOCUS);
|
||||
CListBox::OnKillFocus(pNewWnd);
|
||||
}
|
||||
|
||||
BOOL CNSAddressTypeControl::PreTranslateMessage( MSG* pMsg )
|
||||
{
|
||||
if ( (pMsg->message == WM_KEYDOWN) && ( (pMsg->wParam == VK_TAB) || (pMsg->wParam == VK_RETURN) || (pMsg->wParam == VK_BACK) ) )
|
||||
return ((CNSAddressList *)GetParent())->OnKeyPress( this, pMsg->wParam, LOWORD( pMsg->lParam ), HIWORD( pMsg->lParam ) );
|
||||
|
||||
return CListBox::PreTranslateMessage(pMsg);
|
||||
}
|
||||
|
||||
void CNSAddressTypeControl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
|
||||
{
|
||||
CDC * pDC = GetDC();
|
||||
TEXTMETRIC tm;
|
||||
pDC->GetTextMetrics(&tm);
|
||||
lpMeasureItemStruct->itemHeight = tm.tmHeight;
|
||||
ReleaseDC(pDC);
|
||||
}
|
||||
|
||||
|
||||
void CNSAddressTypeControl::OnSetFocus(CWnd* pOldWnd)
|
||||
{
|
||||
CListBox::OnSetFocus(pOldWnd);
|
||||
}
|
||||
|
||||
|
||||
void CNSAddressTypeControl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
|
||||
{
|
||||
switch (nChar)
|
||||
{
|
||||
case VK_SPACE:
|
||||
GetParent()->PostMessage(WM_DISPLAYTYPELIST);
|
||||
return;
|
||||
case VK_UP:
|
||||
case VK_DOWN:
|
||||
case VK_HOME:
|
||||
case VK_END:
|
||||
case VK_DELETE:
|
||||
((CNSAddressList *)GetParent())->OnKeyPress(this,nChar,nRepCnt,nFlags);
|
||||
return;
|
||||
break;
|
||||
}
|
||||
CListBox::OnKeyDown(nChar, nRepCnt, nFlags);
|
||||
}
|
||||
|
||||
|
||||
void DrawTransparentBitmap(HDC hdc, HBITMAP hBitmap, short xStart, short yStart, COLORREF cTransparentColor )
|
||||
{
|
||||
#ifdef FEATURE_DRAWTRANSBITMAP
|
||||
#include "nsadrtyp.i00"
|
||||
#endif
|
||||
}
|
||||
|
||||
int CNSAddressTypeControl::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
||||
{
|
||||
if (CListBox::OnCreate(lpCreateStruct) == -1)
|
||||
return -1;
|
||||
|
||||
CComposeFrame * pFrame = (CComposeFrame*)GetParentFrame();
|
||||
CDC * pdc = GetDC();
|
||||
int16 resource_csid = INTL_CharSetNameToID(INTL_ResourceCharSet());
|
||||
LOGFONT lf;
|
||||
memset(&lf,0,sizeof(LOGFONT));
|
||||
lf.lfPitchAndFamily = FF_MODERN | FIXED_PITCH;
|
||||
lf.lfHeight = -MulDiv(NS_ADDRESSFONTSIZE,pdc->GetDeviceCaps(LOGPIXELSY), 72);
|
||||
ReleaseDC ( pdc );
|
||||
lf.lfQuality = PROOF_QUALITY;
|
||||
lf.lfCharSet = IntlGetLfCharset(resource_csid);
|
||||
strcpy(lf.lfFaceName, IntlGetUIFixFaceName(resource_csid));
|
||||
m_cfTextFont = theApp.CreateAppFont( lf );
|
||||
::SendMessage(GetSafeHwnd(), WM_SETFONT, (WPARAM)m_cfTextFont, FALSE);
|
||||
// TODO: Add your specialized creation code here
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CNSAddressTypeControl::OnLButtonDown(UINT nFlags, CPoint point)
|
||||
{
|
||||
CListBox::OnLButtonDown(nFlags, point);
|
||||
GetParent()->PostMessage(WM_DISPLAYTYPELIST);
|
||||
}
|
||||
|
||||
void DrawTypeBitmap(CRect &rect, CDC * pDC, BOOL bPressed, BOOL bHighlight)
|
||||
{
|
||||
CBitmap cbitmap;
|
||||
cbitmap.LoadBitmap(bPressed?IDB_ARROW3D_PRESS:IDB_ARROW3D);
|
||||
BITMAP bitmap;
|
||||
cbitmap.GetObject(sizeof(BITMAP), &bitmap );
|
||||
int center_y = rect.top + (rect.Height() - bitmap.bmHeight)/2;
|
||||
DrawTransparentBitmap(
|
||||
pDC->GetSafeHdc(),
|
||||
(HBITMAP)cbitmap.GetSafeHandle(),
|
||||
2,
|
||||
center_y,
|
||||
RGB( 255, 0, 255 ) );
|
||||
cbitmap.DeleteObject();
|
||||
}
|
||||
|
||||
void CNSAddressTypeControl::DrawHighlight(
|
||||
HDC hDC,
|
||||
CRect &rect,
|
||||
HPEN hpenTopLeft,
|
||||
HPEN hpenBottomRight)
|
||||
{
|
||||
HPEN hpenOld = (HPEN) ::SelectObject( hDC, hpenTopLeft );
|
||||
|
||||
::MoveToEx( hDC, rect.left, rect.bottom, NULL );
|
||||
::LineTo( hDC, rect.left, rect.top );
|
||||
::LineTo( hDC, rect.right - 1, rect.top );
|
||||
|
||||
::SelectObject( hDC, hpenBottomRight );
|
||||
::LineTo( hDC, rect.right - 1, rect.bottom - 1);
|
||||
::LineTo( hDC, rect.left, rect.bottom - 1);
|
||||
|
||||
::SelectObject( hDC, hpenOld );
|
||||
}
|
||||
|
||||
void CNSAddressTypeControl::DrawRaisedRect(HDC hDC, CRect &rect)
|
||||
{
|
||||
rect.InflateRect(-1,-1);
|
||||
DrawHighlight(hDC,rect,(HPEN)pen3dLight.GetSafeHandle(),(HPEN)pen3dShadow.GetSafeHandle());
|
||||
rect.InflateRect(1,1);
|
||||
DrawHighlight(hDC,rect,(HPEN)pen3dHilight.GetSafeHandle(),(HPEN)pen3dDkShadow.GetSafeHandle());
|
||||
}
|
||||
|
||||
void CNSAddressTypeControl::DrawItemSoItLooksLikeAButton(
|
||||
CDC * pDC, CRect &rect, CString & cs )
|
||||
{
|
||||
if (rect.Width() > 0 && rect.Height() > 0)
|
||||
{
|
||||
COLORREF cOldText = pDC->SetTextColor(GetSysColor(COLOR_BTNTEXT));
|
||||
COLORREF cOldBk = pDC->SetBkColor(GetSysColor(COLOR_BTNFACE));
|
||||
|
||||
NS_FillSolidRect(pDC->GetSafeHdc(),rect,GetSysColor(COLOR_BTNFACE));
|
||||
|
||||
CFont *oldFont = pDC->SelectObject(CFont::FromHandle(m_cfTextFont));
|
||||
|
||||
TEXTMETRIC tm;
|
||||
pDC->GetTextMetrics(&tm);
|
||||
int y = ((rect.bottom - rect.top) - tm.tmHeight)/2;
|
||||
|
||||
CBitmap cbitmap;
|
||||
cbitmap.LoadBitmap(IDB_ARROW3D);
|
||||
BITMAP bitmap;
|
||||
cbitmap.GetObject(sizeof(BITMAP), &bitmap );
|
||||
|
||||
rect.left += bitmap.bmWidth + TEXT_PAD;
|
||||
rect.top += y;
|
||||
CString csRight = cs.Right(cs.GetLength()-1);
|
||||
pDC->DrawText(csRight,csRight.GetLength(),rect,DT_LEFT);
|
||||
|
||||
pDC->SelectObject(oldFont);
|
||||
|
||||
rect.top -= y;
|
||||
rect.left -= bitmap.bmWidth + TEXT_PAD;
|
||||
DrawRaisedRect(pDC->GetSafeHdc(), rect);
|
||||
|
||||
DrawTransparentBitmap(
|
||||
pDC->GetSafeHdc(),
|
||||
(HBITMAP)cbitmap.GetSafeHandle(),
|
||||
2,
|
||||
rect.top + y,
|
||||
RGB( 255, 0, 255 ) );
|
||||
cbitmap.DeleteObject();
|
||||
}
|
||||
}
|
||||
|
||||
void CNSAddressTypeControl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
|
||||
{
|
||||
if (lpDrawItemStruct->itemID != -1)
|
||||
{
|
||||
CDC dc;
|
||||
dc.Attach(lpDrawItemStruct->hDC);
|
||||
CRect rect;
|
||||
GetClientRect(rect);
|
||||
CString cs;
|
||||
GetText(lpDrawItemStruct->itemID,cs);
|
||||
DrawItemSoItLooksLikeAButton(&dc,rect,cs);
|
||||
if (lpDrawItemStruct->itemState & ODS_FOCUS)
|
||||
{
|
||||
rect.InflateRect(-4,-3);
|
||||
dc.DrawFocusRect(rect);
|
||||
}
|
||||
dc.Detach();
|
||||
ValidateRect(rect);
|
||||
}
|
||||
}
|
||||
|
||||
void CNSAddressTypeControl::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
|
||||
{
|
||||
delete (CNSAddressTypeInfo *)GetItemDataPtr( lpDeleteItemStruct->itemID );
|
||||
CListBox::DeleteItem(lpDeleteItemStruct);
|
||||
}
|
||||
Reference in New Issue
Block a user