#include "stdafx.h"
#include "p4win.h"
#include "viewerdlg.h"
#include "UserView.h"
#include "Mainfrm.h"
#include "catchalldlg.h"
#include "..\SpecDescDlg.h"
#include "hlp\p4win.hh"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CJobFilter dialog
CJobFilter::CJobFilter(CWnd* pParent /*=NULL*/)
: CDialog(CJobFilter::IDD, pParent)
{
//{{AFX_DATA_INIT(CJobFilter)
m_Filter = _T("");
//}}AFX_DATA_INIT
m_InitRect.SetRect(0,0,0,0);
}
void CJobFilter::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CJobFilter)
DDX_Control(pDX, ID_JOBVIEW, m_JobViewBtn);
DDX_Control(pDX, ID_RMVJOBFILTER, m_RmvFilter);
DDX_Control(pDX, ID_HELPJOBFILTER, m_Help);
DDX_Control(pDX, IDC_JOB_FILTER, m_ChangeCombo);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CJobFilter, CDialog)
//{{AFX_MSG_MAP(CJobFilter)
ON_BN_CLICKED(ID_HELPJOBFILTER, OnHelpJobFilter)
ON_BN_CLICKED(ID_RMVJOBFILTER, OnRmvJobFilter)
ON_BN_CLICKED(ID_JOBVIEW, OnJobView)
ON_BN_CLICKED(ID_FORMINFO, OnFormInfo)
ON_WM_SIZE()
ON_WM_GETMINMAXINFO()
ON_WM_HELPINFO()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_P4DESCRIBE, OnP4Describe )
ON_MESSAGE(WM_P4ENDDESCRIBE, OnP4EndDescribe )
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CJobFilter message handlers
BOOL CJobFilter::OnInitDialog()
{
CDialog::OnInitDialog();
// We want to position the job filter dialog in the upper left corner
// of the job view pane which has provided it's screen coords in m_top,
// m_left & m_right. However if the dialog box is longer than the job
// view pane, we need to slide it to the left so that the right edges
// line up, so get our screen coords for calc'ing the width of our box.
// We also want to resize the dialogbox to its previous width;
// so get the previous width, and resize and reposition the dialogbox.
int w = GET_P4REGPTR()->GetJobFilterWidth();
m_left = min(m_left, m_right - w); // calc horiz position
GetWindowRect(&m_InitRect);
SetWindowPos( NULL, m_left, m_top, w, m_InitRect.bottom - m_InitRect.top, SWP_NOZORDER );
LoadFilterComboBox();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CJobFilter::LoadFilterComboBox()
{
// Make sure the combo is empty
m_ChangeCombo.ResetContent();
m_ChangeCombo.Clear();
// Load all MRU filters into list box
for(int i=0; i < MAX_MRU_FILTERS; i++)
{
if(GET_P4REGPTR()->GetMRUFilter(i).GetLength() > 0)
m_ChangeCombo.AddString(GET_P4REGPTR()->GetMRUFilter(i));
}
// Select the first item
m_ChangeCombo.SetCurSel(0);
}
void CJobFilter::OnOK()
{
UpdateData( );
if(m_ChangeCombo.GetCurSel() != CB_ERR)
m_ChangeCombo.GetLBText(m_ChangeCombo.GetCurSel(), m_Filter);
else
m_ChangeCombo.GetWindowText( m_Filter );
if (m_Filter.GetLength() > 0) // if new filter is not blank
GET_P4REGPTR()->AddMRUFilter( m_Filter ); // save as most recently used in Reg
CRect rect;
GetWindowRect(&rect);
if(!GET_P4REGPTR()->SetJobFilterWidth( rect.Width() ) )
AfxMessageBox( IDS_BAD_REGISTRY, MB_ICONSTOP );
CDialog::OnOK();
}
void CJobFilter::OnHelpJobFilter()
{
AfxGetApp()->WinHelp(TASK_SPECIFYING_JOB_FILTERS);
}
BOOL CJobFilter::OnHelpInfo(HELPINFO* pHelpInfo)
{
OnHelpJobFilter();
return TRUE;
}
void CJobFilter::OnRmvJobFilter()
{
CString rmvFilter;
UpdateData( );
if(m_ChangeCombo.GetCurSel() != CB_ERR)
m_ChangeCombo.GetLBText(m_ChangeCombo.GetCurSel(), rmvFilter);
else
m_ChangeCombo.GetWindowText( rmvFilter );
if (rmvFilter.GetLength() > 0) // if filter is not blank
GET_P4REGPTR()->RmvMRUFilter( rmvFilter ); // remove it from Reg
// Reload combobox
LoadFilterComboBox();
UpdateData(FALSE);
GotoDlgCtrl(GetDlgItem(IDC_JOB_FILTER));
}
void CJobFilter::OnJobView()
{
// Run p4 user to get the server version
CCmd_Describe *pCmd = new CCmd_Describe;
pCmd->Init( NULL, RUN_SYNC );
BOOL cmdStarted= pCmd->Run( P4USER_SPEC, GET_P4REGPTR()->GetP4User() );
if(cmdStarted && !pCmd->GetError())
{
CString jobView = TheApp()->GetClientSpecField( _T("JobView"), pCmd->GetDescription());
m_ChangeCombo.SetCurSel(-1);
m_ChangeCombo.SetWindowText( jobView );
UpdateData(FALSE);
GotoDlgCtrl(GetDlgItem(IDC_JOB_FILTER));
}
else MessageBeep(0);
delete pCmd;
}
void CJobFilter::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
CWnd *pList=GetDlgItem(IDC_JOB_FILTER);
if (!pList || !IsWindow(pList->m_hWnd))
return;
int w;
CRect rect;
GetClientRect(&rect);
int x = rect.Width();
ClientToScreen(&rect);
int edge = rect.left;
pList->GetClientRect(&rect);
pList->ClientToScreen(&rect);
pList->SetWindowPos(NULL, 0, 0,
w = x - ((rect.left - edge)*2), rect.bottom - rect.top, SWP_NOMOVE | SWP_NOZORDER);
POINT pt;
pt.x = rect.left + w;
pt.y = rect.top;
ScreenToClient(&pt);
int end = pt.x;
CWnd *pGbox=GetDlgItem(IDC_GROUPBOX);
pGbox->GetClientRect(&rect);
pGbox->ClientToScreen(&rect);
pGbox->SetWindowPos(NULL, 0, 0,
x - ((rect.left - edge)*2), rect.bottom - rect.top, SWP_NOMOVE | SWP_NOZORDER);
CWnd *pButton=GetDlgItem(ID_RMVJOBFILTER);
pButton->InvalidateRect(NULL, TRUE);
pButton->GetWindowRect(&rect);
w=rect.Width();
int xtra = w/10;
pt.x = rect.left;
pt.y = rect.top;
ScreenToClient(&pt);
int y = pt.y;
pButton->SetWindowPos(NULL, end - w, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
pButton=GetDlgItem(ID_FORMINFO);
pButton->InvalidateRect(NULL, TRUE);
pButton->SetWindowPos(NULL, end - (w*2 + xtra), y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
pButton=GetDlgItem(ID_JOBVIEW);
pButton->InvalidateRect(NULL, TRUE);
pButton->SetWindowPos(NULL, end - (w*3 + xtra*2), y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
pButton=GetDlgItem(ID_HELPJOBFILTER);
pButton->GetWindowRect(&rect);
pt.x = rect.left;
pt.y = rect.top;
ScreenToClient(&pt);
y = pt.y;
pButton->InvalidateRect(NULL, TRUE);
pButton->SetWindowPos(NULL, end - w, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
pButton=GetDlgItem(IDCANCEL);
pButton->InvalidateRect(NULL, TRUE);
pButton->SetWindowPos(NULL, end - (w*2 + xtra), y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
pButton=GetDlgItem(IDOK);
pButton->InvalidateRect(NULL, TRUE);
pButton->SetWindowPos(NULL, end - (w*3 + xtra*2), y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
}
void CJobFilter::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
if (m_InitRect.Height())
{
lpMMI->ptMinTrackSize.x= m_InitRect.Width();
lpMMI->ptMinTrackSize.y= lpMMI->ptMaxTrackSize.y= m_InitRect.Height();
}
}
void CJobFilter::OnClearfilter()
{
m_Filter.Empty();
CDialog::OnOK();
}
void CJobFilter::OnFormInfo()
{
CCmd_Describe *pCmd = new CCmd_Describe;
pCmd->Init( m_hWnd, RUN_ASYNC );
if( pCmd->Run( P4JOB_SPEC, _T("0") ) )
MainFrame()->UpdateStatus( LoadStringResource(IDS_FETCHING_SPEC) );
else
delete pCmd;
GotoDlgCtrl(GetDlgItem(IDC_JOB_FILTER));
}
LRESULT CJobFilter::OnP4Describe( WPARAM wParam, LPARAM lParam )
{
CCmd_Describe *pCmd = ( CCmd_Describe * )wParam;
MainFrame()->ClearStatus();
if(!pCmd->GetError())
{
int i;
CString desc = MakeCRs( pCmd->GetDescription( ) );
if ((i = desc.ReverseFind(_T('#'))) != -1)
{
if ((i = desc.Find(_T('\n'), i)) != -1)
desc = desc.Left(i+1);
}
int key;
CSpecDescDlg *dlg = new CSpecDescDlg(this);
dlg->SetIsModeless(TRUE);
dlg->SetKey(key = pCmd->HaveServerLock()? pCmd->GetServerKey() : 0);
dlg->SetDescription( desc, FALSE );
dlg->SetCaption( LoadStringResource(IDS_P4WIN_SPECIFICATION_NOTES) );
dlg->SetWinPosName(_T("JobSpecInfo"));
CRect rect;
GetWindowRect(&rect);
rect.top += rect.Height() - 10;
rect.bottom = GetSystemMetrics(SM_CYFULLSCREEN);
rect.right = GetSystemMetrics(SM_CXFULLSCREEN);
dlg->SetWinPosDefault(rect);
if (!dlg->Create(IDD_SPECDESC, this)) // display the description dialog box
{
dlg->DestroyWindow(); // some error! clean up
delete dlg;
}
}
delete pCmd;
GotoDlgCtrl(GetDlgItem(IDC_JOB_FILTER));
return 0;
}
LRESULT CJobFilter::OnP4EndDescribe(WPARAM wParam, LPARAM lParam)
{
CSpecDescDlg *dlg = (CSpecDescDlg *)lParam;
dlg->DestroyWindow();
return TRUE;
}
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #1 | 19924 | YourUncleBob |
Populate -o //guest/perforce_software/p4win/... //guest/YourUncleBob/p4win/..... |
||
| //guest/perforce_software/p4win/main/gui/catchalldlg.cpp | |||||
| #1 | 16169 | perforce_software | Move files to follow new path scheme for branches. | ||
| //guest/perforce_software/p4win/gui/catchalldlg.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. |
||