mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-22 14:16:50 +00:00
276 lines
7.3 KiB
C++
276 lines
7.3 KiB
C++
//========= 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 );
|
|
}
|