Files
Jedi-Academy/tools/ModView/modviewdoc.cpp
2013-04-04 14:32:05 -07:00

181 lines
4.7 KiB
C++

// ModViewDoc.cpp : implementation of the CModViewDoc class
//
#include "stdafx.h"
#include "includes.h"
#include "ModView.h"
#include "script.h"
#include "ModViewDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CModViewDoc
IMPLEMENT_DYNCREATE(CModViewDoc, CDocument)
BEGIN_MESSAGE_MAP(CModViewDoc, CDocument)
//{{AFX_MSG_MAP(CModViewDoc)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CModViewDoc construction/destruction
CModViewDoc* gpDocument = NULL;
CModViewDoc::CModViewDoc()
{
gpDocument = this;
}
CModViewDoc::~CModViewDoc()
{
}
BOOL CModViewDoc::OnNewDocument()
{
Model_Delete();
return CDocument::OnNewDocument();
}
/////////////////////////////////////////////////////////////////////////////
// CModViewDoc serialization
void CModViewDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
/////////////////////////////////////////////////////////////////////////////
// CModViewDoc diagnostics
#ifdef _DEBUG
void CModViewDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CModViewDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CModViewDoc commands
CString strLastRealDocName;
CModViewDoc* gpLastOpenedModViewDoc = NULL;
void FuckingWellSetTheDocumentNameAndDontBloodyIgnoreMeYouCunt(LPCSTR psDocName)
{
if (gpLastOpenedModViewDoc)
{
// make absolutely fucking sure this bastard does as it's told...
//
gpLastOpenedModViewDoc->SetPathName(psDocName,false);
gpLastOpenedModViewDoc->SetTitle (psDocName);
}
}
LPCSTR LengthenFilenameW95W98(LPCSTR psFilename)
{
// need to do this for Xmen models when running from a batch file under W95/98...
//
static char sDest[1024];
sDest[0]='\0';
DWORD dwCount = GetLongPathName(psFilename,sDest,sizeof(sDest));
return sDest;
}
//
// function will now recurse back into here if loading a script! (*.mvs)
//
BOOL CModViewDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
string str = LengthenFilenameW95W98(lpszPathName);
if (str.empty()) // if it was empty, then arg didn't eval to a filename (eg "#startminimized"), so return original
{
str = lpszPathName;
}
lpszPathName = str.c_str();
if (strstr(lpszPathName,"#startminimized"))
{
extern bool gbStartMinimized;
gbStartMinimized = true;
OnNewDocument();
// None of this shit works, because whatever you set the current document to MS override it with a derived name,
// and since the CWinApp class can't even ask what it's own fucking document pointer is without doing a hundred
// lines of shit deep within MFC then I'm going to fuck the whole lot off by storing a pointer which I can then
// use later in the CWinApp class to override the doc name.
//
// All this fucking bollocks was because MS insist on doing their own switch-comparing so I can't pass in 'real'
// switches, I have to use this '#' crap. Stupid fucking incompetent MS dickheads. Like how hard would it be to
// pass command line switches to the app instead of just filenames?
//
strLastRealDocName = "Untitled";
SetPathName(strLastRealDocName, false); // I shouldn't have to do this, but MFC doesn't do it for some reason
SetTitle(strLastRealDocName);
gpLastOpenedModViewDoc = this;
return true;
}
// if (!CDocument::OnOpenDocument(lpszPathName))
// return FALSE;
// check for script file first...
//
if (lpszPathName && !stricmp(&lpszPathName[strlen(lpszPathName)-4],".mvs"))
{
Script_Read(lpszPathName); // this will recurse back into this function
SetPathName(lpszPathName, true); // add script file to MRU
SetPathName(strLastRealDocName); // DOESN'T WORK!: set doc/app name to last real model load, not the script name
return true;
}
if (lpszPathName && Model_LoadPrimary(lpszPathName))
{
strLastRealDocName = lpszPathName;
strLastRealDocName.Replace("/","\\");
SetPathName(strLastRealDocName, true);
return true;
}
// model existed, but had some sort of error...
//
OnNewDocument();
strLastRealDocName = "Untitled";
SetPathName(strLastRealDocName, false); // I shouldn't have to do this, but MFC doesn't do it for some reason
return false;
}
// allows main doc code to be called by wintalk command
//
bool Document_ModelLoadPrimary(LPCSTR psFilename)
{
return !!(!gpDocument ? NULL : gpDocument->OnOpenDocument(psFilename));
}