P4ListCtrl.h. #1

  • //
  • guest/
  • YourUncleBob/
  • p4win/
  • main/
  • gui/
  • P4ListCtrl.h.
  • View
  • Commits
  • Open Download .zip Download (6 KB)
// P4ListCtrl.h : header file
//

#ifndef __P4LISTCTRL__
#define __P4LISTCTRL__

#define LIST_CLEAR		0
#define LIST_UPDATING	1
#define LIST_UPDATED	2

#define	MAX_SORT_COLUMNS	4
#define	MAX_P4OBJECTS_COLUMNS	16

#include "SortListHeader.h"
#include "P4PaneContent.h"
#include "P4ListAll.h"


/////////////////////////////////////////////////////////////////////////////
// CP4ListCtrl

class CP4ListCtrl : public CListCtrl, public CP4PaneContent
{
protected:
	CP4ListCtrl();           // protected constructor used by dynamic creation
	DECLARE_DYNCREATE(CP4ListCtrl)

// Attributes
	virtual CWnd * GetWnd() { return this; }
	BOOL m_SortAscending;
	BOOL m_ActivatedBefore;
	int m_LastSelIx;
	int m_LastSortCol;
	int m_iImage;
	enum ContextMenuContext
	{
		KEYSTROKED,
		MOUSEHIT
	} m_ContextContext;
    CString m_Active;// Name of job, client, user, branch, etc. being edited, described, deleted, etc.
	CString m_Describing; // Name of job, client, user, branch, etc. being described
	CString m_ReportedByTitle; // Title of Job Owner field (103)
	BOOL m_ReadSavedWidths;
    BOOL m_ColsInited;
	int m_SortColumns[MAX_SORT_COLUMNS];
	CSortListHeader	m_headerctrl;
	P4ListAll	m_ListAll;	 // Holds info for all (unfiltered) list items

	// Drag & Drop data
	COleDataSource m_OLESource;
	CRect m_DragSourceRect;
	BOOL m_bStarting;
	int m_HdrHeight;
	int m_ItemHeight;
	int m_BottomOfPage;

	UINT m_PostViewUpdateMsg;
	WPARAM m_PostViewUpdateWParam;
	LPARAM m_PostViewUpdateLParam;

	// Data for modless edit dialogs
	BOOL m_EditInProgress;
	CWnd *m_EditInProgressWnd;

public:
	int m_UpdateState;
	CString m_DragFromItemName;
	
	LRESULT OnP4Describe( WPARAM wParam, LPARAM lParam );
	LRESULT OnP4EndDescribe( WPARAM wParam, LPARAM lParam );
	LRESULT OnP4Delete( WPARAM wParam, LPARAM lParam );
protected:
	inline CP4winApp *TheApp() { return (CP4winApp *) AfxGetApp(); }
	CString m_SubKey;
	virtual void ViewUpdate() {};
	virtual void OnDescribe( ); 
	virtual void OnDelete( int type );
	virtual BOOL OKToDelete( ) { return FALSE; }
    void SetIndexAndPoint( int &index, CPoint &point );
    int GetContextItem( const CPoint &point );
    int GetHitItem( const CPoint &point, BOOL bContextMenu = FALSE );
	BOOL OnUpdateShowMenuItem( CCmdUI* pCmdUI, UINT idString );
	
	BOOL SetToNextPrevItem(CString& name, int np, CListCtrl *plc);

	void InsertColumnHeaders( const CStringArray &colnames, int *widths );
	void AddSortColumn(int colnbr, BOOL sortAscending);

	// Virt func to attempt drag drop during left mouse button down
	virtual BOOL TryDragDrop( ) { return FALSE; }

	void CantEditRightNow(int type);

public:
	// Last line of Clear() should ALWAYS call this base fn
	virtual void Clear() { m_UpdateState= LIST_CLEAR; m_LastSelIx=-1; m_ListAll.RemoveAll(); }
	virtual void EditTheSpec(CString *name) {}

	void ReSort();
	int NextSortColumn(int lastcol);	
	int GetColNamesAndCount(CStringArray &cols);

	BOOL IsUpdating() { return (m_UpdateState == LIST_UPDATING); }
	BOOL IsClear() { return (m_UpdateState == LIST_CLEAR); }

	BOOL GetSavedColumnNames(CStringArray &colNames, LPCTSTR subkey);
	void SaveColumnNames(CString &colNames, LPCTSTR subkey);
	void DeleteColumnNames(LPCTSTR subkey);
	void RestoreSavedWidths(int *width, int numcols, LPCTSTR subkey);
	void SaveColumnWidths();
	int FindInList( const CString &Name );
	int FindInListAll( const CString &Name );
	int FindInListNoCase( const CString &Name );
	void OnEditPaste( const CString &Name );

	int GetSelectedItem();
	CString GetSelectedItemText( );
	CString GetSelectedItemOwner(int ownerColumnNumber);
	BOOL SelectedItemIsLocked(int optionsColumnNumber);

	void GetListItems(CStringArray *list);

	BOOL IsEditInProgress() { return m_EditInProgress; }

	// After update attempt, call one of the following:
	virtual void SetUpdateDone(); 
    virtual void SetUpdateFailed();
	// Need to lose the DYNCREATE rot if this is to be a pure virt
	virtual void OnContextMenu(CWnd* pWnd, CPoint point) {;}
    
// Overrides
protected:
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

// Implementation
public:
	virtual int OnCompareItems(LPARAM lParam1, LPARAM lParam2, int subItem) {return 0;}
protected:

	virtual ~CP4ListCtrl();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:
	//		i  need this for calling the right ondescribe
	//		for on keydown. damn.
	//
	public:
	int m_viewType;

private:
	int GetDeleteType( );

	// Generated message map functions
public:
	LRESULT OnFindPattern(WPARAM wParam, LPARAM lParam);
protected:
	DECLARE_MESSAGE_MAP()
	afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
	afx_msg void OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
	afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnDestroy();
	afx_msg void OnKeydown(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnUpdateEditCopy(CCmdUI* pCmdUI);
	afx_msg void OnEditCopy();
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnViewUpdate();
    LRESULT OnSelectThis(WPARAM wParam, LPARAM lParam);
    LRESULT OnP4ObjectFetch(WPARAM wParam, LPARAM lParam);
    LRESULT OnP4ObjectList(WPARAM wParam, LPARAM lParam);
    LRESULT OnP4WizObjectFetch(WPARAM wParam, LPARAM lParam);
    LRESULT OnP4WizObjectList(WPARAM wParam, LPARAM lParam);
    LRESULT OnP4IntegObjectFetch(WPARAM wParam, LPARAM lParam);
    LRESULT OnP4IntegObjectList(WPARAM wParam, LPARAM lParam);
	LRESULT OnActivateModeless(WPARAM wParam, LPARAM lParam);
    LRESULT P4ObjectList(WPARAM wParam,LPARAM lParam,BOOL bWiz,BOOL bInteg,BOOL bFiltered=TRUE);
};


#endif // __P4LISTCTRL__
/////////////////////////////////////////////////////////////////////////////
# Change User Description Committed
#1 19924 YourUncleBob Populate -o //guest/perforce_software/p4win/...
//guest/YourUncleBob/p4win/.....
//guest/perforce_software/p4win/main/gui/P4ListCtrl.h
#1 16169 perforce_software Move files to follow new path scheme for branches.
//guest/perforce_software/p4win/gui/P4ListCtrl.h
#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.