P4SpecSheet.cpp. #1

  • //
  • guest/
  • YourUncleBob/
  • p4win/
  • main/
  • gui/
  • spec-dlgs/
  • P4SpecSheet.cpp.
  • View
  • Commits
  • Open Download .zip Download (16 KB)
// spec-dlgs\P4SpecSheet.cpp : implementation file
//

#include "stdafx.h"
#include "P4win.h"
#include "P4SpecSheet.h"
#include "P4Command.h"
#include "MainFrm.h"

// CP4SpecSheet dialog

IMPLEMENT_DYNAMIC(CP4SpecSheet, CDialog)
CP4SpecSheet::CP4SpecSheet(CWnd* pParent /*=NULL*/)
	: CDialog(CP4SpecSheet::IDD, pParent)
{
	m_pParent  = pParent;
	m_LastFocus= 0;
	m_BtnId[0] = ID_UPDATE;
	m_BtnId[1] = ID_EDITOR;
	m_BtnId[2] = ID_CANCEL;
	m_BtnId[3] = ID_HELPNOTES;
	m_BtnId[4] = ID_HELP;
	m_bShowReopen = m_bShowRevertUnchg = m_IsMinimized = FALSE;
	m_MainFRmSignaled = TRUE;
	m_Pad = 0;
	m_UnchangedFlag = 0;
}

CP4SpecSheet::~CP4SpecSheet()
{
	if (m_pParent && !m_MainFRmSignaled)
		::PostMessage(MainFrame()->m_hWnd, WM_P4DLGDESTROY, 0, (LPARAM)this);
}

void CP4SpecSheet::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CP4SpecSheet)
	DDX_Control(pDX, ID_HELP, m_bHelpHelp);
	DDX_Control(pDX, ID_HELPNOTES, m_bHelp);
	DDX_Control(pDX, ID_EDITOR, m_bEditor);
	DDX_Control(pDX, ID_UPDATE, m_bOK);
	DDX_Control(pDX, ID_ACTION_1, m_bAlternate);
	DDX_Control(pDX, ID_CANCEL, m_bCancel);
	DDX_Control(pDX, IDC_REOPEN, m_bReopen);
	DDX_Radio(pDX, IDC_RADIOSUBMIT, m_UnchangedFlag);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CP4SpecSheet, CDialog)
	//{{AFX_MSG_MAP(CP4SpecSheet)
	ON_BN_CLICKED(IDOK, OnEnter)
	ON_BN_CLICKED(ID_UPDATE, On_OK)
	ON_BN_CLICKED(ID_ACTION_1, OnAlternate)
	ON_BN_CLICKED(ID_CANCEL, On_Cancel)
	ON_BN_CLICKED(ID_HELPNOTES, OnHelpnotes)
	ON_BN_CLICKED(ID_EDITOR, OnEditor)
	ON_BN_CLICKED(ID_HELP, OnHelp)
	ON_BN_CLICKED(IDC_REOPEN, OnReopen)
	ON_BN_CLICKED(IDC_RADIOSUBMIT, OnRadioUnchg)
	ON_BN_CLICKED(IDC_RADIOREVERT, OnRadioUnchg)
	ON_BN_CLICKED(IDC_RADIOLEAVE, OnRadioUnchg)
	ON_WM_SIZE()
	ON_WM_SIZING()
	ON_WM_GETMINMAXINFO()
	ON_WM_SHOWWINDOW()
	ON_WM_HELPINFO()
 	ON_WM_CLOSE()
  	ON_WM_DESTROY()
	ON_WM_SYSCOMMAND()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_MODIFYSTYLE, OnModifyStyle)
    ON_MESSAGE(WM_P4ENDDESCRIBE, OnP4EndHelpnotes )
	ON_MESSAGE(WM_QUITTING, OnQuitting )
	ON_MESSAGE(WM_ENABLEDISABLE, OnEnableDisable )
	ON_MESSAGE(WM_FORCEFOCUS, OnForceFocus )
	ON_WM_ACTIVATE()
END_MESSAGE_MAP()


// CP4SpecSheet message handlers

