/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see .
*/
/***********************************************************************************************
*** Confidential - Westwood Studios ***
***********************************************************************************************
* *
* Project Name : LightMap *
* *
* $Archive:: /Commando/Code/Tool $*
* *
* $Author:: Ian_l $*
* *
* $Modtime:: 7/19/01 8:13p $*
* *
* $Revision:: 11 $*
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
// Includes.
#include "StdAfx.h"
#include "LightMap.h"
#include "LightMapView.h"
#include "MainFrm.h"
#include "verchk.h"
#include
#include
// Static functions.
BOOL CALLBACK TopLevelWindowSearch (HWND hwnd, LPARAM lParam);
// The following is maintained by MFC tools.
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BEGIN_MESSAGE_MAP(LightMapApp, CWinApp)
//{{AFX_MSG_MAP(LightMapApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
//}}AFX_MSG_MAP
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
END_MESSAGE_MAP()
// The one and only LightMapApp object
LightMapApp theApp;
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/***********************************************************************************************
* LightMapApp:: -- *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 6/1/99 IML : Created. *
*=============================================================================================*/
LightMapApp::LightMapApp()
{
// NOTE: Place all significant initialization in InitInstance
}
/***********************************************************************************************
* LightMapApp:: -- *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 6/1/99 IML : Created. *
*=============================================================================================*/
BOOL LightMapApp::InitInstance()
{
char computername [MAX_COMPUTERNAME_LENGTH + 1];
char processidname [33];
DWORD computernamesize;
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
Do_Version_Check();
// Set the working path.
_getdcwd (0, WorkingPath, sizeof (WorkingPath));
strcat (WorkingPath, "\\");
// Set the instance name.
computernamesize = sizeof (computername);
GetComputerName (computername, &computernamesize);
itoa (GetCurrentProcessId(), processidname, 16);
strcpy (InstanceName, computername);
strcat (InstanceName, processidname);
// Version 0.1 by default.
ApplicationVersion = 1;
// Get the name and path of the currently executing application.
TCHAR filename [MAX_PATH];
::GetModuleFileName (NULL, filename, sizeof (filename));
// Get the version information for this application.
DWORD dummy_var = 0;
DWORD version_size = ::GetFileVersionInfoSize (filename, &dummy_var);
if (version_size > 0) {
// Get the file version block
LPBYTE pblock = new BYTE [version_size];
if (::GetFileVersionInfo (filename, 0L, version_size, pblock)) {
// Query the block for the file version information.
UINT version_len = 0;
VS_FIXEDFILEINFO *pversion_info = NULL;
if (::VerQueryValue (pblock, "\\", (LPVOID*) &pversion_info, &version_len)) {
ApplicationVersion = pversion_info->dwFileVersionMS;
}
}
delete [] pblock;
}
SetRegistryKey ("Westwood Studios");
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(LightMapDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(LightMapView));
AddDocTemplate(pDocTemplate);
// Parse command line for standard shell commands, DDE, file open.
CCommandLineInfo cmdInfo;
ParseCommandLine (cmdInfo);
EnableShellOpen();
RegisterShellFileTypes (TRUE);
// Dispatch commands specified on the command line.
if (!ProcessShellCommand (cmdInfo)) return (FALSE);
m_pMainWnd->DragAcceptFiles();
return (TRUE);
}
/***********************************************************************************************
* LightMapApp::Do_Version_Check -- Check if this version of lightmap is newer or older than *
* a version at a designated location on the network and if *
* older then report this fact to user. *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 05/15/00 IML : Created. *
*=============================================================================================*/
void LightMapApp::Do_Version_Check()
{
const char *networkpath = "\\\\Mobius\\Project7\\Projects\\Renegade\\Programming\\Tools\\Lightmap";
const char *newversiontext = "There is a newer version of the Lightmap tool. Please run 'Renegade Update' to update your local copy.";
char pathname [_MAX_PATH];
char filename [_MAX_FNAME];
char extension [_MAX_EXT];
::GetModuleFileName (NULL, pathname, MAX_PATH);
_splitpath (pathname, NULL, NULL, filename, extension);
strcpy (pathname, "\\\\Mobius\\Project7\\Projects\\Renegade\\Programming\\Tools\\Lightmap\\");
strcat (pathname, filename);
strcat (pathname, extension);
if (Compare_EXE_Version ((int)::AfxGetInstanceHandle(), pathname) < 0) {
::MessageBox (NULL, newversiontext, "Version Information", MB_ICONEXCLAMATION | MB_OK | MB_SETFOREGROUND | MB_SYSTEMMODAL);
}
}
/***********************************************************************************************
* LightMapApp::TopLevelWindowSearch -- *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 05/15/00 IML : Created. *
*=============================================================================================*/
BOOL CALLBACK TopLevelWindowSearch (HWND hwnd, LPARAM lParam)
{
BOOL bcontinue = TRUE;
// Is this a viewer window?
if (::GetProp (hwnd, "LIGHTMAP") != 0) {
bcontinue = FALSE;
(*((HWND*)lParam)) = hwnd;
}
return (bcontinue);
}
/***********************************************************************************************
* LightMapApp:: -- *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 6/1/99 IML : Created. *
*=============================================================================================*/
LightMapDoc* LightMapApp::GetDoc()
{
POSITION pos = GetFirstDocTemplatePosition();
CDocTemplate *pDocTemplate = GetNextDocTemplate (pos);
pos = pDocTemplate->GetFirstDocPosition();
LightMapDoc* pDoc = (LightMapDoc*)pDocTemplate->GetNextDoc (pos);
ASSERT (pDoc->IsKindOf(RUNTIME_CLASS(LightMapDoc)));
return (pDoc);
}
/***********************************************************************************************
* LightMapApp:: -- *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 6/1/99 IML : Created. *
*=============================================================================================*/
void LightMapApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
/***********************************************************************************************
* LightMapApp::OnFileOpen -- *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 6/1/99 IML : Created. *
*=============================================================================================*/
void LightMapApp::OnFileOpen()
{
CFileDialog dialog (TRUE, NULL, NULL, File_Dialog_Flags(), File_Dialog_Filter());
if (dialog.DoModal() == IDOK) {
if (GetDoc()->OnOpenDocument (dialog.GetPathName())) {
GetDoc()->SetPathName (dialog.GetPathName());
GetDoc()->UpdateAllViews (NULL);
}
}
}
/***********************************************************************************************
* LightMapApp::Explorer_Style -- *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 6/1/99 IML : Created. *
*=============================================================================================*/
bool LightMapApp::Explorer_Style()
{
OSVERSIONINFO info;
info.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
::GetVersionEx (&info);
return ((info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) || ((info.dwPlatformId == VER_PLATFORM_WIN32_NT) && (info.dwMajorVersion >= 4)));
}
/***********************************************************************************************
* LightMapApp::File_Dialog_Flags -- *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 6/1/99 IML : Created. *
*=============================================================================================*/
DWORD LightMapApp::File_Dialog_Flags()
{
DWORD flags = OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT;
if (Explorer_Style()) flags |= OFN_EXPLORER;
return (flags);
}
/***********************************************************************************************
* CAboutDlg::OnInitDialog -- *
* *
* INPUT: *
* *
* OUTPUT: *
* *
* WARNINGS: *
* *
* HISTORY: *
* 6/1/99 IML : Created. *
*=============================================================================================*/
BOOL CAboutDlg::OnInitDialog()
{
// Allow the base class to process this message.
CDialog::OnInitDialog();
// Put the version string into the dialog.
CString version_string;
version_string.Format ("Version %d.%d", (theApp.Application_Version() >> 16), (theApp.Application_Version() & 0xffff));
GetDlgItem (IDC_VERSION_TEXT)->SetWindowText (version_string);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}