/* ==========================================================================
File : RRECToolbar.cpp
Class : CRRECToolbar
Author : Johan Rosengren, Abstrakt Mekanik AB
Iain Clarke
Date : 2004-05-07
Purpose : This class encapsulates a toolbar that can be used with
"CRulerRichEditCtrl". The class is derived from "CToolBarCtrl",
and manages a formatting toolbar
Description : A "CToolBarCtrl"-derived class. Reads a toolbar resource
with the ID "TOOLBAR_CONTROL" and adds combo controls for
font name and -size, as well as a color picker at the
positions "FONT_NAME_POS", "FONT_SIZE_POS" and
"FONT_COLOR_POS" respectively.
Usage : Created by the rich edit mini-editor.
========================================================================*/
#include "stdafx.h"
#include "RRECToolbar.h"
#include "ids.h"
#include <tchar.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern UINT urm_SETCURRENTFONTNAME;
extern UINT urm_SETCURRENTFONTSIZE;
extern UINT urm_SETCURRENTFONTCOLOR;
/////////////////////////////////////////////////////////////////////////////
// CRRECToolbar
CRRECToolbar::CRRECToolbar()
/* ============================================================
Function : CRRECToolbar::CRRECToolbar
Description : ctor
Access : Public
Return : void
Parameters : none
Usage :
============================================================*/
{
}
CRRECToolbar::~CRRECToolbar()
/* ============================================================
Function : CRRECToolbar::~CRRECToolbar
Description : dtor
Access : Public
Return : void
Parameters : none
Usage :
============================================================*/
{
}
BOOL CRRECToolbar::Create( CWnd* parent, CRect& rc )
/* ============================================================
Function : CRRECToolbar::Create
Description : Creates the toolbar control
Access : Public
Return : BOOL - "TRUE" if success
Parameters : CWnd* parent - Parent editor
CRect& rc - Rectangle to place
toolbar in.
Usage : Called from the parent editor
============================================================*/
{
BOOL result = FALSE;
HINSTANCE hInstance = AfxFindResourceHandle( MAKEINTRESOURCE( TOOLBAR_CONTROL ), RT_TOOLBAR );
if(!hInstance)
return FALSE;
HRSRC hRsrc = ::FindResource( hInstance, MAKEINTRESOURCE( TOOLBAR_CONTROL ), RT_TOOLBAR );
if( !hRsrc )
return FALSE;
HGLOBAL hGlobal = LoadResource( hInstance, hRsrc );
if (hGlobal == NULL)
return FALSE;
CToolBarData* pData = ( CToolBarData* ) LockResource( hGlobal );
if (pData == NULL)
return FALSE;
ASSERT( pData->wVersion == 1 );
TBBUTTON tb, tbSep;
memset ( &tb, 0, sizeof( tb ) );
memset ( &tbSep, 0, sizeof( tbSep ) );
result = CToolBarCtrl::Create( WS_VISIBLE | WS_CHILD, rc, parent, TOOLBAR_CONTROL );
if( result )
{
SetButtonStructSize( sizeof ( tb ) );
CSize sz ( pData->wWidth, pData->wHeight );
SetBitmapSize( sz );
sz.cx += 4;
sz.cy += 4;
SetButtonSize( sz );
// Loop through adding buttons.
tb.fsState = TBSTATE_ENABLED;
tb.fsStyle = TBSTYLE_BUTTON;
tb.iString = -1;
tb.iBitmap = 0;
tbSep.iString = -1;
tbSep.fsStyle = TBSTYLE_SEP;
for( WORD w = 0; w < pData->wItemCount; w++ )
{
if ( pData->items()[ w ] == 0 )
AddButtons( 1, &tbSep );
else
{
tb.idCommand = pData->items()[ w ];
AddButtons( 1, &tb );
tb.iBitmap++;
}
}
HBITMAP hBitmap = (HBITMAP) ::LoadImage( hInstance, MAKEINTRESOURCE( TOOLBAR_CONTROL ), IMAGE_BITMAP, 0,0, LR_LOADMAP3DCOLORS );
if( !hBitmap )
return FALSE;
BITMAP bm;
memset( &bm, 0, sizeof ( bm ) );
::GetObject( hBitmap, sizeof ( bm ), &bm );
AddBitmap( bm.bmWidth / pData->wWidth, CBitmap::FromHandle ( hBitmap ) );
UnlockResource( hGlobal );
FreeResource( hGlobal );
/////////////////////////////////////
// Map in combo boxes
//
CRect rect;
TBBUTTONINFO tbi;
tbi.cbSize = sizeof( TBBUTTONINFO );
tbi.cx = FONT_COMBO_WIDTH;
tbi.dwMask = TBIF_SIZE | 0x80000000; // By index
SetButtonInfo( FONT_NAME_POS, &tbi );
GetItemRect( FONT_NAME_POS, &rect );
rect.bottom += COMBO_HEIGHT;
// The font name combo
if( m_font.Create( WS_CHILD |
WS_VSCROLL |
WS_VISIBLE |
CBS_AUTOHSCROLL |
CBS_DROPDOWN |
CBS_SORT |
CBS_HASSTRINGS,
rect, this, DROPDOWN_FONT ) )
{
m_font.SetFont( CFont::FromHandle( ( HFONT ) ::GetStockObject( ANSI_VAR_FONT ) ) );
m_font.FillCombo();
tbi.cx = COMBO_WIDTH;
SetButtonInfo( FONT_SIZE_POS, &tbi );
GetItemRect( FONT_SIZE_POS, &rect );
rect.bottom += COMBO_HEIGHT;
// The font size combo
if( m_size.Create( WS_CHILD |
WS_VISIBLE |
CBS_AUTOHSCROLL |
CBS_DROPDOWNLIST |
CBS_HASSTRINGS,
rect, this, DROPDOWN_SIZE ) )
{
m_size.SetFont( CFont::FromHandle( ( HFONT ) ::GetStockObject( ANSI_VAR_FONT ) ) );
m_size.FillCombo();
CString color;
CString defaultText;
CString customText;
color.LoadString( STRING_COLOR );
defaultText.LoadString( STRING_DEFAULT );
customText.LoadString( STRING_CUSTOM );
tbi.cx = COLOR_WIDTH;
SetButtonInfo( FONT_COLOR_POS, &tbi );
GetItemRect( FONT_COLOR_POS, &rect );
// The color picker
if( m_color.Create( color,
WS_VISIBLE|
WS_CHILD,
rect, this, BUTTON_COLOR ) )
{
m_color.SetDefaultText( defaultText );
m_color.SetCustomText( customText );
m_color.SetSelectionMode( CP_MODE_TEXT );
m_color.SetBkColour( RGB( 255, 255, 255 ) );
m_color.SetFont( CFont::FromHandle( ( HFONT ) ::GetStockObject( ANSI_VAR_FONT ) ) );
result = TRUE;
}
}
}
}
return result;
}
BEGIN_MESSAGE_MAP(CRRECToolbar, CToolBarCtrl)
//{{AFX_MSG_MAP(CRRECToolbar)
// NOTE - the ClassWizard will add and remove mapping macros here.
ON_CBN_SELCHANGE(DROPDOWN_FONT, OnSelchangeFont)
ON_CBN_SELCHANGE(DROPDOWN_SIZE, OnSelchangeSize)
ON_MESSAGE(CPN_SELENDOK, OnColorButton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRRECToolbar message handlers
void CRRECToolbar::OnSelchangeFont()
/* ============================================================
Function : CRRECToolbar::OnSelchangeFont
Description : Changes the font of the selected text in
the editor.
Access : Protected
Return : void
Parameters : none
Usage : Called from MFC when the selection changes
in the font name combo.
============================================================*/
{
CString font;
int index = m_font.GetCurSel();
if( index != CB_ERR )
{
m_font.GetLBText( index, font );
GetParent()->SendMessage( urm_SETCURRENTFONTNAME, ( WPARAM ) ( LPCTSTR ) font, 0 );
}
}
void CRRECToolbar::OnSelchangeSize()
/* ============================================================
Function : CRRECToolbar::OnSelchangeSize
Description : Changes the size of the selected text in
the editor.
Access : Protected
Return : void
Parameters : none
Usage : Called from MFC when the selection changes
in the font size combo.
============================================================*/
{
int size = 0;
int index = m_size.GetCurSel();
if( index != CB_ERR )
{
CString sz;
m_size.GetLBText( index, sz );
size = _ttoi( ( LPCTSTR ) sz );
GetParent()->SendMessage( urm_SETCURRENTFONTSIZE, 0, ( LPARAM ) size );
}
}
LRESULT CRRECToolbar::OnColorButton( WPARAM, LPARAM )
/* ============================================================
Function : CRRECToolbar::OnColorButton
Description : Mapped to the color picker defined
"CPN_SELENDOK" message, sent when the color
is changed in the picker.
Access : Protected
Return : LRESULT - Not used
Parameters : WPARAM - Not used
LPARAM - Not used
Usage : Called from MFC.
============================================================*/
{
COLORREF color = RGB( 0, 0, 0 );
color = m_color.GetColour();
GetParent()->SendMessage( urm_SETCURRENTFONTCOLOR, 0, ( LPARAM ) color );
return 0;
}
/////////////////////////////////////////////////////////////////////////////
// CRRECToolbar UI updaters
void CRRECToolbar::SetFontName( const CString& font )
/* ============================================================
Function : CRRECToolbar::SetFontName
Description : Selects the font name "font" in the font
name combo on the toolbar.
Access : Public
Return : void
Parameters : none
Usage : Call to set the selected font name
============================================================*/
{
if( m_font.m_hWnd )
m_font.SelectFontName( font );
}
void CRRECToolbar::SetFontSize( int size )
/* ============================================================
Function : CRRECToolbar::SetFontSize
Description : Selects the font size "size" in the font
size combo on the toolbar.
Access : Public
Return : void
Parameters : none
Usage : Call to set the selected font size
============================================================*/
{
if( m_size.m_hWnd )
m_size.SelectSize( size );
}
void CRRECToolbar::SetFontColor( COLORREF color )
/* ============================================================
Function : CRRECToolbar::SetFontColor
Description : Selects the font color "color" in the font
color picker on the toolbar.
Access : Public
Return : void
Parameters : none
Usage : Call to set the color picker color
============================================================*/
{
if( m_color.m_hWnd )
m_color.SetColour( color );
}