/************************************************************************
*
* Resource ID Organiser Core Library
*
* (c) Copyright 2000-2005 by Riverblade Limited (UK). All rights reserved.
*
************************************************************************
*
* Description : CRenumWizOptionsPage - Symbol Renumbering Wizard
* "Options" page class
*
* Compiler : Microsoft Visual C++ 6.0, Service Pack 3 or later
* Microsoft Visual C++ .NET 2003
*
* Target
* Environment : Windows 98/NT/2000/XP
*
* NOTE:
*
* This software is provided "as is". All title and copyrights in and
* to the software, including but not limited to any images, text etc.
* etc. incorporated into it, are the property of Anna-Jayne Metcalfe
* and Riverblade Limited, except where acknowledged otherwise.
*
* Your may freely use this code in your own products, PROVIDED
* this notice is not removed or modified.
*
* Please visit http://www.riverblade.co.uk/products/resorg
* or email support@riverblade.co.uk for latest updates and product support
*
************************************************************************
*
* MODIFICATION HISTORY:
*
* This is a controlled document. See project configuration
* control tool for latest version and full version history.
*
* $Archive: /Projects/AddIns/ResOrg/ResOrgCore/RenumWizOptionsPage.cpp $
* $Revision: 13 $
* $Date: 28/12/04 9:38 $
* $Author: Anna $
*
* $History: RenumWizOptionsPage.cpp $
*
* ***************** Version 13 *****************
* User: Anna Date: 28/12/04 Time: 9:38
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* 1. Corrected a bug in the enabling/disabling of the "Next" button
* 2. Updated banner
*
* ***************** Version 12 *****************
* User: Anna Date: 24/08/04 Time: 0:15
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* Fixed a typo
*
* ***************** Version 11 *****************
* User: Anna Date: 23/08/04 Time: 21:53
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* Fixed a typo
*
* ***************** Version 10 *****************
* User: Anna Date: 23/08/04 Time: 21:43
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* Added support for out of range symbols
*
* ***************** Version 9 *****************
* User: Anna Date: 11/05/04 Time: 0:22
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* By popular request...added support for "Fixed" symbols
*
* ***************** Version 8 *****************
* User: Anna Date: 15/04/03 Time: 20:38
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* 1. Removed unnecessary file guards (#pragma once works well enough)
* 2. Updated file banners
*
* ***************** Version 7 *****************
* User: Anna Date: 25/11/02 Time: 15:10
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* Changed website address in banner
*
* ***************** Version 6 *****************
* User: Anna Date: 22/10/02 Time: 13:24
* Updated in $/Projects/AddIns/ResOrg/ResOrgCore
* Changed name/mail address (at last!)
*
* ***************** Version 5 *****************
* 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 4 *****************
* User: Andy Date: 27/05/02 Time: 16:42
* Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
* Knock on changes from CResourceSymbolBuffer (now
* CResourceSymbolManager)
*
* ***************** Version 3 *****************
* User: Andy Date: 23/05/01 Time: 16:34
* Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
* Better handling of Symbol Selection options
*
* ***************** Version 2 *****************
* User: Andy Date: 4/05/01 Time: 22:37
* Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
* Implemented resizing
*
* ***************** Version 1 *****************
* User: Andy Date: 21/04/01 Time: 7:13
* Created in $/Projects/AddIns/ResOrg/ResOrgUtils
*
* $Nokeywords: $
*
************************************************************************/
#include "StdAfx.h"
#include "ResOrgCore_Priv.h"
#include "RenumWizOptionsPage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRenumWizOptionsPage property page
IMPLEMENT_DYNCREATE(CRenumWizOptionsPage, CRenumWizOptionsPage_BASE)
CRenumWizOptionsPage::CRenumWizOptionsPage(void)
: CRenumWizOptionsPage_BASE( CRenumWizOptionsPage::IDD,
IDS_RENUMWIZ,
IDS_RENUMWIZ_OPTIONS_PAGE_TITLE,
IDS_RENUMWIZ_OPTIONS_PAGE_SUBTITLE)
{
m_eSymbolSelection = -1;
m_bSelectConflictingSymbols = true;
m_bSelectOutOfRangeSymbols = false;
m_eSymbolOrder = -1;
m_bIgnoreFixedStatus = false;
}
CRenumWizOptionsPage::~CRenumWizOptionsPage(void)
{
}
void CRenumWizOptionsPage::DoDataExchange(CDataExchange* pDX)
{
CRenumWizOptionsPage_BASE::DoDataExchange(pDX);
DDX_Radio(pDX, IDC_RENUMWIZ_SELECT, m_eSymbolSelection);
DDX_Check(pDX, IDC_RENUMWIZ_SELECT_CONFLICTING_SYMBOLS, m_bSelectConflictingSymbols);
DDX_Check(pDX, IDC_RENUMWIZ_SELECT_OUT_OF_RANGE_SYMBOLS, m_bSelectOutOfRangeSymbols);
DDX_Radio(pDX, IDC_RENUMWIZ_SORT, m_eSymbolOrder);
DDX_Check(pDX, IDC_RENUMWIZ_IGNORE_FIXED_STATUS, m_bIgnoreFixedStatus);
}
BEGIN_MESSAGE_MAP(CRenumWizOptionsPage, CRenumWizOptionsPage_BASE)
ON_COMMAND( IDC_RENUMWIZ_SELECT, OnCmdSymbolSelection)
ON_COMMAND( IDC_RENUMWIZ_SELECT_CONFLICTING_SYMBOLS, OnCmdSymbolSelection)
ON_COMMAND( IDC_RENUMWIZ_SELECT_OUT_OF_RANGE_SYMBOLS, OnCmdSymbolSelection)
END_MESSAGE_MAP()
BOOL CRenumWizOptionsPage::OnInitDialog(void)
{
CRenumWizOptionsPage_BASE::OnInitDialog();
if (IsResizeable())
{
m_Resizer.Add( IDC_RENUMWIZ_SELECT_CAPTION, 50, 0, 0, 0);
m_Resizer.Add( IDC_RENUMWIZ_SELECT, 50, 10, 0, 0);
m_Resizer.Add( IDC_RENUMWIZ_SELECT_MANUAL, 50, 20, 0, 0);
m_Resizer.Add( IDC_RENUMWIZ_SELECT_PROBLEM_SYMBOLS, 50, 30, 0, 0);
m_Resizer.Add( IDC_RENUMWIZ_SELECT_CONFLICTING_SYMBOLS, 50, 40, 0, 0);
m_Resizer.Add( IDC_RENUMWIZ_SELECT_OUT_OF_RANGE_SYMBOLS, 50, 50, 0, 0);
m_Resizer.Add( IDC_RENUMWIZ_SEPARATOR, 0, 60, 100, 0);
m_Resizer.Add( IDC_RENUMWIZ_SORT_CAPTION, 50, 70, 0, 0);
m_Resizer.Add( IDC_RENUMWIZ_SORT, 50, 80, 0, 0);
m_Resizer.Add( IDC_RENUMWIZ_SORT_CAUTIOUS, 50, 90, 0, 0);
m_Resizer.Add( IDC_RENUMWIZ_IGNORE_FIXED_STATUS, 50, 100, 0, 0);
}
return true;
}
BOOL CRenumWizOptionsPage::OnSetActive(void)
{
if (!IsInitialising())
{
if ( (NULL != m_pEngine) && (NULL != m_pEngine->m_pSymbolManager) )
{
m_eSymbolSelection = m_pEngine->m_eSymbolSelection;
m_bSelectConflictingSymbols = m_pEngine->m_bSelectConflictingSymbols;
m_bSelectOutOfRangeSymbols = m_pEngine->m_bSelectOutOfRangeSymbols;
m_eSymbolOrder = m_pEngine->m_eSymbolOrder;
m_bIgnoreFixedStatus = m_pEngine->m_bIgnoreFixedStatus;
int nConflictingSymbols = m_pEngine->m_pSymbolManager->GetConflictCount();
int nOutOfRangeSymbols = m_pEngine->m_pSymbolManager->GetOutOfRangeSymbolCount();
if (RENUMWIZ_PROBLEM_SYMBOLS == m_eSymbolSelection)
{
// Conflicting symbols
if (m_bSelectConflictingSymbols && (0 == nConflictingSymbols) )
{
m_bSelectConflictingSymbols = false;
}
// Conflicting symbols
if (m_bSelectOutOfRangeSymbols && (0 == nOutOfRangeSymbols) )
{
m_bSelectOutOfRangeSymbols = false;
}
if (!m_bSelectConflictingSymbols && !m_bSelectOutOfRangeSymbols)
{
m_eSymbolSelection = RENUMWIZ_SELECTED_SYMBOLS;
}
}
SetAvailableControls();
UpdateData(false);
}
}
return true;
}
BOOL CRenumWizOptionsPage::OnKillActive(void)
{
if (!IsInitialising())
{
if ( (NULL != m_pEngine) && (NULL != m_pEngine->m_pSymbolManager) )
{
// Update the renumbering engine with our settings
m_pEngine->m_eSymbolSelection = m_eSymbolSelection;
m_pEngine->m_bSelectConflictingSymbols = m_bSelectConflictingSymbols;
m_pEngine->m_bSelectOutOfRangeSymbols = m_bSelectOutOfRangeSymbols;
m_pEngine->m_eSymbolOrder = m_eSymbolOrder;
m_pEngine->m_bIgnoreFixedStatus = m_bIgnoreFixedStatus;
switch (m_eSymbolSelection)
{
case RENUMWIZ_PROBLEM_SYMBOLS: // Problem symbols
// TO DO: Move this to a wrapper method (SetSymbolSelection?) in the engine
m_pEngine->m_listSelectedSymbols.RemoveAll();
if (m_bSelectConflictingSymbols)
{
CResourceSymbolList listConflictingSymbols;
m_pEngine->m_pSymbolManager->GetConflicts(listConflictingSymbols);
m_pEngine->m_listSelectedSymbols.AddTail(&listConflictingSymbols);
}
if (m_bSelectOutOfRangeSymbols)
{
CResourceSymbolList listOutOfRangeSymbols;
m_pEngine->m_pSymbolManager->GetOutOfRangeSymbols(listOutOfRangeSymbols);
m_pEngine->m_listSelectedSymbols.AddTail(&listOutOfRangeSymbols);
}
break;
default:
break;
}
}
}
return true;
}
LRESULT CRenumWizOptionsPage::OnWizardBack(void)
{
return IDD_RENUMWIZ_WAFFLE_PAGE;
}
LRESULT CRenumWizOptionsPage::OnWizardNext(void)
{
LRESULT lPageID = -1;
switch (m_eSymbolSelection)
{
case RENUMWIZ_ALL_SYMBOLS: // All symbols
case RENUMWIZ_PROBLEM_SYMBOLS: // Problem symbols
lPageID = IDD_RENUMWIZ_BASE_VALUES_PAGE;
break;
case RENUMWIZ_SELECTED_SYMBOLS: // Selected symbols
lPageID = IDD_RENUMWIZ_SELECT_SYMBOLS_PAGE;
break;
default:
ASSERT(false);
break;
}
return lPageID;
}
/////////////////////////////////////////////////////////////////////////////
// CRenumWizOptionsPage implementation
void CRenumWizOptionsPage::SetAvailableControls(void)
{
if ( (NULL == m_pEngine) || (NULL == m_pEngine->m_pSymbolManager) )
{
ASSERT(false);
return;
}
int nConflictingSymbols = m_pEngine->m_pSymbolManager->GetConflictCount();
int nOutOfRangeSymbols = m_pEngine->m_pSymbolManager->GetOutOfRangeSymbolCount();
EnableDlgControl(IDC_RENUMWIZ_SELECT_PROBLEM_SYMBOLS, (nConflictingSymbols + nOutOfRangeSymbols) > 0);
if (RENUMWIZ_PROBLEM_SYMBOLS == m_eSymbolSelection)
{
EnableDlgControl(IDC_RENUMWIZ_SELECT_CONFLICTING_SYMBOLS, nConflictingSymbols > 0);
EnableDlgControl(IDC_RENUMWIZ_SELECT_OUT_OF_RANGE_SYMBOLS, nOutOfRangeSymbols > 0);
EnableWizardButtons(PSWIZB_NEXT, m_bSelectConflictingSymbols || m_bSelectOutOfRangeSymbols);
}
else
{
EnableDlgControl(IDC_RENUMWIZ_SELECT_OUT_OF_RANGE_SYMBOLS, false);
EnableDlgControl(IDC_RENUMWIZ_SELECT_CONFLICTING_SYMBOLS, false);
EnableWizardButtons(PSWIZB_NEXT, true);
}
}
/////////////////////////////////////////////////////////////////////////////
// CRenumWizOptionsPage message handlers
void CRenumWizOptionsPage::OnCmdSymbolSelection(void)
{
SetAvailableControls();
}