/****************************************************************************
*                                                                           *
* Project 64 - A Nintendo 64 emulator.                                      *
* http://www.pj64-emu.com/                                                  *
* Copyright (C) 2012 Project64. All rights reserved.                        *
*                                                                           *
* License:                                                                  *
* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html                        *
*                                                                           *
****************************************************************************/
#include "stdafx.h"

CModifiedEditBox::CModifiedEditBox(bool bString /* = true */, HWND hWnd /* = NULL */) :
	CEdit(hWnd),
	m_Changed(false),
	m_Reset(false),
	m_BoldFont(NULL),
	m_OriginalFont(NULL),
	m_TextField(NULL),
	m_bString(bString)
{ 		
}

CModifiedEditBox::~CModifiedEditBox()
{
	if (m_BoldFont)
	{
		DeleteObject(m_BoldFont);
	}
}

void CModifiedEditBox::SetReset ( bool Reset )
{
	m_Reset = Reset;
	if (m_Reset)
	{
		SetChanged(false);
	}
}

void CModifiedEditBox::SetChanged (bool Changed)
{
	m_Changed = Changed;
	if (m_Changed)
	{
		SetReset(false);
		if (m_BoldFont == NULL)
		{
			m_OriginalFont = (HFONT)SendMessage(WM_GETFONT); 

			LOGFONT lfSystemVariableFont;
			GetObject ( m_OriginalFont, sizeof(LOGFONT), &lfSystemVariableFont );
			lfSystemVariableFont.lfWeight = FW_BOLD;

			m_BoldFont = CreateFontIndirect ( &lfSystemVariableFont );
		}
		SendMessage(WM_SETFONT,(WPARAM)m_BoldFont);
		InvalidateRect(NULL);
		if (m_TextField)
		{
			::SendMessage(m_TextField,WM_SETFONT,(WPARAM)m_BoldFont,0);
			::InvalidateRect(m_TextField, NULL, true);
				
		}
	} else {
		if (m_OriginalFont)
		{
			SendMessage(WM_SETFONT,(WPARAM)m_OriginalFont);
			InvalidateRect(NULL);
			if (m_TextField)
			{
				::SendMessage(m_TextField,WM_SETFONT,(WPARAM)m_OriginalFont,0);
				::InvalidateRect(m_TextField, NULL, true);
			}
		}
	}
}

stdstr CModifiedEditBox::GetWindowText( void )
{
	stdstr Result;
	ATLASSERT(::IsWindow(m_hWnd));

	int nLen = ::GetWindowTextLength(m_hWnd);
	if(nLen == 0)
	{
		return Result;
	}
	Result.resize(nLen+1);
	::GetWindowText(m_hWnd,(char *)Result.c_str(),nLen+1);
	return Result;
}

void CModifiedEditBox::SetTextField (HWND hWnd)
{
	if (m_TextField && m_OriginalFont)
	{
		::SendMessage(m_TextField,WM_SETFONT,(WPARAM)m_OriginalFont,0);
	}
	m_TextField = hWnd;
	if (m_Changed && m_BoldFont)
	{
		::SendMessage(m_TextField,WM_SETFONT,(WPARAM)m_BoldFont,0);
	}
}
