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

📄 resorgsymbolsdoc.cpp

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 CPP
📖 第 1 页 / 共 3 页
字号:

					::AfxMessageBox( sMsg, MB_OK | MB_ICONEXCLAMATION);
#endif
				}
			}
		}
	}
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsDoc diagnostics

#ifdef _DEBUG
void CResOrgSymbolsDoc::AssertValid(void) const
{
	CResOrgSymbolsDoc_BASE::AssertValid();
}


void CResOrgSymbolsDoc::Dump(CDumpContext& dc) const
{
	CResOrgSymbolsDoc_BASE::Dump(dc);
}
#endif //_DEBUG


/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsDoc operations

CResourceSymbol* CResOrgSymbolsDoc::Add(const CString& sSymbolName,
										UINT uSymbolValue,
										int nLineNo)
{
	CResourceSymbol* pSymbol = m_pSymbolManager->Add(	sSymbolName,
														uSymbolValue,
														nLineNo);
	if (NULL != pSymbol)
	{
		if (Options.AutoFixNextSymbolValues() )
		{
			m_pSymbolManager->FixNextSymbolValues();
		}
		if (m_pSymbolManager->IsModified())
		{
			SetModifiedFlag(true);
		}

		UpdateAllViews(NULL, SYM_ADDED, (CObject*)pSymbol);

		// Work out which symbols are affected so we can issue the right view hints
		CResourceSymbolList listSymbols;
		m_pSymbolManager->GetSymbols(	uSymbolValue,
										listSymbols);

		POSITION pos = listSymbols.GetHeadPosition();
		while (NULL != pos)
		{
			CResourceSymbol* pSymbol = listSymbols.GetNext(pos);
			if (NULL != pSymbol)
			{
				UpdateAllViews(NULL, SYM_CHANGED, (CObject*)pSymbol);
			}
		}
	}
	return pSymbol;
}


bool CResOrgSymbolsDoc::Set(CResourceSymbol* pSymbol,
							const CString& sName,
							UINT uValue,
							bool bReadOnly /*= false*/)
{
	CResourceSymbolList listSymbols;

	m_pSymbolManager->GetSymbols(	pSymbol->GetValue(),
									listSymbols);

	// Work out which symbols are affected so we can issue the right view hints
	CResourceSymbolList listSymbolsWithNewValue;

	m_pSymbolManager->GetSymbols(	uValue,
									listSymbolsWithNewValue);

	listSymbols.AddTail(&listSymbolsWithNewValue);

	bool bResult = m_pSymbolManager->Set(	pSymbol,
											sName,
											uValue,
											bReadOnly);
	if (bResult)
	{
		if (Options.AutoFixNextSymbolValues() )
		{
			m_pSymbolManager->FixNextSymbolValues();
		}

		if (m_pSymbolManager->IsModified())
		{
			SetModifiedFlag(true);
		}

		POSITION pos = listSymbols.GetHeadPosition();
		while (NULL != pos)
		{
			CResourceSymbol* pSymbol = listSymbols.GetNext(pos);
			if (NULL != pSymbol)
			{
				UpdateAllViews(NULL, SYM_CHANGED, (CObject*)pSymbol);
			}
		}
	}
	return bResult;
}

								
bool CResOrgSymbolsDoc::Remove(CResourceSymbol* pSymbol)
{
	if (NULL != pSymbol)
	{
		UpdateAllViews(NULL, SYM_DELETED, (CObject*)pSymbol);

		m_pSymbolManager->Remove(pSymbol);

		// Work out which symbols are affected so we can issue the right view hints
		CResourceSymbolList listSymbols;
		m_pSymbolManager->GetSymbols(	pSymbol->GetValue(),
										listSymbols);

		POSITION pos = listSymbols.GetHeadPosition();
		while (NULL != pos)
		{
			CResourceSymbol* pSymbol = listSymbols.GetNext(pos);
			if (NULL != pSymbol)
			{
				UpdateAllViews(NULL, SYM_CHANGED, (CObject*)pSymbol);
			}
		}
		delete pSymbol;

		SetModifiedFlag();

		return true;
	}
	return false;
}


bool CResOrgSymbolsDoc::CheckNextSymbolValues(bool bPrompt /*= true*/)
{
	if (m_pSymbolManager->AreNextSymbolValuesInUse() )
	{
		if (bPrompt && DoNextSymbolValuesInUsePrompt())
		{
			OnCmdFileProperties();
		}
		return true;
	}
	return false;
}


