Files
envi-code/SourceCode/Code2026/tg_shs/inc/Acad/TGArxEntrypoint.h
T
2026-09-28 15:28:50 +08:00

486 lines
11 KiB
C

#if !defined(__TGARXENTRYPOINT_H__)
#define __TGARXENTRYPOINT_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Only can incule this file in Source file(.c/.cpp) Only one time!
// Do not include this file in other "Include file(.h/.hpp)"! --wyg
#define TG_BEGIN_IMPLEMENT_CMD_MAP_ARXAPP_ENTRYPOINT_EX(CArxEntryApp) \
CArxEntryApp theTGArxEntryApp; \
extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt) \
{ \
if (msg == AcRx::kInitAppMsg) \
{ \
#define TG_BEGIN_IMPLEMENT_CMD_MAP_ARXAPP_ENTRYPOINT() \
TG_BEGIN_IMPLEMENT_CMD_MAP_ARXAPP_ENTRYPOINT_EX(TGArxEntryApp) \
#define ON_TG_ARXCMD_GROUP(CArxCmdGroup) \
theTGArxEntryApp.AddArxCommandGroup(RUNTIME_CLASS(CArxCmdGroup)); \
#define ON_TG_ADSCMD_GROUP(CAdsCmdGroup) \
theTGArxEntryApp.AddAdsCommandGroup(RUNTIME_CLASS(CAdsCmdGroup)); \
#define TG_END_IMPLEMENT_CMD_MAP_ARXAPP_ENTRYPOINT() \
} \
return theTGArxEntryApp.DispatchEntryMsg(msg, pkt); \
} \
const TGArxEntryApp* GetArxEntryApp() \
{ \
return &theTGArxEntryApp; \
} \
#define TG_IMPLEMENT_ARXAPP_ENTRYPOINT(CArxEntryApp) \
TG_BEGIN_IMPLEMENT_CMD_MAP_ARXAPP_ENTRYPOINT_EX(CArxEntryApp) \
TG_END_IMPLEMENT_CMD_MAP_ARXAPP_ENTRYPOINT() \
#define TG_IMPLEMENT_CMD_ARXAPP_ENTRYPOINT(CArxCmdGroup, CAdsCmdGroup) \
TG_BEGIN_IMPLEMENT_CMD_MAP_ARXAPP_ENTRYPOINT() \
ON_TG_ARXCMD_GROUP(CArxCmdGroup) \
ON_TG_ADSCMD_GROUP(CAdsCmdGroup) \
TG_END_IMPLEMENT_CMD_MAP_ARXAPP_ENTRYPOINT() \
#define TG_IMPLEMENT_ARXCMD_ARXAPP_ENTRYPOINT(CArxCmdGroup) \
TG_BEGIN_IMPLEMENT_CMD_MAP_ARXAPP_ENTRYPOINT() \
ON_TG_ARXCMD_GROUP(CArxCmdGroup) \
TG_END_IMPLEMENT_CMD_MAP_ARXAPP_ENTRYPOINT() \
#define TG_IMPLEMENT_ADSCMD_ARXAPP_ENTRYPOINT(CAdsCmdGroup) \
TG_BEGIN_IMPLEMENT_CMD_MAP_ARXAPP_ENTRYPOINT() \
ON_TG_ADSCMD_GROUP(CAdsCmdGroup) \
TG_END_IMPLEMENT_CMD_MAP_ARXAPP_ENTRYPOINT() \
#include "TGDebug.h"
#include "TGArxEntryApp.h"
#include "TGArxCmdGroup.h"
#include "TGAdsCmdGroup.h"
IMPLEMENT_DYNCREATE(TGArxEntryApp, CObject)
TGArxEntryApp::TGArxEntryApp()
{
m_eCurMsg = AcRx::kNullMsg;
m_pCurParam = NULL;
m_pThisArxApp = NULL;
// Must be 1 --wyg
m_iArxFunCode = 1;
m_iAdsFunCode = 1;
}
TGArxEntryApp::~TGArxEntryApp()
{
}
void TGArxEntryApp::AddArxCommandGroup(CRuntimeClass* pClass)
{
TGASSERT(pClass != NULL);
TGASSERT(pClass->IsDerivedFrom(RUNTIME_CLASS(TGArxCmdGroup)));
TGASSERT(GetArxCommandGroup(pClass) == NULL);
TGArxCmdGroup* pArxCmdGroup = (TGArxCmdGroup*)pClass->CreateObject();
TGASSERT(pArxCmdGroup != NULL);
pArxCmdGroup->m_pArxEntryApp = this;
m_arArxCmdGroups.Add(pArxCmdGroup);
}
void TGArxEntryApp::AddAdsCommandGroup(CRuntimeClass* pClass)
{
TGASSERT(pClass != NULL);
TGASSERT(pClass->IsDerivedFrom(RUNTIME_CLASS(TGAdsCmdGroup)));
TGASSERT(GetAdsCommandGroup(pClass) == NULL);
TGAdsCmdGroup* pAdsCmdGroup = (TGAdsCmdGroup*)pClass->CreateObject();
TGASSERT(pAdsCmdGroup != NULL);
pAdsCmdGroup->m_pArxEntryApp = this;
m_arAdsCmdGroups.Add(pAdsCmdGroup);
}
TGArxCmdGroup* TGArxEntryApp::GetArxCommandGroup(CRuntimeClass* pClass)
{
TGASSERT(pClass != NULL);
TGArxCmdGroup* pArxCmdGroup;
int iSize = m_arArxCmdGroups.GetSize();
for (int i = 0; i < iSize; i++)
{
pArxCmdGroup = m_arArxCmdGroups[i];
TGASSERT(pArxCmdGroup != NULL);
if (pArxCmdGroup->IsKindOf(pClass))
return pArxCmdGroup;
}
return NULL;
}
TGAdsCmdGroup* TGArxEntryApp::GetAdsCommandGroup(CRuntimeClass* pClass)
{
TGASSERT(pClass != NULL);
TGAdsCmdGroup* pAdsCmdGroup;
int iSize = m_arAdsCmdGroups.GetSize();
for (int i = 0; i < iSize; i++)
{
pAdsCmdGroup = m_arAdsCmdGroups[i];
TGASSERT(pAdsCmdGroup != NULL);
if (pAdsCmdGroup->IsKindOf(pClass))
return pAdsCmdGroup;
}
return NULL;
}
AcRx::AppRetCode TGArxEntryApp::DispatchEntryMsg(AcRx::AppMsgCode eMsg, void* pParam)
{
m_eCurMsg = eMsg;
m_pCurParam = pParam;
AcRx::AppRetCode eRetCode = AcRx::kRetOK;
switch (eMsg)
{
case AcRx::kInitAppMsg:
m_pThisArxApp = pParam;
eRetCode = On_PreInitAppMsg();
break;
case AcRx::kLoadDwgMsg:
eRetCode = On_kLoadDwgMsg();
break;
case AcRx::kUnloadDwgMsg:
eRetCode = On_kUnloadDwgMsg();
break;
case AcRx::kInvkSubrMsg:
eRetCode = On_kInvkSubrMsg();
break;
case AcRx::kInitDialogMsg:
eRetCode = On_kInitDialogMsg((CAdUiTabExtensionManager*)pParam);
break;
case AcRx::kEndDialogMsg:
eRetCode = On_kEndDialogMsg();
break;
case AcRx::kNullMsg:
eRetCode = On_kNullMsg();
break;
case AcRx::kCfgMsg:
eRetCode = On_kCfgMsg();
break;
case AcRx::kOleUnloadAppMsg:
eRetCode = On_kOleUnloadAppMsg();
break;
case AcRx::kDependencyMsg:
eRetCode = On_kDependencyMsg();
break;
case AcRx::kNoDependencyMsg:
eRetCode = On_kNoDependencyMsg();
break;
case AcRx::kSaveMsg:
eRetCode = On_kSaveMsg();
break;
case AcRx::kEndMsg:
eRetCode = On_kEndMsg();
break;
case AcRx::kPreQuitMsg:
eRetCode = On_kPreQuitMsg();
break;
case AcRx::kQuitMsg:
eRetCode = On_kQuitMsg();
break;
case AcRx::kUnloadAppMsg:
eRetCode = On_kUnloadAppMsg();
break;
}
return eRetCode;
}
void TGArxEntryApp::LockApplication()
{
TGASSERT(m_pThisArxApp != NULL);
acrxDynamicLinker->lockApplication(m_pThisArxApp);
}
void TGArxEntryApp::UnlockApplication()
{
TGASSERT(m_pThisArxApp != NULL);
acrxDynamicLinker->unlockApplication(m_pThisArxApp);
}
void* TGArxEntryApp::GetThisArxApp()
{
return m_pThisArxApp;
}
AcRx::AppRetCode TGArxEntryApp::On_PreInitAppMsg()
{
TGASSERT(m_pThisArxApp != NULL);
acrxDynamicLinker->unlockApplication(m_pThisArxApp);
acrxDynamicLinker->registerAppMDIAware(m_pThisArxApp);
return On_kInitAppMsg();
}
AcRx::AppRetCode TGArxEntryApp::On_kInitAppMsg()
{
TGArxCmdGroup* pArxCmdGroup;
int iSize = m_arArxCmdGroups.GetSize();
for (int i = 0; i < iSize; i++)
{
pArxCmdGroup = m_arArxCmdGroups[i];
TGASSERT(pArxCmdGroup != NULL);
pArxCmdGroup->OnAddCommands();
}
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kUnloadAppMsg()
{
TGArxCmdGroup* pArxCmdGroup;
int iSize = m_arArxCmdGroups.GetSize();
int i = 0;
for (i = 0; i < iSize; i++)
{
pArxCmdGroup = m_arArxCmdGroups[i];
TGASSERT(pArxCmdGroup != NULL);
pArxCmdGroup->OnRemoveCommands();
delete pArxCmdGroup;
}
TGAdsCmdGroup* pAdsCmdGroup;
iSize = m_arAdsCmdGroups.GetSize();
for (i = 0; i < iSize; i++)
{
pAdsCmdGroup = m_arAdsCmdGroups[i];
TGASSERT(pAdsCmdGroup != NULL);
delete pAdsCmdGroup;
}
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kLoadDwgMsg()
{
TGAdsCmdGroup* pAdsCmdGroup;
int iSize = m_arAdsCmdGroups.GetSize();
for (int i = 0; i < iSize; i++)
{
pAdsCmdGroup = m_arAdsCmdGroups[i];
TGASSERT(pAdsCmdGroup != NULL);
pAdsCmdGroup->OnAddCommands();
}
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kUnloadDwgMsg()
{
TGAdsCmdGroup* pAdsCmdGroup;
int iSize = m_arAdsCmdGroups.GetSize();
for (int i = 0; i < iSize; i++)
{
pAdsCmdGroup = m_arAdsCmdGroups[i];
TGASSERT(pAdsCmdGroup != NULL);
pAdsCmdGroup->OnRemoveCommands();
}
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kInvkSubrMsg()
{
TGAdsCmdGroup* pAdsCmdGroup;
int iSize = m_arAdsCmdGroups.GetSize();
for (int i = 0; i < iSize; i++)
{
pAdsCmdGroup = m_arAdsCmdGroups[i];
TGASSERT(pAdsCmdGroup != NULL);
pAdsCmdGroup->OnInvkSubCommand();
}
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kInitDialogMsg(CAdUiTabExtensionManager* pTabMgr)
{
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kEndDialogMsg()
{
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kNullMsg()
{
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kCfgMsg()
{
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kOleUnloadAppMsg()
{
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kDependencyMsg()
{
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kNoDependencyMsg()
{
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kSuspendMsg()
{
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kSaveMsg()
{
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kEndMsg()
{
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kPreQuitMsg()
{
return AcRx::kRetOK;
}
AcRx::AppRetCode TGArxEntryApp::On_kQuitMsg()
{
return AcRx::kRetOK;
}
IMPLEMENT_DYNAMIC(TGArxCmdGroup, CObject)
TGArxCmdGroup::TGArxCmdGroup()
{
m_pArxEntryApp = NULL;
}
TGArxCmdGroup::~TGArxCmdGroup()
{
}
LPCTSTR TGArxCmdGroup::GetStringFromId(int iID)
{
return NULL;
}
void TGArxCmdGroup::OnAddCommands()
{
AcRxFunctionPtr pfnMainProc = OnGetMainProc();
TGASSERT(pfnMainProc != NULL);
TGArxCmdInfo* pCmdEntry = OnGetCmdEntry();
TGASSERT(pCmdEntry != NULL);
LPCTSTR pszGroupName = OnGetGroupName();
TGASSERT(pszGroupName != NULL);
int iSize = OnGetCmdEntrySize();
for (int i = 0; i < iSize; i++, m_pArxEntryApp->m_iArxFunCode++)
{
pCmdEntry[i].pszGroup = pszGroupName;
pCmdEntry[i].iFunCode = m_pArxEntryApp->m_iArxFunCode;
if (pCmdEntry[i].idLocal > 0)
{
acedRegCmds->addCommand(pszGroupName, pCmdEntry[i].pszInter,
GetStringFromId(pCmdEntry[i].idLocal), pCmdEntry[i].lFlags,
pfnMainProc, NULL, m_pArxEntryApp->m_iArxFunCode);
}
else
{
acedRegCmds->addCommand(pszGroupName, pCmdEntry[i].pszInter,
pCmdEntry[i].pszLocal, pCmdEntry[i].lFlags,
pfnMainProc, NULL, m_pArxEntryApp->m_iArxFunCode);
}
}
}
void TGArxCmdGroup::OnRemoveCommands()
{
LPCTSTR pszGroupName = OnGetGroupName();
TGASSERT(pszGroupName != NULL);
acedRegCmds->removeGroup(pszGroupName);
}
void TGArxCmdGroup::OnInvkSubCommand()
{
TGArxCmdInfo* pCmdEntry = OnGetCmdEntry();
TGASSERT(pCmdEntry != NULL && OnGetCmdEntrySize() > 0);
int iFunCode = acedGetFunCode();
int iFunIndex = iFunCode - pCmdEntry[0].iFunCode;
if (iFunIndex < 0 || iFunIndex >= OnGetCmdEntrySize()
|| pCmdEntry[iFunIndex].iFunCode != iFunCode)
return;
(this->*pCmdEntry[iFunIndex].pFnCmd)();
}
IMPLEMENT_DYNAMIC(TGAdsCmdGroup, CObject)
TGAdsCmdGroup::TGAdsCmdGroup()
{
m_pArxEntryApp = NULL;
}
TGAdsCmdGroup::~TGAdsCmdGroup()
{
}
void TGAdsCmdGroup::OnAddCommands()
{
TGAdsCmdInfo* pCmdEntry = OnGetCmdEntry();
TGASSERT(pCmdEntry != NULL);
int iSize = OnGetCmdEntrySize();
for (int i = 0; i < iSize; i++, m_pArxEntryApp->m_iAdsFunCode++)
{
pCmdEntry[i].iFunCode = m_pArxEntryApp->m_iAdsFunCode;
if (acedDefun(pCmdEntry[i].pszName, m_pArxEntryApp->m_iAdsFunCode) == RTNORM)
{
// not use or to be repaired
// if (pCmdEntry[i].bRegFunc)
// acedRegFunc(pCmdEntry[i].pFnCmd, m_pArxEntryApp->m_iAdsFunCode);
}
}
}
void TGAdsCmdGroup::OnRemoveCommands()
{
TGAdsCmdInfo* pCmdEntry = OnGetCmdEntry();
TGASSERT(pCmdEntry != NULL);
int iSize = OnGetCmdEntrySize();
for (int i = 0; i < iSize; i++)
{
acedUndef(pCmdEntry[i].pszName, pCmdEntry[i].iFunCode);
}
}
void TGAdsCmdGroup::OnInvkSubCommand()
{
TGAdsCmdInfo* pCmdEntry = OnGetCmdEntry();
TGASSERT(pCmdEntry != NULL && OnGetCmdEntrySize() > 0);
int iFunCode = acedGetFunCode();
int iFunIndex = iFunCode - pCmdEntry[0].iFunCode;
if (iFunIndex < 0 || iFunIndex >= OnGetCmdEntrySize()
|| pCmdEntry[iFunIndex].iFunCode != iFunCode)
return;
#ifdef RENDER
// not use or to be repaired
// if (pCmdEntry[iFunIndex].bRenderCmd)
// InitRender(false);
#endif // RENDER
if (!(this->*pCmdEntry[iFunIndex].pFnCmd)())
acedRetVoid();
}
#endif // __TGARXENTRYPOINT_H__