- // LabelListCtrl.cpp : implementation file
- //
- #include "stdafx.h"
- #include "p4win.h"
- #include "DepotView.h"
- #include "LabelView.h"
- #include "MainFrm.h"
- #include "SpecDescDlg.h"
- #include "P4SpecDlg.h"
- #include "FilterByOwnerDlg.h"
- #include "Diff2ObjsDlg.h"
- #include "cmd_editspec.h"
- #include "cmd_delete.h"
- #include "cmd_diff2.h"
- #include "cmd_get.h"
- #include "cmd_labels.h"
- #include "cmd_labelsynch.h"
- #include "cmd_fstat.h"
- #include "templatenamedlg.h"
- #include "ImageList.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- #define IMG_INDEX(x) (x-IDB_PERFORCE)
- // the column names and their positions.
- //
- enum LabelSubItem
- {
- LABEL_NAME,
- LABEL_OWNER,
- LABEL_OPTIONS,
- LABEL_UPDATEDATE,
- LABEL_DESC,
- LABEL_MAXCOL
- };
- /////////////////////////////////////////////////////////////////////////////
- // CLabelListCtrl
- IMPLEMENT_DYNCREATE(CLabelListCtrl, CP4ListCtrl)
- BEGIN_MESSAGE_MAP(CLabelListCtrl, CP4ListCtrl)
- ON_COMMAND(ID_LABEL_DELETE, OnLabelDelete)
- ON_UPDATE_COMMAND_UI(ID_LABEL_DELETE, OnUpdateLabelDelete)
- ON_COMMAND(ID_LABEL_EDIT_SPEC, OnLabelEditspec)
- ON_COMMAND(ID_LABEL_NEW, OnLabelNew)
- ON_UPDATE_COMMAND_UI(ID_LABEL_NEW, OnUpdateLabelNew)
- ON_UPDATE_COMMAND_UI(ID_VIEW_UPDATE_RIGHT, OnUpdateViewUpdate)
- ON_WM_CONTEXTMENU()
- ON_UPDATE_COMMAND_UI(ID_LABEL_SYNC, OnUpdateLabelSync)
- ON_COMMAND(ID_LABEL_SYNC, OnLabelSync)
- ON_UPDATE_COMMAND_UI(ID_LABEL_SYNC_CLIENT, OnUpdateLabelSyncClient)
- ON_COMMAND(ID_LABEL_SYNC_CLIENT, OnLabelSyncClient)
- ON_UPDATE_COMMAND_UI(ID_LABEL_ADDTOLABELVIEW, OnUpdateAddToLabelView)
- ON_COMMAND(ID_LABEL_ADDTOLABELVIEW, OnAddToLabelView)
- ON_UPDATE_COMMAND_UI(ID_LABEL_DESCRIBE, OnUpdateLabelDescribe)
- ON_WM_LBUTTONDBLCLK()
- ON_COMMAND(ID_LABEL_LISTFILES, OnLabelListfiles)
- ON_UPDATE_COMMAND_UI(ID_LABEL_LISTFILES, OnUpdateLabelListfiles)
- ON_COMMAND(ID_LABEL_DELETEFILES, OnLabelDeletefiles)
- ON_UPDATE_COMMAND_UI(ID_LABEL_DELETEFILES, OnUpdateLabelDeletefiles)
- ON_UPDATE_COMMAND_UI(ID_LABEL_EDIT_SPEC, OnUpdateLabelEditSpec)
- ON_COMMAND(ID_LABEL_DESCRIBE, OnDescribe)
- ON_COMMAND(ID_VIEW_UPDATE_RIGHT, OnViewUpdate)
- ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnclick)
- ON_NOTIFY_REFLECT(LVN_DELETEITEM, OnDeleteitem)
- ON_UPDATE_COMMAND_UI(ID_LABEL_TEMPLATE, OnUpdateLabelTemplate)
- ON_COMMAND(ID_LABEL_TEMPLATE, OnLabelTemplate)
- ON_COMMAND(ID_LABELFILTER_CLEAR, OnLabelFilterClear)
- ON_COMMAND(ID_LABELFILTER_CLEARVIEW, OnLabelFilterClear)
- ON_UPDATE_COMMAND_UI(ID_LABELFILTER_CLEARVIEW, OnUpdateLabelFilterClearview)
- ON_COMMAND(ID_LABELFILTER_SET, OnLabelFilterSetview)
- ON_COMMAND(ID_LABELFILTER_SETVIEW, OnLabelFilterSetview)
- ON_UPDATE_COMMAND_UI(ID_LABELFILTER_SETVIEW, OnUpdateLabelFilterSetview)
- ON_COMMAND(ID_LABELFILTER_SETVIEWREV, OnLabelFilterSetviewRev)
- ON_UPDATE_COMMAND_UI(ID_LABELFILTER_SETVIEWREV, OnUpdateLabelFilterSetviewRev)
- ON_COMMAND(ID_LABELDD_SYNC, OnLabelDDsetSync)
- ON_COMMAND(ID_LABELDD_DELETEFILES, OnLabelDDsetDeleteFiles)
- ON_COMMAND(ID_LABELDD_SYNC_CLIENT, OnLabelDDsetSyncClient)
- ON_COMMAND(ID_LABELDD_ADDTOLABELVIEW, OnLabelDDAddToLabelView)
- ON_COMMAND(ID_LABELFILTERDD_SETVIEW, OnLabelDDsetFilterSetview)
- ON_COMMAND(ID_LABELFILTERDD_SETVIEWREV, OnLabelDDsetFilterSetviewRev)
- ON_COMMAND(ID_LABELDD_SHOWMENU, OnLabelDDsetShowMenu)
- ON_UPDATE_COMMAND_UI(ID_LABELDD_SHOWMENU, OnUpdateLabelDDsetShowMenu)
- ON_COMMAND(ID_PERFORCE_OPTIONS, OnPerforceOptions)
- ON_UPDATE_COMMAND_UI(ID_FILTERBYOWNER, OnUpdateFilterByOwner)
- ON_COMMAND(ID_FILTERBYOWNER, OnFilterByOwner)
- ON_UPDATE_COMMAND_UI(ID_CLEAROWNERFILTER, OnUpdateClearFilterByOwner)
- ON_COMMAND(ID_CLEAROWNERFILTER, OnClearFilterByOwner)
- ON_UPDATE_COMMAND_UI(ID_LABEL_DIFF2, OnUpdateDiff2Labels)
- ON_COMMAND(ID_LABEL_DIFF2, OnDiff2Labels)
- ON_WM_CREATE()
- ON_MESSAGE(WM_P4LABELS, OnP4LabelList )
- ON_MESSAGE(WM_P4FSTAT, OnP4LabelContents )
- ON_MESSAGE(WM_P4EDITSPEC, OnP4LabelSpec )
- ON_MESSAGE(WM_P4ENDSPECEDIT, OnP4EndSpecEdit )
- ON_MESSAGE(WM_P4DELETE, OnP4Delete )
- ON_MESSAGE(WM_DOLABELSYNCCLI, OnDoLabelSyncCli )
- ON_MESSAGE(WM_DOLABELDELFILES, OnDoLabelDelFiles )
- ON_MESSAGE(WM_DOLABELSYNC, OnDoLabelSync )
- ON_MESSAGE(WM_P4LABELSYNC, OnP4LabelSync )
- ON_MESSAGE(WM_P4DESCRIBE, OnP4Describe )
- ON_MESSAGE(WM_P4ENDDESCRIBE, OnP4EndDescribe )
- ON_MESSAGE(WM_LABELDROPMENU, OnLabelDropMenu )
- ON_MESSAGE(WM_LABELOUFC, CallOnUpdateLabelFilterClearview)
- ON_MESSAGE(WM_NEWUSER, NewUser )
- ON_WM_ACTIVATE()
- END_MESSAGE_MAP()
- CLabelListCtrl::CLabelListCtrl()
- {
- m_User = GET_P4REGPTR()->GetP4User();
- m_SortAscending=TRUE;
- m_LastSortCol=0;
- m_AddReplaceDlg = 0;
- m_DelSyncDlg = 0;
- m_viewType = P4LABEL_SPEC;
- m_Need2DoNew = FALSE;
- m_FilterOwner = GET_P4REGPTR()->GetLabelFilterByOwner();
- m_FilterOwnerFlag = GET_P4REGPTR()->GetLabelFilterByOwnerFlag();
- m_FilterIncBlank = GET_P4REGPTR()->GetLabelFilterIncBlank();
- m_captionplain = LoadStringResource(IDS_PERFORCE_LABELS);
- m_caption = LoadStringResource(!m_FilterOwnerFlag
- ? IDS_PERFORCE_LABELS : IDS_PERFORCE_FILTERED_LABELS_BY_OWNER);
- m_AnyBlankOwner = FALSE;
- CString format;
- format.LoadString(IDS_DRAGFROMDEPOT);
- m_CF_DEPOT=RegisterClipboardFormat(format);
- }
- CLabelListCtrl::~CLabelListCtrl()
- {
- }
- /////////////////////////////////////////////////////////////////////////////
- // CLabelListCtrl diagnostics
- #ifdef _DEBUG
- void CLabelListCtrl::AssertValid() const
- {
- CP4ListCtrl::AssertValid();
- }
- void CLabelListCtrl::Dump(CDumpContext& dc) const
- {
- CP4ListCtrl::Dump(dc);
- }
- #endif //_DEBUG
- /////////////////////////////////////////////////////////////////////////////
- // CLabelListCtrl message handlers
- void CLabelListCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
- {
- int index = GetHitItem ( point );
- if( index > -1 )
- {
- // If on an item, so select it and run edit
- SetItemState(index, LVIS_SELECTED|LVIS_FOCUSED, LVIS_DROPHILITED|LVIS_SELECTED|LVIS_FOCUSED );
- OnDescribe();
- }
- else
- CP4ListCtrl::OnLButtonDblClk(nFlags, point);
- }
- void CLabelListCtrl::Clear()
- {
- m_Active=GetSelectedItemText();
- if (!m_Active.IsEmpty())
- GET_P4REGPTR()->SetLastLabel(m_Active);
- SetRedraw(FALSE);
- DeleteAllItems();
- SetRedraw(TRUE);
- CP4ListCtrl::Clear();
- }
- void CLabelListCtrl::OnDeleteitem(NMHDR* pNMHDR, LRESULT* pResult)
- {
- NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
- delete (CP4Label *) GetItemData(pNMListView->iItem);
- *pResult = 0;
- }
- void CLabelListCtrl::OnUpdateLabelSync(CCmdUI* pCmdUI)
- {
- CString sel = TruncateString(GetSelectedItemText(), 50);
- CString txt;
- txt.FormatMessage(IDS_ADD_REPLACE_FILES_IN_LABEL_s, sel);
- pCmdUI->SetText ( txt );
- pCmdUI->Enable(!SERVER_BUSY() && !sel.IsEmpty()
- && !SelectedItemIsLocked(LABEL_OPTIONS) && !MainFrame()->IsModlessUp());
- }
- void CLabelListCtrl::OnLabelSync()
- {
- if (MainFrame()->IsModlessUp())
- return;
- CStringList list;
- m_Active= GetSelectedItemText();
- m_AddReplaceDlg = new CLabelAddReplace(this);
- if (!m_AddReplaceDlg)
- {
- ASSERT(0);
- AfxMessageBox(IDS_COULD_NOT_CREATE_LABEL_DIALOG_BOX, MB_ICONSTOP);
- return;
- }
- MainFrame()->SetModelessUp(TRUE);
- m_AddReplaceDlg->SetActive(m_AddReplaceName = m_Active);
- MainFrame()->AssembleDepotStringList(&list, TRUE);
- m_AddReplaceDlg->SetSelected(&list);
- m_AddReplaceDlg->SetOutputList(&m_AddReplaceList);
- m_AddReplaceDlg->m_FilesFlag = m_AddReplaceDlg->m_DefaultFlag
- = GET_P4REGPTR()->GetLabelAddRplDefault();
- m_AddReplaceDlg->m_RevFlag = 0;
- if (!m_AddReplaceDlg->Create(IDD_LABEL_ADD_REPLACE, this)) // display add/replace files dialog
- {
- delete m_AddReplaceDlg;
- MainFrame()->SetModelessUp(FALSE);
- }
- }
- LRESULT CLabelListCtrl::OnDoLabelSync(WPARAM wParam, LPARAM lParam)
- {
- BOOL preview = FALSE;
- if (wParam == IDOK)
- {
- preview = lParam;
- if (!preview)
- GET_P4REGPTR()->SetLabelAddRplDefault(m_AddReplaceDlg->m_DefaultFlag);
- if (m_AddReplaceList.GetCount())
- {
- CCmd_LabelSynch *pCmd= new CCmd_LabelSynch;
- pCmd->Init( m_hWnd, RUN_ASYNC);
- if( pCmd->Run( m_AddReplaceName, &m_AddReplaceList, preview, FALSE,
- m_AddReplaceDlg->m_FilesFlag==2 ) )
- MainFrame()->UpdateStatus( LoadStringResource(IDS_SYNCING_LABEL) );
- else
- delete pCmd;
- }
- else AddToStatus(LoadStringResource(IDS_NOTHING_SELECTED_NOTHING_TO_DO));
- }
- if (m_AddReplaceDlg && !preview)
- {
- m_AddReplaceDlg->DestroyWindow(); // deletes m_AddReplaceDlg
- m_AddReplaceDlg = 0;
- MainFrame()->SetModelessUp(FALSE);
- }
- return 0;
- }
- void CLabelListCtrl::OnUpdateLabelSyncClient(CCmdUI* pCmdUI)
- {
- CString sel = TruncateString(GetSelectedItemText(), 50);
- CString txt;
- txt.FormatMessage(IDS_SYNC_CLIENT_s_TO_LABEL_s,
- TruncateString(GET_P4REGPTR()->GetP4Client(), 50), sel);
- pCmdUI->SetText ( txt );
- pCmdUI->Enable(!SERVER_BUSY() && !sel.IsEmpty() && !MainFrame()->IsModlessUp());
- }
- void CLabelListCtrl::OnLabelSyncClient()
- {
- if (MainFrame()->IsModlessUp())
- return;
- m_Active = GetSelectedItemText();
- m_LabelFileCount=0;
- m_LabelFiles.Empty();
- m_DelSyncDlg = new CLabelDelSync(this);
- if (!m_DelSyncDlg)
- {
- ASSERT(0);
- AfxMessageBox(IDS_COULD_NOT_CREATE_LABEL_DIALOG_BOX, MB_ICONSTOP);
- return;
- }
- MainFrame()->SetModelessUp(TRUE);
- m_DelSyncDlg->SetActive(m_DelSyncName = m_Active);
- CString caption;
- caption.FormatMessage(IDS_SYNC_FILES_IN_LABEL_s, m_Active);
- m_DelSyncDlg->SetCaption( caption );
- m_DelSyncDlg->SetBtnText( LoadStringResource(IDS_SYNC_CLIENT_TO_SELECTED_FILE_REVISIONS) );
- MainFrame()->AssembleDepotStringList(&m_StringList, TRUE);
- m_DelSyncDlg->SetSelected(&m_StringList);
- m_DelSyncDlg->SetOutputList(&m_DelSyncList);
- m_DelSyncDlg->SetReturnMsg(WM_DOLABELSYNCCLI);
- if (!m_DelSyncDlg->Create(IDD_LABEL_DEL_SYNC, this)) // display the sync to label dialog box
- {
- delete m_DelSyncDlg;
- MainFrame()->SetModelessUp(FALSE);
- }
- }
- LRESULT CLabelListCtrl::OnDoLabelSyncCli(WPARAM wParam, LPARAM lParam)
- {
- BOOL preview = FALSE;
- if (wParam == IDOK)
- {
- preview = lParam;
- if (m_DelSyncList.GetCount())
- {
- CCmd_Get *pCmd= new CCmd_Get;
- pCmd->Init( m_depotWnd, RUN_ASYNC );
- if( !pCmd->Run( &m_DelSyncList, preview ) )
- delete pCmd;
- }
- else
- AddToStatus(LoadStringResource(IDS_NOTHING_SELECTED_NOTHING_TO_DO));
- }
- if (m_DelSyncDlg && !preview)
- {
- m_DelSyncDlg->DestroyWindow(); // deletes m_DelSyncDlg
- m_DelSyncDlg = 0;
- MainFrame()->SetModelessUp(FALSE);
- }
- return 0;
- }
- void CLabelListCtrl::OnUpdateLabelDeletefiles(CCmdUI* pCmdUI)
- {
- CString selUser = TruncateString(GetSelectedItemText(), 50);
- CString txt;
- txt.FormatMessage(IDS_DELETE_FILES_AT_s, selUser);
- pCmdUI->SetText ( txt );
- pCmdUI->Enable(!SERVER_BUSY() && !selUser.IsEmpty()
- && !SelectedItemIsLocked(LABEL_OPTIONS) && !MainFrame()->IsModlessUp());
- }
- void CLabelListCtrl::OnLabelDeletefiles()
- {
- if (MainFrame()->IsModlessUp())
- return;
- m_Active = GetSelectedItemText();
- m_LabelFileCount=0;
- m_LabelFiles.Empty();
- m_DelSyncDlg = new CLabelDelSync(this);
- if (!m_DelSyncDlg)
- {
- ASSERT(0);
- AfxMessageBox(IDS_COULD_NOT_CREATE_LABEL_DIALOG_BOX, MB_ICONSTOP);
- return;
- }
- MainFrame()->SetModelessUp(TRUE);
- m_DelSyncDlg->SetActive(m_DelSyncName = m_Active);
- CString caption;
- caption.FormatMessage(IDS_DELETE_FILES_FROM_LIST_IN_LABEL_s, m_Active);
- m_DelSyncDlg->SetCaption( caption );
- m_DelSyncDlg->SetBtnText( LoadStringResource(IDS_DELETE_CHECKED_FILES_FROM_LIST_IN_LABEL) );
- MainFrame()->AssembleDepotStringList(&m_StringList, TRUE);
- m_DelSyncDlg->SetSelected(&m_StringList);
- m_DelSyncDlg->SetOutputList(&m_DelSyncList);
- m_DelSyncDlg->SetReturnMsg(WM_DOLABELDELFILES);
- if (!m_DelSyncDlg->Create(IDD_LABEL_DEL_SYNC, this)) // display the remove files from label dialog
- {
- delete m_DelSyncDlg;
- MainFrame()->SetModelessUp(FALSE);
- }
- }
- LRESULT CLabelListCtrl::OnDoLabelDelFiles(WPARAM wParam, LPARAM lParam)
- {
- BOOL preview = FALSE;
- if (wParam == IDOK)
- {
- preview = lParam;
- if (m_DelSyncList.GetCount())
- {
- POSITION pos2;
- for (POSITION pos1 = m_DelSyncList.GetHeadPosition(); ( pos2 = pos1 ) != NULL; )
- {
- CString str = m_DelSyncList.GetNext(pos1);
- int i = str.ReverseFind(_T('#'));
- if (i != -1)
- str = str.Left(i);
- str += _T("#none");
- m_DelSyncList.SetAt(pos2, str);
- }
- CCmd_LabelSynch *pCmd= new CCmd_LabelSynch;
- pCmd->Init( m_hWnd, RUN_ASYNC);
- if( pCmd->Run( m_DelSyncName, &m_DelSyncList, preview, FALSE, FALSE ) )
- MainFrame()->UpdateStatus( LoadStringResource(IDS_SYNCING_LABEL) );
- else
- delete pCmd;
- }
- else
- AddToStatus(LoadStringResource(IDS_NOTHING_SELECTED_NOTHING_TO_DO));
- }
- if (m_DelSyncDlg && !preview)
- {
- m_DelSyncDlg->DestroyWindow(); // deletes m_DelSyncDlg
- m_DelSyncDlg = 0;
- MainFrame()->SetModelessUp(FALSE);
- }
- return 0;
- }
- void CLabelListCtrl::OnUpdateAddToLabelView(CCmdUI* pCmdUI)
- {
- CString sel = TruncateString(GetSelectedItemText(), 50);
- CString txt;
- txt.FormatMessage(IDS_ADDTOLABELVIEW_s, sel);
- pCmdUI->SetText ( txt );
- pCmdUI->Enable(!SERVER_BUSY() && !sel.IsEmpty()
- && !m_EditInProgress
- && !SelectedItemIsLocked(LABEL_OPTIONS));
- }
- void CLabelListCtrl::OnAddToLabelView()
- {
- CString txt;
- txt.FormatMessage(IDS_CONFIRMADDTOLABELVIEW_s, GetSelectedItemText());
- if( !SERVER_BUSY() && !m_EditInProgress
- && IDYES == AfxMessageBox(txt, MB_YESNO|MB_ICONQUESTION))
- {
- ::SendMessage(m_depotWnd, WM_GETSELLIST, (WPARAM) &m_AddToViewList, 0);
- if(m_AddToViewList.GetCount() > 0)
- {
- OnLabelEditspec();
- }
- }
- }
- void CLabelListCtrl::OnUpdateLabelDelete(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable( OnUpdateShowMenuItem( pCmdUI, IDS_DELETE_s ) && !SelectedItemIsLocked(LABEL_OPTIONS) );
- }
- void CLabelListCtrl::OnLabelDelete()
- {
- OnDelete( P4LABEL_DEL );
- }
- void CLabelListCtrl::OnUpdateLabelEditSpec(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable( OnUpdateShowMenuItem( pCmdUI, IDS_EDITSPEC_s ) && !m_EditInProgress
- && (!SelectedItemIsLocked(LABEL_OPTIONS)
- || !GetSelectedItemOwner(LABEL_OWNER).CompareNoCase(GET_P4REGPTR()->GetP4User())) );
- }
- void CLabelListCtrl::EditTheSpec(CString *name)
- {
- m_Active=*name;
- m_NewLabel=FALSE;
- EditSpec( m_Active );
- }
- void CLabelListCtrl::OnLabelEditspec()
- {
- m_Active=GetSelectedItemText();
- m_NewLabel=FALSE;
- EditSpec( m_Active );
- }
- void CLabelListCtrl::OnUpdateLabelNew(CCmdUI* pCmdUI)
- {
- pCmdUI->SetText ( LoadStringResource( IDS_NEW ) );
- pCmdUI->Enable(!SERVER_BUSY() && !m_EditInProgress);
- m_Need2DoNew = FALSE;
- }
- void CLabelListCtrl::OnLabelNew()
- {
- MainFrame()->ViewLabels();
- if (SERVER_BUSY())
- m_Need2DoNew = TRUE;
- else
- {
- m_Need2DoNew = FALSE;
- m_Active.Empty();
- m_NewLabel=TRUE;
- EditSpec( NEWSPECNAME );
- }
- }
- void CLabelListCtrl::OnUpdateViewUpdate(CCmdUI* pCmdUI)
- {
- // pCmdUI->SetText ( SetTextToRefresh( ) );
- pCmdUI->Enable(!SERVER_BUSY() && !MainFrame()->IsModlessUp());
- }
- void CLabelListCtrl::OnViewUpdate()
- {
- m_Active = GetSelectedItemText();
- CCmd_Labels *pCmd= new CCmd_Labels;
- pCmd->Init( m_hWnd, RUN_ASYNC);
- if (GET_SERVERLEVEL() >= 11)
- {
- // Make a copy of the filter view, because CCmd_Labels will
- // destroy that copy
- POSITION pos=m_LabelFilterView.GetHeadPosition();
- m_StrList.RemoveAll();
- while(pos != NULL)
- m_StrList.AddTail(m_LabelFilterView.GetNext(pos));
- }
- else if (m_LabelFilterView.GetCount())
- {
- OnLabelFilterClear();
- return;
- }
- if( pCmd->Run( &m_StrList ) )
- {
- MainFrame()->UpdateStatus( LoadStringResource(IDS_REQUESTING_LABEL_LISTING) );
- MainFrame()->SetLabelUpdateTime(GetTickCount());
- Clear();
- CP4ListCtrl::OnViewUpdate();
- }
- else
- delete pCmd;
- }
- void CLabelListCtrl::OnUpdateLabelListfiles(CCmdUI* pCmdUI)
- {
- CString selUser = TruncateString(GetSelectedItemText(), 50);
- CString txt;
- txt.FormatMessage(IDS_LIST_FILES_AT_s, selUser);
- pCmdUI->SetText ( txt );
- pCmdUI->Enable(!SERVER_BUSY() && !selUser.IsEmpty());
- }
- void CLabelListCtrl::OnLabelListfiles()
- {
- m_Active = GetSelectedItemText();
- m_LabelFileCount=0;
- m_LabelFiles.Empty();
- m_LabelFilesInDialog = GET_P4REGPTR()->LabelFilesInDialog( );
- CString spec;
- spec.Format(_T("//...@%s"), m_Active);
- // Call Fstat, w/ suppress==FALSE
- CCmd_Fstat *pCmd= new CCmd_Fstat;
- pCmd->Init( m_hWnd, RUN_ASYNC, LOSE_LOCK);
- // okay, this is weird, but let's set show entire depot
- // to true, since we want this command to
- // read 'p4 fstat //...@mynumber WITHOUT the -C
- // that would run otherwise.
- // after all, we all the files to show, not just
- // the ones on the client view.
- //
- BOOL bshowEntireDepot = TRUE;
- if( pCmd->Run( FALSE, spec, bshowEntireDepot, 0 ) )
- {
- MainFrame()->UpdateStatus( LoadStringResource(IDS_REQUESTING_LABEL_CONTENTS) );
- }
- else
- {
- delete pCmd;
- MainFrame()->ClearStatus();
- }
- }
- void CLabelListCtrl::OnContextMenu(CWnd* pWnd, CPoint point)
- {
- // make sure window is active
- //
- GetParentFrame()->ActivateFrame();
- // If one of the label modeless dialogs is up, don't display a context menu
- // instead set the focus to the modeless dialog.
- if (m_AddReplaceDlg)
- {
- m_AddReplaceDlg->SetFocus();
- return;
- }
- if (m_DelSyncDlg)
- {
- m_DelSyncDlg->SetFocus();
- return;
- }
- ///////////////////////////////
- // See ContextMenuRules.txt for order of menu commands!
- // create an empty context menu
- //
- CP4Menu popMenu;
- popMenu.CreatePopupMenu();
- int index;
- SetIndexAndPoint( index, point );
- // Can always create new label
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_LABEL_NEW );
- if(index != -1)
- {
- // Make sure item is selected
- SetItemState(index, LVIS_SELECTED|LVIS_FOCUSED, LVIS_DROPHILITED|LVIS_SELECTED|LVIS_FOCUSED );
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_LABEL_EDIT_SPEC );
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_LABEL_DESCRIBE );
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_LABEL_DELETE );
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_LABEL_TEMPLATE );
- popMenu.AppendMenu(MF_SEPARATOR);
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_LABEL_LISTFILES );
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_LABEL_SYNC );
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_LABEL_DELETEFILES );
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_LABEL_SYNC_CLIENT );
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_LABEL_ADDTOLABELVIEW );
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_LABEL_DIFF2, LoadStringResource(IDS_LABEL_DIFF2) );
- }
- popMenu.AppendMenu( MF_SEPARATOR );
- if(m_LabelFilterView.GetCount() > 0)
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_LABELFILTER_CLEARVIEW, LoadStringResource( IDS_CLEARFILTER ) );
- popMenu.AppendMenu(MF_ENABLED | MF_STRING, ID_VIEW_UPDATE, LoadStringResource(IDS_REFRESH) );
- MainFrame()->AddToolsToContextMenu(&popMenu);
- popMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());
- }
- void CLabelListCtrl::InsertLabel(CP4Label *label, int index)
- {
- // Add the data
- LV_ITEM lvItem;
- int iActualItem = -1;
- CString txt;
- ASSERT(label != NULL);
- m_iImage = CP4ViewImageList::VI_LABEL;
- for(int subItem=0; subItem < LABEL_MAXCOL; subItem++)
- {
- lvItem.mask=LVIF_TEXT |
- ((subItem==0) ? LVIF_IMAGE : 0) |
- ((subItem==0) ? LVIF_PARAM : 0);
- lvItem.iItem= (subItem==0) ? index : iActualItem;
- ASSERT(lvItem.iItem != -1);
- lvItem.iSubItem= subItem;
- lvItem.iImage = CP4ViewImageList::VI_LABEL;
- lvItem.lParam=(LPARAM) label;
- switch(subItem)
- {
- case LABEL_NAME:
- lvItem.pszText = const_cast<LPTSTR>( (LPCTSTR) label->GetLabelName()); break;
- case LABEL_OWNER:
- lvItem.pszText = const_cast<LPTSTR>( (LPCTSTR) label->GetOwner()); break;
- case LABEL_OPTIONS:
- lvItem.pszText = const_cast<LPTSTR>( (LPCTSTR) label->GetOptions()); break;
- case LABEL_UPDATEDATE:
- lvItem.pszText = const_cast<LPTSTR>( (LPCTSTR) label->GetDate()); break;
- case LABEL_DESC:
- txt= PadCRs(label->GetDescription());
- lvItem.pszText = const_cast<LPTSTR>( (LPCTSTR) txt); break;
- }
- if(subItem==0)
- iActualItem=InsertItem(&lvItem);
- else
- SetItem(&lvItem);
- }
- }
- void CLabelListCtrl::UpdateLabel(CP4Label *label, int index)
- {
- // After a spec edit, update the appropriate list item
- // First, switch the label data
- CP4Label *oldLabel= (CP4Label *) GetItemData(index);
- delete oldLabel;
- SetItemData(index, (LPARAM) label);
- // Then update the text
- SetItemText(index, LABEL_NAME, const_cast<LPTSTR>((LPCTSTR) label->GetLabelName()));
- SetItemText(index, LABEL_OWNER, const_cast<LPTSTR>((LPCTSTR) label->GetOwner()));
- SetItemText(index, LABEL_OPTIONS, const_cast<LPTSTR>((LPCTSTR) label->GetOptions()));
- SetItemText(index, LABEL_UPDATEDATE, const_cast<LPTSTR>((LPCTSTR) label->GetDate()));
- CString txt= PadCRs(label->GetDescription());
- SetItemText(index, LABEL_DESC, const_cast<LPTSTR>((LPCTSTR)txt));
- }
- ///////////////////////////////////////////////////
- // Messages posted by server thread
- LRESULT CLabelListCtrl::OnP4LabelContents(WPARAM wParam, LPARAM lParam)
- {
- CString tmp;
- CCmd_Fstat *pCmd;
- if(lParam == 0) // completion
- {
- pCmd= (CCmd_Fstat *) wParam;
- ASSERT_KINDOF(CCmd_Fstat,pCmd);
- if(!pCmd->GetError())
- {
- tmp.FormatMessage(IDS_LABEL_s_POINTS_TO_n_FILES, m_Active, m_LabelFileCount);
- AddToStatus(tmp, SV_COMPLETION);
- MainFrame()->ClearStatus();
- delete pCmd;
- if (m_LabelFilesInDialog && m_LabelFileCount)
- {
- m_LabelFiles += _T('\n') + tmp;
- int key;
- CSpecDescDlg *dlg = new CSpecDescDlg(this);
- dlg->SetIsModeless(TRUE);
- dlg->SetKey(key = pCmd->HaveServerLock()? pCmd->GetServerKey() : 0);
- dlg->SetDescription( m_LabelFiles );
- dlg->SetItemName( m_Active );
- CString caption;
- caption.FormatMessage(IDS_FILE_LIST_FOR_LABEL_s, m_Active);
- dlg->SetCaption( caption );
- dlg->SetViewType(P4LABEL_SPEC);
- if (!dlg->Create(IDD_SPECDESC, this)) // display the description dialog box
- {
- dlg->DestroyWindow(); // some error! clean up
- delete dlg;
- }
- m_LabelFiles.Empty();
- }
- }
- return 0;
- }
- else
- {
- // Pull a ptr to the command, as well as a batch of CP4FileStats
- // out of the wrapper
- CFstatWrapper *pWrap= (CFstatWrapper *) wParam;
- pCmd= (CCmd_Fstat *) pWrap->pCmd;
- ASSERT_KINDOF(CCmd_Fstat, pCmd);
- CObList *list= (CObList *) pWrap->pList;
- ASSERT_KINDOF(CObList, list);
- POSITION pos= list->GetHeadPosition();
- while(pos != NULL)
- {
- // Get the filestats
- CP4FileStats *stats= (CP4FileStats *) list->GetNext(pos);
- ASSERT_KINDOF(CP4FileStats, stats);
- // Increment the counter
- m_LabelFileCount++;
- if (m_LabelFilesInDialog)
- {
- // Format the file, rev and type
- tmp.FormatMessage(IDS_s_n_s_CHANGELIST_n_s,
- stats->GetFullDepotPath(),
- stats->GetHeadRev(),
- stats->GetHeadType(),
- stats->GetHeadChangeNum(),
- stats->GetActionStr(stats->GetHeadAction()));
- // And add to Description
- m_LabelFiles += tmp;
- }
- else
- {
- // Format the file, rev and type
- tmp.FormatMessage(IDS_LABEL_s_TO_s_n_s_CHANGELIST_n_s,
- m_Active,
- stats->GetFullDepotPath(),
- stats->GetHeadRev(),
- stats->GetHeadType(),
- stats->GetHeadChangeNum(),
- stats->GetActionStr(stats->GetHeadAction()));
- // And add to the status window
- AddToStatus( tmp);
- }
- delete stats;
- } // while row batch not done
- delete list;
- delete pWrap;
- return 0;
- } // a batch of rows, we'll be called again so dont delete pCmd
- }
- LRESULT CLabelListCtrl::OnP4LabelSync(WPARAM wParam, LPARAM lParam)
- {
- CCmd_LabelSynch *pCmd= (CCmd_LabelSynch *) wParam;
- CStringList *list= pCmd->GetList();
- ASSERT_KINDOF(CStringList, list);
- int numFiles=list->GetCount();
- if (numFiles && GET_P4REGPTR()->LabelShowPreviewDetail() && pCmd->GetPreview())
- {
- POSITION pos=list->GetHeadPosition();
- while(pos != NULL)
- AddToStatus( list->GetNext(pos), SV_MSG);
- }
- CString txt;
- txt.FormatMessage(pCmd->GetPreview()
- ? IDS_LABEL_SYNCHRONIZED_n_FILE_REFS_WOULD_BE_UPDATED
- : IDS_LABEL_SYNCHRONIZED_n_FILE_REFERENCES_UPDATED, numFiles);
- AddToStatus( txt, SV_COMPLETION);
- MainFrame()->ClearStatus();
- delete pCmd;
- return 0;
- }
- // Receives ak for label spec update
- void CLabelListCtrl::OnUpdateLabelDescribe(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable( OnUpdateShowMenuItem( pCmdUI, IDS_DESCRIBEIT_s ) );
- }
- // Receives ak for label spec update
- LRESULT CLabelListCtrl::OnP4LabelSpec(WPARAM wParam, LPARAM lParam)
- {
- CCmd_EditSpec *pCmd= (CCmd_EditSpec *) wParam;
- pCmd->SetIsRequestingNew(m_NewLabel);
- pCmd->SetCaller(DYNAMIC_DOWNCAST(CView, GetParent()));
- if (m_AddToViewList.GetCount() > 0) // We have files to add to the Reviews list
- {
- CString specIn(pCmd->GetSpecIn());
- int i;
- if ((i = specIn.Find(_T("\n\nView:\n"))) == -1)
- {
- i = specIn.GetLength();
- specIn += _T("\n\nView:\n");
- }
- else
- specIn += _T("\t@\n"); // A view that is @ means
- // put a blank line in the list here.
- POSITION pos;
- CString filename;
- for (pos = m_AddToViewList.GetHeadPosition(); pos != NULL; )
- {
- filename = m_AddToViewList.GetNext(pos);
- if ((i = filename.Find(_T("<contains no files or folders>"))) != -1)
- filename = filename.Left(i-1) + _T("/...");
- if (filename.Find(_T(' ')))
- filename = _T('\"') + filename + _T('\"');
- specIn += _T('\t') + filename + _T('\n');
- }
- m_AddToViewList.RemoveAll(); // this info is no longer needed
- pCmd->SetSpecIn(specIn);
- }
- // show the dialog box
- if(!pCmd->GetError() && !m_EditInProgress && pCmd->DoSpecDlg(this))
- {
- m_EditInProgress = TRUE;
- m_EditInProgressWnd = pCmd->GetSpecSheet();
- }
- else
- {
- if ( m_pNewSpec )
- delete m_pNewSpec;
- if (pCmd->HaveServerLock())
- pCmd->ReleaseServerLock();
- delete pCmd;
- }
- MainFrame()->ClearStatus();
- return 0;
- }
- LRESULT CLabelListCtrl::OnP4EndSpecEdit( WPARAM wParam, LPARAM lParam )
- {
- CCmd_EditSpec *pCmd= (CCmd_EditSpec *) wParam;
- int index;
- if (lParam != IDCANCEL && lParam != IDABORT)
- {
- if (m_UpdateState == LIST_UPDATED)
- {
- if(m_NewLabel && FindInList(m_pNewSpec->GetLabelName()) == -1)
- {
- InsertLabel(m_pNewSpec, GetItemCount());
- ReSort();
- index= FindInList(m_pNewSpec->GetLabelName());
- }
- else
- {
- index= FindInList(m_pNewSpec->GetLabelName());
- UpdateLabel(m_pNewSpec, index);
- }
- EnsureVisible(index, TRUE );
- SetItemState(index, LVIS_SELECTED|LVIS_FOCUSED, LVIS_DROPHILITED|LVIS_SELECTED|LVIS_FOCUSED );
- }
- else
- if ( m_pNewSpec ) delete m_pNewSpec;
- }
- else
- if ( m_pNewSpec ) delete m_pNewSpec;
- if (lParam != IDABORT)
- {
- MainFrame()->ClearStatus();
- if (pCmd->HaveServerLock())
- pCmd->ReleaseServerLock();
- CDialog *dlg = (CDialog *)pCmd->GetSpecSheet();
- dlg->DestroyWindow();
- }
- delete pCmd;
- m_EditInProgress = FALSE;
- return 0;
- }
- LRESULT CLabelListCtrl::OnP4LabelList(WPARAM wParam, LPARAM lParam)
- {
- CCmd_Labels *pCmd= (CCmd_Labels *) wParam;
- m_AnyBlankOwner = FALSE;
- if(!pCmd->GetError())
- {
- CString msg;
- CString filterowner;
- CObList const *labels = pCmd->GetList();
- int count = labels->GetCount();
- SetRedraw(FALSE);
- int index = 0;
- if (m_FilterOwnerFlag) // are we filtering by owner?
- filterowner = m_FilterOwnerFlag & 0x10 ? m_User : m_FilterOwner;
- for(POSITION pos= labels->GetHeadPosition(); pos != NULL; index++)
- {
- CP4Label *label = (CP4Label *) labels->GetNext(pos);
- CString owner = label->GetOwner();
- if (owner.IsEmpty())
- m_AnyBlankOwner = TRUE;
- if (m_FilterOwnerFlag) // are we filtering by owner?
- {
- if (owner.IsEmpty() && m_FilterIncBlank)
- ;
- else if (filterowner != owner)
- {
- delete label;
- continue;
- }
- }
- InsertLabel(label, index);
- if ((index & 0x1FFF) == 0)
- {
- msg.FormatMessage(IDS_INSERTING_LABELS, count - index);
- MainFrame()->UpdateStatus(msg);
- }
- }
- SetRedraw(TRUE);
- msg.FormatMessage(IDS_NUMBER_OF_LABELS_n, index );
- AddToStatus( msg, SV_COMPLETION );
- // Make sure first item selected
- ReSort();
- if(labels->GetCount() > 0)
- {
- int i = FindInList(m_Active.IsEmpty() ? GET_P4REGPTR()->GetLastLabel() : m_Active);
- if (i < 0) i=0;
- SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_DROPHILITED|LVIS_SELECTED|LVIS_FOCUSED);
- EnsureVisible(i, FALSE);
- m_Active=GetSelectedItemText();
- }
- CP4ListCtrl::SetUpdateDone();
- if (m_Need2DoNew)
- OnLabelNew();
- else
- {
- // Notify the mainframe that we have finished getting the labels,
- // hence the entire set of async command have finished.
- MainFrame()->ExpandDepotIfNeedBe();
- }
- if (m_PostViewUpdateMsg)
- PostMessage(m_PostViewUpdateMsg, m_PostViewUpdateWParam, m_PostViewUpdateLParam);
- }
- else
- {
- CP4ListCtrl::SetUpdateFailed();
- m_Need2DoNew = FALSE;
- }
- delete pCmd;
- m_PostViewUpdateMsg = 0;
- MainFrame()->ClearStatus();
- return 0;
- }
- //////////////////////////////////////////////////////////////////////////
- // Sort callback
- int CLabelListCtrl::OnCompareItems(LPARAM lParam1, LPARAM lParam2, int subItem)
- {
- ASSERT(lParam1 && lParam2);
- CP4Label const *label1 = (CP4Label const*)lParam1;
- CP4Label const *label2 = (CP4Label const*)lParam2;
- CString txt1, txt2;
- switch(subItem)
- {
- case LABEL_NAME: // label name
- txt1= label1->GetLabelName();
- txt2= label2->GetLabelName();
- break;
- case LABEL_OWNER: // label owner
- txt1= label1->GetOwner();
- txt2= label2->GetOwner();
- break;
- case LABEL_OPTIONS: // label options
- txt1= label1->GetOptions();
- txt2= label2->GetOptions();
- break;
- case LABEL_UPDATEDATE: // label update date
- txt1= label1->GetDate();
- txt2= label2->GetDate();
- ConvertDates( txt1, txt2 );
- break;
- case LABEL_DESC: // label desc
- txt1= label1->GetDescription();
- txt2= label2->GetDescription();
- break;
- default:
- ASSERT(0);
- return 0;
- }
- txt1.MakeUpper();
- txt2.MakeUpper();
- int rc;
- if(m_SortAscending)
- rc = txt1.Compare(txt2);
- else
- rc = txt2.Compare(txt1);
- return rc;
- }
- void CLabelListCtrl::EditSpec( const CString &sItem )
- {
- if (m_EditInProgress)
- {
- CantEditRightNow(IDS_LABEL);
- return;
- }
- m_pNewSpec= new CP4Label;
- CCmd_EditSpec *pCmd= new CCmd_EditSpec;
- pCmd->Init( m_hWnd, RUN_ASYNC, HOLD_LOCK);
- if( pCmd->Run( P4LABEL_SPEC, sItem, m_pNewSpec ) )
- MainFrame()->UpdateStatus( LoadStringResource(IDS_EDITING_LABEL_SPEC) );
- else
- {
- delete pCmd;
- delete m_pNewSpec;
- }
- }
- void CLabelListCtrl::OnLabelTemplate()
- {
- if( SERVER_BUSY() || m_Active.IsEmpty() || m_EditInProgress || GET_SERVERLEVEL() < 6)
- return;
- CStringList list;
- m_Active= GetSelectedItemText();
- list.AddHead( m_Active );
- // Prompt for the new label name
- CTemplateNameDlg dlg;
- dlg.SetTemplateName( m_Active );
- dlg.SetVerbotenSpecNames(&list);
- dlg.SetNewSpecName(_T(""));
- dlg.SetSpecType( P4LABEL_SPEC );
- if(dlg.DoModal() != IDCANCEL)
- {
- CString newName=dlg.GetNewSpecName();
- // Let OnP4LabelSpec() determine if this is a new label
- m_NewLabel=TRUE;
- m_pNewSpec= new CP4Label;
- CCmd_EditSpec *pCmd= new CCmd_EditSpec;
- pCmd->Init( m_hWnd, RUN_ASYNC, HOLD_LOCK);
- if( pCmd->Run( P4LABEL_SPEC, newName, m_Active, m_pNewSpec ) )
- MainFrame()->UpdateStatus( LoadStringResource(IDS_EDITING_LABEL_SPEC) );
- else
- {
- delete pCmd;
- delete m_pNewSpec;
- }
- }
- }
- void CLabelListCtrl::OnUpdateLabelTemplate(CCmdUI* pCmdUI)
- {
- m_Active = GetSelectedItemText();
- CString prompt;
- prompt.FormatMessage(IDS_CREATE_UPDATE_LABEL_USING_s_AS_TEMPLATE, TruncateString(m_Active, 50));
- pCmdUI->SetText ( prompt );
- pCmdUI->Enable( GET_SERVERLEVEL() >= 6 && !SERVER_BUSY()
- && !m_Active.IsEmpty() && !m_EditInProgress );
- }
- /////////////////////////////////////////////////////////////////////
- // Handlers for setting filters for labels view
- /////////////////////////////////////////////////////////////////////
- void CLabelListCtrl::OnLabelFilterClear()
- {
- ClearLabelFilter();
- m_caption = LoadStringResource(!m_FilterOwnerFlag
- ? IDS_PERFORCE_LABELS : IDS_PERFORCE_FILTERED_LABELS_BY_OWNER);
- OnViewReloadall();
- }
- void CLabelListCtrl::ClearLabelFilter()
- {
- Clear();
- m_LabelFilterView.RemoveAll();
- m_caption = LoadStringResource(!m_FilterOwnerFlag
- ? IDS_PERFORCE_LABELS : IDS_PERFORCE_FILTERED_LABELS_BY_OWNER);
- CP4PaneContent::GetView()->SetCaption();
- }
- void CLabelListCtrl::OnViewReloadall()
- {
- CP4PaneContent::GetView()->SetCaption();
- m_Active = GetSelectedItemText();
- Clear();
- OnViewUpdate();
- }
- void CLabelListCtrl::OnLabelFilterSetview()
- {
- if( !SERVER_BUSY() && (GET_SERVERLEVEL() >= 11))
- {
- ::SendMessage(m_depotWnd, WM_GETSELLIST, (WPARAM) &m_LabelFilterView, 0);
- if(m_LabelFilterView.GetCount() > 0)
- m_caption = LoadStringResource(!m_FilterOwnerFlag
- ? IDS_PERFORCE_FILTERED_LABELS : IDS_PERFORCE_FILTERED_LABELS_BY_BOTH);
- OnViewReloadall();
- }
- }
- void CLabelListCtrl::OnLabelFilterSetviewRev()
- {
- if( !SERVER_BUSY() && (GET_SERVERLEVEL() >= 11))
- {
- ::SendMessage(m_depotWnd, WM_GETSELLIST, (WPARAM) &m_LabelFilterView, 0);
- if(m_LabelFilterView.GetCount() > 0)
- {
- // make a temp copy of the selection strings
- CStringList tempList;
- POSITION pos=m_LabelFilterView.GetHeadPosition();
- while(pos != NULL)
- tempList.AddTail(m_LabelFilterView.GetNext(pos));
- // now copy the selection back to m_LabelFilterView
- // and add #have,have to the end to filter on just the current rev
- m_LabelFilterView.RemoveAll();
- pos=tempList.GetHeadPosition();
- while(pos != NULL)
- {
- CString str = tempList.GetNext(pos) + _T("#have,have");
- m_LabelFilterView.AddTail(str);
- }
- m_caption = LoadStringResource(!m_FilterOwnerFlag
- ? IDS_PERFORCE_FILTERED_LABELS : IDS_PERFORCE_FILTERED_LABELS_BY_BOTH);
- }
- OnViewReloadall();
- }
- }
- LRESULT CLabelListCtrl::CallOnUpdateLabelFilterClearview(WPARAM wParam, LPARAM lParam)
- {
- OnUpdateLabelFilterClearview((CCmdUI *)lParam);
- return 0;
- }
- void CLabelListCtrl::OnUpdateLabelFilterClearview(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable(MainFrame()->SetMenuIcon(pCmdUI, !SERVER_BUSY()
- && m_LabelFilterView.GetCount() > 0));
- }
- void CLabelListCtrl::OnUpdateLabelFilterSetview(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable(MainFrame()->SetMenuIcon(pCmdUI, !SERVER_BUSY()
- && (GET_SERVERLEVEL() >= 11)
- && ::SendMessage(m_depotWnd, WM_GETSELCOUNT, 0, 0) > 0));
- }
- void CLabelListCtrl::OnUpdateLabelFilterSetviewRev(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable(MainFrame()->SetMenuIcon(pCmdUI, !SERVER_BUSY()
- && (GET_SERVERLEVEL() >= 11)
- && ::SendMessage(m_depotWnd, WM_GETSELCOUNT, 0, 0) > 0));
- }
- void CLabelListCtrl::OnLabelFilterClearview()
- {
- if( !SERVER_BUSY() )
- OnLabelFilterClear();
- }
- /////////////////////////////////////////////////////////////////////
- // OLE drag-drop support, to accept depot files or folders
- // which will be used as per the user's choice on a context menu
- /////////////////////////////////////////////////////////////////////
- DROPEFFECT CLabelListCtrl::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
- {
- m_DropEffect=DROPEFFECT_NONE;
- m_DragDataFormat=0;
- CString fname;
- // Dont allow a drop if the server is busy, since a drop immediately attempts to
- // invoke a server command
- if(SERVER_BUSY() || m_EditInProgress)
- return DROPEFFECT_NONE;
- if(pDataObject->IsDataAvailable( (unsigned short) m_CF_DEPOT))
- {
- m_DropEffect=DROPEFFECT_COPY;
- m_DragDataFormat=m_CF_DEPOT;
- }
- return m_DropEffect;
- }
- DROPEFFECT CLabelListCtrl::OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
- {
- // Dont allow a drop if the server is busy, since a drop immediately attempts to
- // invoke a server command
- if(SERVER_BUSY() || m_EditInProgress)
- m_DropEffect= DROPEFFECT_NONE;
- if(m_DragDataFormat == m_CF_DEPOT)
- {
- int i = GetSelectedItem( );
- if ( i > -1 )
- SetItemState(i, 0, LVIS_DROPHILITED|LVIS_SELECTED|LVIS_FOCUSED );
- ClientToScreen(&point);
- int index= GetContextItem( point );
- if (index > -1)
- SetItemState(index, LVIS_DROPHILITED|LVIS_SELECTED|LVIS_FOCUSED,
- LVIS_DROPHILITED|LVIS_SELECTED|LVIS_FOCUSED );
- }
- return m_DropEffect;
- }
- BOOL CLabelListCtrl::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point)
- {
- CString fname;
- if(SERVER_BUSY() || m_EditInProgress)
- {
- // OnDragEnter() and OnDragOver() should avoid a drop at
- // the wrong time!
- ASSERT(0);
- return FALSE;
- }
- MainFrame()->SetRightSplitter(1);
- if (m_DragDataFormat == m_CF_DEPOT)
- {
- int i = GetSelectedItem( );
- if ( i > -1 )
- SetItemState(i, 0, LVIS_DROPHILITED|LVIS_SELECTED|LVIS_FOCUSED );
- ClientToScreen(&point);
- int index= GetContextItem( point );
- if (index > -1)
- SetItemState(index, LVIS_SELECTED|LVIS_FOCUSED,
- LVIS_SELECTED|LVIS_FOCUSED );
- if ((i > -1) || (GET_P4REGPTR()->GetLabelDragDropOption() == LDD_FILTER))
- ::SendMessage(m_depotWnd, WM_DROPTARGET, LABELVIEW, MAKELPARAM(point.x,point.y));
- else
- ::SendMessage(m_depotWnd, WM_DROPTARGET, LABELNOSEL, MAKELPARAM(point.x,point.y));
- return TRUE;
- }
- // Return false, so depot window doesnt start a file-open operation
- return FALSE;
- }
- void CLabelListCtrl::OnDragLeave( )
- {
- if(m_DragDataFormat == m_CF_DEPOT)
- {
- int i = GetSelectedItem( );
- if ( i > -1 )
- SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_DROPHILITED|LVIS_SELECTED|LVIS_FOCUSED );
- }
- }
- LRESULT CLabelListCtrl::OnLabelDropMenu(WPARAM wParam, LPARAM lParam)
- {
- // label view accepted a drop from the depot
- // create a context menu
- CPoint *dropTargetPt = (CPoint *)lParam;
- CP4Menu popMenu;
- popMenu.LoadMenu(IDR_LABELDRAGDROP);
- if (!wParam)
- {
- popMenu.RemoveMenu(ID_LABEL_SYNC, MF_BYCOMMAND);
- popMenu.RemoveMenu(ID_LABEL_DELETEFILES, MF_BYCOMMAND);
- popMenu.RemoveMenu(ID_LABEL_SYNC_CLIENT, MF_BYCOMMAND);
- popMenu.RemoveMenu(ID_LABEL_ADDTOLABELVIEW, MF_BYCOMMAND);
- popMenu.GetSubMenu(0)->RemoveMenu(0, MF_BYPOSITION); // remove separator
- }
- // Pause the auto refresh timer
- SET_APP_HALTED(TRUE);
- // Finally blast the menu onto the screen
- popMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
- dropTargetPt->x, dropTargetPt->y, AfxGetMainWnd());
- //Release the auto refresh timer
- SET_APP_HALTED(FALSE);
- return 0;
- }
- int CLabelListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CP4ListCtrl::OnCreate(lpCreateStruct) == -1)
- return -1;
- CStringArray colnames;
- colnames.Add ( LoadStringResource(IDS_P4LABEL) );
- colnames.Add ( LoadStringResource(IDS_OWNER) );
- colnames.Add ( LoadStringResource(IDS_LOCKSTR) );
- colnames.Add ( LoadStringResource(IDS_DATE) );
- colnames.Add ( LoadStringResource(IDS_DESCRIPTION) );
- ASSERT( LABEL_MAXCOL == colnames.GetSize( ) );
- int width[LABEL_MAXCOL]={90,90,60,90,250};
- RestoreSavedWidths(width, colnames.GetSize( ) , _T("Label List"));
- if (width[3] > 5000 && width[4] > 5000)
- width[2] = width[3] = width[4] = 90;
- InsertColumnHeaders( colnames, width );
- return 0;
- }
- void CLabelListCtrl::OnLabelDDsetSync()
- {
- GET_P4REGPTR()->SetLabelDragDropOption(LDD_ADD);
- }
- void CLabelListCtrl::OnLabelDDsetDeleteFiles()
- {
- GET_P4REGPTR()->SetLabelDragDropOption(LDD_DELETE);
- }
- void CLabelListCtrl::OnLabelDDsetSyncClient()
- {
- GET_P4REGPTR()->SetLabelDragDropOption(LDD_SYNC);
- }
- void CLabelListCtrl::OnLabelDDAddToLabelView()
- {
- GET_P4REGPTR()->SetLabelDragDropOption(LDD_ADD2VIEW);
- }
- void CLabelListCtrl::OnLabelDDsetFilterSetview()
- {
- GET_P4REGPTR()->SetLabelDragDropOption(LDD_FILTER);
- }
- void CLabelListCtrl::OnLabelDDsetFilterSetviewRev()
- {
- GET_P4REGPTR()->SetLabelDragDropOption(LDD_FILTERREV);
- }
- void CLabelListCtrl::OnLabelDDsetShowMenu()
- {
- GET_P4REGPTR()->SetLabelDragDropOption(LDD_MENU);
- }
- void CLabelListCtrl::OnUpdateLabelDDsetShowMenu(CCmdUI* pCmdUI)
- {
- if (pCmdUI->m_pMenu)
- {
- UINT lld;
- switch (GET_P4REGPTR()->GetLabelDragDropOption())
- {
- case LDD_ADD:
- lld = ID_LABELDD_SYNC;
- break;
- case LDD_DELETE:
- lld = ID_LABELDD_DELETEFILES;
- break;
- case LDD_SYNC:
- lld = ID_LABELDD_SYNC_CLIENT;
- break;
- case LDD_ADD2VIEW:
- lld = ID_LABELDD_ADDTOLABELVIEW;
- break;
- case LDD_FILTER:
- lld = ID_LABELFILTERDD_SETVIEW;
- break;
- case LDD_FILTERREV:
- lld = ID_LABELFILTERDD_SETVIEWREV;
- break;
- default:
- lld = ID_LABELDD_SHOWMENU;
- break;
- }
- pCmdUI->m_pMenu->CheckMenuRadioItem( ID_LABELDD_SYNC, ID_LABELDD_SHOWMENU, lld, MF_BYCOMMAND ) ;
- }
- pCmdUI->Enable( TRUE );
- }
- void CLabelListCtrl::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
- {
- CP4ListCtrl::OnActivate(nState, pWndOther, bMinimized);
- if(nState != WA_INACTIVE && m_Active.IsEmpty() && GetItemCount() > 1)
- {
- int i = FindInList(GET_P4REGPTR()->GetLastLabel());
- if (i < 0)
- i=0;
- SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
- EnsureVisible(i, FALSE);
- m_Active=GetSelectedItemText();
- }
- else
- {
- m_Active=GetSelectedItemText();
- if (!m_Active.IsEmpty())
- GET_P4REGPTR()->SetLastLabel(m_Active);
- }
- }
- void CLabelListCtrl::OnPerforceOptions()
- {
- MainFrame()->OnPerforceOptions(TRUE, FALSE, IDS_PAGE_LABEL);
- }
- void CLabelListCtrl::OnUpdateFilterByOwner(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable( MainFrame()->SetMenuIcon(pCmdUI, !SERVER_BUSY()) );
- }
- void CLabelListCtrl::OnFilterByOwner()
- {
- CFilterByOwnerDlg dlg;
- dlg.m_NotUser = GET_P4REGPTR()->GetLabelFilterByOwnerFlag() & 0x01;
- dlg.m_bShowIncBlanks = m_AnyBlankOwner;
- if (dlg.DoModal() == IDOK)
- {
- GET_P4REGPTR()->SetLabelFilterByOwner(m_FilterOwner = dlg.m_Owner);
- GET_P4REGPTR()->SetLabelFilterByOwnerFlag(m_FilterOwnerFlag = (dlg.m_NotUser ? 0x1 : 0x10));
- GET_P4REGPTR()->SetLabelFilterIncBlank(m_FilterIncBlank = dlg.m_IncBlank);
- m_caption = LoadStringResource(m_LabelFilterView.IsEmpty()
- ? IDS_PERFORCE_FILTERED_LABELS_BY_OWNER : IDS_PERFORCE_FILTERED_LABELS_BY_BOTH);
- OnViewReloadall();
- }
- }
- void CLabelListCtrl::OnUpdateClearFilterByOwner(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable( MainFrame()->SetMenuIcon(pCmdUI, m_FilterOwnerFlag && !SERVER_BUSY()) );
- }
- void CLabelListCtrl::OnClearFilterByOwner()
- {
- GET_P4REGPTR()->SetLabelFilterByOwnerFlag(m_FilterOwnerFlag = 0);
- m_caption = LoadStringResource(m_LabelFilterView.IsEmpty()
- ? IDS_PERFORCE_LABELS : IDS_PERFORCE_FILTERED_LABELS);
- OnViewReloadall();
- }
- void CLabelListCtrl::OnUpdateClearFilterLabels(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable(!SERVER_BUSY() && (m_FilterOwnerFlag || !m_LabelFilterView.IsEmpty()));
- }
- void CLabelListCtrl::OnUpdateDiff2Labels(CCmdUI* pCmdUI)
- {
- pCmdUI->Enable( !SERVER_BUSY() );
- }
- void CLabelListCtrl::OnDiff2Labels()
- {
- CDiff2ObjsDlg dlg;
- dlg.m_Type = COMBO_LABEL;
- m_Active=GetSelectedItemText();
- if (!m_Active.IsEmpty())
- dlg.m_Edit1 = m_Active;
- SET_APP_HALTED(TRUE);
- int rc=dlg.DoModal();
- SET_APP_HALTED(FALSE);
- if (rc == IDOK)
- {
- CString x = "";
- CCmd_Diff2 *pCmd= new CCmd_Diff2;
- pCmd->Init( m_depotWnd, RUN_ASYNC);
- pCmd->SetOutput2Dlg(GET_P4REGPTR()->Diff2InDialog());
- if( pCmd->Run( _T("//...@") + dlg.m_Edit1, _T("//...@") + dlg.m_Edit2,
- 0, 0, x, x, FALSE, FALSE, TRUE) )
- MainFrame()->UpdateStatus( LoadStringResource(IDS_DIFFING_FILES) );
- else
- delete pCmd;
- }
- }
- LRESULT CLabelListCtrl::NewUser(WPARAM wParam, LPARAM lParam)
- {
- m_User = GET_P4REGPTR()->GetP4User();
- if (m_FilterOwnerFlag & 0x10)
- Clear();
- return 0;
- }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 19924 | YourUncleBob |
Populate -o //guest/perforce_software/p4win/... //guest/YourUncleBob/p4win/..... |
8 years ago | |
//guest/perforce_software/p4win/main/gui/LabelListCtrl.cpp | |||||
#1 | 16169 | perforce_software | Move files to follow new path scheme for branches. | 9 years ago | |
//guest/perforce_software/p4win/gui/LabelListCtrl.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 |