void CResOrgSymbolsDoc::ShowSymbolFileProperties(CRuntimeClass* pActivePageClass /*= NULL*/) 
{
	CResourceSymbolFilePropertySheet dlg(IDP_SYM_FILE_PROPERTIES_CAPTION, ::AfxGetMainWnd() );

	dlg.Initialise(m_pSymbolManager, this);

	if (NULL != pActivePageClass)
	{
		for (int nPage = 0; nPage < dlg.GetPageCount(); nPage++)
		{
			CPropertyPage* pPage = dlg.GetPage(nPage);
			ASSERT(NULL != pPage);

			if ( (NULL != pPage) && pPage->IsKindOf(pActivePageClass) )
			{
				dlg.SetActivePage(pPage);
				break;
			}
		}
	}

	bool bCheckForOutOfRangeSymbols = m_pSymbolManager->CheckForOutOfRangeSymbols();

	if (IDOK == dlg.DoModal())
	{
		SetModifiedFlag( m_pSymbolManager->IsModified() );

		if (bCheckForOutOfRangeSymbols != m_pSymbolManager->CheckForOutOfRangeSymbols() )
		{
			UpdateAllViews(NULL, SYM_REFRESH);
		}
	}
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsDoc implementation

bool CResOrgSymbolsDoc::CreateSymbolManager(void)
{
	if (NULL == m_pSymbolManager)
	{
		m_pSymbolManager = new CResourceSymbolManager;

		return (NULL != m_pSymbolManager);
	}
	return false;
}


bool CResOrgSymbolsDoc::StartFileChangeMonitor(const CString& sPathName)
{
	if (!m_FileChangeMonitor.IsMonitoring())
	{
		POSITION pos = GetFirstViewPosition();
		if (pos != NULL)
		{
			CView* pView = GetNextView(pos);

			return m_FileChangeMonitor.Start(	sPathName,
												pView,
												WM_COMMAND,
												ID_FILE_CHANGED,
												THREAD_PRIORITY_LOWEST);
		}
	}
	return false;
}


bool CResOrgSymbolsDoc::StopFileChangeMonitor(void)
{
	if (m_FileChangeMonitor.IsMonitoring())
	{
		return m_FileChangeMonitor.Stop();
	}
	return false;
}


bool CResOrgSymbolsDoc::DoNextSymbolValuesInUsePrompt(void)
{
	CNGSplitPath split(m_pSymbolManager->GetPathName() );
	CString sFileName = split.GetFileName() + split.GetExtension();

	CNGMessageBox dlg;

	dlg.FormatMsgEx(MAKEINTRESOURCE(IDP_SYM_NEXT_VALUES_IN_USE),
					_T("RTF"),
					sFileName);

	dlg.SetRtf();
	//dlg.SetTitle();
	dlg.SetStandardIcon(IDI_WARNING);
	dlg.AddButton(IDYES, true, true, _T("&Yes") );
	dlg.AddButton(IDNO, false, false, _T("&No") );

	return (IDYES == dlg.DoModal() );
}


/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsDoc message handlers

void CResOrgSymbolsDoc::OnCmdFileChanged(void)
{
	CString sPathName = GetPathName();

	CNGSplitPath split(sPathName);
	CString sFileName = split.GetFileName() + split.GetExtension();

	BOOL bModified	= IsModified();
	BOOL bPrompt	= bModified || !Options.AutoReloadFiles();
	BOOL bReload	= !bModified && Options.AutoReloadFiles();

	if (bPrompt)
	{
		CNGMessageBox dlg;

		dlg.FormatMsgEx(MAKEINTRESOURCE( bModified ? IDP_SYM_FILE_CHANGED_EX : IDP_SYM_FILE_CHANGED),
						_T("RTF"),
						sFileName);
		dlg.SetRtf();
		dlg.SetStandardIcon(IDI_WARNING);
		dlg.AddButton(IDYES, false, false, _T("&Yes") );
		dlg.AddButton(IDNO, true, true, _T("&No") );

		bReload =  (IDYES == dlg.DoModal() );
	}

	if (bReload)
	{
		OnOpenDocument(sPathName);
		UpdateAllViews(NULL, SYM_REFRESH);
	}
	else
	{
		StartFileChangeMonitor(sPathName);
	}
}


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

	CResOrgSymbolsDoc_BASE::OnFileSave();
}


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

	CResOrgSymbolsDoc_BASE::OnFileSaveAs();
}


