// DeleteFixes.cpp : implementation file // #include "stdafx.h" #include "p4win.h" #include "reviewlist.h" #include "DeleteFixes.h" #include "MainFrm.h" #include "P4Command.h" #include "cmd_describe.h" #include "hlp\p4win.hh" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDeleteFixes dialog CDeleteFixes::CDeleteFixes(CWnd* pParent /*=NULL*/) : CDialog(CDeleteFixes::IDD, pParent) { m_pParent = pParent; //{{AFX_DATA_INIT(CDeleteFixes) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_OldChgWnd = pParent->m_hWnd; m_InitRect.SetRect(0,0,0,0); m_InitDialogDone = m_IsMinimized = FALSE; m_WinPos.SetWindow( this, _T("DeleteFixes") ); m_SortFlag = 0; } CDeleteFixes::~CDeleteFixes() { delete m_List; } void CDeleteFixes::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDeleteFixes) DDX_Control(pDX, IDC_JOBSTATUS, m_JobStatus); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDeleteFixes, CDialog) //{{AFX_MSG_MAP(CDeleteFixes) ON_WM_SETCURSOR() ON_WM_SIZE() ON_WM_GETMINMAXINFO() ON_WM_SHOWWINDOW() ON_BN_CLICKED(IDC_DESCRIPTION, OnDescribeJob) ON_BN_CLICKED(ID_HELP, OnHelp) ON_LBN_SELCHANGE(IDC_LIST, OnSelchangeList) ON_WM_DESTROY() ON_WM_SYSCOMMAND() //}}AFX_MSG_MAP ON_WM_HELPINFO() END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDeleteFixes message handlers BOOL CDeleteFixes::OnInitDialog() { CDialog::OnInitDialog(); if (m_pParent) MainFrame()->SetModelessWnd(this); GetWindowRect(&m_InitRect); m_LastRect = m_InitRect; SetWindowText(m_Caption); CRect rect; CWnd *pCtrl=GetDlgItem(IDC_LISTRECT); pCtrl->GetWindowRect(&rect); ScreenToClient(&rect); DWORD style= WS_CHILD | WS_BORDER | WS_VISIBLE | LBS_HASSTRINGS | WS_HSCROLL | LBS_EXTENDEDSEL | LBS_OWNERDRAWFIXED | WS_VSCROLL | WS_TABSTOP | LBS_NOINTEGRALHEIGHT; m_List = new CReviewList; m_List->CreateEx(WS_EX_CLIENTEDGE, MainFrame()->m_ReviewListClass, _T(""),style, rect.left, rect.top, rect.Width(), rect.Height(), this->m_hWnd, (HMENU) IDC_LIST); LoadFixes(); if (!LoadJobStatusComboBox()) { GetDlgItem(IDC_JOBSTATUSPROMPT)->ShowWindow( SW_HIDE ); GetDlgItem(IDC_JOBSTATUS)->ShowWindow( SW_HIDE ); } OnSelchangeList(); // Restore window position m_InitDialogDone = TRUE; m_WinPos.RestoreWindowPosition(); ShowWindow(SW_SHOW); return FALSE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDeleteFixes::OnShowWindow(BOOL bShow, UINT nStatus) { CDialog::OnShowWindow(bShow, nStatus); m_List->SetFocus(); } void CDeleteFixes::LoadFixes() { CString s; int maxlgth = 0; for (POSITION pos = m_SelectedList->GetHeadPosition(); pos != NULL; ) { s = m_SelectedList->GetNext(pos); if( !s.IsEmpty() ) { maxlgth = max(maxlgth, s.GetLength()); m_List->AddString( s ); m_SortFlag |= 2; } // Get text metrics for font so we can figure scroll extent // TEXTMETRIC tm; CDC *pDC= GetDC(); pDC->GetTextMetrics( &tm ); ReleaseDC( pDC ); m_List->SetHorizontalExtent( tm.tmAveCharWidth * maxlgth + 40 ); } } BOOL CDeleteFixes::LoadJobStatusComboBox() { int i; m_JobStatus.AddString(LoadStringResource(IDS_PAREN_NOCHANGE_PAREN)); m_JobStatus.SetCurSel(0); if (GET_SERVERLEVEL() < 10) return FALSE; i = m_pJobSpec->Find(_T("\nFields:\n\t")); if (i == -1) return FALSE; i = m_pJobSpec->Find(_T("\n\t102 "), i); if (i == -1) return FALSE; i += sizeof(_T("\n\t102 "))/sizeof(TCHAR) - 1; int j = m_pJobSpec->Find(_T(' '), i); if (j == -1) return FALSE; CString name = m_pJobSpec->Mid(i, j-i); i = m_pJobSpec->Find(_T("\nValues:"), j); if (i == -1) { CString dashed = _T("\nValues"); dashed += _T("-") + name; i = m_pJobSpec->Find(dashed, j); if (i == -1) return FALSE; } i = m_pJobSpec->Find(name, i); if (i == -1) return FALSE; i += name.GetLength(); while (1) { TCHAR c = m_pJobSpec->GetAt(++i); if ((c != _T(':')) && (c != _T(' ')) && (c != _T('\t'))) break; } j = m_pJobSpec->Find(_T('\n'), i); if (j == -1) return FALSE; CString values = m_pJobSpec->Mid(i, j-i); while((i = values.Find(_T('/'))) != -1) { CString value = values.Mid(0,i); m_JobStatus.AddString(value); values = values.Mid(i+1); } m_JobStatus.AddString(values); // at this point we have loaded the dropdown; now figure out the initial value i = m_pJobSpec->Find(_T("\nPresets:")); if (i == -1) return TRUE; i = m_pJobSpec->Find(name, i); if (i == -1) return TRUE; i += name.GetLength(); while (1) { TCHAR c = m_pJobSpec->GetAt(++i); if ((c != _T(':')) && (c != _T(' ')) && (c != _T('\t'))) break; } j = m_pJobSpec->Find(_T('\n'), i); if (j == -1) return TRUE; CString preset = m_pJobSpec->Mid(i, j-i); if ((i = m_JobStatus.FindStringExact(-1, preset)) != CB_ERR) m_JobStatus.SetCurSel(i); return TRUE; } void CDeleteFixes::OnSelectAll() { for ( int i = 0; i < m_List->GetCount ( ); i++ ) m_List->SetCheck( i, 1 ); } void CDeleteFixes::OnUnselectAll() { for ( int i = 0; i < m_List->GetCount ( ); i++ ) m_List->SetCheck( i, 0 ); } void CDeleteFixes::OnCancel() { ::PostMessage(m_OldChgWnd, m_ReturnMsg, (WPARAM)IDCANCEL, (LPARAM)0); } void CDeleteFixes::OnOK() { CString txt; m_OutputList->RemoveAll(); for ( int i = 0; i < m_List->GetCount( ); i++ ) { if (m_List->GetCheck(i)) { m_List->GetText( i, txt ); m_OutputList->AddTail( txt ); } } if (m_OutputList->GetCount() == 0) { if (IDYES == AfxMessageBox(IDS_NOTHINGSELECTED_CLOSE, MB_YESNO|MB_DEFBUTTON2)) OnCancel(); return; } m_WinPos.SaveWindowPosition(); int cursel = m_JobStatus.GetCurSel(); if (cursel != CB_ERR) m_JobStatus.GetLBText(cursel, *m_JobStatusValue); if (*m_JobStatusValue == LoadStringResource(IDS_PAREN_NOCHANGE_PAREN)) (*m_JobStatusValue).Empty(); ::PostMessage(m_OldChgWnd, m_ReturnMsg, (WPARAM)IDOK, (LPARAM)FALSE); } void CDeleteFixes::OnHelp() { AfxGetApp()->WinHelp(TASK_MANAGING_LABELS); } BOOL CDeleteFixes::OnHelpInfo(HELPINFO* pHelpInfo) { OnHelp(); return TRUE; } void CDeleteFixes::OnDescribeJob() { int i; CString str; if ((i = m_List->GetCurSel()) != LB_ERR) { m_List->GetText(i, str); if ((i = str.Find(_T(' '))) != -1) { str = str.Left(i); CCmd_Describe *pCmd= new CCmd_Describe; pCmd->Init( MainFrame()->JobWnd(), RUN_ASYNC ); if( pCmd->Run( P4JOB_SPEC, str ) ) MainFrame()->UpdateStatus(LoadStringResource(IDS_FETCHING_JOB_SPEC)); else delete pCmd; } } } void CDeleteFixes::OnSelchangeList() { GetDlgItem(IDC_DESCRIPTION)->EnableWindow(m_List->GetCurSel() != LB_ERR); } BOOL CDeleteFixes::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { if(SERVER_BUSY()) return SET_BUSYCURSOR(); else return CDialog::OnSetCursor(pWnd, nHitTest, message); } void CDeleteFixes::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if (!m_InitDialogDone) return; if (nType == SIZE_MINIMIZED) { m_IsMinimized = TRUE; return; } else if (m_IsMinimized) { m_IsMinimized = FALSE; return; } // Compute the change in width (dx) CRect rect; GetWindowRect(&rect); int dx = rect.Width() - m_LastRect.Width(); int dy = rect.Height() - m_LastRect.Height(); // Save the new size m_LastRect = rect; // Widen the list box by the change in width (dx) and // heighten the list box by the change in height (dy) CWnd *pWnd=GetDlgItem(IDC_LIST); pWnd->GetWindowRect(&rect); pWnd->SetWindowPos(NULL, 0, 0, rect.right - rect.left + dx, rect.bottom - rect.top + dy, SWP_NOMOVE | SWP_NOZORDER); // Slide the Describe button down by the change in height pWnd = GetDlgItem(IDC_DESCRIPTION); pWnd->GetWindowRect(&rect); ScreenToClient(rect); pWnd->SetWindowPos(NULL, rect.left, rect.top + dy, 0, 0, SWP_NOSIZE | SWP_NOZORDER); // Slide the Status label down by the change in height pWnd = GetDlgItem(IDC_JOBSTATUSPROMPT); pWnd->GetWindowRect(&rect); ScreenToClient(rect); pWnd->SetWindowPos(NULL, rect.left, rect.top + dy, 0, 0, SWP_NOSIZE | SWP_NOZORDER); // Slide the Status field down by the change in height pWnd = GetDlgItem(IDC_JOBSTATUS); pWnd->GetWindowRect(&rect); ScreenToClient(rect); pWnd->SetWindowPos(NULL, rect.left, rect.top + dy, 0, 0, SWP_NOSIZE | SWP_NOZORDER); // Slide the other buttons to the right by the change in width // and down by the change in height pWnd = GetDlgItem(IDOK); pWnd->GetWindowRect(&rect); ScreenToClient(rect); pWnd->SetWindowPos(NULL, rect.left + dx, rect.top + dy, 0, 0, SWP_NOSIZE | SWP_NOZORDER); pWnd = GetDlgItem(IDCANCEL); pWnd->GetWindowRect(&rect); ScreenToClient(rect); pWnd->SetWindowPos(NULL, rect.left + dx, rect.top + dy, 0, 0, SWP_NOSIZE | SWP_NOZORDER); pWnd = GetDlgItem(ID_HELP); pWnd->GetWindowRect(&rect); ScreenToClient(rect); pWnd->SetWindowPos(NULL, rect.left + dx, rect.top + dy, 0, 0, SWP_NOSIZE | SWP_NOZORDER); InvalidateRect(NULL, TRUE); } void CDeleteFixes::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) { if (m_InitRect.Height()) { lpMMI->ptMinTrackSize.x= m_InitRect.Width(); lpMMI->ptMinTrackSize.y= m_InitRect.Height(); } } // This signals the closing of a modeless dialog // to MainFrame which will delete the 'this' object void CDeleteFixes::OnDestroy() { ::PostMessage(MainFrame()->m_hWnd, WM_P4DLGDESTROY, 0, (LPARAM)this); } void CDeleteFixes::OnSysCommand(UINT nID, LPARAM lParam) { switch(nID) { case SC_MINIMIZE: GetDesktopWindow()->ArrangeIconicWindows(); break; } CDialog::OnSysCommand(nID, lParam); }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 9617 | Ben_Key |
Populate //guest/Ben_Key/p4win/trunk/... from //guest/perforce_software/p4win/.... |
||
//guest/perforce_software/p4win/gui/DeleteFixes.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. |