// XTPSyntaxEditPropertiesPageFont.cpp : implementation file
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME SYNTAX EDIT LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////

#include "StdAfx.h"
#include "Resource.h"

// common includes
#include "Common/XTPSmartPtrInternalT.h"
#include "Common/XTPVC80Helpers.h"
#include "Common/XTPColorManager.h"

#include "Common/XTPResourceManager.h"
#include "Common/XTPDrawHelpers.h"

// syntax editor includes
#include "XTPSyntaxEditDefines.h"
#include "XTPSyntaxEditStruct.h"
#include "XTPSyntaxEditCtrl.h"
#include "XTPSyntaxEditDoc.h"
#include "XTPSyntaxEditView.h"
#include "XTPSyntaxEditPaintManager.h"
#include "XTPSyntaxEditColorSampleText.h"
#include "XTPSyntaxEditColorComboBox.h"
#include "XTPSyntaxEditPropertiesPage.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

AFX_STATIC int CALLBACK EnumFontFamExProc(
	ENUMLOGFONTEX *lpelfe,    // logical-font data
	NEWTEXTMETRICEX *lpntme,  // physical-font data
	DWORD FontType,           // type of font
	LPARAM lParam);           // application-defined data


//===========================================================================
// CXTPSyntaxEditPropertiesPageFont property page
//===========================================================================

CXTPSyntaxEditPropertiesPageFont::CXTPSyntaxEditPropertiesPageFont(CXTPSyntaxEditView* pEditView/*=NULL*/)
: //CPropertyPage(CXTPSyntaxEditPropertiesPageFont::IDD),
m_bModified(FALSE)
, m_pEditView(pEditView)
, m_uFaceSize(LF_FACESIZE)
{
	m_psp.dwFlags |= PSP_DLGINDIRECT;
	m_psp.pResource = XTPResourceManager()->LoadDialogTemplate(IDD);

	//{{AFX_DATA_INIT(CXTPSyntaxEditPropertiesPageFont)
	m_bStrikeOut = FALSE;
	m_bUnderline = FALSE;
	m_csName = _T("Courier");
	m_csStyle = _T("Regular");
	m_csSize = _T("10");
	//}}AFX_DATA_INIT

	m_iCharSet = DEFAULT_CHARSET;
	m_crHiliteText = ::GetSysColor(COLOR_HIGHLIGHTTEXT);
	m_crHiliteBack = ::GetSysColor(COLOR_HIGHLIGHT);
	m_crText = ::GetSysColor(COLOR_WINDOWTEXT);
	m_crBack = ::GetSysColor(COLOR_WINDOW);

	ReadRegistryValues();
}

CXTPSyntaxEditPropertiesPageFont::~CXTPSyntaxEditPropertiesPageFont()
{
}

void CXTPSyntaxEditPropertiesPageFont::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CXTPSyntaxEditPropertiesPageFont)
	DDX_Control(pDX, XTP_IDC_EDIT_COMB_SCRIPT, m_wndComboScript);
	DDX_Control(pDX, XTP_IDC_EDIT_COMB_STYLES, m_wndComboStyle);
	DDX_Control(pDX, XTP_IDC_EDIT_COMB_SIZES, m_wndComboSize);
	DDX_Control(pDX, XTP_IDC_EDIT_COMB_NAMES, m_wndComboName);
