- #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/..... |
9 years ago | |
//guest/perforce_software/p4win/main/gui/catchalldlg.cpp | |||||
#1 | 16169 | perforce_software | Move files to follow new path scheme for branches. | 9 years ago | |
//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 be...st 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. « |
11 years ago |