BOOL CP4SpecSheet::OnInitDialog() 
{
	CDialog::OnInitDialog();

 	if (m_pParent)
	{
  		MainFrame()->SetModelessWnd(this);
		m_MainFRmSignaled = FALSE;	// indicate that we need to let MainFrame know when we end
	}
	else
	{
		long style = GetWindowLong(m_hWnd, GWL_STYLE);
		style ^= WS_MINIMIZEBOX;
		SetWindowLong(m_hWnd, GWL_STYLE, style);
	}

	// For Submit forms, we need the value of m_UnchangedFlag before we call m_P4SpecDlg.Create();
	// so compute it here and show/hide the Reopen checkbox & Unchanged radio buttons.
	if( m_P4SpecDlg.m_SpecType == P4CHANGE_SPEC && m_P4SpecDlg.m_AllowSubmit )
	{
		if (GET_SERVERLEVEL() >= 13)
		{
			m_bReopen.SetCheck(GET_P4REGPTR()->GetAutoReopen());
			m_bShowReopen = TRUE;
			if (GET_SERVERLEVEL() >= 21)	// 2006.1 or later?
			{
				if (GET_P4REGPTR()->UseClientSpecSubmitOpts() // do they want to use cli spec opts?
				 && TheApp( )->m_ClientSubOpts && GET_SERVERLEVEL() >= 22)	// 2006.2 or later?
				{
					switch(TheApp( )->m_ClientSubOpts)
					{
					case SUBMITUNCHANGED:
					case SUBMITUNCHANGED_REOPEN:
						m_UnchangedFlag = 0;
						break;

					case REVERTUNCHANGED:
					case REVERTUNCHANGED_REOPEN:
						m_UnchangedFlag = 1;
						break;

					default:
					case LEAVEUNCHANGED:
					case LEAVEUNCHANGED_REOPEN:
						m_UnchangedFlag = 2;
						break;
					}
					m_bReopen.SetCheck(TheApp( )->m_ClientSubOpts > REOPEN_MASK);
				}
				else
				{
					if (!GET_P4REGPTR()->GetSubmitOnlyChged())
						m_UnchangedFlag = 0;
					else
						m_UnchangedFlag = GET_P4REGPTR()->GetRevertUnchged() ? 1 : 2;
				}
				m_bShowRevertUnchg = TRUE;
			}
			else
			{
				GetDlgItem( IDC_STATICUNCHANGED )->ShowWindow(SW_HIDE);
				GetDlgItem( IDC_RADIOSUBMIT )->EnableWindow(FALSE);
				GetDlgItem( IDC_RADIOSUBMIT )->ShowWindow(SW_HIDE);
				GetDlgItem( IDC_RADIOREVERT )->EnableWindow(FALSE);
				GetDlgItem( IDC_RADIOREVERT )->ShowWindow(SW_HIDE);
				GetDlgItem( IDC_RADIOLEAVE )->EnableWindow(FALSE);
				GetDlgItem( IDC_RADIOLEAVE )->ShowWindow(SW_HIDE);
				m_UnchangedFlag = GET_P4REGPTR()->GetSubmitOnlyChged() ? 2 : 0;
			}
		}
		else
		{
			m_bReopen.SetCheck(FALSE);
			GetDlgItem( IDC_REOPEN )->EnableWindow(FALSE);
			GetDlgItem( IDC_REOPEN )->ShowWindow(SW_HIDE);
			GetDlgItem( IDC_STATICUNCHANGED )->ShowWindow(SW_HIDE);
			GetDlgItem( IDC_RADIOSUBMIT )->EnableWindow(FALSE);
			GetDlgItem( IDC_RADIOSUBMIT )->ShowWindow(SW_HIDE);
			GetDlgItem( IDC_RADIOREVERT )->EnableWindow(FALSE);
			GetDlgItem( IDC_RADIOREVERT )->ShowWindow(SW_HIDE);
			GetDlgItem( IDC_RADIOLEAVE )->EnableWindow(FALSE);
			GetDlgItem( IDC_RADIOLEAVE )->ShowWindow(SW_HIDE);
			m_UnchangedFlag = GET_P4REGPTR()->GetSubmitOnlyChged() ? 2 : 0;
		}
	}
	else
	{
		GetDlgItem( IDC_REOPEN )->EnableWindow(FALSE);
		GetDlgItem( IDC_REOPEN )->ShowWindow(SW_HIDE);
		GetDlgItem( IDC_STATICUNCHANGED )->ShowWindow(SW_HIDE);
		GetDlgItem( IDC_RADIOSUBMIT )->EnableWindow(FALSE);
		GetDlgItem( IDC_RADIOSUBMIT )->ShowWindow(SW_HIDE);
		GetDlgItem( IDC_RADIOREVERT )->EnableWindow(FALSE);
		GetDlgItem( IDC_RADIOREVERT )->ShowWindow(SW_HIDE);
		GetDlgItem( IDC_RADIOLEAVE )->EnableWindow(FALSE);
		GetDlgItem( IDC_RADIOLEAVE )->ShowWindow(SW_HIDE);
		GetDlgItem( ID_ACTION_1 )->EnableWindow(FALSE);
		GetDlgItem( ID_ACTION_1 )->ShowWindow(SW_HIDE);
		SendMessage(DM_SETDEFID, ID_UPDATE, 0);
	}

	CRect clientRect, newClientRect, windowRect, newWindowRect;

	// Create the SpecDlg property page - this runs CP4SpecDlg::OnInitDialog()
	m_P4SpecDlg.m_UnchangedFlag = m_UnchangedFlag;
	m_P4SpecDlg.m_WinPos.SetWindowPtr(this);
	m_P4SpecDlg.Create(m_P4SpecDlg.m_psp.pszTemplate, this);
	m_P4SpecDlg.SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0, SWP_NOSIZE);

	// Change the font in the dialog & on the buttons
	SetFont(&m_P4SpecDlg.m_Font);
	ChgFont(ID_ACTION_1);
	ChgFont(ID_UPDATE);
	ChgFont(ID_CANCEL);
	ChgFont(ID_HELPNOTES);
	ChgFont(ID_EDITOR);
	ChgFont(ID_HELP);
	ChgFont(IDC_REOPEN);
	ChgFont(IDC_STATICUNCHANGED);
	ChgFont(IDC_RADIOSUBMIT);
	ChgFont(IDC_RADIOREVERT);
	ChgFont(IDC_RADIOLEAVE);

	// Position SpecDlg and reposition our buttons
	CRect rect, rectCancel;
	GetClientRect(&rect);
	GetDlgItem( ID_CANCEL )->GetWindowRect( &rectCancel );
	ScreenToClient( &rectCancel );

	// Now that m_P4SpecDlg has been created, we can position the buttons on a submit form
	if( m_P4SpecDlg.m_SpecType == P4CHANGE_SPEC && m_P4SpecDlg.m_AllowSubmit )
	{
		if (m_bShowReopen)
		{
			GetDlgItem( IDC_REOPEN )->GetWindowRect( &rect );
			m_Pad += rect.Height();
		}
		GetDlgItem( ID_UPDATE )->GetWindowRect( windowRect );
		ScreenToClient( windowRect );
		GetDlgItem( m_BtnId[0] = ID_ACTION_1 )->MoveWindow( windowRect );

		GetDlgItem( ID_EDITOR )->GetWindowRect( windowRect );
		ScreenToClient( windowRect );
		GetDlgItem( m_BtnId[1] = ID_UPDATE )->MoveWindow( windowRect );

		GetDlgItem( ID_EDITOR )->EnableWindow(FALSE);
		GetDlgItem( ID_EDITOR )->ShowWindow(SW_HIDE);
		m_P4SpecDlg.m_EditorBtnDisabled = TRUE;

		SendMessage(DM_SETDEFID, ID_ACTION_1, 0);
	}

	OnReopen();

	CWnd *pButton=GetDlgItem(ID_HELP);
	pButton->GetWindowRect(&rect);
	int w=rect.Width();
	int xtra = w/16;
	GetWindowRect(&rect);
	rect.right= max( rect.right, rect.left + 5 * w + 8 * xtra );
	// Yeah, this is stupid, but it seems to
	// be necessary to make the buttons show
	rect.top += 1;
	MoveWindow(&rect);
	rect.top -= 1;
	MoveWindow(&rect);
	UpdateData(FALSE);

	return FALSE;  // return TRUE unless you set the focus to a control
}

