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

📄 resorgsymbolsdoc.cpp

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/************************************************************************
 *
 *                  Resource ID Organiser Core Library
 *
 * (c) Copyright 2000-2005 by Riverblade Limited (UK). All rights reserved.
 *
 ************************************************************************
 *                                                                       
 *  Description : CResOrgSymbolsDoc - document class for a resource
 *                symbol file
 *                
 *  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/ResOrgSymbolsDoc.cpp $
 *   $Revision: 34 $
 *       $Date: 31/12/04 16:26 $
 *     $Author: Anna $
 *
 *    $History: ResOrgSymbolsDoc.cpp $
 * 
 * *****************  Version 34  *****************
 * User: Anna         Date: 31/12/04   Time: 16:26
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * 1.  Added IDP_WARN_CONFIG_LOAD_FAILED and IDP_WARN_CONFIG_SAVE_FAILED
 * string table prompts for use when loading/saving config files (debug
 * builds only)
 * 2.  Updated file banners
 * 
 * *****************  Version 33  *****************
 * User: Anna         Date: 28/12/04   Time: 9:30
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * CResOrgSymbolsDoc::Serialize() now only displays XML load/save failure
 * message boxes in debug builds
 * 
 * *****************  Version 32  *****************
 * User: Anna         Date: 29/08/04   Time: 22:00
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 *  CResOrgSymbolsDoc::Serialize() now checks if the filebeing saved
 * exists before assuming it is read only
 * 
 * *****************  Version 31  *****************
 * User: Anna         Date: 29/08/04   Time: 21:22
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * 1.  CResOrgSymbolsDoc::OnCmdFileProperties() now handles the
 * ID_SYM_PROPERTIES command in case CResOrgSymbolsListView didn't. This
 * allows the properties of the associated file to be displayed if a
 * single symbol isn't selected.
 * 2.  CResOrgSymbolsDoc::Serialize() now checks whether symbol config
 * files exist (load) and are writeable (save) before proceeding.
 * 
 * *****************  Version 30  *****************
 * User: Anna         Date: 24/08/04   Time: 0:14
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Fixed a compiler warning
 * 
 * *****************  Version 29  *****************
 * User: Anna         Date: 23/08/04   Time: 21:40
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Added support for out of range symbols
 * 
 * *****************  Version 28  *****************
 * User: Anna         Date: 11/07/04   Time: 16:21
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Added support for detection of out of range symbols
 * 
 * *****************  Version 27  *****************
 * User: Anna         Date: 7/03/03    Time: 11:45
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Changed CException to CUserException so it will compile under VS.NET
 * again...
 * 
 * *****************  Version 26  *****************
 * User: Anna         Date: 4/03/03    Time: 20:51
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Added more information to the XML export file
 * 
 * *****************  Version 25  *****************
 * User: Anna         Date: 3/03/03    Time: 23:31
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * CResOrgSymbolsDoc::OnCmdFileExport() now uses BXFileDialog if it can
 * 
 * *****************  Version 24  *****************
 * User: Anna         Date: 3/03/03    Time: 20:10
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Moved XML code to its own class (CResOrgXmlWriter)
 * 
 * *****************  Version 23  *****************
 * User: Anna         Date: 1/03/03    Time: 18:10
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * The user can now provide their own XSL stylesheet to generate an HTML
 * report
 * 
 * *****************  Version 22  *****************
 * User: Anna         Date: 25/02/03   Time: 21:24
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Minor correction in CResOrgSymbolsDoc::SaveXml()
 * 
 * *****************  Version 21  *****************
 * User: Anna         Date: 19/02/03   Time: 19:20
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Started adding XML export and HTML reports
 * 
 * *****************  Version 20  *****************
 * User: Anna         Date: 15/02/03   Time: 20:48
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Changed big BOOLs into little bools
 * 
 * *****************  Version 19  *****************
 * User: Anna         Date: 28/01/03   Time: 21:19
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Improved multi-file support by allowing files to be Added/Removed from
 * a multi-file display via the File Properties Dialog
 * 
 * *****************  Version 18  *****************
 * User: Anna         Date: 19/01/03   Time: 17:17
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Made CResOrgSymbolsDoc::Add(), Set(), Remove() and
 * CheckNextSymbolValues() virtual
 * 
 * *****************  Version 17  *****************
 * User: Anna         Date: 2/01/03    Time: 0:05
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * The CResourceSymbolManager object used by the document is now held by
 * pointer, to allow it's type to be customised in derived classes
 * 
 * *****************  Version 16  *****************
 * User: Anna         Date: 25/11/02   Time: 15:14
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Changed website address in banner
 * 
 * *****************  Version 15  *****************
 * User: Anna         Date: 22/10/02   Time: 13:24
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Changed name/mail address (at last!)
 * 
 * *****************  Version 14  *****************
 * User: Andy         Date: 1/08/02    Time: 16:26
 * Updated in $/Projects/AddIns/ResOrg/ResOrgCore
 * Knock on changes from CResourceSymbolManager
 * 
 * *****************  Version 13  *****************
 * 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 12  *****************
 * User: Andy         Date: 27/05/02   Time: 16:39
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * Knock on changes from CResourceSymbolBuffer (now
 * CResourceSymbolManager)
 * 
 * *****************  Version 11  *****************
 * User: Andy         Date: 12/28/01   Time: 12:53a
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * Added some new options
 * 
 * *****************  Version 10  *****************
 * User: Andy         Date: 10/21/01   Time: 11:03p
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * 1.  CResOrgSymbolsDoc::Serialize() no longer calls
 * CResOrgSymbolsDoc::CheckNextSymbolValues() - the prompt is now done
 * elseware
 * 2.  CResOrgSymbolsDoc::CheckNextSymbolValues() now takes a parameter to
 * determine whether a prompt dialog should be shown
 * 
 * *****************  Version 9  *****************
 * User: Andy         Date: 10/03/01   Time: 12:26p
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * 1.  Added CResOrgSymbolsDoc::CheckNextSymbolValues() to prompt if the
 * "Next Symbol" values are in use
 * 2.  CResOrgSymbolsDoc::Serialize() now calls CheckNextSymbolValues()
 * after loading to ensure that the "Next Symbol" values are OK.
 * 
 * *****************  Version 8  *****************
 * User: Andy         Date: 15/08/01   Time: 13:38
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * Replaced CReservedSymbolsDlg with CResourceSymbolFilePropertySheet
 * 
 * *****************  Version 7  *****************
 * User: Andy         Date: 22/06/01   Time: 9:51
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * CResOrgSymbolsDoc::OnCmdRenumberSymbol() no longer marks the document
 * as changed if the wizard is cancelled without changing anything
 * 
 * *****************  Version 6  *****************
 * User: Andy         Date: 2/03/01    Time: 17:06
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * 1.  Made view hints more specific to remove the need to rebuild the
 * displays completely
 * 2.  CResOrgSymbolsDoc::OnCmdFileProperties() now handles the details of
 * displaying the File Properties Dialog, rather than asking
 * CResourceSymbolBuffer to do it
 * 
 * *****************  Version 5  *****************
 * User: Andy         Date: 19/02/01   Time: 8:30
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * Better view hints
 * 
 * *****************  Version 4  *****************
 * User: Andy         Date: 17/02/01   Time: 6:57
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 * 1.  Knock-on changes from renaming of CResOrgSymbolsView to
 * CResOrgSymbolsListView
 * 2.  Added wrappers around commonly used CResourceSymbolBuffer methods
 * [e.g. Set()] to remove the need for views to raise view hints
 * 
 * *****************  Version 3  *****************
 * User: Andy         Date: 29/11/00   Time: 18:38
 * Updated in $/Projects/AddIns/ResOrg/ResOrgUtils
 *  Added file banners
 *
 * $Nokeywords: $
 *
 ************************************************************************/

