/************************************************************************
*
* Resource ID Organiser Core Library
*
* (c) Copyright 2000-2003 by Anna-Jayne Metcalfe (resorg@annasplace.me.uk)
* All rights reserved.
*
************************************************************************
*
* Filename : ResourceSymbolFileNextValuesPage.cpp
*
* Description : CResourceSymbolFileNextValuesPage - "Next Values" page
* for resource symbol file properties
*
* Compiler : Microsoft Visual C++ 6.0, Service Pack 3 or later
* Microsoft Visual C++ .NET 2002
*
* Target
* Environment : Windows 98/NT/2000/XP
*
* NOTE:
*
* This software is provided "as is" free for personal use. All
* title and copyrights in and to the software, including but not
* limited to any images, text, etc. incorporated into it, are
* owned by Anna-Jayne Metcalfe, except where acknowledged otherwise.
*
* Your may freely to use this code in your own products, PROVIDED
* this notice is not removed or modified.
*
*
* Visit http://www.annasplace.me.uk/resorg for latest updates
*
************************************************************************
*
* MODIFICATION HISTORY:
*
* This is a controlled document. See project configuration
* control tool for latest version and full version history.
*
* $Archive: /Projects/AddIns/ResOrg/ResOrgCore/ResourceSymbolFileNextValuesPage.cpp $
* $Revision: 10 $
* $Date: 1/07/03 21:02 $
* $Author: Anna $
*
* $History: ResourceSymbolFileNextValuesPage.cpp $
*
* ***************** Version 10 *****************
* User: Anna Date: 1/07/03 Time: 21:02
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* Fixed selection bugs with multi-file symbols displays
*
* ***************** Version 9 *****************
* User: Anna Date: 26/06/03 Time: 20:20
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* 1. Added resizing support
* 2. Added an Invalidate() call to
* CResourceSymbolFileNextValuesPage::CheckIfValuesAreInUse() to force the
* warning control to repaint correctly
*
* ***************** Version 8 *****************
* User: Anna Date: 19/01/03 Time: 17:22
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* Modifications for compatibility with multi-file symbol editing
*
* ***************** Version 7 *****************
* User: Anna Date: 3/12/02 Time: 20:16
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* Replaced the rich edit control with an HTML static control
*
* ***************** Version 6 *****************
* User: Anna Date: 25/11/02 Time: 15:20
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* Changed website address in banner
*
* ***************** Version 5 *****************
* User: Anna Date: 22/10/02 Time: 13:24
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* Changed name/mail address (at last!)
*
* ***************** Version 4 *****************
* User: Andy Date: 7/06/02 Time: 17:04
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* Renamed the ResOrgUtils module to ResOrgCore. Updated file banners
* accordingly
*
* ***************** Version 3 *****************
* User: Andy Date: 27/05/02 Time: 14:03
* Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
* Knock on changes from CResourceSymbolBuffer (now
* CResourceSymbolManager)
*
* ***************** Version 2 *****************
* User: Andy Date: 10/03/01 Time: 12:49p
* Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
* 1. Added a rich edit control to display a warning message if needed
* 2. Use colour coding for control values
*
* ***************** Version 1 *****************
* User: Andy Date: 15/08/01 Time: 9:45
* Created in $/Projects/AddIns/ResOrg/ResOrgUtils
*
*
* $Nokeywords: $
*
************************************************************************/
#include "StdAfx.h"
#include "ResOrgCore_Priv.h"
#include "ResourceSymbolManager.h"
#include "ResourceSymbolFileNextValuesPage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CResourceSymbolFileNextValuesPage dialog
IMPLEMENT_DYNAMIC(CResourceSymbolFileNextValuesPage, CResourceSymbolFileNextValuesPage_BASE)
CResourceSymbolFileNextValuesPage::CResourceSymbolFileNextValuesPage(void)
: CResourceSymbolFileNextValuesPage_BASE(CResourceSymbolFileNextValuesPage::IDD)
{
//{{AFX_DATA_INIT(CResourceSymbolFileNextValuesPage)
m_uNextCommandValue = 0;
m_uNextControlValue = 0;
m_uNextResourceValue = 0;
m_uNextSymedValue = 0;
//}}AFX_DATA_INIT
m_sWarningText.LoadString(IDS_SYM_NEXT_VALUE_WARNING);
}
void CResourceSymbolFileNextValuesPage::DoDataExchange(CDataExchange* pDX)
{
CResourceSymbolFileNextValuesPage_BASE::DoDataExchange(pDX);
if (NULL != m_pSymbols)
{
DDX_Text(pDX, IDC_SYM_NEXT_COMMAND, m_uNextCommandValue);
DDV_MinMaxUInt(pDX, m_uNextCommandValue, 1, 65534);
DDX_Text(pDX, IDC_SYM_NEXT_CONTROL, m_uNextControlValue);
DDV_MinMaxUInt(pDX, m_uNextControlValue, 1, 65534);
DDX_Text(pDX, IDC_SYM_NEXT_RESOURCE, m_uNextResourceValue);
DDV_MinMaxUInt(pDX, m_uNextResourceValue, 1, 65534);
DDX_Text(pDX, IDC_SYM_NEXT_SYMED, m_uNextSymedValue);
DDV_MinMaxUInt(pDX, m_uNextSymedValue, 1, 65534);
}
DDX_Control(pDX, IDC_SYM_WARNING, m_ctrlWarning);
DDX_Control(pDX, IDC_SYM_WARNING_ICON, m_ctrlWarningIcon);
DDX_Text(pDX, IDC_SYM_WARNING, m_sWarningText);
}
BEGIN_MESSAGE_MAP(CResourceSymbolFileNextValuesPage, CResourceSymbolFileNextValuesPage_BASE)
//{{AFX_MSG_MAP(CResourceSymbolFileNextValuesPage)
ON_WM_CTLCOLOR()
ON_COMMAND( IDC_SYM_NEXT_COMMAND, OnCmdNextCommandValue)
ON_BN_CLICKED( IDC_SYM_FIX_NEXT_COMMAND, OnClickedFixNextCommandValue)
ON_COMMAND( IDC_SYM_NEXT_CONTROL, OnCmdNextControlValue)
ON_BN_CLICKED( IDC_SYM_FIX_NEXT_CONTROL, OnClickedFixNextControlValue)
ON_COMMAND( IDC_SYM_NEXT_RESOURCE, OnCmdNextResourceValue)
ON_BN_CLICKED( IDC_SYM_FIX_NEXT_RESOURCE, OnClickedFixNextResourceValue)
ON_COMMAND( IDC_SYM_NEXT_SYMED, OnCmdNextSymedValue)
ON_BN_CLICKED( IDC_SYM_FIX_NEXT_SYMED, OnClickedFixNextSymedValue)
ON_BN_CLICKED( IDC_SYM_CALC_NEXT_VALUES, OnClickedRecalculateAllValues)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CResourceSymbolFileNextValuesPage::OnInitDialog(void)
{
BOOL bResult = CResourceSymbolFileNextValuesPage_BASE::OnInitDialog();
m_Resizer.Add(IDC_SYM_NEXT_VALUES_GROUP, 0, 0, 100, 100);
m_Resizer.Add(IDC_SYM_NEXT_RESOURCE_CAPTION, 15, 15, 0, 0);
m_Resizer.Add(IDC_SYM_NEXT_RESOURCE, 30, 15, 0, 0);
m_Resizer.Add(IDC_SYM_FIX_NEXT_RESOURCE, 30, 15, 0, 0);
m_Resizer.Add(IDC_SYM_NEXT_COMMAND_CAPTION, 15, 30, 0, 0);
m_Resizer.Add(IDC_SYM_NEXT_COMMAND, 30, 30, 0, 0);
m_Resizer.Add(IDC_SYM_FIX_NEXT_COMMAND, 30, 30, 0, 0);
m_Resizer.Add(IDC_SYM_NEXT_CONTROL_CAPTION, 15, 45, 0, 0);
m_Resizer.Add(IDC_SYM_NEXT_CONTROL, 30, 45, 0, 0);
m_Resizer.Add(IDC_SYM_FIX_NEXT_CONTROL, 30, 45, 0, 0);
m_Resizer.Add(IDC_SYM_NEXT_SYMED_CAPTION, 15, 60, 0, 0);
m_Resizer.Add(IDC_SYM_NEXT_SYMED, 30, 60, 0, 0);
m_Resizer.Add(IDC_SYM_FIX_NEXT_SYMED, 30, 60, 0, 0);
m_Resizer.Add(IDC_SYM_CALC_NEXT_VALUES, 30, 75, 0, 0);
m_Resizer.Add(IDC_SYM_WARNING_ICON, 0, 90, 0, 0);
m_Resizer.Add(IDC_SYM_WARNING, 0, 90, 100, 0);
m_ctrlWarningIcon.SetIcon(AfxGetApp()->LoadStandardIcon(IDI_EXCLAMATION));
CheckIfValuesAreInUse();
return bResult;
}
BOOL CResourceSymbolFileNextValuesPage::OnSetActive(void)
{
SetAvailableControls();
return CResourceSymbolFileNextValuesPage_BASE::OnSetActive();
}
void CResourceSymbolFileNextValuesPage::OnOK(void)
{
if (NULL != m_pSymbols)
{
m_pSymbols->SetNextResourceValue(m_uNextResourceValue);
m_pSymbols->SetNextControlValue(m_uNextControlValue);
m_pSymbols->SetNextCommandValue(m_uNextCommandValue);
m_pSymbols->SetNextSymedValue(m_uNextSymedValue);
}
}
/////////////////////////////////////////////////////////////////////////////
// CResourceSymbolFileNextValuesPage operations
bool CResourceSymbolFileNextValuesPage::SetSymbolManager(CResourceSymbolManager* pSymbols)
{
bool bResult = CResourceSymbolFileNextValuesPage_BASE::SetSymbolManager(pSymbols);
if (NULL != m_pSymbols)
{
m_uNextResourceValue = m_pSymbols->GetNextResourceValue();
m_uNextControlValue = m_pSymbols->GetNextControlValue();
m_uNextCommandValue = m_pSymbols->GetNextCommandValue();
m_uNextSymedValue = m_pSymbols->GetNextSymedValue();
}
else
{
m_uNextResourceValue = 0;
m_uNextControlValue = 0;
m_uNextCommandValue = 0;
m_uNextSymedValue = 0;
}
if (::IsWindow(GetSafeHwnd() ) )
{
UpdateData(FALSE);
CheckIfValuesAreInUse();
}
return bResult;
}
/////////////////////////////////////////////////////////////////////////////
// CResourceSymbolFileNextValuesPage implementation
void CResourceSymbolFileNextValuesPage::SetAvailableControls(void)
{
BOOL bAvail = (NULL != m_pSymbols);
ShowDlgControl(IDC_SYM_NEXT_RESOURCE_CAPTION, bAvail);
ShowDlgControl(IDC_SYM_NEXT_RESOURCE, bAvail);
ShowDlgControl(IDC_SYM_FIX_NEXT_RESOURCE, bAvail);
ShowDlgControl(IDC_SYM_NEXT_COMMAND_CAPTION, bAvail);
ShowDlgControl(IDC_SYM_NEXT_COMMAND, bAvail);
ShowDlgControl(IDC_SYM_FIX_NEXT_COMMAND, bAvail);
ShowDlgControl(IDC_SYM_NEXT_CONTROL_CAPTION, bAvail);
ShowDlgControl(IDC_SYM_NEXT_CONTROL, bAvail);
ShowDlgControl(IDC_SYM_FIX_NEXT_CONTROL, bAvail);
ShowDlgControl(IDC_SYM_NEXT_SYMED_CAPTION, bAvail);
ShowDlgControl(IDC_SYM_NEXT_SYMED, bAvail);
ShowDlgControl(IDC_SYM_FIX_NEXT_SYMED, bAvail);
ShowDlgControl(IDC_SYM_CALC_NEXT_VALUES, bAvail);
ShowDlgControl(IDC_SYM_WARNING_ICON, bAvail);
ShowDlgControl(IDC_SYM_WARNING, bAvail);
CheckIfValuesAreInUse();
}
BOOL CResourceSymbolFileNextValuesPage::CheckIfValuesAreInUse(void)
{
BOOL bResult = FALSE;
if (NULL != m_pSymbols)
{
BOOL bNextResourceIDUsed = m_pSymbols->IsInUse(m_uNextResourceValue);
BOOL bNextControlIDUsed = m_pSymbols->IsInUse(m_uNextControlValue);
BOOL bNextCommandIDUsed = m_pSymbols->IsInUse(m_uNextCommandValue);
BOOL bNextSymedIDUsed = m_pSymbols->IsInUse(m_uNextSymedValue);
ShowDlgControl(IDC_SYM_FIX_NEXT_RESOURCE, bNextResourceIDUsed);
ShowDlgControl(IDC_SYM_FIX_NEXT_CONTROL, bNextControlIDUsed);
ShowDlgControl(IDC_SYM_FIX_NEXT_COMMAND, bNextCommandIDUsed);
ShowDlgControl(IDC_SYM_FIX_NEXT_SYMED, bNextSymedIDUsed);
bResult = bNextResourceIDUsed ||
bNextControlIDUsed ||
bNextCommandIDUsed ||
bNextSymedIDUsed;
ShowDlgControl(IDC_SYM_WARNING_ICON, bResult);
ShowDlgControl(IDC_SYM_WARNING, bResult);
Invalidate();
}
return bResult;
}
/////////////////////////////////////////////////////////////////////////////
// CResourceSymbolFileNextValuesPage message handlers
HBRUSH CResourceSymbolFileNextValuesPage::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CResourceSymbolFileNextValuesPage_BASE::OnCtlColor(pDC, pWnd, nCtlColor);
if (NULL != m_pSymbols)
{
switch (pWnd->GetDlgCtrlID() )
{
case IDC_SYM_NEXT_COMMAND:
if (m_pSymbols->IsInUse(m_uNextCommandValue) )
{
pDC->SetTextColor( RGB(255, 0, 0) );
}
else if (m_uNextCommandValue != m_pSymbols->GetNextCommandValue() )
{
pDC->SetTextColor( RGB(0, 0, 255) );
}
break;
case IDC_SYM_NEXT_CONTROL:
if (m_pSymbols->IsInUse(m_uNextControlValue) )
{
pDC->SetTextColor( RGB(255, 0, 0) );
}
else if (m_uNextControlValue != m_pSymbols->GetNextControlValue() )
{
pDC->SetTextColor( RGB(0, 0, 255) );
}
break;
case IDC_SYM_NEXT_RESOURCE:
if (m_pSymbols->IsInUse(m_uNextResourceValue) )
{
pDC->SetTextColor( RGB(255, 0, 0) );
}
else if (m_uNextResourceValue != m_pSymbols->GetNextResourceValue() )
{
pDC->SetTextColor( RGB(0, 0, 255) );
}
break;
case IDC_SYM_NEXT_SYMED:
if (m_pSymbols->IsInUse(m_uNextSymedValue) )
{
pDC->SetTextColor( RGB(255, 0, 0) );
}
else if (m_uNextSymedValue != m_pSymbols->GetNextSymedValue() )
{
pDC->SetTextColor( RGB(0, 0, 255) );
}
break;
default:
break;
}
}
return hbr;
}
void CResourceSymbolFileNextValuesPage::OnCmdNextResourceValue(void)
{
CheckIfValuesAreInUse();
}
void CResourceSymbolFileNextValuesPage::OnCmdNextCommandValue(void)
{
CheckIfValuesAreInUse();
}
void CResourceSymbolFileNextValuesPage::OnCmdNextControlValue(void)
{
CheckIfValuesAreInUse();
}
void CResourceSymbolFileNextValuesPage::OnCmdNextSymedValue(void)
{
CheckIfValuesAreInUse();
}
void CResourceSymbolFileNextValuesPage::OnClickedFixNextResourceValue(void)
{
UINT uNextCommandValue = 0;
UINT uNextControlValue = 0;
UINT uNextSymedValue = 0;
m_pSymbols->CalculateNextSymbolValues( m_uNextResourceValue,
uNextControlValue,
uNextCommandValue,
uNextSymedValue);
UpdateData(FALSE);
CheckIfValuesAreInUse();
}
void CResourceSymbolFileNextValuesPage::OnClickedFixNextCommandValue(void)
{
UINT uNextResourceValue = 0;
UINT uNextControlValue = 0;
UINT uNextSymedValue = 0;
m_pSymbols->CalculateNextSymbolValues( uNextResourceValue,
uNextControlValue,
m_uNextCommandValue,
uNextSymedValue);
UpdateData(FALSE);
CheckIfValuesAreInUse();
}
void CResourceSymbolFileNextValuesPage::OnClickedFixNextControlValue(void)
{
UINT uNextResourceValue = 0;
UINT uNextCommandValue = 0;
UINT uNextSymedValue = 0;
m_pSymbols->CalculateNextSymbolValues( uNextResourceValue,
m_uNextControlValue,
uNextCommandValue,
uNextSymedValue);
UpdateData(FALSE);
CheckIfValuesAreInUse();
}
void CResourceSymbolFileNextValuesPage::OnClickedFixNextSymedValue(void)
{
UINT uNextResourceValue = 0;
UINT uNextCommandValue = 0;
UINT uNextControlValue = 0;
m_pSymbols->CalculateNextSymbolValues( uNextResourceValue,
uNextControlValue,
uNextCommandValue,
m_uNextSymedValue);
UpdateData(FALSE);
CheckIfValuesAreInUse();
}
void CResourceSymbolFileNextValuesPage::OnClickedRecalculateAllValues(void)
{
m_pSymbols->CalculateNextSymbolValues( m_uNextResourceValue,
m_uNextControlValue,
m_uNextCommandValue,
m_uNextSymedValue);
UpdateData(FALSE);
CheckIfValuesAreInUse();
}