void CP4SpecSheet::ChgFont(int id)
{
	CRect windowRect;

	CWnd *pChildWnd = GetDlgItem( id );
	pChildWnd->SetFont( &m_P4SpecDlg.m_Font );
	pChildWnd->GetWindowRect( windowRect );
	ScreenToClient( windowRect );
	windowRect.left= windowRect.left * m_P4SpecDlg.m_NewAveCharWidth / m_P4SpecDlg.m_OldAveCharWidth;
	windowRect.right= windowRect.right * m_P4SpecDlg.m_NewAveCharWidth / m_P4SpecDlg.m_OldAveCharWidth;
	windowRect.top= windowRect.top * m_P4SpecDlg.m_NewHeight / m_P4SpecDlg.m_OldHeight;
	windowRect.bottom= windowRect.bottom * m_P4SpecDlg.m_NewHeight / m_P4SpecDlg.m_OldHeight;
	pChildWnd->MoveWindow( windowRect );
}

void CP4SpecSheet::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
	CDialog::OnActivate(nState, pWndOther, bMinimized);

	if (nState == WA_ACTIVE)
	{
		if (m_LastFocus)
		{
			if (!IsBadWritePtr(m_LastFocus, sizeof(CWnd))
			 && IsWindow(m_LastFocus->m_hWnd))
				PostMessage(WM_FORCEFOCUS, 2, (LPARAM)m_LastFocus->m_hWnd);
			m_LastFocus = 0;
		}
	}
	else if (nState == WA_INACTIVE)
	{
		if (!m_LastFocus)
		{
			CWnd *w = GetFocus();
			if (!w || w->GetParent()->m_hWnd == m_P4SpecDlg.m_hWnd)
				m_LastFocus = w;
		}
	}
}

