You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
275 lines
7.3 KiB
275 lines
7.3 KiB
//========= 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 ); |
|
}
|
|
|