📄 doc.cpp
字号:
#include "pch.h"
#include "util.h"
#include "main.h"
#include "doc.h"
#include "import.h"
#include "export.h"
#include "image.h"
#include "debug.h"
#include "record.h"
#include "parameter.h"
#include "dump.h"
#include "add.h"
IMPLEMENT_DYNCREATE ( CDancerDoc , CDocument )
BEGIN_MESSAGE_MAP ( CDancerDoc , CDocument )
ON_COMMAND ( IDM_VIEW_ALL , OnViewAll )
ON_COMMAND ( IDM_VIEW_UNDECORATE , OnViewUndecorate )
ON_COMMAND ( IDM_DEBUG_START , OnDebugStart )
ON_COMMAND ( IDM_DEBUG_PARAMETER_START , OnDebugParameterStart )
ON_COMMAND ( IDM_DEBUG_STOP , OnDebugStop )
ON_COMMAND ( IDM_DEBUG_PAUSE , OnDebugPause )
ON_COMMAND ( IDM_EDIT_DUMP_TO , OnEditDumpTo )
ON_COMMAND ( IDM_EDIT_ADD , OnEditAdd )
ON_COMMAND ( IDM_EDIT_REMOVE , OnEditRemove )
ON_COMMAND ( IDM_EDIT_HOOK_IMPORT , OnEditHookImport )
ON_COMMAND ( IDM_EDIT_HOOK_TREE , OnEditHookTree )
ON_COMMAND ( IDM_EDIT_UNHOOK_IMPORT , OnEditUnhookImport )
ON_COMMAND ( IDM_EDIT_UNHOOK_TREE , OnEditUnhookTree )
ON_COMMAND ( IDM_VIEW_EXPAND_ALL , OnViewExpandAll )
ON_COMMAND ( IDM_VIEW_FOLD_ALL , OnViewFoldAll )
ON_UPDATE_COMMAND_UI ( IDM_VIEW_ALL , OnUpdateViewAll )
ON_UPDATE_COMMAND_UI ( IDM_VIEW_UNDECORATE , OnUpdateViewUndecorate )
ON_UPDATE_COMMAND_UI ( IDM_DEBUG_START , OnUpdateDebugStart )
ON_UPDATE_COMMAND_UI ( IDM_DEBUG_PARAMETER_START , OnUpdateDebugStart )
ON_UPDATE_COMMAND_UI ( IDM_DEBUG_STOP , OnUpdateDebugStop )
ON_UPDATE_COMMAND_UI ( IDM_DEBUG_PAUSE , OnUpdateDebugPause )
ON_UPDATE_COMMAND_UI ( IDM_EDIT_ADD , OnUpdateEditAdd )
ON_UPDATE_COMMAND_UI ( IDM_EDIT_HOOK_IMPORT , OnUpdateEditHookImport )
ON_UPDATE_COMMAND_UI ( IDM_EDIT_HOOK_TREE , OnUpdateEditHookTree )
ON_UPDATE_COMMAND_UI ( IDM_EDIT_UNHOOK_IMPORT , OnUpdateEditUnhookImport )
ON_UPDATE_COMMAND_UI ( IDM_EDIT_UNHOOK_TREE , OnUpdateEditUnhookTree )
ON_UPDATE_COMMAND_UI ( IDM_EDIT_DUMP_TO , OnUpdateEditDumpTo )
ON_UPDATE_COMMAND_UI ( IDM_EDIT_REMOVE , OnUpdateEditRemove )
END_MESSAGE_MAP ( )
CDancerDoc::CDancerDoc ( )
{
// reset attibute
m_pImgFile = new CImageFile ;
m_pDebugControl = new CDebugControl ;
m_pRecordManager = new CRecordManager ;
m_bSave = TRUE ;
m_pDebugControl->AttachTo ( this ) ;
m_pRecordManager->AttachTo ( this ) ;
}
CDancerDoc::~CDancerDoc ( )
{
delete m_pDebugControl ;
delete m_pImgFile ;
delete m_pRecordManager ;
}
BOOL CDancerDoc::OnOpenDocument ( LPCTSTR lpszPathName )
{
if ( CDocument::OnOpenDocument ( lpszPathName ) == FALSE )
return FALSE ;
// open and parsing an image file
CMainFrame* pf = ( CMainFrame* ) AfxGetMainWnd ( ) ;
pf->SetMessageText ( IDS_MSG_PARSING_IMAGE ) ;
m_strDumpName = lpszPathName ;
m_strDumpName += ".dump.txt" ;
xSplitPathName ( lpszPathName , m_strName , m_strPath ) ;
m_strParameter.Empty ( ) ;
m_pImgFile->ParseImage ( m_strName , m_strPath ) ;
pf->SetMessageText ( AFX_IDS_IDLEMESSAGE ) ;
return TRUE ;
}
BOOL CDancerDoc::CanCloseFrame ( CFrameWnd* pFrame )
{
return CanCloseFrame ( ) ;
}
BOOL CDancerDoc::CanCloseFrame ( )
{
if ( m_pDebugControl->IsDebugging ( ) == TRUE )
{
CString msg , &mod = m_pImgFile->m_pRoot->m_pModule->m_strShort ;
msg.Format ( IDS_QUERY_WHEN_DEBUGGING , mod.LockBuffer ( ) ) ;
mod.UnlockBuffer ( ) ;
if ( IDYES == AfxMessageBox ( msg , MB_ICONQUESTION | MB_YESNO ) )
return TRUE ;
return FALSE ;
}
return TRUE ;
}
void CDancerDoc::OnViewAll ( )
{
CMainApp* pMainApp = ( CMainApp* ) AfxGetApp ( ) ;
pMainApp->m_appOption.m_bViewAll = !pMainApp->m_appOption.m_bViewAll ;
m_pExportView->Refresh ( ) ;
}
void CDancerDoc::OnUpdateViewAll ( CCmdUI* pCmdUI )
{
CMainApp* pMainApp = ( CMainApp* ) AfxGetApp ( ) ;
pCmdUI->SetCheck ( pMainApp->m_appOption.m_bViewAll ) ;
}
void CDancerDoc::OnUpdateDebugStart ( CCmdUI* pCmdUI )
{
pCmdUI->Enable ( m_pDebugControl->IsDebugging ( ) == FALSE ) ;
}
void CDancerDoc::OnUpdateDebugStop ( CCmdUI* pCmdUI )
{
pCmdUI->Enable ( m_pDebugControl->IsDebugging ( ) == TRUE ) ;
}
void CDancerDoc::OnDebugStart ( )
{
CMainFrame* pf = ( CMainFrame* ) AfxGetMainWnd ( ) ;
pf->SetMessageText ( IDS_MSG_DEBUG_STARTING ) ;
m_pExportView->Refresh1 ( ) ;
m_pDebugControl->Start ( ) ;
}
void CDancerDoc::OnDebugStop ( )
{
m_pDebugControl->Stop ( ) ;
}
void CDancerDoc::OnDebugPause ( )
{
m_pDebugControl->Pause ( ) ;
}
void CDancerDoc::OnUpdateDebugPause ( CCmdUI* pCmdUI )
{
pCmdUI->Enable ( m_pDebugControl->IsDebugging ( ) ) ;
pCmdUI->SetCheck ( m_pDebugControl->IsPaused ( ) ) ;
}
void CDancerDoc::OnDebugParameterStart ( )
{
CParameterDialog* p = new CParameterDialog ;
p->m_strParameter = m_strParameter ;
p->m_bSave = m_bSave ;
if ( p->DoModal ( ) == IDOK &&
p->m_bSave == TRUE )
{
m_strParameter = p->m_strParameter ;
m_pDebugControl->Start ( ) ;
}
m_bSave = p->m_bSave ;
delete p ;
}
void CDancerDoc::OnEditDumpTo ( )
{
CDumpToDialog* p = new CDumpToDialog ;
p->m_strPathName = m_strDumpName ;
if ( p->DoModal ( ) == IDOK )
{
m_strDumpName = p->m_strPathName ;
}
delete p ;
}
void CDancerDoc::OnEditAdd ( )
{
CAddDialog* p = new CAddDialog ;
if ( p->DoModal ( ) == IDOK )
{
CString fn , path ;
xSplitPathName ( p->m_strName , fn , path ) ;
m_pImgFile->AddModule (
m_pImportView->GetTreeCtrl ( ) ,
fn ,
path ) ;
}
delete p ;
}
void CDancerDoc::OnEditRemove ( )
{
m_pImgFile->RemoveModule ( m_pImportView->GetTreeCtrl ( ) ) ;
}
void CDancerDoc::OnUpdateEditRemove ( CCmdUI* pCmdUI )
{
CTreeCtrl& ctrl = m_pImportView->GetTreeCtrl ( ) ;
Export* p = ( Export* )
ctrl.GetItemData ( ctrl.GetSelectedItem ( ) ) ;
pCmdUI->Enable ( p->m_bDynamic && !m_pDebugControl->IsDebugging ( ) ) ;
}
void CDancerDoc::OnUpdateEditAdd ( CCmdUI* pCmdUI )
{
pCmdUI->Enable ( !m_pDebugControl->IsDebugging ( ) ) ;
}
void CDancerDoc::OnEditHookImport ( )
{
m_pImgFile->SetImport ( m_pImportView->GetTreeCtrl ( ) , TRUE ) ;
}
void CDancerDoc::OnEditHookTree ( )
{
m_pImgFile->SetTree ( m_pImportView->GetTreeCtrl ( ) , TRUE ) ;
}
void CDancerDoc::OnEditUnhookImport ( )
{
m_pImgFile->SetImport ( m_pImportView->GetTreeCtrl ( ) , FALSE ) ;
}
void CDancerDoc::OnEditUnhookTree ( )
{
m_pImgFile->SetTree ( m_pImportView->GetTreeCtrl ( ) , FALSE ) ;
}
void CDancerDoc::OnViewExpandAll ( )
{
CTreeCtrl& ctrl = m_pImportView->GetTreeCtrl ( ) ;
m_pImportView->ExpandTree ( ctrl , TVI_ROOT , TRUE ) ;
}
void CDancerDoc::OnViewFoldAll ( )
{
CTreeCtrl& ctrl = m_pImportView->GetTreeCtrl ( ) ;
m_pImportView->ExpandTree ( ctrl , TVI_ROOT , FALSE ) ;
}
void CDancerDoc::OnUpdateEditHookImport ( CCmdUI* pCmdUI )
{
pCmdUI->Enable ( m_pDebugControl->IsDebugging ( ) == FALSE ) ;
}
void CDancerDoc::OnUpdateEditHookTree ( CCmdUI* pCmdUI )
{
pCmdUI->Enable ( m_pDebugControl->IsDebugging ( ) == FALSE ) ;
}
void CDancerDoc::OnUpdateEditUnhookImport ( CCmdUI* pCmdUI )
{
pCmdUI->Enable ( m_pDebugControl->IsDebugging ( ) == FALSE ) ;
}
void CDancerDoc::OnUpdateEditUnhookTree ( CCmdUI* pCmdUI )
{
pCmdUI->Enable ( m_pDebugControl->IsDebugging ( ) == FALSE ) ;
}
void CDancerDoc::OnUpdateEditDumpTo ( CCmdUI* pCmdUI )
{
pCmdUI->Enable ( m_pDebugControl->IsDebugging ( ) == FALSE ) ;
}
void CDancerDoc::OnViewUndecorate ( )
{
CMainApp* pMainApp = ( CMainApp* ) AfxGetApp ( ) ;
pMainApp->m_appOption.m_bUndecorate = !pMainApp->m_appOption.m_bUndecorate ;
m_pExportView->Refresh ( ) ;
}
void CDancerDoc::OnUpdateViewUndecorate ( CCmdUI* pCmdUI )
{
CMainApp* pMainApp = ( CMainApp* ) AfxGetApp ( ) ;
pCmdUI->SetCheck ( pMainApp->m_appOption.m_bUndecorate ) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -