#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 | 9617 | Ben_Key |
Populate //guest/Ben_Key/p4win/trunk/... from //guest/perforce_software/p4win/.... |
||
//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. |