MainFrm.h. #1

  • //
  • guest/
  • YourUncleBob/
  • p4win/
  • main/
  • gui/
  • MainFrm.h.
  • View
  • Commits
  • Open Download .zip Download (23 KB)
//
// Copyright 1997 Nicholas J. Irias.  All rights reserved.
//
//

// MainFrm.h : interface of the CMainFrame class
//
/////////////////////////////////////////////////////////////////////////////

#include "BranchView.h"
#include "ClientView.h"
#include "DepotView.h"
#include "DeltaView.h"
#include "JobView.h"
#include "OldChgView.h"
#include "LabelView.h"
#include "UserView.h"
#include "StatusView.h"
#include "FlatSplitter.h"
#include "ZimbabweSplitter.h"
#include "P4Menu.h"

#define	MISC_TIMER	 97
#define SORT_TIMER	 98
#define UPDATE_TIMER 99

// Depot Filter Types
enum _dft
{
	DFT_NOTFILTERED,// Depot is Not Filtered
	DFT_ALLOPENED,	// Filtered to show all opened files
	DFT_MYOPENED,	// Filtered to show my opened files
	DFT_LIST,		// Filtered according to m_FilterFileList
	DFT_FIND		// Filtered according to Find list
};

// Helper App Message types
enum _ham
{
	HAM_ADDHANDLE,	// LPARAM is window handle of helper app
	HAM_RMVHANDLE	// LPARAM is window handle to be removed from list
};

// Message used for view updates when file open status changes
#define WM_UPDATEOPEN (WM_USER+400)
#define WM_INITTREE (WM_USER+401)
#define WM_GETDRAGTOCHANGENUM (WM_USER+402)
#define WM_SETUNRESOLVED (WM_USER+406)

// Messages to interogate for selected list in depot wnd
#define WM_GETSELCOUNT (WM_USER+408)
#define WM_GETSELLIST (WM_USER+409)

// Messages from chg wndo to depot wndo to initiate an edit
#define WM_FILEEDITTXT (WM_USER+410)
#define WM_FILEEDITBIN (WM_USER+411)

#define WM_JOBDELETED (WM_USER+413)

// Message to fetch a list of my changes
#define WM_GETMYCHANGESLIST (WM_USER+415)
#define WM_REQUESTBRANCHLIST (WM_USER+416)

// Message to notify that new branchlist is available
#define WM_NEWBRANCHESLIST (WM_USER+417)

// Message to request that depot view perform integ of entire branch
#define WM_BRANCHINTEG (WM_USER+418)

// Message to pass a list of 'P4 revert' results
#define WM_REVERTLIST (WM_USER+419)

// Messages to query the job view for contents
#define WM_QUERYJOBS (WM_USER+420)
#define WM_QUERYJOBSPEC (WM_USER+421)
#define WM_QUERYJOBFIELDS (WM_USER+422)
#define WM_FETCHJOBS (WM_USER+423)

// Message to indicate bad client
#define WM_CLIENTERROR (WM_USER+424)

// Message to edit jobs filter
#define	WM_JOB_FILTER (WM_USER+425)

// Message to indicate who received a m_CF_DEPOT drop
#define	WM_DROPTARGET (WM_USER+426)

// Messages from chg wndo to depot wndo to initiate a browse
#define WM_FILEBROWSETXT (WM_USER+427)
#define WM_FILEBROWSEBIN (WM_USER+428)

// Message to request that depot view perform integ from changelist
#define WM_CHANGELISTINTEG (WM_USER+429)

// Message to request that depot view run assoc viewer on head rev of a given file
#define WM_VIEWHEAD (WM_USER+430)

// Message to request m_IsDepotFiltered setting from depot view
#define	WM_ISFILTEREDONOPEN	(WM_USER+431)

// Message to inform the depot view to rebuild its open file filter list
#define	WM_REDOOPENEDFILTER (WM_USER+432)

// Message to inform the label view to popup a drag and drop menu
#define	WM_LABELDROPMENU (WM_USER+433)