/*  DDX_Check(pDX, XTP_IDC_EDIT_CHK_STRIKEOUT, m_bStrikeOut);*/
/*  DDX_Check(pDX, XTP_IDC_EDIT_CHK_UNDERLINE, m_bUnderline);*/
	DDX_Control(pDX, XTP_IDC_EDIT_COMB_TEXT, m_wndComboText);
	DDX_Control(pDX, XTP_IDC_EDIT_COMB_BACK, m_wndComboBack);
	DDX_Control(pDX, XTP_IDC_EDIT_COMB_TEXTSEL, m_wndComboHiliteText);
	DDX_Control(pDX, XTP_IDC_EDIT_COMB_BACKSEL, m_wndComboHiliteBack);
	DDX_Control(pDX, XTP_IDC_EDIT_TXT_SAMPLE, m_txtSample);
	DDX_Control(pDX, XTP_IDC_EDIT_TXT_SAMPLESEL, m_txtSampleSel);
	DDX_CBSyntaxColor(pDX, XTP_IDC_EDIT_COMB_TEXT, m_crText);
	DDX_CBSyntaxColor(pDX, XTP_IDC_EDIT_COMB_BACK, m_crBack);
	DDX_CBSyntaxColor(pDX, XTP_IDC_EDIT_COMB_TEXTSEL, m_crHiliteText);
	DDX_CBSyntaxColor(pDX, XTP_IDC_EDIT_COMB_BACKSEL, m_crHiliteBack);
	DDX_Control(pDX, XTP_IDC_EDIT_BTN_CUSTOM_TEXT, m_btnCustomText);
	DDX_Control(pDX, XTP_IDC_EDIT_BTN_CUSTOM_BACK, m_btnCustomBack);
	DDX_Control(pDX, XTP_IDC_EDIT_BTN_CUSTOM_TEXTSEL, m_btnCustomHiliteText);
	DDX_Control(pDX, XTP_IDC_EDIT_BTN_CUSTOM_BACKSEL, m_btnCustomHiliteBack);
	DDX_CBString(pDX, XTP_IDC_EDIT_COMB_STYLES, m_csStyle);
	DDX_CBString(pDX, XTP_IDC_EDIT_COMB_NAMES, m_csName);
	DDX_CBString(pDX, XTP_IDC_EDIT_COMB_SIZES, m_csSize);
	DDV_MaxChars(pDX, m_csSize, m_uFaceSize);
	//}}AFX_DATA_MAP
}

IMPLEMENT_DYNCREATE(CXTPSyntaxEditPropertiesPageFont, CPropertyPage)

BEGIN_MESSAGE_MAP(CXTPSyntaxEditPropertiesPageFont, CPropertyPage)
	//{{AFX_MSG_MAP(CXTPSyntaxEditPropertiesPageFont)
	ON_CBN_SELCHANGE(XTP_IDC_EDIT_COMB_NAMES, OnSelChangeComboNames)
	ON_CBN_SELCHANGE(XTP_IDC_EDIT_COMB_STYLES, OnSelChangeComboStyles)
	ON_CBN_SELCHANGE(XTP_IDC_EDIT_COMB_SIZES, OnSelChangeComboSizes)
/*  ON_BN_CLICKED(XTP_IDC_EDIT_CHK_STRIKEOUT, OnChkStrikeOut)*/
/*  ON_BN_CLICKED(XTP_IDC_EDIT_CHK_UNDERLINE, OnChkUnderline)*/
	ON_BN_CLICKED(XTP_IDC_EDIT_BTN_CUSTOM_TEXT, OnBtnCustomText)
	ON_BN_CLICKED(XTP_IDC_EDIT_BTN_CUSTOM_BACK, OnBtnCustomBack)
	ON_BN_CLICKED(XTP_IDC_EDIT_BTN_CUSTOM_TEXTSEL, OnBtnCustomHiliteText)
	ON_BN_CLICKED(XTP_IDC_EDIT_BTN_CUSTOM_BACKSEL, OnBtnCustomtHiliteBack)
	ON_CBN_SELENDOK(XTP_IDC_EDIT_COMB_TEXTSEL, OnSelEndOkHiliteText)
	ON_CBN_SELENDOK(XTP_IDC_EDIT_COMB_BACKSEL, OnSelEndOkHiliteBack)
	ON_CBN_SELENDOK(XTP_IDC_EDIT_COMB_TEXT, OnSelEndOkText)
	ON_CBN_SELENDOK(XTP_IDC_EDIT_COMB_BACK, OnSelEndOkBack)
	ON_CBN_SELENDOK(XTP_IDC_EDIT_COMB_SCRIPT, OnSelEndOkScript)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CXTPSyntaxEditPropertiesPageFont::CreateSafeFontIndirect(CFont& editFont, const LOGFONT& lf)
{
	if (editFont.GetSafeHandle())
		editFont.DeleteObject();

	if (!editFont.CreateFontIndirect(&lf))
		return FALSE;

	return TRUE;
}

BOOL CXTPSyntaxEditPropertiesPageFont::GetSafeLogFont(LOGFONT& lf)
{
	if (m_editFont.GetSafeHandle())
	{
		m_editFont.GetLogFont(&lf);
		return TRUE;
	}

	CFont* pFont = GetPaintManager() ? GetPaintManager()->GetFont() : NULL;
	if (pFont && pFont->GetSafeHandle())
	{
		pFont->GetLogFont(&lf);
		return TRUE;
	}

	return FALSE;
}

