⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 renumwiznewsymbolvaluespage.cpp

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 CPP
字号:
/************************************************************************
 *
 *                 Resource ID Organiser Core Library
 *
 * (c) Copyright 2000-2003 by Anna-Jayne Metcalfe (resorg@annasplace.me.uk)
 *                         All rights reserved.
 *
 ************************************************************************
 *                                                                       
 *  Filename    : RenumWizNewSymbolValuesPage.cpp
 *
 *  Description : RenumWizNewSymbolValuesPage - Symbol Renumbering Wizard
 *                "New Symbol Values" page class
 *
 *  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/RenumWizNewSymbolValuesPage.cpp $
 *   $Revision: 10 $
 *       $Date: 11/07/04 16:20 $
 *     $Author: Anna $
 *
 *    $History: RenumWizNewSymbolValuesPage.cpp $
 * 
 * *****************  Version 10  *****************
 * User: Anna         Date: 11/07/04   Time: 16:20
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Knock-on changes from CSymbolPropertiesGeneralPage
 * 
 * *****************  Version 9  *****************
 * 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 8  *****************
 * User: Anna         Date: 15/02/03   Time: 20:43
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Changed big BOOLs into little bools
 * 
 * *****************  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:43
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * Knock on changes from CResourceSymbolBuffer (now
 * CResourceSymbolManager)
 * 
 * *****************  Version 3  *****************
 * User: Andy         Date: 12/28/01   Time: 4:33p
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * Added an option to hide unmodified symbols
 * 
 * *****************  Version 2  *****************
 * User: Andy         Date: 12/28/01   Time: 1:12p
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * Added a context menu
 * 
 * *****************  Version 1  *****************
 * User: Andy         Date: 12/28/01   Time: 1:13a
 * Created in $/Projects/AddIns/ResOrg/ResOrgUtils
 * 
 * *****************  Version 3  *****************
 * User: Andy         Date: 4/05/01    Time: 22:37
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * Implemented resizing
 * 
 * *****************  Version 2  *****************
 * User: Andy         Date: 23/04/01   Time: 21:18
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * Implemented the "Auto" symbol selection options
 * 
 * *****************  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 "SymbolPropertySheet.h"

#include "RenumWizNewSymbolValuesPage.h"



#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/////////////////////////////////////////////////////////////////////////////
// CRenumWizNewSymbolValuesPage wizard page

IMPLEMENT_DYNCREATE(CRenumWizNewSymbolValuesPage, CRenumWizNewSymbolValuesPage_BASE)

CRenumWizNewSymbolValuesPage::CRenumWizNewSymbolValuesPage(void)
 : CRenumWizNewSymbolValuesPage_BASE(	CRenumWizNewSymbolValuesPage::IDD,
										IDS_RENUMWIZ,
										IDS_RENUMWIZ_NEW_VALUES_PAGE_TITLE,
										IDS_RENUMWIZ_NEW_VALUES_PAGE_SUBTITLE)
{
	//{{AFX_DATA_INIT(CRenumWizNewSymbolValuesPage)
	m_bHideUnmodifiedSymbols	= TRUE;
	//}}AFX_DATA_INIT
}


CRenumWizNewSymbolValuesPage::~CRenumWizNewSymbolValuesPage(void)
{
}


void CRenumWizNewSymbolValuesPage::DoDataExchange(CDataExchange* pDX)
{
	CRenumWizNewSymbolValuesPage_BASE::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRenumWizNewSymbolValuesPage)
	DDX_Control(pDX,				IDC_RENUMWIZ_SYMBOLS,			m_ctrlSymbols);
	DDX_Check(pDX,					IDC_RENUMWIZ_HIDE_UNMODIFIED,	m_bHideUnmodifiedSymbols);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRenumWizNewSymbolValuesPage, CRenumWizNewSymbolValuesPage_BASE)
	//{{AFX_MSG_MAP(CRenumWizNewSymbolValuesPage)
	ON_WM_CONTEXTMENU()
	ON_COMMAND(						ID_SYM_AUTOSIZE_COLS,			OnCmdAutosizeColumns)
	ON_BN_CLICKED(					IDC_RENUMWIZ_HIDE_UNMODIFIED,	OnClickedHideUnmodifiedSymbols)
	ON_BN_CLICKED(					IDC_RENUMWIZ_EDIT_VALUE,		OnClickedEditValue)
	ON_BN_CLICKED(					IDC_RENUMWIZ_RESTORE_VALUE,		OnClickedRestoreOriginalValue)
	ON_BN_CLICKED(					IDC_RENUMWIZ_RENUMBER,			OnClickedRenumber)
	ON_NOTIFY(	LVN_ITEMCHANGED,	IDC_RENUMWIZ_SYMBOLS,			OnItemchangedSymbols)
	ON_NOTIFY(	NM_DBLCLK,			IDC_RENUMWIZ_SYMBOLS,			OnDblClickSymbols)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CRenumWizNewSymbolValuesPage overrides

BOOL CRenumWizNewSymbolValuesPage::OnInitDialog(void) 
{
	CRenumWizNewSymbolValuesPage_BASE::OnInitDialog();
	
	if (IsResizeable())
	{
		m_Resizer.Add( IDC_RENUMWIZ_SYMBOLS,					0, 0, 100, 100);
		m_Resizer.Add( IDC_RENUMWIZ_HIDE_UNMODIFIED,			0, 100, 0, 0);
		m_Resizer.Add( IDC_RENUMWIZ_EDIT_VALUE,					50, 100, 0, 0);
		m_Resizer.Add( IDC_RENUMWIZ_RESTORE_VALUE,				50, 100, 0, 0);
		m_Resizer.Add( IDC_RENUMWIZ_RENUMBER,					50, 100, 0, 0);
	}
	CWaitCursor wait;

	m_ctrlSymbols.Initialise();

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


BOOL CRenumWizNewSymbolValuesPage::OnSetActive(void)
{
	BOOL bResult = CRenumWizNewSymbolValuesPage_BASE::OnSetActive();

	if (!IsInitialising())
	{
		if (bResult)
		{
			CWaitCursor wait;

			FillListCtrl();

			SetAvailableControls();
		}
	}
	m_ctrlSymbols.AutoSizeColumn();

	return bResult;
}


LRESULT CRenumWizNewSymbolValuesPage::OnWizardBack(void) 
{
	return IDD_RENUMWIZ_BASE_VALUES_PAGE;
}


LRESULT CRenumWizNewSymbolValuesPage::OnWizardNext(void) 
{
	return IDD_RENUMWIZ_COMPLETION_PAGE;
}


/////////////////////////////////////////////////////////////////////////////
// CRenumWizNewSymbolValuesPage implementation

/******************************************************************************
 *	Fill the list controls
 *
 ******************************************************************************/

