Files
firestorm/Gameleap/code/mw4/Code/MW4GameEd/EditWnd.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

239 lines
4.9 KiB
C++

// EditWnd.cpp : implementation file
//
#include "stdafx.h"
#include "mw4gameed.h"
#include "EditWnd.h"
#include <direct.h>
#define __mbsrchr(s,c) (char*)_mbsrchr((const unsigned char*)(s),(c))
extern CMW4GameEdApp theApp;
static DWORD CALLBACK MyStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*) dwCookie;
*pcb = pFile->Read(pbBuff, cb);
return 0;
}
static DWORD CALLBACK MyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*) dwCookie;
pFile->Write(pbBuff, cb);
*pcb = cb;
return 0;
}
/////////////////////////////////////////////////////////////////////////////
// CEditWnd
CEditWnd::CEditWnd()
{
CloseCallback = NULL;
}
CEditWnd::CEditWnd(char* string)
{
path = string;
}
CEditWnd::~CEditWnd()
{
}
BEGIN_MESSAGE_MAP(CEditWnd, CEditorChildWnd)
//{{AFX_MSG_MAP(CEditWnd)
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_CLOSE()
ON_WM_VSCROLL()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditWnd message handlers
BOOL CEditWnd::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style |= WS_CHILD | WS_OVERLAPPEDWINDOW;
return CWnd::PreCreateWindow(cs);
}
int CEditWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
RECT r;
GetClientRect(&r);
editWnd.Create(ES_LEFT | ES_MULTILINE | ES_WANTRETURN | ES_AUTOVSCROLL | WS_CHILD | WS_VISIBLE,r,this,0);
editWnd.SetBackgroundColor(TRUE,RGB(255,255,0));
LoadFile();
return 0;
}
void CEditWnd::OnSize(UINT nType, int cx, int cy)
{
CEditorChildWnd::OnSize(nType, cx, cy);
editWnd.SetWindowPos(NULL,0,0,cx,cy,SWP_NOZORDER);
}
void CEditWnd::OnClose()
{
MessageBeep(MB_ICONQUESTION);
if (MessageBox("Save this data?","Save",MB_ICONQUESTION | MB_YESNO) == IDYES)
{
if (path)
{
CFile cFile(path,CFile::modeCreate | CFile::modeWrite);
EDITSTREAM es;
es.dwCookie = (DWORD) &cFile;
es.pfnCallback = MyStreamOutCallback;
editWnd.StreamOut(SF_TEXT, es);
cFile.Close();
if (CloseCallback)
CloseCallback((char*)(LPCTSTR)path);
}
else
{
char scriptPath[MAX_PATH],oldDir[MAX_PATH],path[MAX_PATH],*p;
OPENFILENAME ofn;
_getcwd(oldDir,MAX_PATH - 1);
strcpy(path,theApp.missionFileName);
p = __mbsrchr(path,'\\');
*p = 0;
_chdir(path);
memset(&scriptPath,0,MAX_PATH);
memset(&ofn,0,sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
ofn.lpstrFilter = "ABL files {*.ABL}\0*.abl\0All Files {*.*}\0*.*\0\0";
ofn.lpstrFile = scriptPath;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrDefExt = "abl";
if (GetSaveFileName(&ofn))
{
CFile cFile(ofn.lpstrFile,CFile::modeCreate | CFile::modeWrite);
EDITSTREAM es;
es.dwCookie = (DWORD) &cFile;
es.pfnCallback = MyStreamOutCallback;
editWnd.StreamOut(SF_TEXT, es);
cFile.Close();
if (CloseCallback && !CloseCallback(ofn.lpstrFile))
return;
}
else
return;
}
}
else
LoadFile();
ShowWindow(SW_HIDE);
// CEditorChildWnd::OnClose();
}
void CEditWnd::LoadFile(char* filepath)
{
if (filepath)
path = filepath;
if (path)
{
CFile cFile;
EDITSTREAM es;
if (cFile.Open(path,CFile::modeRead,NULL))
{
es.dwCookie = (DWORD) &cFile;
es.pfnCallback = MyStreamInCallback;
editWnd.StreamIn(SF_TEXT, es);
cFile.Close();
}
}
}
void CEditWnd::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CEditorChildWnd::OnVScroll(nSBCode, nPos, pScrollBar);
}
/////////////////////////////////////////////////////////////////////////////
// CEditCtrl
CEditCtrl::CEditCtrl()
{
}
CEditCtrl::~CEditCtrl()
{
}
BEGIN_MESSAGE_MAP(CEditCtrl, CRichEditCtrl)
//{{AFX_MSG_MAP(CEditCtrl)
ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
ON_WM_CREATE()
ON_WM_VSCROLL()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditCtrl message handlers
int CEditCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CRichEditCtrl::OnCreate(lpCreateStruct) == -1)
return -1;
SetEventMask(GetEventMask() | ENM_CHANGE);
ShowScrollBar(SB_VERT);
return 0;
}
void CEditCtrl::OnChange()
{
SCROLLINFO scroll;
scroll.cbSize = sizeof(scroll);
scroll.fMask = SIF_DISABLENOSCROLL | SIF_RANGE;// | SIF_PAGE;
scroll.nMin = 0;
scroll.nMax = GetLineCount();
// scroll.nPage = ;
SetScrollInfo(SB_VERT,&scroll);
}
void CEditCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if (nSBCode == SB_THUMBTRACK)
{
LineScroll(GetFirstVisibleLine() - GetScrollPos(SB_VERT));
}
else
SetScrollPos(SB_VERT,GetFirstVisibleLine());
CRichEditCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}