BOOL CXTPSyntaxEditPropertiesPageFont::ReadRegistryValues()
{
	LOGFONT lf = {0};
	if (!GetSafeLogFont(lf))
		return FALSE;

	if (!CreateSafeFontIndirect(m_editFont, lf))
		return FALSE;

	if (!GetPaintManager())
		return FALSE;

	m_crText        = GetPaintManager()->GetTextColor();
	m_crBack        = GetPaintManager()->GetBackColor();
	m_crHiliteText  = GetPaintManager()->GetHiliteTextColor();
	m_crHiliteBack  = GetPaintManager()->GetHiliteBackColor();
	m_bStrikeOut    = (BOOL)lf.lfStrikeOut;
	m_bUnderline    = (BOOL)lf.lfUnderline;

	return TRUE;
}

BOOL CXTPSyntaxEditPropertiesPageFont::WriteRegistryValues()
{
	// update paint manager font(paint manager font is set with CXTPSyntaxEditCtrl::CreateFontIndirect).
	LOGFONT lf = {0};
	if (!GetSafeLogFont(lf))
		return FALSE;

	if (!m_pEditView || !GetPaintManager())
		return FALSE;

	m_pEditView->SetFontIndirect(&lf, TRUE);

	// commit values to registry.
	GetPaintManager()->SetTextColor(m_crText, TRUE);
	GetPaintManager()->SetBackColor(m_crBack, TRUE);
	GetPaintManager()->SetHiliteTextColor(m_crHiliteText, TRUE);
	GetPaintManager()->SetHiliteBackColor(m_crHiliteBack, TRUE);

	return TRUE;
}

CXTPSyntaxEditPaintManager* CXTPSyntaxEditPropertiesPageFont::GetPaintManager()
{
	if (m_pEditView)
		return m_pEditView->GetEditCtrl().GetPaintManager();

	return NULL;
}