void CRenumWizNewSymbolValuesPage::FillListCtrl(void)
{
	if (!m_bHideUnmodifiedSymbols)
	{
		m_ctrlSymbols.AddSymbols(&m_pEngine->m_LocalSymbolManager);
	}
	else
	{
		CResourceSymbolList listAllSymbols, listFilteredSymbols;
		m_pEngine->m_LocalSymbolManager.GetSymbols(listAllSymbols);

		POSITION pos = listAllSymbols.GetHeadPosition();
		while (NULL != pos)
		{
			CResourceSymbol* pSymbol = listAllSymbols.GetNext(pos);
			if ( (NULL != pSymbol) && pSymbol->IsModified() )
			{
				listFilteredSymbols.AddTail(pSymbol);
			}
		}
		m_ctrlSymbols.SetSymbolManager(&m_pEngine->m_LocalSymbolManager);
		m_ctrlSymbols.AddSymbols(listFilteredSymbols);
	}
}


void CRenumWizNewSymbolValuesPage::SetAvailableControls(void)
{
	EnableDlgControl(IDC_RENUMWIZ_EDIT_VALUE,		m_ctrlSymbols.GetSelectedCount() == 1);

	BOOL bEnable = FALSE;

	CResourceSymbolList listSelectedSymbols, listSymbolsToUpdate;
	m_ctrlSymbols.GetSelection(listSelectedSymbols);

	POSITION pos = listSelectedSymbols.GetHeadPosition();
	while (NULL != pos)
	{
		CResourceSymbol* pSymbol = listSelectedSymbols.GetNext(pos);
		if (NULL != pSymbol)
		{
			if ( (pSymbol->IsModified() ) && (pSymbol->GetOriginalValue() > 0) )
			{
				bEnable = TRUE;
				break;
			}
		}
	}
	EnableDlgControl(IDC_RENUMWIZ_RESTORE_VALUE,	bEnable);
}


// Work out which symbols we need to update in the list control
void CRenumWizNewSymbolValuesPage::UpdateSymbols(UINT uValue)
{
	if (uValue > 0)
	{
		CResourceSymbolList listSymbols;
		m_pEngine->m_LocalSymbolManager.GetSymbols(uValue, listSymbols);

		// Update all affected symbols
		POSITION pos = listSymbols.GetHeadPosition();
		while (NULL != pos)
		{
			CResourceSymbol* pSymbol = listSymbols.GetNext(pos);
			if (NULL != pSymbol)
			{
				m_ctrlSymbols.UpdateSymbol(pSymbol);
			}
		}
	}
}


/////////////////////////////////////////////////////////////////////////////
// CRenumWizNewSymbolValuesPage message handlers

/******************************************************************************
 *	Context Menu handler
 *
 ******************************************************************************/