// Message to tell a listview to find a string in the listview
#define WM_FINDPATTERN (WM_USER+434)

// Message to pass the fstats of files opened for add to the Depotview
#define WM_SETADDFSTATS (WM_USER+435)

// Message to get the fstats of files opened for add from the Depotview
#define WM_GETADDFSTATS (WM_USER+436)

// Messages to query the job view for column names and current selection
#define WM_QUERYJOBCOLS (WM_USER+437)
#define WM_QUERYJOBSELECTION (WM_USER+438)

// Message to set the focus in a dialog box
#define WM_GOTODLGCTRL (WM_USER+439)

// Message to indicate client and user have changed
#define WM_NEWCLIENT (WM_USER+440)
#define WM_NEWUSER   (WM_USER+441)

// Messages to SubChg & Label panes to update clear filter menu item
#define WM_SUBCHGOUFC	(WM_USER+442)
#define WM_LABELOUFC	(WM_USER+443)

// Message to ModifyStyle of window(s)
#define	WM_MODIFYSTYLE	(WM_USER+444)

// Messages to Request the Dialog box listing all the item in a list control
// and to return the result from the Dialog box
#define	WM_FETCHOBJECTLIST	(WM_USER+445)
#define	WM_GETOBJECTLIST	(WM_USER+446)
#define	WM_BROWSECALLBACK1	(WM_USER+447)
#define	WM_BROWSECALLBACK2	(WM_USER+448)
#define	WM_BROWSECALLBACK3	(WM_USER+449)
#define	WM_BROWSECALLBACK4	(WM_USER+450)
#define	WM_WIZFETCHOBJECTLIST	(WM_USER+451)
#define	WM_WIZGETOBJECTLIST		(WM_USER+452)
#define	WM_INTEGFETCHOBJECTLIST	(WM_USER+453)
#define	WM_INTEGGETOBJECTLIST	(WM_USER+454)
#define	WM_SELECTTHIS		(WM_USER+455)

// Message to notify modeless dialogs to cleanup
#define	WM_QUITTING			(WM_USER+456)

// Message posted when modeless dialog is destroyed
#define	WM_P4DLGDESTROY		(WM_USER+457)

// Message to request that the User set a password
#define	WM_USERPSWDDLG		(WM_USER+458)

// Message to request that the User set a password
#define	WM_PERFORCE_OPTIONS	(WM_USER+459)

// Messages to trigger the action of a Browse button being pressed
#define	WM_BROWSECLIENTS	(WM_USER+460)
#define	WM_BROWSEUSERS		(WM_USER+461)

// Message to clear a list control so it updates itself.
#define	WM_CLEARLIST		(WM_USER+462)

// Message to Enable/disable dialog buttons (lParam is TRUE or FALSE)
#define	WM_ENABLEDISABLE	(WM_USER+463)

// Message to set the name of a file viewer - addr in lParam
#define	WM_SETVIEWER		(WM_USER+464)

// Message to Righathand Pane to have it activate its modeless edit dialogs
#define	WM_ACTIVATEMODELESS	(WM_USER+465)

// Message to Depot pane with lParam contain CSTring ptr to path to add
#define	WM_ADDBOOKMARK		(WM_USER+466)

// Message to Post that when received forces the focus to lParam window
#define	WM_FORCEFOCUS		(WM_USER+467)

// Message from help app
#define	WM_HELPERAPP		(WM_USER+0x1C00)


#define UPDATE_FAILED   1
#define UPDATE_SUCCESS  2


/////////////////////////////////////////////////////////////////////////////
// COleEditDropTarget

class CTBDropTarget : public COleDropTarget
{
// Construction
public:
    CTBDropTarget();

// Implementation
public:
    virtual ~CTBDropTarget();  
    
   //
   // These members MUST be overridden for an OLE drop target
   // See DRAG and DROP section of OLE classes reference
   //
   DROPEFFECT OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD 
                                                dwKeyState, CPoint point );
   DROPEFFECT OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD 
                                               dwKeyState, CPoint point );
   void OnDragLeave(CWnd* pWnd);               
   
   BOOL OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT 
                                          dropEffect, CPoint point );    