BOOL CXTPSyntaxEditPropertiesPageFont::OnInitDialog()
{
	CPropertyPage::OnInitDialog();

	// Initialize combo boxes.
	InitFontCombo();
	InitStyleCombo();
	InitSizeCombo();
	InitScriptCombo();
	InitColorComboxes();

	UpdateSampleFont();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CXTPSyntaxEditPropertiesPageFont::InitFontCombo()
{
	m_wndComboName.ResetContent();

	LOGFONT lfEnum = {0};
	lfEnum.lfCharSet = DEFAULT_CHARSET;
	lfEnum.lfPitchAndFamily = /*FIXED_PITCH | */ FF_DONTCARE;
	lfEnum.lfFaceName[0] = 0;

	CWindowDC dc(NULL);
	::EnumFontFamiliesEx(dc.m_hDC, &lfEnum,
		(FONTENUMPROC)EnumFontFamExProc, (LPARAM)&m_wndComboName, 0 );

	if (!m_editFont.GetSafeHandle())
		return;

	LOGFONT lf = {0};
	if (!GetSafeLogFont(lf))
		return;

	m_csName = lf.lfFaceName;

	if (m_wndComboName.SelectString(-1, m_csName) == CB_ERR)
		m_wndComboName.SetWindowText(m_csName);
}

void CXTPSyntaxEditPropertiesPageFont::InitStyleCombo()
{
	m_wndComboStyle.ResetContent();

	CString csBuffer;
	XTPResourceManager()->LoadString(&csBuffer, XTP_IDS_EDIT_REGULAR);
	m_wndComboStyle.AddString(csBuffer);

	XTPResourceManager()->LoadString(&csBuffer, XTP_IDS_EDIT_BOLD);
	m_wndComboStyle.AddString(csBuffer);

	XTPResourceManager()->LoadString(&csBuffer, XTP_IDS_EDIT_ITALIC);
	m_wndComboStyle.AddString(csBuffer);

	XTPResourceManager()->LoadString(&csBuffer, XTP_IDS_EDIT_BOLDITALIC);
	m_wndComboStyle.AddString(csBuffer);

	if (!m_editFont.GetSafeHandle())
		return;

	LOGFONT lf = {0};
	if (!GetSafeLogFont(lf))
		return;

	if (lf.lfWeight >= FW_BOLD && lf.lfItalic)
	{
		XTPResourceManager()->LoadString(&m_csStyle, XTP_IDS_EDIT_BOLDITALIC);
	}
	else if (lf.lfItalic)
	{
		XTPResourceManager()->LoadString(&m_csStyle, XTP_IDS_EDIT_ITALIC);
	}
	else if (lf.lfWeight >= FW_BOLD)
	{
		XTPResourceManager()->LoadString(&m_csStyle, XTP_IDS_EDIT_BOLD);
	}
	else
	{
		XTPResourceManager()->LoadString(&m_csStyle, XTP_IDS_EDIT_REGULAR);
	}

	if (m_wndComboStyle.SelectString(-1, m_csStyle) == CB_ERR)
		m_wndComboStyle.SetWindowText(m_csStyle);
}

void CXTPSyntaxEditPropertiesPageFont::InitSizeCombo()
{
	m_wndComboSize.ResetContent();

	if (!m_editFont.GetSafeHandle())
		return;

	LOGFONT lf = {0};
	if (!GetSafeLogFont(lf))
		return;

	CWindowDC dc(NULL);
	::EnumFontFamiliesEx(dc.m_hDC, &lf,
		(FONTENUMPROC)EnumFontFamExProc, (LPARAM)&m_wndComboSize, 0);

	if (m_wndComboSize.GetCount() == 0)
	{
		TCHAR* szSize[] = {
				_T("8"),  _T("9"),  _T("10"), _T("11"),
				_T("12"), _T("14"), _T("16"), _T("18"),
				_T("20"), _T("22"), _T("24"), _T("26"),
				_T("28"), _T("36"), _T("48"), _T("72") };

			for (int i = 0; i < (sizeof(szSize)/sizeof(szSize[0])); i++)
			{
				m_wndComboSize.AddString(szSize[i]);
			}
	}

	m_csSize.Format(_T("%i"), -::MulDiv(lf.lfHeight,
		72, ::GetDeviceCaps(dc.m_hDC, LOGPIXELSY)));

	if (m_wndComboSize.SelectString(-1, m_csSize) == CB_ERR)
		m_wndComboSize.SetWindowText(m_csSize);
}

void CXTPSyntaxEditPropertiesPageFont::InitScriptCombo()
{
	m_wndComboScript.ResetContent();

	if (!m_editFont.GetSafeHandle())
		return;

	LOGFONT lf = {0};
	if (!GetSafeLogFont(lf))
		return;

	m_iCharSet = lf.lfCharSet;

	lf.lfCharSet = DEFAULT_CHARSET;
	lf.lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE;

	CWindowDC dc(NULL);
	::EnumFontFamiliesEx(dc.m_hDC, &lf,
		(FONTENUMPROC)EnumFontFamExProc, (LPARAM)&m_wndComboScript, 0);

	int iCount = m_wndComboScript.GetCount();

	int i;
	for (i = 0; i < iCount; ++i)
	{
		BYTE lfCharSet = (BYTE)m_wndComboScript.GetItemData(i);
		if (lfCharSet == (BYTE)m_iCharSet)
		{
			m_wndComboScript.SetCurSel(i);
			break;
		}
	}

	if (i == iCount)
		m_wndComboScript.SetCurSel(0);
}

void CXTPSyntaxEditPropertiesPageFont::InitColorComboxes()
{
	ASSERT(GetPaintManager());
	if (!GetPaintManager())
		return;

	m_wndComboText.SetAutoColor(::GetSysColor(COLOR_WINDOWTEXT));
	m_crText = GetPaintManager()->GetTextColor();
	if (m_wndComboText.SetSelColor(m_crText) == CB_ERR)
	{
		m_wndComboText.SetUserColor(m_crText);
		m_wndComboText.SetSelColor(m_crText);
	}

	m_wndComboBack.SetAutoColor(::GetSysColor(COLOR_WINDOW));
	m_crBack = GetPaintManager()->GetBackColor();
	if (m_wndComboBack.SetSelColor(m_crBack) == CB_ERR)
	{
		m_wndComboBack.SetUserColor(m_crBack);
		m_wndComboBack.SetSelColor(m_crBack);
	}

	m_wndComboHiliteText.SetAutoColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
	m_crHiliteText = GetPaintManager()->GetHiliteTextColor();
	if (m_wndComboHiliteText.SetSelColor(m_crHiliteText) == CB_ERR)
	{
		m_wndComboHiliteText.SetUserColor(m_crHiliteText);
		m_wndComboHiliteText.SetSelColor(m_crHiliteText);
	}

	m_wndComboHiliteBack.SetAutoColor(::GetSysColor(COLOR_HIGHLIGHT));
	m_crHiliteBack = GetPaintManager()->GetHiliteBackColor();
	if (m_wndComboHiliteBack.SetSelColor(m_crHiliteBack) == CB_ERR)
	{
		m_wndComboHiliteBack.SetUserColor(m_crHiliteBack);
		m_wndComboHiliteBack.SetSelColor(m_crHiliteBack);
	}

	UpdateSampleColors();
}

void CXTPSyntaxEditPropertiesPageFont::UpdateSampleColors()
{
	m_txtSample.SetBackColor(m_crBack);
	m_txtSample.SetTextColor(m_crText);
	m_txtSampleSel.SetBackColor(m_crHiliteBack);
	m_txtSampleSel.SetTextColor(m_crHiliteText);
}

void CXTPSyntaxEditPropertiesPageFont::UpdateSampleFont()
{
	if (m_editFont.GetSafeHandle())
	{
		m_txtSample.SetFont(&m_editFont);
		m_txtSampleSel.SetFont(&m_editFont);
	}
}

int CXTPSyntaxEditPropertiesPageFont::GetLBText(CComboBox& comboBox, CString& csItemText)
{
	UpdateData();

	if (!::IsWindow(comboBox.m_hWnd))
		return CB_ERR;

	int iCurSel = comboBox.GetCurSel();
	if (iCurSel == CB_ERR)
		return CB_ERR;

	comboBox.GetLBText(iCurSel, csItemText);

	if (!csItemText.IsEmpty())
	{
		if (comboBox.SelectString(-1, csItemText) == CB_ERR)
			comboBox.SetWindowText(csItemText);

		return iCurSel;
	}

	return CB_ERR;
}

void CXTPSyntaxEditPropertiesPageFont::OnSelChangeComboNames()
{
	if (!m_wndComboName.GetListBox().SelChanged())
		return;

	if (GetLBText(m_wndComboName, m_csName) == CB_ERR)
		return;

	LOGFONT lf = {0};
	if (!GetSafeLogFont(lf))
		return;

	STRCPY_S(lf.lfFaceName, m_csName.GetLength() + 1, m_csName);

	if (CreateSafeFontIndirect(m_editFont, lf))
	{
		UpdateSampleFont();
		InitSizeCombo();
		InitScriptCombo();
		SetModified(TRUE);
	}
}

void CXTPSyntaxEditPropertiesPageFont::OnSelChangeComboStyles()
{
	if (!m_wndComboStyle.GetListBox().SelChanged())
		return;

	if (GetLBText(m_wndComboStyle, m_csStyle) == CB_ERR)
		return;

	LOGFONT lf = {0};
	if (!GetSafeLogFont(lf))
		return;

	CString csBuffer;
	XTPResourceManager()->LoadString(&csBuffer, XTP_IDS_EDIT_ITALIC);
	lf.lfItalic = (m_csStyle.Find(csBuffer) == -1)? (BYTE)FALSE: (BYTE)TRUE;

	XTPResourceManager()->LoadString(&csBuffer, XTP_IDS_EDIT_BOLD);
	lf.lfWeight = (m_csStyle.Find(csBuffer) == -1)? FW_NORMAL: FW_BOLD;

	if (CreateSafeFontIndirect(m_editFont, lf))
	{
		UpdateSampleFont();
		SetModified(TRUE);
	}
}

void CXTPSyntaxEditPropertiesPageFont::OnSelChangeComboSizes()
{
	if (!m_wndComboSize.GetListBox().SelChanged())
		return;

	if (GetLBText(m_wndComboSize, m_csSize) == CB_ERR)
		return;

	LOGFONT lf = {0};
	if (!GetSafeLogFont(lf))
		return;

	CWindowDC dc(NULL);
	lf.lfHeight = -MulDiv(_ttoi(m_csSize),
		::GetDeviceCaps(dc.m_hDC, LOGPIXELSY), 72);

	if (CreateSafeFontIndirect(m_editFont, lf))
	{
		UpdateSampleFont();
		SetModified(TRUE);
	}
}

void CXTPSyntaxEditPropertiesPageFont::OnChkStrikeOut()
{
	UpdateData();

	LOGFONT lf = {0};
	if (!GetSafeLogFont(lf))
		return;

	lf.lfStrikeOut = (BYTE)m_bStrikeOut;

	if (CreateSafeFontIndirect(m_editFont, lf))
	{
		UpdateSampleFont();
		SetModified(TRUE);
	}
}

void CXTPSyntaxEditPropertiesPageFont::OnChkUnderline()
{
	UpdateData();

	LOGFONT lf = {0};
	if (!GetSafeLogFont(lf))
		return;

	lf.lfUnderline = (BYTE)m_bUnderline;

	if (CreateSafeFontIndirect(m_editFont, lf))
	{
		UpdateSampleFont();
		SetModified(TRUE);
	}
}

void CXTPSyntaxEditPropertiesPageFont::OnSelEndOkScript()
{
	if (!m_wndComboScript.GetListBox().SelChanged())
		return;

	UpdateData();

	int iCurSel = m_wndComboScript.GetCurSel();
	if (iCurSel == CB_ERR)
		return;

	LOGFONT lf = {0};
	if (!GetSafeLogFont(lf))
		return;

	lf.lfCharSet = (BYTE)m_wndComboScript.GetItemData(iCurSel);
	m_iCharSet = lf.lfCharSet;

	if (CreateSafeFontIndirect(m_editFont, lf))
	{
		UpdateSampleFont();
		SetModified(TRUE);
		UpdateData(FALSE);
	}
}

void CXTPSyntaxEditPropertiesPageFont::OnSelEndOkHiliteText()
{
	UpdateData();
	UpdateSampleColors();
	SetModified(TRUE);
}

void CXTPSyntaxEditPropertiesPageFont::OnSelEndOkHiliteBack()
{
	UpdateData();
	UpdateSampleColors();
	SetModified(TRUE);
}

void CXTPSyntaxEditPropertiesPageFont::OnSelEndOkText()
{
	UpdateData();
	UpdateSampleColors();
	SetModified(TRUE);
}

void CXTPSyntaxEditPropertiesPageFont::OnSelEndOkBack()
{
	UpdateData();
	UpdateSampleColors();
	SetModified(TRUE);
}

void CXTPSyntaxEditPropertiesPageFont::OnBtnCustomText()
{
	if (m_wndComboText.SelectUserColor() != CB_ERR)
	{
		m_crText = m_wndComboText.GetSelColor();
		OnSelEndOkText();
		SetModified(TRUE);
	}
}

void CXTPSyntaxEditPropertiesPageFont::OnBtnCustomBack()
{
	if (m_wndComboBack.SelectUserColor() != CB_ERR)
	{
		m_crBack = m_wndComboBack.GetSelColor();
		OnSelEndOkBack();
		SetModified(TRUE);
	}
}

void CXTPSyntaxEditPropertiesPageFont::OnBtnCustomHiliteText()
{
	if (m_wndComboHiliteText.SelectUserColor() != CB_ERR)
	{
		m_crHiliteText = m_wndComboHiliteText.GetSelColor();
		OnSelEndOkHiliteText();
		SetModified(TRUE);
	}
}

void CXTPSyntaxEditPropertiesPageFont::OnBtnCustomtHiliteBack()
{
	if (m_wndComboHiliteBack.SelectUserColor() != CB_ERR)
	{
		m_crHiliteBack = m_wndComboHiliteBack.GetSelColor();
		OnSelEndOkHiliteBack();
		SetModified(TRUE);
	}
}

BOOL CXTPSyntaxEditPropertiesPageFont::OnApply()
{
	if (!CPropertyPage::OnApply())
		return FALSE;

	// no changes made or they have already been applied.
	if (!m_bModified)
		return TRUE;

	// update registry settings.
	if (!WriteRegistryValues())
		return FALSE;

	m_bModified = FALSE;

	if (m_pEditView && m_pEditView->GetDocument())
		m_pEditView->GetDocument()->UpdateAllViews(NULL, xtpEditHintInitView);

	return TRUE;
}

void CXTPSyntaxEditPropertiesPageFont::SetModified(BOOL bChanged/*=TRUE*/)
{
	CPropertyPage::SetModified();
	m_bModified = bChanged;
}