Script editor now is in a seperate tab

This commit is contained in:
Justin Marshall
2026-05-18 12:58:13 -07:00
parent 1c1f828271
commit 222cccc1f0
8 changed files with 5176 additions and 646 deletions
+93 -1
View File
@@ -47,6 +47,7 @@ If you have questions concerning this license or the applicable additional terms
#define ID_XYDOCK_XYPAGE 0x7A03
#define ID_XYDOCK_GAMEPAGE 0x7A04
#define ID_XYDOCK_MODELVIEWPAGE 0x7A05
#define ID_XYDOCK_SCRIPTEDITORPAGE 0x7A06
#define ID_GAME_HOST 0x7A30
#define ID_GAME_FILL_FIT 0x7A40
@@ -1609,6 +1610,9 @@ int CXYDockWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) {
item.pszText = "Model View";
m_wndTabs.InsertItem(XYDOCK_TAB_MODELVIEW, &item);
item.pszText = "Script Editor";
m_wndTabs.InsertItem(XYDOCK_TAB_SCRIPTEDITOR, &item);
CString pageClass = AfxRegisterWndClass(
CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS,
::LoadCursor(NULL, IDC_ARROW),
@@ -1638,6 +1642,11 @@ int CXYDockWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) {
}
m_wndModelPage.ShowWindow(SW_HIDE);
if (!m_wndScriptPage.Create(&m_wndTabs, ID_XYDOCK_SCRIPTEDITORPAGE)) {
return -1;
}
m_wndScriptPage.ShowWindow(SW_HIDE);
if (!m_wndMenuBar.Create(&m_wndXYPage, 0x7A01)) {
return -1;
}
@@ -1777,6 +1786,7 @@ void CXYDockWnd::ShowActiveTab() {
const BOOL xyActive = (m_nActiveTab == XYDOCK_TAB_XY);
const BOOL gameActive = (m_nActiveTab == XYDOCK_TAB_GAME);
const BOOL modelActive = (m_nActiveTab == XYDOCK_TAB_MODELVIEW);
const BOOL scriptActive = (m_nActiveTab == XYDOCK_TAB_SCRIPTEDITOR);
if (m_wndXYPage.GetSafeHwnd()) {
m_wndXYPage.ShowWindow(xyActive ? SW_SHOW : SW_HIDE);
@@ -1803,10 +1813,19 @@ void CXYDockWnd::ShowActiveTab() {
}
m_wndModelPage.SetActive(modelActive);
}
if (m_wndScriptPage.GetSafeHwnd()) {
m_wndScriptPage.ShowWindow(scriptActive ? SW_SHOW : SW_HIDE);
if (scriptActive) {
m_wndScriptPage.SetWindowPos(&wndTop, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
m_wndScriptPage.SetActive(scriptActive);
}
}
void CXYDockWnd::SetActiveTab(int nTab) {
if (nTab != XYDOCK_TAB_XY && nTab != XYDOCK_TAB_GAME && nTab != XYDOCK_TAB_MODELVIEW) {
if (nTab != XYDOCK_TAB_XY && nTab != XYDOCK_TAB_GAME && nTab != XYDOCK_TAB_MODELVIEW && nTab != XYDOCK_TAB_SCRIPTEDITOR) {
nTab = XYDOCK_TAB_XY;
}
@@ -1835,6 +1854,9 @@ void CXYDockWnd::SetActiveTab(int nTab) {
if (m_wndModelPage.GetSafeHwnd()) {
m_wndModelPage.SetActive(FALSE);
}
if (m_wndScriptPage.GetSafeHwnd()) {
m_wndScriptPage.SetActive(FALSE);
}
FocusGameWindow();
}
@@ -1851,10 +1873,33 @@ void CXYDockWnd::SetActiveTab(int nTab) {
if (m_wndModelPage.GetSafeHwnd()) {
m_wndModelPage.SetActive(TRUE);
}
if (m_wndScriptPage.GetSafeHwnd()) {
m_wndScriptPage.SetActive(FALSE);
}
common->ActivateTool(true);
FocusModelView();
}
else if (m_nActiveTab == XYDOCK_TAB_SCRIPTEDITOR) {
//
// Script Editor tab selected:
// - game HWND is deactivated
// - editor/tool input stays active
// - focus moves to the embedded syntax editor
//
if (m_wndGamePage.GetSafeHwnd()) {
m_wndGamePage.SetActive(FALSE);
}
if (m_wndModelPage.GetSafeHwnd()) {
m_wndModelPage.SetActive(FALSE);
}
if (m_wndScriptPage.GetSafeHwnd()) {
m_wndScriptPage.SetActive(TRUE);
}
common->ActivateTool(true);
FocusScriptEditor();
}
else {
//
// XY tab selected:
@@ -1868,6 +1913,9 @@ void CXYDockWnd::SetActiveTab(int nTab) {
if (m_wndModelPage.GetSafeHwnd()) {
m_wndModelPage.SetActive(FALSE);
}
if (m_wndScriptPage.GetSafeHwnd()) {
m_wndScriptPage.SetActive(FALSE);
}
common->ActivateTool(true);
FocusXYWindow();
@@ -1896,6 +1944,10 @@ void CXYDockWnd::SelectModelViewTab() {
SetActiveTab(XYDOCK_TAB_MODELVIEW);
}
void CXYDockWnd::SelectScriptEditorTab() {
SetActiveTab(XYDOCK_TAB_SCRIPTEDITOR);
}
BOOL CXYDockWnd::IsGameTabActive() const {
return (m_nActiveTab == XYDOCK_TAB_GAME) ? TRUE : FALSE;
}
@@ -1904,6 +1956,10 @@ BOOL CXYDockWnd::IsModelViewTabActive() const {
return (m_nActiveTab == XYDOCK_TAB_MODELVIEW) ? TRUE : FALSE;
}
BOOL CXYDockWnd::IsScriptEditorTabActive() const {
return (m_nActiveTab == XYDOCK_TAB_SCRIPTEDITOR) ? TRUE : FALSE;
}
void CXYDockWnd::AttachGameWindow(HWND hGameWnd) {
m_wndGamePage.AttachGameWindow(hGameWnd);
m_wndGamePage.SetActive(IsGameTabActive());
@@ -1929,6 +1985,19 @@ void CXYDockWnd::FocusModelView() {
m_wndModelPage.FocusModelView();
}
void CXYDockWnd::FocusScriptEditor() {
m_wndScriptPage.FocusEditor();
}
DialogScriptEditor *CXYDockWnd::GetScriptEditor() {
return &m_wndScriptPage;
}
void CXYDockWnd::OpenScriptFile(const char *fileName) {
SelectScriptEditorTab();
m_wndScriptPage.OpenFile(fileName);
}
void CXYDockWnd::FocusXYWindow() {
m_wndMDIContainer.FocusXYWindow();
}
@@ -1976,6 +2045,11 @@ void CXYDockWnd::LayoutChildren() {
m_wndModelPage.LayoutChildren();
}
if (m_wndScriptPage.GetSafeHwnd()) {
m_wndScriptPage.MoveWindow(pageRect, TRUE);
m_wndScriptPage.LayoutChildren();
}
ShowActiveTab();
if (m_pToolBar && m_pToolBar->GetSafeHwnd() && m_wndXYPage.GetSafeHwnd()) {
@@ -2039,6 +2113,15 @@ BOOL CXYDockWnd::TrackMenuMnemonic(UINT nChar) {
return FALSE;
}
BOOL CXYDockWnd::PreTranslateMessage(MSG *pMsg) {
if (m_nActiveTab == XYDOCK_TAB_SCRIPTEDITOR && m_wndScriptPage.GetSafeHwnd()) {
if (m_wndScriptPage.PreTranslateMessage(pMsg)) {
return TRUE;
}
}
return CWnd::PreTranslateMessage(pMsg);
}
void CXYDockWnd::OnSize(UINT nType, int cx, int cy) {
CWnd::OnSize(nType, cx, cy);
LayoutChildren();
@@ -2057,6 +2140,11 @@ LRESULT CXYDockWnd::OnIdleUpdateCmdUI(WPARAM wParam, LPARAM lParam) {
}
BOOL CXYDockWnd::OnCommand(WPARAM wParam, LPARAM lParam) {
if (m_nActiveTab == XYDOCK_TAB_SCRIPTEDITOR && m_wndScriptPage.GetSafeHwnd()) {
m_wndScriptPage.SendMessage(WM_COMMAND, wParam, lParam);
return TRUE;
}
if (m_nActiveTab != XYDOCK_TAB_XY) {
return CWnd::OnCommand(wParam, lParam);
}
@@ -2092,6 +2180,10 @@ BOOL CXYDockWnd::OnCmdMsg(UINT nID, int nCode, void *pExtra, AFX_CMDHANDLERINFO
return TRUE;
}
if (m_nActiveTab == XYDOCK_TAB_SCRIPTEDITOR && m_wndScriptPage.GetSafeHwnd()) {
return m_wndScriptPage.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
if (m_nActiveTab != XYDOCK_TAB_XY) {
return FALSE;
}