#ifdef USE_NATIVE
   void SetHWnd(HWND hwnd) { m_hWnd = hwnd;};
#endif

};


class CDeltaView;
class CDepotView;

class CMainFrame : public CFrameWnd
{
protected: // create from serialization only
	CMainFrame();
	DECLARE_DYNCREATE(CMainFrame)

// Attributes
public:
	OSVERSIONINFO m_osVer;
	BOOL m_IconsInMenus;
	BOOL m_ShowOnlyNotInDepot;
	BOOL m_InPopUpMenu;
	int m_NbrDisplays;
	CString m_ReviewListClass;
	CRITICAL_SECTION CriticalSection; 

protected:
	CZimbabweSplitter m_wndHSplitter;
	CFlatSplitter m_wndVSplitter;
		
	CP4 *m_pP4;
	BOOL m_FirstActivation;
	BOOL m_IsActive;
	HWND m_hWndLastActive;	// last active dialog window when loose focus
	BOOL m_GotInput;
	int  m_ClientGet;	// 1==got client; 0==cancel; -1==Back
	int  m_P4QTree;		// 0==none, 1==p4v, 2==p4tree.exe, 3==P4QTree.exe
	int  m_P4TLV;		// 0==none, 1==p4v
	DWORD m_P4Vver;		// p4v's version eg 20042
	CObList m_hWndHelperApp;

	CStatusView *m_pStatusView;
	CDepotView *m_pDepotView;
	CDeltaView *m_pDeltaView;
	CLabelView *m_pLabelView;
	CClientView *m_pClientView;
	CJobView *m_pJobView;
	CBranchView *m_pBranchView;
	CUserView *m_pUserView;
	COldChgView *m_pOldChgView;
	CView *m_pRightView;

	CFindReplaceDialog *m_pFRDlg;
	CString m_FindWhatStr;
	int m_FindWhatFlags;
	int m_FindStatusFlags;
	
	HMODULE m_USER32dll;
	int m_currentTab;
	int m_Need2ExpandDepot;
	int m_Need2Poll4Jobs;
	StatusView m_StatusBarWarnLevel;
	int m_StatusUpdateInterval;
	BOOL m_Need2RefreshOldChgs;
	BOOL m_bStatusBarWarnMsg;
	BOOL m_FullRefreshRequired;
	UINT m_CF_FILENAME;
	UINT m_CF_FILENAMEW;
	CStringList m_StringList;
	CStringList m_StringList2;
	int  m_SelectedChange;
	BOOL m_Quitting;

	// Switch to indicate what to do after running P4 INFO
	int m_GetCliRootAndContinue;
	enum WindowType
	{
		P4INFO_P4INFO,
		P4INFO_ADDFILE,
		P4INFO_DOSBOX
	};

	// For use in timer update
	UINT m_Timer;
	long m_LastUpdateTime;
    BOOL m_LastUpdateResult;
	BOOL m_ClientError;
	int  m_DoNotAutoPollCtr;

	// Update on uncover timers
	DWORD m_DeltaUpdateTime;
	DWORD m_LabelUpdateTime;
	DWORD m_BranchUpdateTime;
	DWORD m_UserUpdateTime;
	DWORD m_ClientUpdateTime;
	DWORD m_JobUpdateTime;
	DWORD m_OldChgUpdateTime;

	// For modeless dialogboxes
	BOOL m_ModlessUp;

	// Printing structures
	HANDLE m_hDevNames;
	HANDLE m_hDevMode;
	RECT   m_rtMinMargin;   
	RECT   m_rtMargin;
	BOOL   m_bMetric;

	// Submenus for Tools, Bookmark & Favorites menus
	CMenu m_ToolsSubMenu[MAX_TOOLS_SUBMENUS];
	CMenu m_ContextToolsSubMenu[MAX_TOOLS_SUBMENUS];
	CMenu m_BkMkSubMenu[MAX_BOOKMARK_SUBMENUS];
	CMenu m_FavSubMenu[MAX_FAVORITE_SUBMENUS];