/// Handler for ID_SYM_EXPORT command
void CResOrgSymbolsDoc::OnCmdFileExport(void)
{
	CNGSplitPath split( m_pSymbolManager->GetPathName() );

	CString sInitialFileName = split.GetFileName();

#if _MSC_VER < 1300		// BXFileDialog doesn't work with VC7 yet
	BXFileDialog dlg(	false,												// Open
						false,												// No preview
						true,												// Resizeable
						CString( (LPCTSTR)IDS_FILE_FILTER_EXPORT_FILES_EXT),// Default extension
						sInitialFileName,									// Default filename
						OFN_PATHMUSTEXIST | OFN_ENABLESIZING,				// Flags
						CString( (LPCTSTR)IDS_FILE_FILTER_EXPORT_FILES),	// File filter
						::AfxGetMainWnd() );								// Parent window

	DWORD dwVersion		= LOWORD(::GetVersion() );

	DWORD dwMajor		= LOBYTE(dwVersion);
	DWORD dwMinor		= HIBYTE(dwVersion);
	DWORD dwUseableVer	= (dwMajor << 8) + dwMinor;

	if (dwUseableVer >= 0x501)
	{
		// Use the VS.NET visual style on WinXP and later
		dlg.SetAppearance(BXFileDialog::APPEARANCE_VSDOTNET);
	}
#else
	CFileDialog dlg(false,									// Save As
					CString( (LPCTSTR)IDS_FILE_FILTER_EXPORT_FILES_EXT),
															// Default extension
					sInitialFileName,						// Default filename
					OFN_PATHMUSTEXIST | OFN_ENABLESIZING,	// Flags
					CString( (LPCTSTR)IDS_FILE_FILTER_EXPORT_FILES),
															// File filter
					::AfxGetMainWnd() );					// Parent window
#endif

	if (IDOK == dlg.DoModal())
	{
		CString sPathName = dlg.GetPathName();

		ASSERT(!sPathName.IsEmpty() );

		WriteXml(sPathName, NULL);
	}
}


void CResOrgSymbolsDoc::OnCmdFileProperties(void) 
{
	ShowSymbolFileProperties();
}


void CResOrgSymbolsDoc::OnCmdFilePropertiesStatistics(void) 
{
	ShowSymbolFileProperties( RUNTIME_CLASS(CResourceSymbolFileStatisticsPage) );
}


void CResOrgSymbolsDoc::OnCmdFilePropertiesNextSymbolValues(void) 
{
	ShowSymbolFileProperties( RUNTIME_CLASS(CResourceSymbolFileNextValuesPage) );
}



// Renumber all symbols
void CResOrgSymbolsDoc::OnCmdRenumberSymbols(void) 
{
	// To renumber all the symbols in a given file we need to pick starting
	// values for each of the four symbol catgories identified by the _APS_NEXT...
	// symbols in each resource file.
	//
	// The Symbol Renumbering Wizard works this out by looking at the values
	// of existing symbols in the resource symbol file.
	//
	CRenumWizard Wizard;
	Wizard.Initialise(m_pSymbolManager);

	if (ID_WIZFINISH == Wizard.DoModal() )
	{
		if (m_pSymbolManager->IsModified() )
		{
			SetModifiedFlag(true);
			UpdateAllViews(NULL, SYM_REFRESH);
		}
	}
}


void CResOrgSymbolsDoc::OnUpdateRenumberSymbols(CCmdUI* pCmdUI)
{
	pCmdUI->Enable(m_pSymbolManager->GetSymbolCount() > 0);
}


void CResOrgSymbolsDoc::OnCmdReport(void) 
{
	CString sErrorMsg;

	CResOrgReportStyleSheetDlg dlg;

	if (IDOK == dlg.DoModal() )
	{
		CString sStyleSheetText;

		int nStyleSheetID = dlg.GetStyleSheetID();
		if (nStyleSheetID > 0)
		{
			sStyleSheetText = LoadXsl(nStyleSheetID);
		}
		else
		{
			try
			{
				CStdioFile f(	dlg.GetStyleSheetPathName(),
								CFile::modeRead | CFile::shareDenyWrite);

				while (true)

⌨️ 快捷键说明

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