📄 resorgsymbolsdoc.cpp
字号:
::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 + -