	// Toolbar drag & drop data
	BOOL m_bNoRefresh;
	int  m_DragEnterTabNbr;
	DWORD m_DragEnterTime;
	DROPEFFECT m_CurDropEffect;

	//	Modless dialogs
	CObList m_DlgWndList;

public:

	CTBDropTarget *m_pDropTgt;

// Operations
public:
	void ViewBranches( );
	void ViewLabels( );
	void ViewClients( );
	void ViewUsers( );
	void ViewJobs( );
	void UpdateCaption(BOOL updatePCU = TRUE);
	void SetLastUpdateTime(BOOL updateResult);
	void SetGotUserInput( ) { m_GotInput = TRUE; }
	void ClearLastUpdateTime(); 
	void OnCmdPromptPublic();
	int  HaveTLV() { return m_P4TLV; }
	int  HaveP4QTree() { return m_P4QTree; }
	DWORD GetP4Vver() { return m_P4Vver; }
	BOOL IsQuitting() { return m_Quitting; }
	HWND OldChgsWnd();
	HWND ClientWnd();
	HWND BranchWnd();
	HWND LabelWnd();
	HWND UserWnd();
	HWND JobWnd();

	// Status logging functions
	void UpdateStatus(LPCTSTR, BOOL forceRedraw=FALSE);	// status bar rightmost pane
    void ClearStatus(BOOL forceRedraw=FALSE) { UpdateStatus(_T("")); }	// status bar rightmost pane
	void SetStatusBarLevel(StatusView level);						// set status bar warning level
	void AddToStatusLog( LPCTSTR txt, StatusView level = SV_MSG, bool showDialog = false );		// add to status view log
	void AddToStatusLog( CStringArray *pArray, StatusView level = SV_MSG, bool showDialog = false );	// add to status view log
	void ClearStatusLog();									// clear status view log
	void SetMessageText(LPCTSTR lpszText);

	CString GetFindWhatStr() { return m_FindWhatStr; }
	int GetFindWhatFlags() { return m_FindWhatFlags; }

	void SetFullRefresh(BOOL full) { m_FullRefreshRequired= full; }
	BOOL IsFullRefreshRequired() {return m_FullRefreshRequired; }
	BOOL UpdateRightView();

	// Support for NT3.51 file dialog
	void Expand83FileNames(CStringList *files, char *buf);
	void Expand83Path(CString &path);
	char *GetLongName(LPCTSTR shortpath);

	// Get the pending chglist pane
	CDeltaView *GetDeltaView() { return m_pDeltaView; }

	// Get Drag and Drop item
	CString GetDragFromJob();
	CString GetDragFromClient();
	CString GetDragFromUser();