LRESULT CP4SpecSheet::OnForceFocus(WPARAM wParam, LPARAM lParam)
{
	if (wParam)
		PostMessage(WM_FORCEFOCUS, --wParam, lParam);
	else
	{
		HWND hWnd = (HWND)lParam;
		::SetForegroundWindow(m_P4SpecDlg.m_hWnd);
		::SetFocus(m_P4SpecDlg.m_hWnd);
		::SetForegroundWindow(hWnd);
		::SetFocus(hWnd);
	}
	return wParam;
}

void CP4SpecSheet::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
}

int CP4SpecSheet::DoModal() 
{
	m_P4SpecDlg.SetIsModal(TRUE);
	int retcode=CDialog::DoModal();
	m_P4SpecDlg.DoCleanup();
	return retcode;
}

void CP4SpecSheet::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
{
	RECT rect;
	SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);
	m_ScreenHeight = rect.bottom - rect.top;

	lpMMI->ptMinTrackSize.y = 240;
	lpMMI->ptMaxTrackSize.y = m_ScreenHeight;
	CDialog::OnGetMinMaxInfo(lpMMI);
}

void CP4SpecSheet::OnSizing(UINT fwSide, LPRECT pRect) 
{
	CDialog::OnSizing(fwSide, pRect);
	
	pRect->bottom= max( pRect->bottom, pRect->top + 240 );
	pRect->bottom= min( pRect->bottom, m_ScreenHeight );

	CWnd *pButton=GetDlgItem(ID_HELP);
	if (!pButton || !IsWindow(pButton->m_hWnd))
		return;
	CRect rect;
	pButton->GetWindowRect(&rect);
	int w=rect.Width();
	int xtra = w/16;
	pRect->right= max( pRect->right, pRect->left + 5 * w + 8 * xtra );
}

