- // 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 | 19924 | YourUncleBob |
Populate -o //guest/perforce_software/p4win/... //guest/YourUncleBob/p4win/..... |
9 years ago | |
//guest/perforce_software/p4win/main/gui/DeleteFixes.cpp | |||||
#1 | 16169 | perforce_software | Move files to follow new path scheme for branches. | 9 years ago | |
//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 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 |