	// Filtering functions
	BOOL IsClientFilteredOut(CP4Client *client, CString *user=NULL, CString *curcli=0, CString *defcli=0);
	BOOL IsBranchFilteredOut(CP4Branch *branch, CString *user=NULL);

// Overrides
public:
	virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
	virtual void ActivateFrame(int nCmdShow = -1);

// Implementation
protected:
	void SetWindowReferences();

public:
	DWORD GetExeVersion( TCHAR *exeName );
	int FindDollarArg(CString commandLine, int offset);
	CString ReplaceDollarArg(CString commandLine, int i, LPCTSTR str);
	int FindPercentArg(CString commandLine, int offset);
	void AddToolsToContextMenu(CP4Menu *popmenu);
	void LoadToolsMenu();
	void LoadBkMkMenu();
	void LoadFavMenu();
	void SwitchPanes(CView * pView, BOOL bShift);
	void ShowPerforceInfo();
	void OnPerforceOptions(BOOL b, BOOL portWasChanged = FALSE, int contextPage=0, int intialPage=0);
	int GetRightSplitter( );
	void SetRightSplitter(int tabNumber);
	void SetModelessUp(BOOL b) { m_ModlessUp = b; }
	BOOL IsModlessUp() { return m_ModlessUp; }
	void FinishedGettingChgs(BOOL bNeed2RefreshOldChgs);
	void ExpandDepotIfNeedBe();
	CString GetCurrentItemPath();
	BOOL PrintString(CString &string, CString caption);
	void PageSetup();
	HWND GetLeftHandWnd() { return m_pDepotView->m_hWnd; }
	HWND GetRightHandWnd() { return m_pRightView->m_hWnd; }
	HWND GetVSplitterWnd() { return m_wndVSplitter.m_hWnd; }
	HWND GetHSplitterWnd() { return m_wndHSplitter.m_hWnd; }
	HWND GetDepotWnd() { return m_pDepotView->GetTreeCtrl().m_hWnd; }
	HWND GetBranchesWnd() { return m_pBranchView->GetListCtrl().m_hWnd; }
	CClientView * GetClientView() { return m_pClientView; }
	CUserView * GetUserView() { return m_pUserView; }
	BOOL ClientSpecSwitch(CString switchTo, BOOL bAlways = FALSE, BOOL portWasChangedAlso = FALSE);
	int  CreateNewChangeList(int key, CString *description=NULL, BOOL autoOK=FALSE);
	void SetDepotCaption( BOOL);
	void AssembleDepotStringList(CStringList *list,BOOL b) { m_pDepotView->GetTreeCtrl().AssembleStringList(list,b); }
	BOOL IsFileInList(CString *filename, CStringList *list);
	void OnFileAddSetDir(LPTSTR lpInitDir = NULL);
	LPVOID P4GetEnvironmentStrings();
	BOOL SetMenuIcon(CCmdUI* pCmdUI, BOOL bEnable);
	void SaveToolBarBitmap(int iconnbr, UINT id);

	void GetClients(CStringArray *list);
	void GetUsers(CStringArray *list);
	int GetClientColNamesAndCount(CStringArray &cols);
	int GetUserColNamesAndCount(CStringArray &cols);

	void EditJobSpec(CString *jobname);
	void OnJobConfigure() { ::PostMessage(m_pJobView->m_hWnd, WM_COMMAND, ID_JOB_CONFIGURE, 0); }

	// Public function to start updates
	void UpdateDepotandChangeViews(BOOL redrill, int key=0);
	void ExpandDepotString(const CString &path, BOOL newPath);
	void DoNotAutoPoll() { m_DoNotAutoPollCtr++; };
	void ResumeAutoPoll();
	void WaitAWhileToPoll();
	long PositionChgs(const CString &path, BOOL lookInMine, BOOL lookInOthers=TRUE, BOOL addToSelectionSet=FALSE);

	// Right pane update timer functions
	void SetDeltaUpdateTime(DWORD time)  { m_DeltaUpdateTime = time; }
	void SetLabelUpdateTime(DWORD time)  { m_LabelUpdateTime = time; }
	void SetBranchUpdateTime(DWORD time) { m_BranchUpdateTime = time; }
	void SetUserUpdateTime(DWORD time)   { m_UserUpdateTime = time; }
	void SetClientUpdateTime(DWORD time) { m_ClientUpdateTime = time; }
	void SetJobUpdateTime(DWORD time)    { m_JobUpdateTime = time; }
	void SetOldChgUpdateTime(DWORD time) { m_OldChgUpdateTime = time; }

	// Toolbar Drag & Drop functions
	DROPEFFECT OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
	DROPEFFECT OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
	BOOL OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
	void OnDragLeave(CWnd* pWnd);
	int CvtPointToTabNbr(int x, int y);

	// Functions for selecting (multiple) files in the depot
	void SetAdd2ExpandItemList(BOOL b) { m_pDepotView->GetTreeCtrl().SetAdd2ExpandItemList(b); }
	BOOL IsExpandDepotContinuing() { return m_pDepotView->GetTreeCtrl().IsExpandDepotContinuing(); }
	BOOL PumpMessages( ) { return m_pDeltaView->GetTreeCtrl().PumpMessages( ); }
	BOOL SelectExpandItemList() { return m_pDepotView->GetTreeCtrl().SelectExpandItemList(); }
	int  GetExpandItemListCount() { return m_pDepotView->GetTreeCtrl().GetExpandItemListCount(); }

