source-engine/devtools/syncfrommirror/syncfrommirrorDlg.cpp

276 lines
7.3 KiB
C++
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// syncfrommirrorDlg.cpp : implementation file
//
#include "stdafx.h"
#include "syncfrommirror.h"
#include "syncfrommirrorDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSyncfrommirrorDlg dialog
CSyncfrommirrorDlg::CSyncfrommirrorDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSyncfrommirrorDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSyncfrommirrorDlg)
m_WorkingFolder = _T("");
m_bHL2 = FALSE;
m_bTF2 = FALSE;
m_bHL1Port = FALSE;
m_bDOD = FALSE;
m_bCSPort = FALSE;
m_bMakeCommandPrompts = FALSE;
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CSyncfrommirrorDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSyncfrommirrorDlg)
DDX_Control(pDX, IDC_EDIT1, m_Output);
DDX_Text(pDX, IDC_EDIT2, m_WorkingFolder);
DDX_Check(pDX, IDC_CHECK1, m_bHL2);
DDX_Check(pDX, IDC_CHECK2, m_bHL1Port);
DDX_Check(pDX, IDC_CHECK3, m_bCSPort);
DDX_Check(pDX, IDC_CHECK4, m_bTF2);
DDX_Check(pDX, IDC_MAKECOMMANDPROMPTS, m_bMakeCommandPrompts);
DDX_Check(pDX, IDC_DOD, m_bDOD);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSyncfrommirrorDlg, CDialog)
//{{AFX_MSG_MAP(CSyncfrommirrorDlg)
ON_WM_PAINT()
ON_WM_SIZE()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnStop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSyncfrommirrorDlg message handlers
BOOL CSyncfrommirrorDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
m_bHL2 = AfxGetApp()->GetProfileInt( "settings", "hl2", 1 );
m_bHL1Port = AfxGetApp()->GetProfileInt( "settings", "hl1", 0 );
m_bCSPort = AfxGetApp()->GetProfileInt( "settings", "cstrike", 0 );
m_bDOD = AfxGetApp()->GetProfileInt( "settings", "dod", 0 );
m_bMakeCommandPrompts = AfxGetApp()->GetProfileInt( "settings", "makecommandprompts", 0 );
m_WorkingFolder = AfxGetApp()->GetProfileString( "settings", "working_folder" );
// Calculate layout info for resizing.
CRect rectDlg;
GetClientRect( &rectDlg );
// Edit control
CRect rectEdit;
GetDlgItem( IDC_EDIT1 )->GetWindowRect( &rectEdit );
ScreenToClient( rectEdit );
m_nEditRightMargin = rectDlg.right - rectEdit.right;
m_nEditBottomMargin = rectDlg.bottom - rectEdit.bottom;
// Buttons
CRect rectButton;
GetDlgItem( IDOK )->GetWindowRect( &rectButton );
ScreenToClient( rectButton );
m_nButtonOffset = rectDlg.right - rectButton.left;
// LoadSettings();
UpdateData(false);
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CSyncfrommirrorDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CSyncfrommirrorDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CSyncfrommirrorDlg::RunSync( const char *pszType )
{
static const char *pszCmdLine = "cmd.exe /c \\\\hl2vss.valvesoftware.com\\hl2vss\\win32\\syncfrommirror.bat %s %s";
if ( m_bMakeCommandPrompts )
pszCmdLine = "cmd.exe /k \\\\hl2vss.valvesoftware.com\\hl2vss\\win32\\syncfrommirror.bat %s %s";
CString strCmdLine;
CString &strMain = m_WorkingFolder;
strMain.TrimLeft(" \"");
strMain.TrimRight(" \"");
CString workingFolder;
workingFolder = "\"";
workingFolder += strMain;
workingFolder += "\"";
strCmdLine.Format(pszCmdLine, pszType, workingFolder.operator const char *() );
GetDlgItem(IDOK)->EnableWindow(FALSE);
GetDlgItem(IDCANCEL)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON1)->EnableWindow();
if ( m_bMakeCommandPrompts )
{
RunCommandLine( strCmdLine, "c:\\" );
}
else
{
m_Redirector.Run( strCmdLine, &m_Output, "c:\\" );
}
GetDlgItem(IDOK)->EnableWindow();
GetDlgItem(IDCANCEL)->EnableWindow();
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
}
void CSyncfrommirrorDlg::RunCommandLine( const char *pCmdLine, const char *pWorkingDir )
{
STARTUPINFO startupInfo;
memset( &startupInfo, 0, sizeof( startupInfo ) );
startupInfo.cb = sizeof( startupInfo );
PROCESS_INFORMATION pi;
memset( &pi, 0, sizeof( pi ) );
CreateProcess(
NULL,
(char*)pCmdLine,
NULL,
NULL,
FALSE,
CREATE_NEW_CONSOLE,
NULL,
pWorkingDir,
&startupInfo,
&pi );
}
void CSyncfrommirrorDlg::OnOK()
{
UpdateData();
AfxGetApp()->WriteProfileInt( "settings", "hl2", m_bHL2 );
AfxGetApp()->WriteProfileInt( "settings", "hl1", m_bHL1Port );
AfxGetApp()->WriteProfileInt( "settings", "dod", m_bDOD );
AfxGetApp()->WriteProfileInt( "settings", "cstrike", m_bCSPort );
AfxGetApp()->WriteProfileInt( "settings", "makecommandprompts", m_bMakeCommandPrompts );
AfxGetApp()->WriteProfileString( "settings", "working_folder", m_WorkingFolder);
if ( m_WorkingFolder.GetLength() == 0 )
{
MessageBox( "You must set your working folder (e.g. u:\\dev)", "Error", MB_ICONWARNING );
return;
}
m_Output.SetSel( 0, -1 );
m_Output.Clear();
if (m_bHL2 && m_bHL1Port && m_bCSPort && m_bDOD )
{
RunSync( "all" );
}
else
{
if ( m_bHL2 )
RunSync( "hl2" );
if ( m_bHL1Port )
RunSync( "hl1" );
if ( m_bCSPort )
RunSync( "cstrike" );
if ( m_bDOD )
RunSync( "dod" );
}
// If it spawned command prompts, then exit.
if ( m_bMakeCommandPrompts )
EndDialog( 0 );
FlashWindow( TRUE );
//CDialog::OnOK();
}
void CSyncfrommirrorDlg::OnStop()
{
m_Redirector.Stop();
}
void CSyncfrommirrorDlg::OnSize( UINT nType, int cx, int cy )
{
if ( GetDlgItem( IDC_EDIT1 ) )
{
CRect rectDlg;
GetClientRect( &rectDlg );
CRect rectEdit;
GetDlgItem( IDC_EDIT1 )->GetWindowRect( &rectEdit );
ScreenToClient( rectEdit );
GetDlgItem( IDC_EDIT1 )->MoveWindow( rectEdit.left, rectEdit.top, ( rectDlg.right - m_nEditRightMargin ) - rectEdit.left, ( rectDlg.bottom - m_nEditBottomMargin ) - rectEdit.top, TRUE );
CRect rectButton;
GetDlgItem( IDOK )->GetWindowRect( &rectButton );
ScreenToClient( rectButton );
GetDlgItem( IDOK )->MoveWindow( rectDlg.right - m_nButtonOffset, rectButton.top, rectButton.Width( ), rectButton.Height( ), TRUE );
GetDlgItem( IDCANCEL )->GetWindowRect( &rectButton );
ScreenToClient( rectButton );
GetDlgItem( IDCANCEL )->MoveWindow( rectDlg.right - m_nButtonOffset, rectButton.top, rectButton.Width( ), rectButton.Height( ), TRUE );
GetDlgItem( IDC_BUTTON1 )->GetWindowRect( &rectButton );
ScreenToClient( rectButton );
GetDlgItem( IDC_BUTTON1 )->MoveWindow( rectDlg.right - m_nButtonOffset, rectButton.top, rectButton.Width( ), rectButton.Height( ), TRUE );
}
CDialog::OnSize( nType, cx, cy );
}