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.
760 lines
20 KiB
760 lines
20 KiB
//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//
|
|
//=============================================================================//
|
|
// TransformDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "hammer.h"
|
|
#include "versioncontroldialog.h"
|
|
#include "mapdoc.h"
|
|
#include "p4lib/ip4.h"
|
|
#include "options.h"
|
|
|
|
// memdbgon must be the last include file in a .cpp file!!!
|
|
#include <tier0/memdbgon.h>
|
|
|
|
|
|
// CMapDocCheckin dialog
|
|
|
|
IMPLEMENT_DYNAMIC(CMapDocCheckin, CDialog)
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
CMapDocCheckin::CMapDocCheckin(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CMapDocCheckin::IDD, pParent)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
CMapDocCheckin::~CMapDocCheckin()
|
|
{
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
void CMapDocCheckin::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_CHECKIN_LIST, m_CheckinListCtrl);
|
|
DDX_Control(pDX, IDC_CHECKIN_DESCRIPTION, m_DescriptionCtrl);
|
|
DDX_Control(pDX, IDC_CHECKIN_STATUS, m_CheckInStatusControl);
|
|
DDX_Control(pDX, ID_SUBMIT, m_SubmitButtonControl);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CMapDocCheckin, CDialog)
|
|
ON_BN_CLICKED(ID_SUBMIT, &CMapDocCheckin::OnBnClickedSubmit)
|
|
ON_NOTIFY(NM_RCLICK, IDC_CHECKIN_LIST, &CMapDocCheckin::OnNMRclickCheckinList)
|
|
ON_WM_SHOWWINDOW()
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
void CMapDocCheckin::AddFileToList( CMapDoc *pMapDoc, P4File_t *FileInfo )
|
|
{
|
|
int nIndex = m_CheckinListCtrl.InsertItem( m_CheckinListCtrl.GetItemCount(), "" );
|
|
|
|
// nCount++;
|
|
m_CheckinListCtrl.SetItemData( nIndex, ( DWORD_PTR )pMapDoc );
|
|
switch( FileInfo->m_eOpenState )
|
|
{
|
|
case P4FILE_OPENED_FOR_ADD:
|
|
m_CheckinListCtrl.SetItemText( nIndex, 1, "Add" );
|
|
break;
|
|
|
|
case P4FILE_OPENED_FOR_EDIT:
|
|
m_CheckinListCtrl.SetItemText( nIndex, 1, "Edit" );
|
|
break;
|
|
}
|
|
m_CheckinListCtrl.SetItemText( nIndex, 2, p4->String( FileInfo->m_sName ) );
|
|
m_CheckinListCtrl.SetItemText( nIndex, 3, p4->String( FileInfo->m_sPath ) );
|
|
m_FileList.AddToTail( FileInfo->m_sLocalFile );
|
|
|
|
if ( pMapDoc != NULL && pMapDoc->IsDefaultCheckIn() )
|
|
{
|
|
ListView_SetItemState( m_CheckinListCtrl.m_hWnd, nIndex, INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ), LVIS_STATEIMAGEMASK );
|
|
pMapDoc->ClearDefaultCheckIn();
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CMapDocCheckin::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_CheckinListCtrl.SetExtendedStyle( m_CheckinListCtrl.GetExtendedStyle() | LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT );
|
|
|
|
m_CheckinListCtrl.InsertColumn( 0, "", LVCFMT_LEFT, 30, -1 );
|
|
m_CheckinListCtrl.InsertColumn( 1, "Status", LVCFMT_LEFT, 50, -1 );
|
|
m_CheckinListCtrl.InsertColumn( 2, "Name", LVCFMT_LEFT, 180, -1 );
|
|
m_CheckinListCtrl.InsertColumn( 3, "Folder", LVCFMT_LEFT, 360, -1 );
|
|
|
|
if ( p4 == NULL )
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
P4File_t FileInfo;
|
|
CUtlVector< P4File_t > FileList;
|
|
|
|
p4->GetOpenedFileList( FileList, true );
|
|
|
|
POSITION pos = APP()->pMapDocTemplate->GetFirstDocPosition();
|
|
while( pos != NULL )
|
|
{
|
|
CDocument *pDoc = APP()->pMapDocTemplate->GetNextDoc( pos );
|
|
CMapDoc *pMapDoc = dynamic_cast< CMapDoc * >( pDoc );
|
|
|
|
if ( pMapDoc )
|
|
{
|
|
if ( pMapDoc->IsCheckedOut() )
|
|
{
|
|
if ( p4->GetFileInfo( pMapDoc->GetPathName(), &FileInfo ) == true )
|
|
{
|
|
for( int i = 0; i < FileList.Count(); i++ )
|
|
{
|
|
if ( FileList[ i ].m_sClientFile == FileInfo.m_sClientFile )
|
|
{
|
|
FileList.Remove( i );
|
|
break;
|
|
}
|
|
}
|
|
|
|
AddFileToList( pMapDoc, &FileInfo );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for( int i = 0; i < FileList.Count(); i++ )
|
|
{
|
|
AddFileToList( NULL, &FileList[ i ] );
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
void CMapDocCheckin::OnOK()
|
|
{
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
void CMapDocCheckin::OnBnClickedSubmit()
|
|
{
|
|
int nFileCount = 0;
|
|
char temp[ 2048 ];
|
|
|
|
for( int i = 0; i < m_CheckinListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_CheckinListCtrl.GetItemState( i, LVIS_STATEIMAGEMASK ) == INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ) )
|
|
{
|
|
nFileCount++;
|
|
}
|
|
}
|
|
|
|
if ( nFileCount > 0 )
|
|
{
|
|
CString Description;
|
|
m_DescriptionCtrl.GetWindowText( Description );
|
|
if ( Description.GetLength() < 2 )
|
|
{
|
|
m_CheckInStatusControl.SetWindowText( "Checkin FAILED!" );
|
|
AfxMessageBox( "Please put in something descriptive for the description. I took the time to type this dialog, the least you could do is type something!", MB_ICONHAND | MB_OK );
|
|
return;
|
|
}
|
|
if ( Description.GetLength() >= P4_MAX_INPUT_BUFFER_SIZE )
|
|
{
|
|
m_CheckInStatusControl.SetWindowText( "Checkin FAILED!" );
|
|
sprintf( temp, "Your description is too long. Please shorten it down by %d characters.", Description.GetLength() - P4_MAX_INPUT_BUFFER_SIZE + 1 );
|
|
AfxMessageBox( temp, MB_ICONHAND | MB_OK );
|
|
return;
|
|
}
|
|
|
|
m_SubmitButtonControl.EnableWindow( FALSE );
|
|
sprintf( temp, "Checking in %d file(s). Please wait...", nFileCount );
|
|
m_CheckInStatusControl.SetWindowText( temp );
|
|
|
|
const char **ppFileNames = ( const char** )stackalloc( nFileCount * sizeof( char * ) );
|
|
|
|
nFileCount = 0;
|
|
for( int i = 0; i < m_CheckinListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_CheckinListCtrl.GetItemState( i, LVIS_STATEIMAGEMASK ) == INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ) )
|
|
{
|
|
CMapDoc *pMapDoc = ( CMapDoc * )m_CheckinListCtrl.GetItemData( i );
|
|
const char *pszFileName = p4->String( m_FileList[ i ] );
|
|
|
|
if ( pMapDoc != NULL )
|
|
{
|
|
ppFileNames[ nFileCount ] = pMapDoc->GetPathName();
|
|
pMapDoc->OnSaveDocument( pMapDoc->GetPathName() );
|
|
}
|
|
else
|
|
{
|
|
ppFileNames[ nFileCount ] = pszFileName;
|
|
}
|
|
nFileCount++;
|
|
}
|
|
}
|
|
|
|
// we need to replace \r\n with \t\n to make multi-line p4 changelist descriptions happy
|
|
Description.Replace( '\n', '\t' );
|
|
Description.Replace( '\r', '\n' );
|
|
|
|
if ( p4->SubmitFiles( nFileCount, ppFileNames, Description ) == false )
|
|
{
|
|
m_CheckInStatusControl.SetWindowText( "Checkin FAILED!" );
|
|
m_SubmitButtonControl.EnableWindow( TRUE );
|
|
|
|
sprintf( temp, "Could not check in map(s): %s", p4->GetLastError() );
|
|
AfxMessageBox( temp, MB_ICONHAND | MB_OK );
|
|
|
|
return;
|
|
}
|
|
|
|
for( int i = 0; i < m_CheckinListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_CheckinListCtrl.GetItemState( i, LVIS_STATEIMAGEMASK ) == INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ) )
|
|
{
|
|
CMapDoc *pMapDoc = ( CMapDoc * )m_CheckinListCtrl.GetItemData( i );
|
|
|
|
if ( pMapDoc != NULL )
|
|
{
|
|
pMapDoc->CheckFileStatus();
|
|
}
|
|
}
|
|
}
|
|
|
|
m_SubmitButtonControl.EnableWindow( TRUE );
|
|
m_CheckInStatusControl.SetWindowText( "" );
|
|
}
|
|
|
|
EndDialog( IDOK );
|
|
}
|
|
|
|
|
|
void CMapDocCheckin::OnNMRclickCheckinList(NMHDR *pNMHDR, LRESULT *pResult)
|
|
{
|
|
*pResult = 0;
|
|
|
|
for( int i = 0; i < m_CheckinListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_bSelectAll == true )
|
|
{
|
|
m_CheckinListCtrl.SetItemState( i, ( unsigned int )INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ), LVIS_STATEIMAGEMASK );
|
|
}
|
|
else
|
|
{
|
|
m_CheckinListCtrl.SetItemState( i, ( unsigned int )INDEXTOSTATEIMAGEMASK( LVIS_FOCUSED ), LVIS_STATEIMAGEMASK );
|
|
}
|
|
}
|
|
|
|
m_bSelectAll = !m_bSelectAll;
|
|
}
|
|
|
|
|
|
void CMapDocCheckin::OnShowWindow(BOOL bShow, UINT nStatus)
|
|
{
|
|
CDialog::OnShowWindow(bShow, nStatus);
|
|
|
|
m_bSelectAll = true;
|
|
}
|
|
|
|
|
|
// CMapDocStatus dialog
|
|
|
|
|
|
IMPLEMENT_DYNAMIC(CMapDocStatus, CDialog)
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
CMapDocStatus::CMapDocStatus(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CMapDocStatus::IDD, pParent)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
CMapDocStatus::~CMapDocStatus()
|
|
{
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
void CMapDocStatus::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_FILE_LIST, m_FileListCtrl);
|
|
DDX_Control(pDX, IDC_STATUS_TEXT, m_StatusTextControl);
|
|
DDX_Control(pDX, IDSYNC, m_SyncControl);
|
|
DDX_Control(pDX, IDADD, m_AddControl);
|
|
DDX_Control(pDX, IDCHECKOUT, m_CheckOutControl);
|
|
DDX_Control(pDX, IDCANCEL, m_DoneControl);
|
|
DDX_Control(pDX, IDREVERT, m_RevertControl);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CMapDocStatus, CDialog)
|
|
ON_BN_CLICKED(IDCHECKOUT, &CMapDocStatus::OnBnClickedCheckout)
|
|
ON_BN_CLICKED(IDADD, &CMapDocStatus::OnBnClickedAdd)
|
|
ON_BN_CLICKED(IDSYNC, &CMapDocStatus::OnBnClickedSync)
|
|
ON_BN_CLICKED(IDREVERT, &CMapDocStatus::OnBnClickedRevert)
|
|
ON_NOTIFY(NM_RCLICK, IDC_FILE_LIST, &CMapDocStatus::OnNMRclickFileList)
|
|
ON_WM_SHOWWINDOW()
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CMapDocStatus::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_FileListCtrl.SetExtendedStyle( m_FileListCtrl.GetExtendedStyle() | LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT );
|
|
|
|
m_FileListCtrl.InsertColumn( 0, "", LVCFMT_LEFT, 30, -1 );
|
|
m_FileListCtrl.InsertColumn( 1, "Status", LVCFMT_LEFT, 80, -1 );
|
|
m_FileListCtrl.InsertColumn( 2, "Revision", LVCFMT_LEFT, 70, -1 );
|
|
m_FileListCtrl.InsertColumn( 3, "Name", LVCFMT_LEFT, 150, -1 );
|
|
m_FileListCtrl.InsertColumn( 4, "Folder", LVCFMT_LEFT, 300, -1 );
|
|
|
|
SetControls( false, "" );
|
|
|
|
UpdateMapList();
|
|
|
|
if ( Options.general.bEnablePerforceIntegration == FALSE )
|
|
{
|
|
GetDlgItem( IDCHECKOUT )->EnableWindow( false );
|
|
GetDlgItem( IDADD )->EnableWindow( false );
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
void CMapDocStatus::UpdateMapList( bool RedoList )
|
|
{
|
|
P4File_t FileInfo;
|
|
|
|
m_FileListCtrl.DeleteAllItems();
|
|
|
|
int nCount = 0;
|
|
|
|
POSITION pos = APP()->pMapDocTemplate->GetFirstDocPosition();
|
|
while( pos != NULL )
|
|
{
|
|
CDocument *pDoc = APP()->pMapDocTemplate->GetNextDoc( pos );
|
|
CMapDoc *pMapDoc = dynamic_cast< CMapDoc * >( pDoc );
|
|
|
|
pMapDoc->CheckFileStatus();
|
|
|
|
int nIndex = m_FileListCtrl.InsertItem( nCount, "" );
|
|
nCount++;
|
|
m_FileListCtrl.SetItemData( nIndex, ( DWORD_PTR )pMapDoc );
|
|
|
|
if ( p4 && Options.general.bEnablePerforceIntegration == TRUE && p4->GetFileInfo( pMapDoc->GetPathName(), &FileInfo ) == true )
|
|
{
|
|
switch( FileInfo.m_eOpenState )
|
|
{
|
|
case P4FILE_UNOPENED:
|
|
if ( pMapDoc->IsReadOnly() )
|
|
{
|
|
m_FileListCtrl.SetItemText( nIndex, 1, "Read Only" );
|
|
}
|
|
else
|
|
{
|
|
m_FileListCtrl.SetItemText( nIndex, 1, "Writeable" );
|
|
}
|
|
break;
|
|
|
|
case P4FILE_OPENED_FOR_ADD:
|
|
m_FileListCtrl.SetItemText( nIndex, 1, "Add" );
|
|
break;
|
|
|
|
case P4FILE_OPENED_FOR_EDIT:
|
|
m_FileListCtrl.SetItemText( nIndex, 1, "Edit" );
|
|
break;
|
|
}
|
|
|
|
if ( FileInfo.m_iHaveRevision == FileInfo.m_iHeadRevision )
|
|
{
|
|
char temp[ 128 ];
|
|
|
|
sprintf( temp, "%d", FileInfo.m_iHaveRevision );
|
|
m_FileListCtrl.SetItemText( nIndex, 2, temp );
|
|
}
|
|
else
|
|
{
|
|
char temp[ 128 ];
|
|
|
|
sprintf( temp, "%d / %d", FileInfo.m_iHaveRevision, FileInfo.m_iHeadRevision );
|
|
m_FileListCtrl.SetItemText( nIndex, 2, temp );
|
|
}
|
|
|
|
m_FileListCtrl.SetItemText( nIndex, 3, p4->String( FileInfo.m_sName ) );
|
|
m_FileListCtrl.SetItemText( nIndex, 4, p4->String( FileInfo.m_sPath ) );
|
|
}
|
|
else
|
|
{
|
|
if ( pMapDoc->IsReadOnly() )
|
|
{
|
|
m_FileListCtrl.SetItemText( nIndex, 1, "Read Only" );
|
|
}
|
|
else
|
|
{
|
|
m_FileListCtrl.SetItemText( nIndex, 1, "Writeable" );
|
|
}
|
|
|
|
CString strMapFilename = pMapDoc->GetPathName();
|
|
|
|
if ( strMapFilename.IsEmpty() )
|
|
{
|
|
m_FileListCtrl.SetItemText( nIndex, 3, "not saved" );
|
|
m_FileListCtrl.SetItemText( nIndex, 4, "" );
|
|
}
|
|
// the map already has a filename
|
|
else
|
|
{
|
|
int nFilenameBeginOffset = strMapFilename.ReverseFind( '\\' ) + 1;
|
|
int nFilenameEndOffset = strMapFilename.Find( '.' );
|
|
|
|
m_FileListCtrl.SetItemText( nIndex, 3, strMapFilename.Mid( nFilenameBeginOffset, nFilenameEndOffset - nFilenameBeginOffset ) );
|
|
m_FileListCtrl.SetItemText( nIndex, 4, strMapFilename.Mid( 0, nFilenameBeginOffset - 1 ) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
void CMapDocStatus::OnBnClickedCheckout()
|
|
{
|
|
if ( !p4 || Options.general.bEnablePerforceIntegration == FALSE )
|
|
{
|
|
return;
|
|
}
|
|
|
|
char temp[ 2048 ];
|
|
int nFileCount = 0;
|
|
|
|
for( int i = 0; i < m_FileListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_FileListCtrl.GetItemState( i, LVIS_STATEIMAGEMASK ) == INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ) )
|
|
{
|
|
nFileCount++;
|
|
}
|
|
}
|
|
|
|
if ( nFileCount > 0 )
|
|
{
|
|
sprintf( temp, "Checking out %d file(s). Please wait...", nFileCount );
|
|
SetControls( true, temp );
|
|
|
|
const char **ppFileNames = ( const char** )stackalloc( nFileCount * sizeof( char * ) );
|
|
|
|
nFileCount = 0;
|
|
for( int i = 0; i < m_FileListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_FileListCtrl.GetItemState( i, LVIS_STATEIMAGEMASK ) == INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ) )
|
|
{
|
|
CMapDoc *pMapDoc = ( CMapDoc * )m_FileListCtrl.GetItemData( i );
|
|
|
|
ppFileNames[ nFileCount ] = pMapDoc->GetPathName();
|
|
nFileCount++;
|
|
}
|
|
}
|
|
|
|
if ( p4->OpenFilesForEdit( nFileCount, ppFileNames ) == false )
|
|
{
|
|
SetControls( false, "Checkout FAILED." );
|
|
|
|
sprintf( temp, "Could not check out map(s): %s", p4->GetLastError() );
|
|
AfxMessageBox( temp, MB_ICONHAND | MB_OK );
|
|
|
|
return;
|
|
}
|
|
|
|
UpdateMapList();
|
|
|
|
sprintf( temp, "Checked out %d file(s).", nFileCount );
|
|
SetControls( false, temp );
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
// Input :
|
|
// Output :
|
|
//-----------------------------------------------------------------------------
|
|
void CMapDocStatus::OnBnClickedAdd()
|
|
{
|
|
if ( !p4 || Options.general.bEnablePerforceIntegration == FALSE )
|
|
{
|
|
return;
|
|
}
|
|
|
|
int nFileCount = 0;
|
|
char temp[ 2048 ];
|
|
|
|
for( int i = 0; i < m_FileListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_FileListCtrl.GetItemState( i, LVIS_STATEIMAGEMASK ) == INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ) )
|
|
{
|
|
nFileCount++;
|
|
}
|
|
}
|
|
|
|
if ( nFileCount > 0 )
|
|
{
|
|
sprintf( temp, "Adding %d file(s). Please wait...", nFileCount );
|
|
SetControls( true, temp );
|
|
|
|
const char **ppFileNames = ( const char** )stackalloc( nFileCount * sizeof( char * ) );
|
|
|
|
nFileCount = 0;
|
|
for( int i = 0; i < m_FileListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_FileListCtrl.GetItemState( i, LVIS_STATEIMAGEMASK ) == INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ) )
|
|
{
|
|
CMapDoc *pMapDoc = ( CMapDoc * )m_FileListCtrl.GetItemData( i );
|
|
|
|
ppFileNames[ nFileCount ] = pMapDoc->GetPathName();
|
|
nFileCount++;
|
|
}
|
|
}
|
|
|
|
if ( p4->OpenFilesForAdd( nFileCount, ppFileNames ) == false )
|
|
{
|
|
SetControls( false, "Adding FAILED." );
|
|
sprintf( temp, "Could not add map(s): %s", p4->GetLastError() );
|
|
AfxMessageBox( temp, MB_ICONHAND | MB_OK );
|
|
|
|
return;
|
|
}
|
|
|
|
UpdateMapList();
|
|
|
|
sprintf( temp, "Added %d file(s).", nFileCount );
|
|
SetControls( false, temp );
|
|
}
|
|
}
|
|
|
|
void CMapDocStatus::OnBnClickedSync()
|
|
{
|
|
if ( !p4 || Options.general.bEnablePerforceIntegration == FALSE )
|
|
{
|
|
return;
|
|
}
|
|
|
|
int nFileCount = 0;
|
|
char temp[ 2048 ];
|
|
|
|
for( int i = 0; i < m_FileListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_FileListCtrl.GetItemState( i, LVIS_STATEIMAGEMASK ) == INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ) )
|
|
{
|
|
nFileCount++;
|
|
}
|
|
}
|
|
|
|
if ( nFileCount > 0 )
|
|
{
|
|
sprintf( temp, "Syncing %d file(s). Please wait...", nFileCount );
|
|
SetControls( true, temp );
|
|
|
|
int nSyncFileCount = 0;
|
|
for( int i = 0; i < m_FileListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_FileListCtrl.GetItemState( i, LVIS_STATEIMAGEMASK ) == INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ) )
|
|
{
|
|
CMapDoc *pMapDoc = ( CMapDoc * )m_FileListCtrl.GetItemData( i );
|
|
|
|
if ( pMapDoc->SyncToHeadRevision() == true )
|
|
{
|
|
nSyncFileCount++;
|
|
}
|
|
}
|
|
}
|
|
|
|
UpdateMapList();
|
|
|
|
if ( CMapDoc::GetActiveMapDoc() != NULL )
|
|
{
|
|
CMapDoc::GetActiveMapDoc()->UpdateAllViews( MAPVIEW_UPDATE_SELECTION | MAPVIEW_UPDATE_TOOL | MAPVIEW_RENDER_NOW );
|
|
}
|
|
|
|
if ( nSyncFileCount == nFileCount )
|
|
{
|
|
sprintf( temp, "Synced %d file(s).", nSyncFileCount );
|
|
}
|
|
else
|
|
{
|
|
sprintf( temp, "Synced %d file(s). %d file(s) were not synced!", nSyncFileCount, nFileCount - nSyncFileCount );
|
|
}
|
|
SetControls( false, temp );
|
|
}
|
|
}
|
|
|
|
void CMapDocStatus::SetControls( bool bDisable, char *pszMessage )
|
|
{
|
|
BOOL bEnable = ( bDisable ? FALSE : TRUE );
|
|
|
|
m_StatusTextControl.SetWindowText( pszMessage );
|
|
|
|
m_SyncControl.EnableWindow( bEnable );
|
|
m_AddControl.EnableWindow( bEnable );
|
|
m_CheckOutControl.EnableWindow( bEnable );
|
|
m_RevertControl.EnableWindow( bEnable );
|
|
m_DoneControl.EnableWindow( bEnable );
|
|
}
|
|
|
|
void CMapDocStatus::OnBnClickedRevert()
|
|
{
|
|
if ( !p4 || Options.general.bEnablePerforceIntegration == FALSE )
|
|
{
|
|
return;
|
|
}
|
|
|
|
int nFileCount = 0;
|
|
char temp[ 2048 ];
|
|
|
|
for( int i = 0; i < m_FileListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_FileListCtrl.GetItemState( i, LVIS_STATEIMAGEMASK ) == INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ) )
|
|
{
|
|
nFileCount++;
|
|
}
|
|
}
|
|
|
|
if ( nFileCount > 0 )
|
|
{
|
|
if ( AfxMessageBox( "Are you sure you want to revert these file(s)?", MB_ICONQUESTION | MB_YESNO ) == IDNO )
|
|
{
|
|
return;
|
|
}
|
|
|
|
sprintf( temp, "Reverting %d file(s). Please wait...", nFileCount );
|
|
SetControls( true, temp );
|
|
|
|
int nRevertFileCount = 0;
|
|
for( int i = 0; i < m_FileListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_FileListCtrl.GetItemState( i, LVIS_STATEIMAGEMASK ) == INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ) )
|
|
{
|
|
CMapDoc *pMapDoc = ( CMapDoc * )m_FileListCtrl.GetItemData( i );
|
|
|
|
if ( pMapDoc->Revert() == true )
|
|
{
|
|
nRevertFileCount++;
|
|
}
|
|
}
|
|
}
|
|
|
|
UpdateMapList();
|
|
|
|
if ( CMapDoc::GetActiveMapDoc() != NULL )
|
|
{
|
|
CMapDoc::GetActiveMapDoc()->UpdateAllViews( MAPVIEW_UPDATE_SELECTION | MAPVIEW_UPDATE_TOOL | MAPVIEW_RENDER_NOW );
|
|
}
|
|
|
|
if ( nRevertFileCount == nFileCount )
|
|
{
|
|
sprintf( temp, "Reverted %d file(s).", nRevertFileCount );
|
|
}
|
|
else
|
|
{
|
|
sprintf( temp, "Reverted %d file(s). %d file(s) were not reverted!", nRevertFileCount, nFileCount - nRevertFileCount );
|
|
}
|
|
SetControls( false, temp );
|
|
}
|
|
}
|
|
|
|
void CMapDocStatus::OnNMRclickFileList(NMHDR *pNMHDR, LRESULT *pResult)
|
|
{
|
|
*pResult = 0;
|
|
|
|
for( int i = 0; i < m_FileListCtrl.GetItemCount(); i++ )
|
|
{
|
|
if ( m_bSelectAll == true )
|
|
{
|
|
m_FileListCtrl.SetItemState( i, ( unsigned int )INDEXTOSTATEIMAGEMASK( LVIS_SELECTED ), LVIS_STATEIMAGEMASK );
|
|
}
|
|
else
|
|
{
|
|
m_FileListCtrl.SetItemState( i, ( unsigned int )INDEXTOSTATEIMAGEMASK( LVIS_FOCUSED ), LVIS_STATEIMAGEMASK );
|
|
}
|
|
}
|
|
|
|
m_bSelectAll = !m_bSelectAll;
|
|
}
|
|
|
|
void CMapDocStatus::OnShowWindow(BOOL bShow, UINT nStatus)
|
|
{
|
|
CDialog::OnShowWindow(bShow, nStatus);
|
|
|
|
m_bSelectAll = true;
|
|
}
|