Leaked source code of windows server 2003
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.
 
 
 
 
 
 

303 lines
8.7 KiB

#include "stdafx.h"
#include "WizardSheet.h"
#include "CommandDlg.h"
CPostProcessAdd::CPostProcessAdd( CWizardSheet* pTheSheet ) :
m_pTheSheet( pTheSheet )
{
m_strTitle.LoadString( IDS_TITLE_POSTPROCESS );
m_strSubTitle.LoadString( IDS_SUBTITLE_POSTPROCESS );
SetHeaderTitle( m_strTitle );
SetHeaderSubTitle( m_strSubTitle );
}
LRESULT CPostProcessAdd::OnAddFile( WORD wNotifyCode, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& bHandled )
{
CString strFilter;
UIUtils::LoadOFNFilterFromRes( IDS_FILTER_POSTPROCESSFILES, /*r*/strFilter );
CFileDialog dlg( TRUE,
NULL,
NULL,
OFN_ENABLESIZING | OFN_EXPLORER | OFN_NOREADONLYRETURN | OFN_FILEMUSTEXIST,
strFilter,
m_hWnd );
if ( dlg.DoModal() == IDCANCEL ) return 0;
// File names must be unique as the path is not preserved
// Check if there is already a file with the same name
WCHAR wszNew[ MAX_PATH + 1 ];
::wcscpy( wszNew, dlg.m_szFileName );
::PathStripPath( wszNew );
for ( TStringList::const_iterator it = m_Files.begin();
it != m_Files.end();
++it )
{
WCHAR wszCurrent[ MAX_PATH + 1 ];
::wcscpy( wszCurrent, it->c_str() );
::PathStripPathW( wszCurrent );
if ( ::_wcsicmp( wszCurrent, wszNew ) == 0 )
{
UIUtils::MessageBox( m_hWnd, IDS_E_PPFILENOTUNIQUE, IDS_APPTITLE, MB_OK | MB_ICONSTOP );
return 0 ;
}
}
m_Files.push_back( std::wstring( dlg.m_szFileName ) );
::wcscpy( wszNew, dlg.m_szFileName );
UIUtils::PathCompatCtrlWidth( GetDlgItem( IDC_FILES ), wszNew, ::GetSystemMetrics( SM_CXVSCROLL ) );
ListBox_AddString( GetDlgItem( IDC_FILES ), wszNew );
return 0;
}
LRESULT CPostProcessAdd::OnDelFile( WORD wNotifyCode, WORD /*wID*/, HWND hWndCtl, BOOL& bHandled )
{
HWND hwndFiles = GetDlgItem( IDC_FILES );
int nCurSel = ListBox_GetCurSel( hwndFiles );
_ASSERT( nCurSel != LB_ERR );
ListBox_DeleteString( hwndFiles, nCurSel );
if ( ListBox_GetCount( hwndFiles ) > 0 )
{
ListBox_SetCurSel( hwndFiles, max( nCurSel - 1, 0 ) );
}
else
{
::EnableWindow( hWndCtl, FALSE );
}
return 0;
}
LRESULT CPostProcessAdd::LBSelChanged( WORD /*wNotifyCode*/, WORD wID, HWND hWndCtl, BOOL& /*bHandled*/ )
{
// If selection is not changed - do nothing
if ( ListBox_GetCurSel( hWndCtl ) == LB_ERR ) return 0;
if ( wID == IDC_FILES )
{
::EnableWindow( GetDlgItem( IDC_DELFILE ), TRUE );
}
else if ( wID == IDC_COMMANDS )
{
::EnableWindow( GetDlgItem( IDC_DELCMD ), TRUE );
::EnableWindow( GetDlgItem( IDC_EDITCMD ), TRUE );
int iLastEl = ListBox_GetCount( hWndCtl ) - 1;
int iCurSel = ListBox_GetCurSel( hWndCtl );
_ASSERT( iCurSel != LB_ERR );
// Enable / Disable the MoveUp and MoveDown Btns
::EnableWindow( GetDlgItem( IDC_MOVEUP ), iCurSel > 0 );
::EnableWindow( GetDlgItem( IDC_MOVEDOWN ), iCurSel < iLastEl );
}
return 0;
}
LRESULT CPostProcessAdd::OnAddCmd( WORD wNotifyCode, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& bHandled )
{
CCommandDlg dlg;
if ( dlg.DoModal() != IDOK ) return 0;
CmdInfo Cmd;
Cmd.bIgnoreErrors = dlg.m_bIgnoreErrors;
Cmd.dwTimeout = dlg.m_dwTimeout;
Cmd.strText = dlg.m_strText;
m_Commands.push_back( Cmd );
UIUtils::TrimTextToCtrl( GetDlgItem( IDC_COMMANDS ),
dlg.m_strText.GetBuffer( dlg.m_strText.GetLength() ),
::GetSystemMetrics( SM_CXVSCROLL ) );
dlg.m_strText.ReleaseBuffer();
BOOL bUnused = FALSE;;
ListBox_InsertString( GetDlgItem( IDC_COMMANDS ), -1, dlg.m_strText );
LBSelChanged( LBN_SELCHANGE, IDC_COMMANDS, GetDlgItem( IDC_COMMANDS ), bUnused );
return 0;
}
LRESULT CPostProcessAdd::OnDelCmd( WORD wNotifyCode, WORD /*wID*/, HWND hWndCtl, BOOL& bHandled )
{
HWND hwndCmds = GetDlgItem( IDC_COMMANDS );
int nCurSel = ListBox_GetCurSel( hwndCmds );
_ASSERT( nCurSel != LB_ERR );
ListBox_DeleteString( hwndCmds, nCurSel );
m_Commands.erase( m_Commands.begin() + nCurSel );
if ( ListBox_GetCount( hwndCmds ) > 0 )
{
BOOL bUnused = FALSE;
ListBox_SetCurSel( hwndCmds, max( nCurSel - 1, 0 ) );
LBSelChanged( LBN_SELCHANGE, IDC_COMMANDS, GetDlgItem( IDC_COMMANDS ), bUnused );
}
else
{
::EnableWindow( hWndCtl, FALSE );
::EnableWindow( GetDlgItem( IDC_EDITCMD ), FALSE );
}
return 0;
}
LRESULT CPostProcessAdd::OnEditCmd( WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/ )
{
HWND hwndCmds = GetDlgItem( IDC_COMMANDS );
int iCmd = ListBox_GetCurSel( hwndCmds );
if ( LB_ERR == iCmd ) return 0;
CCommandDlg dlg;
dlg.m_bIgnoreErrors = m_Commands[ iCmd ].bIgnoreErrors;
dlg.m_dwTimeout = m_Commands[ iCmd ].dwTimeout;
dlg.m_strText = m_Commands[ iCmd ].strText;
if ( dlg.DoModal() != IDOK ) return 0;
m_Commands[ iCmd ].bIgnoreErrors = dlg.m_bIgnoreErrors;
m_Commands[ iCmd ].dwTimeout = dlg.m_dwTimeout;
m_Commands[ iCmd ].strText = dlg.m_strText;
UIUtils::TrimTextToCtrl( hwndCmds,
dlg.m_strText.GetBuffer( dlg.m_strText.GetLength() ),
::GetSystemMetrics( SM_CXVSCROLL ) );
dlg.m_strText.ReleaseBuffer();
ListBox_InsertString( hwndCmds, iCmd, dlg.m_strText );
ListBox_DeleteString( hwndCmds, iCmd + 1 );
ListBox_SetCurSel( hwndCmds, iCmd );
return 0;
}
LRESULT CPostProcessAdd::LBDoubleClick( WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/ )
{
if ( wID != IDC_COMMANDS ) return 0;
BOOL bUnused = FALSE;
OnEditCmd( BN_CLICKED, IDC_EDITCMD, GetDlgItem( IDC_EDITCMD ), bUnused );
return 0;
}
LRESULT CPostProcessAdd::OnMoveUp( WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/ )
{
HWND hwndCmds = GetDlgItem( IDC_COMMANDS );
int iSel = ListBox_GetCurSel( hwndCmds );
_ASSERT( ( iSel != LB_ERR ) && ( iSel > 0 ) );
LBSwapElements( hwndCmds, iSel, iSel - 1 );
ListBox_SetCurSel( hwndCmds, iSel - 1 );
BOOL bUnused = FALSE;
LBSelChanged( LBN_SELCHANGE, IDC_COMMANDS, GetDlgItem( IDC_COMMANDS ), bUnused );
CmdInfo cmdTemp = m_Commands[ iSel ];
m_Commands[ iSel ] = m_Commands[ iSel - 1 ];
m_Commands[ iSel - 1 ] = cmdTemp;
return 0;
}
LRESULT CPostProcessAdd::OnMoveDown( WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/ )
{
HWND hwndCmds = GetDlgItem( IDC_COMMANDS );
int iSel = ListBox_GetCurSel( hwndCmds );
_ASSERT( ( iSel != LB_ERR ) && ( iSel < ( ListBox_GetCount( hwndCmds ) - 1 ) ) );
LBSwapElements( hwndCmds, iSel, iSel + 1 );
ListBox_SetCurSel( hwndCmds, iSel + 1 );
BOOL bUnused = FALSE;
LBSelChanged( LBN_SELCHANGE, IDC_COMMANDS, GetDlgItem( IDC_COMMANDS ), bUnused );
CmdInfo cmdTemp = m_Commands[ iSel ];
m_Commands[ iSel ] = m_Commands[ iSel + 1 ];
m_Commands[ iSel + 1 ] = cmdTemp;
return 0;
}
void CPostProcessAdd::LBSwapElements( HWND hwndLB, int iSrc, int iTarget )
{
_ASSERT( hwndLB != NULL );
_ASSERT( iSrc != iTarget );
CString strSrc;
CString strTarget;
ListBox_GetText( hwndLB, iSrc, strSrc.GetBuffer( ListBox_GetTextLen( hwndLB, iSrc ) + 1 ) );
ListBox_GetText( hwndLB, iTarget, strTarget.GetBuffer( ListBox_GetTextLen( hwndLB, iTarget ) + 1 ) );
strSrc.ReleaseBuffer();
strTarget.ReleaseBuffer();
ListBox_InsertString( hwndLB, iTarget, strSrc );
ListBox_DeleteString( hwndLB, iTarget + 1 );
ListBox_InsertString( hwndLB, iSrc, strTarget );
ListBox_DeleteString( hwndLB, iSrc + 1 );
}
int CPostProcessAdd::OnWizardNext()
{
int nRet = 0; // Goto next page
int nMsgRes = 0;
// Check if there are files, but no commands
if ( m_Commands.empty() && !m_Files.empty() )
{
nMsgRes = UIUtils::MessageBox( m_hWnd, IDS_W_NOCMDS, IDS_APPTITLE, MB_YESNO | MB_ICONWARNING );
// User wants to continue and ignore the files
if ( IDYES == nMsgRes )
{
m_Files.clear();
ListBox_ResetContent( GetDlgItem( IDC_FILES ) );
}
else
{
nRet = -1; // Stay on this page
}
}
return nRet;
}