void CP4SpecSheet::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	if (nType == SIZE_MINIMIZED)
	{
		m_IsMinimized = TRUE;
		return;
	}
	else if (m_IsMinimized)
	{
		m_IsMinimized = FALSE;
		if (nType != SIZE_MAXIMIZED)
			return;
	}

	CWnd *pButton=GetDlgItem(ID_HELP);
	if (!pButton || !IsWindow(pButton->m_hWnd))
		return;

	CRect rect, rect2, rectCancel;

	pButton->InvalidateRect(NULL, TRUE);
	pButton->GetWindowRect(&rect);
	int x;
	int w=rect.Width();
	int xtra = w/16;
	int end = cx - xtra;
	int y = cy - xtra - rect.Height();
	pButton->SetWindowPos(NULL, end - w, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);

	pButton=GetDlgItem(m_BtnId[3]);
	pButton->InvalidateRect(NULL, TRUE);
	pButton->SetWindowPos(NULL, end - (w*2 + xtra), y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);

	pButton=GetDlgItem(m_BtnId[2]);
	pButton->InvalidateRect(NULL, TRUE);
	pButton->SetWindowPos(NULL, end - (w*3 + xtra*2), y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);

	pButton=GetDlgItem(m_BtnId[1]);
	pButton->InvalidateRect(NULL, TRUE);
	pButton->SetWindowPos(NULL, end - (w*4 + xtra*3), y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);

	pButton=GetDlgItem(m_BtnId[0]);
	pButton->InvalidateRect(NULL, TRUE);
	pButton->SetWindowPos(NULL, end - (w*5 + xtra*4), y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);

	GetClientRect(&rect);
	GetDlgItem( ID_CANCEL )->GetWindowRect( &rectCancel );
	ScreenToClient( &rectCancel );

	if (!m_Pad)
		 m_Pad = (rect.bottom - rectCancel.bottom) * 2;

	m_P4SpecDlg.SetWindowPos(&CWnd::wndBottom, 0, 0, 
					rect.Width(), rect.Height() - rectCancel.Height() - m_Pad, 0);

	// Place the bottom of the Reopen Checkbox 3 pixels above the top of the buttons
	pButton=GetDlgItem(IDC_REOPEN);
	pButton->GetClientRect(&rect);
	pButton->InvalidateRect(NULL, TRUE);
	pButton->SetWindowPos(NULL, end - (w*5 + xtra*4), 
					rectCancel.top - rect.Height() - 3, 0, 0, SWP_NOSIZE | SWP_NOZORDER);

	pButton=GetDlgItem(IDC_STATICUNCHANGED);
	pButton->InvalidateRect(NULL, TRUE);
	pButton->SetWindowPos(NULL, x = end - (w*5 + xtra*4) + rect.Width(), 
					rectCancel.top - rect.Height() - 3 + 1, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
	pButton->GetWindowRect(&rect2);

	pButton=GetDlgItem(IDC_RADIOSUBMIT);
	pButton->InvalidateRect(NULL, TRUE);
	pButton->SetWindowPos(NULL, x = x + rect2.Width(), 
					rectCancel.top - rect.Height() - 3, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
	pButton->GetWindowRect(&rect2);

	pButton=GetDlgItem(IDC_RADIOREVERT);
	pButton->InvalidateRect(NULL, TRUE);
	pButton->SetWindowPos(NULL, x = x + rect2.Width(), 
					rectCancel.top - rect.Height() - 3, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
	pButton->GetWindowRect(&rect2);

	pButton=GetDlgItem(IDC_RADIOLEAVE);
	pButton->InvalidateRect(NULL, TRUE);
	pButton->SetWindowPos(NULL, x = x + rect2.Width(), 
					rectCancel.top - rect.Height() - 3, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
}

// The user pressed the Enter key and we got a button click for IDOK
void CP4SpecSheet::OnEnter() 
{
	m_P4SpecDlg.OnEnter();
}

void CP4SpecSheet::On_OK() 
{
	m_P4SpecDlg.On_OK();
}

void CP4SpecSheet::OnAlternate() 
{
	if (GET_SERVERLEVEL() >= 21)	// 2006.1 or later?
		OnRadioUnchg();
	m_P4SpecDlg.OnAlternate();
}

void CP4SpecSheet::On_Cancel() 
{
	m_P4SpecDlg.On_Cancel();
}

void CP4SpecSheet::OnCancel() 
{
	// Eat ESC while sending spec, so the server's reply can
	// be properly processed.  Don't confuse this with On_Cancel(),
	// which is called when the cancel button is hit.
	// m_P4SpecDlg.OnCancel() does all the work
	m_P4SpecDlg.OnCancel();
}

void CP4SpecSheet::OnHelpnotes() 
{
	m_P4SpecDlg.OnHelpnotes();
}

void CP4SpecSheet::OnEditor() 
{
	m_P4SpecDlg.OnEditor();
}

void CP4SpecSheet::OnHelp()
{
	m_P4SpecDlg.OnHelp();
}

void CP4SpecSheet::OnClose() 
{
 	On_Cancel();
}

LRESULT CP4SpecSheet::OnQuitting(WPARAM wParam, LPARAM lParam) 
{
	if (m_pParent)
	{
		CP4Command *pCmd = (CP4Command *)m_P4SpecDlg.GetCallingCommand();
		m_pParent->SendMessage(WM_P4ENDSPECEDIT, (WPARAM)pCmd, IDABORT);
	}
	m_P4SpecDlg.DoCleanup();
	return 0;
}

// This signals the closing of a modeless dialog
// to MainFrame which will delete the 'this' object
void CP4SpecSheet::OnDestroy()
{
	if (m_pParent)
	{
		::PostMessage(MainFrame()->m_hWnd, WM_P4DLGDESTROY, 0, (LPARAM)this);
		m_MainFRmSignaled = TRUE;
	}
}

BOOL CP4SpecSheet::OnHelpInfo(HELPINFO* pHelpInfo) 
{
	return m_P4SpecDlg.OnHelpInfo(pHelpInfo);
}

void CP4SpecSheet::OnReopen()
{
	m_P4SpecDlg.m_bReopen = m_bReopen.GetCheck();
}

void CP4SpecSheet::OnRadioUnchg()
{
	UpdateData();
	m_P4SpecDlg.m_CheckOnlyChgedFiles = (m_UnchangedFlag == 2);
	m_P4SpecDlg.ResetFileChecks((m_P4SpecDlg.m_UnchangedFlag = m_UnchangedFlag) != 2);
}

LRESULT CP4SpecSheet::OnEnableDisable( WPARAM wParam, LPARAM lParam )
{
	GetDlgItem( IDC_STATICUNCHANGED )->EnableWindow(lParam);
	GetDlgItem( IDC_RADIOREVERT )->EnableWindow(lParam);
	GetDlgItem( IDC_RADIOSUBMIT )->EnableWindow(lParam);
	GetDlgItem( IDC_RADIOLEAVE )->EnableWindow(lParam);
	return 0;
}

LRESULT CP4SpecSheet::OnModifyStyle( WPARAM wParam, LPARAM lParam )
{
	for (int i = -1; ++i < 5; )
		GetDlgItem(m_BtnId[i])->ModifyStyle((DWORD)wParam, (DWORD)lParam, 0);
	if (m_bShowReopen)
		GetDlgItem(IDC_REOPEN)->ModifyStyle((DWORD)wParam, (DWORD)lParam, 0);
	if (m_bShowRevertUnchg)
	{
		GetDlgItem( IDC_STATICUNCHANGED )->ModifyStyle((DWORD)wParam, (DWORD)lParam, 0);
		GetDlgItem( IDC_RADIOREVERT )->ModifyStyle((DWORD)wParam, (DWORD)lParam, 0);
		GetDlgItem( IDC_RADIOSUBMIT )->ModifyStyle((DWORD)wParam, (DWORD)lParam, 0);
		GetDlgItem( IDC_RADIOLEAVE )->ModifyStyle((DWORD)wParam, (DWORD)lParam, 0);
	}
	return 0;
}

LRESULT CP4SpecSheet::OnP4EndHelpnotes(WPARAM wParam, LPARAM lParam)
{
	return m_P4SpecDlg.OnP4EndHelpnotes(wParam, lParam);
}

void CP4SpecSheet::OnSysCommand(UINT nID, LPARAM lParam) 
{
	switch(nID)
	{
	case SC_MINIMIZE:
		GetDesktopWindow()->ArrangeIconicWindows();
		break;
	}

	CDialog::OnSysCommand(nID, lParam);
}
# Change User Description Committed
#1 19924 YourUncleBob Populate -o //guest/perforce_software/p4win/...
//guest/YourUncleBob/p4win/.....
//guest/perforce_software/p4win/main/gui/spec-dlgs/P4SpecSheet.cpp
#1 16169 perforce_software Move files to follow new path scheme for branches.
//guest/perforce_software/p4win/gui/spec-dlgs/P4SpecSheet.cpp
#1 8562 Matt Attaway These feet never stop running.

Initial commit of the P4Win source code.  To the best of our knowledge this
compiles and runs using the 2013.3 P4 API and VS 2010. Expect a few changes
as we refine the build process. Please post any build issues to the forums.