void CRenumWizNewSymbolValuesPage::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	if (pWnd == &m_ctrlSymbols)
	{
		// Make sure window is active
		//GetParentFrame()->ActivateFrame();

		CCJMenu menu;
		if (menu.LoadMenu(IDM_RENUMWIZ_NEW_VALUES_CONTEXT_MENU))
		{
			menu.LoadToolbar(IDR_MAINFRAME);

			CMenu* pPopup = menu.GetSubMenu(0);
			ASSERT(NULL != pPopup);

			pPopup->SetDefaultItem(IDC_RENUMWIZ_EDIT_VALUE);
			pPopup->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN,
								   point.x,
								   point.y,
								   this);
			return;
		}
	}
	Default();									// Default message handling if we didn't do anything
}


/******************************************************************************
 *	Handler for "Autosize columns" context menu command
 *
 ******************************************************************************/

void CRenumWizNewSymbolValuesPage::OnCmdAutosizeColumns(void)
{
	m_ctrlSymbols.AutoSizeColumn();
}


void CRenumWizNewSymbolValuesPage::OnClickedHideUnmodifiedSymbols(void)
{
	FillListCtrl();
}


/******************************************************************************
 *	"Edit Value" button handler
 *
 ******************************************************************************/

void CRenumWizNewSymbolValuesPage::OnClickedEditValue(void)
{
	CResourceSymbolList listSelectedSymbols, listSymbolsToUpdate;
	m_ctrlSymbols.GetSelection(listSelectedSymbols);

	POSITION pos = listSelectedSymbols.GetHeadPosition();
	while (NULL != pos)
	{
		CResourceSymbol* pSymbol = listSelectedSymbols.GetNext(pos);
		if (NULL != pSymbol)
		{
			// Create a dialog object and let it do the difficult bit
			CSymbolPropertySheet dlg(IDP_SYM_PROPERTIES_CAPTION, this);

			dlg.Initialise(&m_pEngine->m_LocalSymbolManager, pSymbol, true);

			if (IDOK == dlg.DoModal())
			{
				UINT uOriginalValue = pSymbol->GetValue();

				m_pEngine->m_LocalSymbolManager.Set(	pSymbol,
														dlg.GeneralPage().GetName(),
														dlg.GeneralPage().GetValue(),
														(FALSE != dlg.GeneralPage().IsReadOnly() ) );

				// Update all affected symbols in the list control
				UpdateSymbols(uOriginalValue);
				UpdateSymbols(pSymbol->GetValue());
			}
		}
	}
	SetAvailableControls();
}


/******************************************************************************
 *	"Restore Original Value" button handler
 *
 ******************************************************************************/

void CRenumWizNewSymbolValuesPage::OnClickedRestoreOriginalValue(void)
{
	CResourceSymbolList listSelectedSymbols, listSymbolsToUpdate;
	m_ctrlSymbols.GetSelection(listSelectedSymbols);

	POSITION pos = listSelectedSymbols.GetHeadPosition();
	while (NULL != pos)
	{
		CResourceSymbol* pSymbol = listSelectedSymbols.GetNext(pos);
		if (NULL != pSymbol)
		{
			if ( (pSymbol->IsModified() ) && (pSymbol->GetOriginalValue() > 0) )
			{
				UINT uOriginalValue = pSymbol->GetOriginalValue();
				UINT uCurrentValue = pSymbol->GetValue();

				m_pEngine->m_LocalSymbolManager.Set(	pSymbol,
														pSymbol->GetName(),
														uOriginalValue,
														pSymbol->IsReadOnly() );

				pSymbol->SetModifiedFlag(false);

				m_ctrlSymbols.RemoveSymbol(pSymbol);

				// Update all affected symbols in the list control
				UpdateSymbols(uOriginalValue);
				UpdateSymbols(uCurrentValue);
			}
		}
	}
	SetAvailableControls();
}


void CRenumWizNewSymbolValuesPage::OnClickedRenumber(void)
{
	CResourceSymbolList listSelectedSymbols, listSymbolsToUpdate;
	m_ctrlSymbols.GetSelection(listSelectedSymbols);

	m_pEngine->Renumber(&listSelectedSymbols);

	if (m_bHideUnmodifiedSymbols)
	{
		FillListCtrl();
	}
	else
	{
		m_ctrlSymbols.UpdateAllSymbols();
	}

	SetAvailableControls();
}


/******************************************************************************
 *	Called when the user double clicks on an item in the list
 *
 ******************************************************************************/

void CRenumWizNewSymbolValuesPage::OnDblClickSymbols(NMHDR* /*pNMHDR*/, LRESULT* pResult) 
{
	*pResult = 0;

	if (1 == m_ctrlSymbols.GetSelectedCount() )
	{
		OnClickedEditValue();
	}
}


/******************************************************************************
 *	Called when an item changes in the list control
 *
 ******************************************************************************/

void CRenumWizNewSymbolValuesPage::OnItemchangedSymbols(NMHDR* pNMHDR, LRESULT* pResult) 
{
	UNREFERENCED_PARAMETER(pNMHDR);
	UNREFERENCED_PARAMETER(pResult);

	SetAvailableControls();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -