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

📄 plxcdoc.cpp

📁 一个PLX教学编译器IDE
💻 CPP
字号:

#include "stdafx.h"
#include "plxc.h"

#include "plxcDoc.h"
#include "FileSelectionDlg.h"

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

IMPLEMENT_DYNCREATE(CPlxcDoc, CDocument)

BEGIN_MESSAGE_MAP(CPlxcDoc, CDocument)
	//{{AFX_MSG_MAP(CPlxcDoc)
	ON_COMMAND(IDM_BUILD, OnBuild)
	ON_COMMAND(IDM_COMPILE, OnCompile)
	ON_COMMAND(IDM_BUILDRELEASE, OnBuildrelease)
	ON_COMMAND(IDM_RUN, OnRun)
	ON_COMMAND(ID_EDIT_CUT, OnEditCut)
	ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
	ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
	ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
	ON_COMMAND(IDM_SEARCHTEXT, OnSearchtext)
	ON_COMMAND(IDM_STARTDEBUG, OnStartdebug)
	ON_UPDATE_COMMAND_UI(IDM_STARTDEBUG, OnUpdateStartdebug)
	ON_COMMAND(IDM_STEPIN, OnStepin)
	ON_UPDATE_COMMAND_UI(IDM_STEPIN, OnUpdateStepin)
//	ON_COMMAND(IDM_STEPOUT, OnStepout)
//	ON_UPDATE_COMMAND_UI(IDM_STEPOUT, OnUpdateStepout)
	ON_COMMAND(IDM_STOPDEBUG, OnStopdebug)
	ON_UPDATE_COMMAND_UI(IDM_STOPDEBUG, OnUpdateStopdebug)
//	ON_COMMAND(IDM_STRPOVER, OnStrpover)
//	ON_UPDATE_COMMAND_UI(IDM_STRPOVER, OnUpdateStrpover)
	ON_UPDATE_COMMAND_UI(ID_FILE_NEW, OnUpdateFileNew)
	ON_UPDATE_COMMAND_UI(ID_FILE_OPEN, OnUpdateFileOpen)
	ON_UPDATE_COMMAND_UI(ID_FILE_CLOSE, OnUpdateFileClose)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

CPlxcDoc::CPlxcDoc()
{
	GetMainFrameP();
}

CPlxcDoc::~CPlxcDoc()
{
}

void CPlxcDoc::GetMainFrameP()
{
    pMainFrm = (CMainFrame*)::AfxGetMainWnd();
}
/* 在首次视图开启或者新建立一个视图的时候会触发这个消息,也是加载的好时机 */
BOOL CPlxcDoc::OnNewDocument()
{
	CString strFilePath = GetNewFileName();

	InitBoss();

	LPACTION pAction = new ACTION();
	pAction->msg  = WM_APP_FILE_NEW;
    pAction->text = strFilePath;
	MsgTransmitProc(pAction);

	if(pAction->lParam == FALSE)	
	    return FALSE;

	delete pAction;

    /* 获取新建文件的名字 */
	if (!CDocument::OnNewDocument())
		return FALSE;

	return TRUE;
}

CString CPlxcDoc::GetNewFileName()
{
    CFileSelectionDlg m_newFileName;

    if(m_newFileName.DoModal() != IDOK)
	{
	    return _T("");
	}

	return m_newFileName.m_strFilePath;
}

BOOL CPlxcDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
	InitBoss();

	if (!CDocument::OnOpenDocument(lpszPathName))
		return FALSE;
	
	LPACTION pAction = new ACTION();
	pAction->msg  = WM_APP_FILE_OPEN;
	pAction->text = lpszPathName; 
	MsgTransmitProc(pAction);
	delete pAction;

	return TRUE;
}

BOOL CPlxcDoc::OnSaveDocument(LPCTSTR lpszPathName) 
{	
	LPACTION pAction = new ACTION();
	pAction->msg  = WM_APP_FILE_SAVE;
    pAction->text = lpszPathName;
	MsgTransmitProc(pAction);

	if(pAction->lParam == 0)
	{
	   MessageBox(NULL,_T("Save file failure!"),_T("Error"),MB_OK);
	}

	delete pAction;

	return 1;
}

/* 一定要把发送信息代码放到调用底层函数之前这样才不会消除boss */
void CPlxcDoc::OnCloseDocument() 
{	
	LPACTION pAction = new ACTION();
	pAction->msg  = WM_APP_FILE_CLOSE;
	MsgTransmitProc(pAction);
	delete pAction;	  

	CDocument::OnCloseDocument();
}

bool CPlxcDoc::GetCurrentDebugSates()
{
    CPlxcApp *pApp = (CPlxcApp*)AfxGetApp();
	ASSERT_VALID(pApp);

    return pApp->GetDebugState();
}

void CPlxcDoc::SetCurrentDebugState(bool bState)
{
    CPlxcApp *pApp = (CPlxcApp*)AfxGetApp();
	ASSERT_VALID(pApp);

    pApp->SetDebugState(bState);
}

/*---------------------------------------------------------------------------------*/

void CPlxcDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
	}
	else
	{
	}
}

#ifdef _DEBUG
void CPlxcDoc::AssertValid() const
{
	CDocument::AssertValid();
}

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

#include "MainFrm.h"

/*  向boss传递界面信息 */
void CPlxcDoc::InitBoss()
{
	GetMainFrameP();

	LPACTION pAction = new ACTION();

	pAction->msg    = WM_INITDOCUMENT;
	pAction->pWnd   = &(pMainFrm->m_debugInfoDlg.m_debugInfoEditView);
	pAction->wParam = IDENT_WND_DEBUG;
	MsgTransmitProc(pAction);

    pAction->pWnd   = &(pMainFrm->m_cbSearchText);
	pAction->wParam = IDENT_WND_COMBOSEARCH;
    MsgTransmitProc(pAction);

	pAction->pWnd   = &(pMainFrm->m_cbEditfileName);
	pAction->wParam = IDENT_WND_COMBOFILENAME;
    MsgTransmitProc(pAction);

	pAction->pWnd   = &(pMainFrm->m_sourceInfoDlg.m_ctrlFileTree);
	pAction->wParam = IDENT_WND_FILELIST;
    MsgTransmitProc(pAction);

    pAction->pWnd   = &(pMainFrm->m_debugOutInfoDlg.m_codeView);
	pAction->wParam = IDENT_WND_CODEVIEW;
    MsgTransmitProc(pAction);

	pAction->pWnd   = &(pMainFrm->m_debugOutInfoDlg.m_resultView);
	pAction->wParam = IDENT_WND_RESULTVIEW;
    MsgTransmitProc(pAction);

	pAction->pWnd   = &(pMainFrm->m_debugOutInfoDlg.m_variableList);
	pAction->wParam = IDENT_WND_VARIABLELIST;
    MsgTransmitProc(pAction);
	
    delete pAction;
}

/*  消息转发中心 */
void CPlxcDoc::MsgTransmitProc(LPACTION pAction)
{
    boss.DefMsgProc(pAction);
}

/* 菜单处理  build */
void CPlxcDoc::OnBuild() 
{
	if(GetCurrentDebugSates())
	{
		::MessageBox(NULL,_T("Must stop first!"),_T("Warnnin"),MB_OK);
		return;
	}
	
	LPACTION pAction = new ACTION();
	pAction->msg     = WM_COM_BUILD;
	MsgTransmitProc(pAction);	
    delete pAction;
}

void CPlxcDoc::OnCompile() 
{
	if(GetCurrentDebugSates())
	{
		::MessageBox(NULL,_T("Must stop first!"),_T("Warnnin"),MB_OK);
		return;
	}
	
	LPACTION pAction = new ACTION();
	pAction->msg     = WM_COM_COMPILE;
	MsgTransmitProc(pAction);	
    delete pAction;
}

void CPlxcDoc::OnBuildrelease() 
{
	
}

void CPlxcDoc::OnRun() 
{
	if(GetCurrentDebugSates())
	{
		::MessageBox(NULL,_T("Must stop first!"),_T("Warnnin"),MB_OK);
		return;
	}

	LPACTION pAction = new ACTION();
	pAction->msg     = WM_COM_RUN;
	MsgTransmitProc(pAction);	
    delete pAction;
}

/*********************************************************************************/

/* 点击编译,build恢复debug窗体,注意不要使用ShowControlBar因为它并没有改变变量值 */
void CPlxcDoc::StepIntoCompileUI(bool flags)
{ 
	if(flags == TRUE)
	{
		if(pMainFrm->m_bDebugInfo)	
			pMainFrm->PostMessage(WM_COMMAND,IDM_WND_DEBUG,0);
		
		if(pMainFrm->m_bSourceInfo)
			pMainFrm->PostMessage(WM_COMMAND,IDM_WND_SOURCEINFO,0);
		
		pMainFrm->ShowDebugOutInfo();		
	}else
	{
		pMainFrm->PostMessage(WM_COMMAND,IDM_WND_DEBUG,0);	   
		pMainFrm->PostMessage(WM_COMMAND,IDM_WND_SOURCEINFO,0);
		pMainFrm->ShowDebugOutInfo();
	}
}

void CPlxcDoc::OnEditCut() 
{
    LPACTION pAction = new ACTION();
	pAction->msg     = WM_COM_CUT;
	MsgTransmitProc(pAction);	
    delete pAction;	
}

void CPlxcDoc::OnEditPaste() 
{
   	LPACTION pAction = new ACTION();
	pAction->msg     = WM_COM_PASTE;
	MsgTransmitProc(pAction);	
    delete pAction;	
}

void CPlxcDoc::OnEditUndo() 
{
	LPACTION pAction = new ACTION();
	pAction->msg     = WM_COM_UNDO;
	MsgTransmitProc(pAction);	
    delete pAction;
}

void CPlxcDoc::OnEditCopy() 
{
	LPACTION pAction = new ACTION();
	pAction->msg     = WM_COM_COPY;
	MsgTransmitProc(pAction);	
    delete pAction;
}

void CPlxcDoc::OnSearchtext() 
{
    LPACTION pAction = new ACTION();
	pAction->msg     = WM_COM_SEARCHSTRING;
	MsgTransmitProc(pAction);	
    delete pAction;	
}

/**********************************  调试 ***************************************/
/* 开始调试  */
void CPlxcDoc::OnStartdebug() 
{
	LPACTION pAction = new ACTION();
	pAction->msg     = WM_COM_DEBUG;
	MsgTransmitProc(pAction);
	
	int result = pAction->wParam;
    delete pAction;

	if(result != 0)
	{
	    SetCurrentDebugState(TRUE);
	    StepIntoCompileUI(TRUE);
	}
}

void CPlxcDoc::OnUpdateStartdebug(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(!GetCurrentDebugSates());
}

/* 跟踪进入  */
void CPlxcDoc::OnStepin() 
{
	LPACTION pAction = new ACTION();
	pAction->msg     = WM_COM_STEPINTO;
	MsgTransmitProc(pAction);
    delete pAction;
}

void CPlxcDoc::OnUpdateStepin(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(GetCurrentDebugSates());
}

/* 停止调试  */
void CPlxcDoc::OnStopdebug() 
{
	SetCurrentDebugState(FALSE);
	StepIntoCompileUI(FALSE);
}

void CPlxcDoc::OnUpdateStopdebug(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(GetCurrentDebugSates());
}

/* 新建,打开,关闭三个系统按钮在调试开启后不可使用 */
void CPlxcDoc::OnUpdateFileNew(CCmdUI* pCmdUI) 
{
    pCmdUI->Enable(!GetCurrentDebugSates());
}

void CPlxcDoc::OnUpdateFileOpen(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(!GetCurrentDebugSates());
}

void CPlxcDoc::OnUpdateFileClose(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(!GetCurrentDebugSates());
}

⌨️ 快捷键说明

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