#include "StdAfx.h"
#include "ResOrgCore_Priv.h"
#include "ResOrgCore_Globals.h"

#include "ResourceSymbol.h"
#include "RenumWizard.h"
#include "ResourceSymbolFilePropertySheet.h"
#include "ResOrgOptions.h"
#include "ResOrgCoreApp.h"
#include "ResOrgXmlWriter.h"
#include "ResOrgReportStyleSheetDlg.h"


#include "ResOrgSymbolsDoc.h"




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


/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsDoc

IMPLEMENT_DYNCREATE(CResOrgSymbolsDoc, CResOrgSymbolsDoc_BASE)

BEGIN_MESSAGE_MAP(CResOrgSymbolsDoc, CResOrgSymbolsDoc_BASE)

	ON_COMMAND(				ID_FILE_CLOSE,						OnFileClose)
	ON_COMMAND(				ID_FILE_SAVE,						OnFileSave)
	ON_COMMAND(				ID_FILE_SAVE_AS,					OnFileSaveAs)
	ON_COMMAND(				ID_FILE_EXPORT,						OnCmdFileExport)
	ON_COMMAND(				ID_FILE_PROPERTIES,					OnCmdFileProperties)
	ON_COMMAND(				ID_SYM_PROPERTIES,					OnCmdFileProperties)
	ON_COMMAND(				ID_FILE_PROPERTIES_STATISTICS,		OnCmdFilePropertiesStatistics)
	ON_COMMAND(				ID_FILE_PROPERTIES_NEXT_SYMBOLS,	OnCmdFilePropertiesNextSymbolValues)
	ON_COMMAND(				ID_FILE_CHANGED,					OnCmdFileChanged)
	ON_COMMAND(				ID_TOOLS_RENUMBER,					OnCmdRenumberSymbols)
	ON_UPDATE_COMMAND_UI(	ID_TOOLS_RENUMBER,					OnUpdateRenumberSymbols)
	ON_COMMAND(				ID_TOOLS_REPORT,					OnCmdReport)

END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsDoc construction/destruction

CResOrgSymbolsDoc::CResOrgSymbolsDoc(void)
{
	m_pSymbolManager = NULL;
}


CResOrgSymbolsDoc::~CResOrgSymbolsDoc(void)
{
	if (NULL != m_pSymbolManager)
	{
		delete m_pSymbolManager;
		m_pSymbolManager = NULL;
	}
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsDoc overrides

BOOL CResOrgSymbolsDoc::OnNewDocument(void)
{
	BOOL bResult = CResOrgSymbolsDoc_BASE::OnNewDocument();

	return bResult;
}


BOOL CResOrgSymbolsDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
	BOOL bResult = CResOrgSymbolsDoc_BASE::OnOpenDocument(lpszPathName);
	if (bResult)
	{
		StartFileChangeMonitor(lpszPathName);
	}
	return bResult;
}


BOOL CResOrgSymbolsDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
	BOOL bResult = CResOrgSymbolsDoc_BASE::OnSaveDocument(lpszPathName);

	if (bResult)
	{
		m_pSymbolManager->SetModifiedFlag(false);

		StartFileChangeMonitor(lpszPathName);

		UpdateAllViews(NULL, SYM_REFRESH);
	}
	return bResult;
}


void CResOrgSymbolsDoc::OnCloseDocument(void)
{
	StopFileChangeMonitor();

	CResOrgSymbolsDoc_BASE::OnCloseDocument();
}


void CResOrgSymbolsDoc::DeleteContents(void) 
{
	if (NULL != m_pSymbolManager)
	{
		m_pSymbolManager->RemoveAll();
	}
	else
	{
		VERIFY( CreateSymbolManager() );
	}

	UpdateAllViews(NULL, SYM_REFRESH);

	CResOrgSymbolsDoc_BASE::DeleteContents();
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsDoc serialization

void CResOrgSymbolsDoc::Serialize(CArchive& ar)
{
	if (NULL != m_pSymbolManager)
	{
		m_pSymbolManager->Serialize(ar);

		if (Options.AutoSaveSymbolFileConfig() )
		{
			CString sConfigFilePathName = CResOrgXmlWriter::GetConfigFilePathName( m_pSymbolManager->GetPathName() );

			CString sErrorMsg;
			
			if (ar.IsLoading() )
			{
				if (::FileExists(sConfigFilePathName) )
				{
					if (!CResOrgXmlWriter::LoadSymbolFileConfig(m_pSymbolManager,
																sConfigFilePathName,
																&sErrorMsg) )
					{
#ifdef _DEBUG
						CNGSplitPath split(sConfigFilePathName);

						CString sMsg;
						sMsg.Format(IDP_WARN_CONFIG_LOAD_FAILED,
									split.GetFileName() + split.GetExtension(),
									sErrorMsg);

						::AfxMessageBox( sMsg, MB_OK | MB_ICONEXCLAMATION);
#endif
					}
				}
			}
			else
			{
				// Determine whether the file exists and is read-only.
				// If so, ask if the read only file should be overwritten.
				DWORD dwAttrib = ::GetFileAttributes(sConfigFilePathName);
				if (::FileExists(sConfigFilePathName) && (dwAttrib & FILE_ATTRIBUTE_READONLY) )
				{
					switch ( ::DoOverwritePrompt(sConfigFilePathName, false) )
					{
						case IDYES:
							if (!::SetFileAttributes(sConfigFilePathName, dwAttrib & ~FILE_ATTRIBUTE_READONLY) )
							{
								::AfxMessageBox(IDP_SYM_FILE_ERR_FILE_ATTRIBUTES, MB_OK | MB_ICONSTOP);
								return;
							}
							break;

						case IDNO:
						case IDCANCEL:
							return;

						default:
							ASSERT(false);
							break;
					}
				}
				if (!CResOrgXmlWriter::SaveSymbolFileConfig(m_pSymbolManager,
															sConfigFilePathName,
															&sErrorMsg) )
				{
#ifdef _DEBUG
					CNGSplitPath split(sConfigFilePathName);

					CString sMsg;
					sMsg.Format(IDP_WARN_CONFIG_SAVE_FAILED,
								split.GetFileName() + split.GetExtension(),
								sErrorMsg);

⌨️ 快捷键说明

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