	// a wrapper to make OnToolTipText public
	BOOL OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult ) 
		{ return CFrameWnd::OnToolTipText(id, pNMHDR, pResult); }

	// Support for modeless dialogs
	void SetModelessWnd(CDialog *pDlg);
	void SignalAllModelessDlgs(UINT msg);
	BOOL IsPendChgEditInProgress() { return m_pDeltaView->GetTreeCtrl().IsEditInProgress(); }

	void loadMRUPcuMenuItems(CMenu *pMenu);

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

protected:  // control bar embedded members
	CStatusBar  m_wndStatusBar;
	CToolBar    m_wndToolBar;

	// Bitmaps to use as icons on menu
	// and the menu ID associated with each icon
	// plus the count of bitmaps in use
	CBitmap		m_MenuBitmap[32];
	CBitmap		m_MenuBitDis[32];
	UINT		m_MenuIDbm[32];
	int			m_MenuBmpCtr;
	BOOL		m_HasDisabled;

// Generated message map functions
public:
	afx_msg void OnDropDown(NMHDR* pNotifyStruct, LRESULT* pResult);
	afx_msg void OnGettingStartedWithP4win();
	afx_msg void OnViewSubmitted();
protected:
	DECLARE_MESSAGE_MAP()
	void OnCmdPromptContinue();
	int GetOpenedFiles( CStringList *list );
	int InsertSelectedObjectIntoCmdline(CString &cmdLine, int offset);
	int InsertAllSelectedFilesIntoCmdline(CString &cmdLine, int offset, 
				BOOL bUseOpened, BOOL bDepotSyntax);
	void ExecOnceForEachFile(int offset, CString &cmdLine, TCHAR sw,
				LPCTSTR lpInitDirectory, DWORD dwCreationFlags, LPSTARTUPINFO lpStartupInfo, 
				LPPROCESS_INFORMATION lpProcessInformation, BOOL bNoCommand, BOOL bRefresh,
				BOOL isOutput2Status);
	CMenu * GetBookmarkMenu();
	CMenu * GetFavoriteMenu();
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnUpdateStatus(CCmdUI* pCmdUI);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnPerforceOptions();
	afx_msg void OnUpdateP4Options(CCmdUI* pCmdUI);
	afx_msg void OnClose();
	afx_msg void OnDestroy();
	afx_msg void OnPerforceInfo();
	afx_msg void OnUpdatePerforceInfo(CCmdUI* pCmdUI);
	afx_msg void OnUpdateViewSwitch(CCmdUI* pCmdUI);
	afx_msg void OnViewBranches();
	afx_msg void OnViewChanges();
	afx_msg void OnViewClients();
	afx_msg void OnViewJobs();
	afx_msg void OnViewLabels();
	afx_msg void OnViewUsers();
	afx_msg void OnUpdateViewDepot(CCmdUI* pCmdUI);
	afx_msg void OnViewDepot(UINT nID);
	afx_msg void OnTimer(UINT nIDEvent);
	afx_msg void OnUpdateJobNew(CCmdUI* pCmdUI);
    afx_msg void OnUpdateBranchNew(CCmdUI* pCmdUI);
    afx_msg void OnUpdateLabelNew(CCmdUI* pCmdUI);
    afx_msg void OnJobNew();
    afx_msg void OnBranchNew();
    afx_msg void OnLabelNew();
	afx_msg void OnUpdateClientEditmy(CCmdUI* pCmdUI);
	afx_msg void OnClientEditmy();
	afx_msg void OnUpdateUserEditmy(CCmdUI* pCmdUI);
	afx_msg void OnUserEditmy();
	afx_msg void OnSysColorChange();
	afx_msg void OnUpdateFileAdd(CCmdUI* pCmdUI);
	afx_msg void OnFileAdd();
	afx_msg void OnUpdateClientspecNew(CCmdUI* pCmdUI);
	afx_msg void OnClientspecNew();
	afx_msg void OnUpdateSubmittedActivate(CCmdUI* pCmdUI);
	afx_msg void OnUpdateUserNew(CCmdUI* pCmdUI);
	afx_msg void OnUserNew();
	afx_msg void OnUpdateUserPassword(CCmdUI* pCmdUI);
	afx_msg void OnUserPassword();
	afx_msg void OnUpdateMruPcu(CCmdUI* pCmdUI);
	afx_msg void OnMruPcu0();
	afx_msg void OnMruPcu1();
	afx_msg void OnMruPcu2();
	afx_msg void OnMruPcu3();
	afx_msg void OnMruPcu4();
	afx_msg void OnMruPcu5();
	afx_msg void OnMruPcu6();
	afx_msg void OnMruPcu7();
	afx_msg void OnMruPcu8();
	afx_msg void OnMruPcu9();
	afx_msg void OnUpdateMruPcuHdr(CCmdUI* pCmdUI);
	afx_msg void OnShowDeletedFiles();
	afx_msg void OnUpdateShowDeletedFiles(CCmdUI* pCmdUI);
	afx_msg void OnSortByExtension();
	afx_msg void OnUpdateSortByExtension(CCmdUI* pCmdUI);
	afx_msg void OnEditPaste();
	afx_msg void OnUpdateEditPaste(CCmdUI* pCmdUI);
	afx_msg void OnUpdateViewWarnAndErrs(CCmdUI* pCmdUI);
	afx_msg void OnViewWarnAndErrs() ;
	afx_msg void OnUpdatePositionToPattern(CCmdUI* pCmdUI);
	afx_msg void OnPositionToPattern();
	afx_msg void OnUpdatePositionToPrev(CCmdUI* pCmdUI);
	afx_msg void OnPositionToPrev();
	afx_msg void OnUpdatePositionToNext(CCmdUI* pCmdUI);
	afx_msg void OnPositionToNext();
	afx_msg void OnUpdateWinExplore(CCmdUI* pCmdUI);
	afx_msg void OnWinExplore();
	afx_msg void OnUpdateCmdPrompt(CCmdUI* pCmdUI);
	afx_msg void OnCmdPrompt();
	afx_msg void OnCustomizeTools();
	afx_msg void OnUpdateToolsImport(CCmdUI* pCmdUI);
	afx_msg void OnToolsImport();
	afx_msg void OnUpdateToolsExport(CCmdUI* pCmdUI);
	afx_msg void OnToolsExport();
	afx_msg void OnPageSetup();
	afx_msg void OnUpdateMakeDefaultPcu(CCmdUI* pCmdUI);
	afx_msg void OnMakeDefaultPcu();
	afx_msg void OnMenuSelect( UINT nItemID, UINT nFlags, HMENU hSysMenu );
	afx_msg void OnUpdateViewChgsByUser(CCmdUI* pCmdUI);
	afx_msg void OnViewChgsByUser();
	afx_msg void OnUpdateViewChgsByClient(CCmdUI* pCmdUI);
	afx_msg void OnViewChgsByClient();
	afx_msg void OnUpdateDescribeChg(CCmdUI* pCmdUI);
	afx_msg void OnDescribeChg();
	afx_msg void OnUpdateDescribeJob(CCmdUI* pCmdUI);
	afx_msg void OnDescribeJob();
	afx_msg void OnUpdateBookmarks(CCmdUI* pCmdUI);
	afx_msg void OnBookmarks();
	afx_msg void OnUpdateOrganizeBookmarks(CCmdUI* pCmdUI);
	afx_msg void OnOrganizeBookmarks();
	afx_msg void OnUpdateFavorites(CCmdUI* pCmdUI);
	afx_msg void OnUpdateAddFavorite(CCmdUI* pCmdUI);
	afx_msg void OnAddFavorite();
	afx_msg void OnUpdateLogout(CCmdUI* pCmdUI);
	afx_msg void OnLogout();
	afx_msg void OnUpdateOrganizeFavorites(CCmdUI* pCmdUI);
	afx_msg void OnOrganizeFavorites();
	afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
	afx_msg void OnActivateApp(BOOL bActive, DWORD dwThreadID);
	afx_msg void OnParentNotify(UINT message, LPARAM lParam);
	afx_msg LONG OnFindReplace(WPARAM wParam, LPARAM lParam);
	afx_msg void OnUpdateMenuWithIcon(CCmdUI* pCmdUI);
	afx_msg void OnUpdateViewUpdate(CCmdUI* pCmdUI);
	afx_msg void OnViewUpdate();
	afx_msg void OnUpdateCancelCommand(CCmdUI* pCmdUI);
	afx_msg void OnCancelCommand();
	afx_msg void OnCancelButton();
	afx_msg void OnUpdateCloseAllModelessDlgs(CCmdUI* pCmdUI);
	afx_msg void CloseAllModelessDlgs();

	void ImportTools(CString *filename, CString *errorTxt);
	void OnUpdateTool(CCmdUI* pCmdUI);
	void OnTool(UINT nID);
	void OnUpdateBkMk(CCmdUI* pCmdUI);
	void OnBkMk(UINT nID);
	void OnUpdateFav(CCmdUI* pCmdUI);
	void OnFav(UINT nID);

	LRESULT OnP4InitInfo(WPARAM wParam, LPARAM lParam);
	LRESULT OnStatusAdd(WPARAM wParam, LPARAM lParam);
	LRESULT OnStatusAddArray(WPARAM wParam, LPARAM lParam);
	LRESULT OnStatusClear(WPARAM wParam, LPARAM lParam);
	LRESULT OnExternalActivation(WPARAM wParam, LPARAM lParam);
	LRESULT OnExternalSendcmd(WPARAM wParam, LPARAM lParam);
	LRESULT OnExternalRplycmd(WPARAM wParam, LPARAM lParam);
	LRESULT OnClientError(WPARAM wParam, LPARAM lParam);
	LRESULT OnP4ListOp(WPARAM wParam, LPARAM lParam);
	LRESULT OnP4FileInformation(WPARAM wParam, LPARAM lParam);
	LRESULT OnP4Diff(WPARAM wParam, LPARAM lParam);
	LRESULT OnNewClient(WPARAM wParam, LPARAM lParam);
	LRESULT OnNewUser(WPARAM wParam, LPARAM lParam);
	LRESULT OnUserPasswordDlg( WPARAM wParam, LPARAM lParam );
	LRESULT OnBrowseClientsCallBack(WPARAM wParam, LPARAM lParam);
	LRESULT OnP4DialogDestroy(WPARAM wParam, LPARAM lParam);
	LRESULT OnP4HelperApp(WPARAM wParam, LPARAM lParam);
	LRESULT OnP4OptionsDlg(WPARAM wParam, LPARAM lParam);
	LRESULT OnActivateModeless(WPARAM wParam, LPARAM lParam);

private:
	void EditConnectionParam( CCmdUI* pCmdUI, const CString & );
	BOOL m_ShowOptionsDlg;
	void OnMruPcu(int nbr);
	void OnNew();
	void OnFileRevisionhistory();
	LPTSTR GetNextToolToken(LPTSTR pStr, CString &token);
};

static UINT WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);


/////////////////////////////////////////////////////////////////////////////

BOOL CALLBACK ChildSetRedraw(HWND hwnd, LPARAM lParam);

/////////////////////////////////////////////////////////////////////////////

extern CWnd *MainFrameCWnd;

inline CMainFrame * MainFrame()
{
    CMainFrame * mainWnd = (CMainFrame *)AfxGetMainWnd();
	ASSERT((mainWnd && (mainWnd)->IsKindOf(RUNTIME_CLASS(CMainFrame))) || !mainWnd);
    return mainWnd;
}
# Change User Description Committed
#1 19924 YourUncleBob Populate -o //guest/perforce_software/p4win/...
//guest/YourUncleBob/p4win/.....
//guest/perforce_software/p4win/main/gui/MainFrm.h
#1 16169 perforce_software Move files to follow new path scheme for branches.
//guest/perforce_software/p4win/gui/MainFrm.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.