⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vssreporterdlg.cpp

📁 自动化编译工具代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// vssreporterDlg.cpp : implementation file
//

#include "stdafx.h"
#include "vssreporter.h"
#include "vssreporterDlg.h"
//#include "ConfigDiffToolDlg.h"

#include "deferwndmove.h"
#include <atlbase.h>

#include "DlgProject.h"


#include "CommonFunction.h"
using namespace CCommonFunction;

#define COMPILE_MULTIMON_STUBS
#include <multimon.h>

#include <direct.h>
#include <mmsystem.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CVssreporterDlg dialog

//ICO
enum { UNKNOWN = -1, CREATED, MODIFED, LABELLED, DELETED };
//File list
enum { FILENAME, MODDATE };
LPCTSTR COLUMN[] = { "Name", "Date"};
//Config list
enum { PROJECTNAME, VSSPATH, PROJECTFILE, BUILDTYPE, VCVERSION};
LPCTSTR CONFIGCOLUMN[] = { "ProjectName", "VSSPath", "ProjectFile", "BuildType", "VcVersion"};

CVssreporterDlg::CVssreporterDlg(const CString &strConfigFile,
								 CWnd* pParent)
	: CDialog(CVssreporterDlg::IDD, pParent)
	, m_sizeOrg(0, 0)
	, m_strXMLConfigFile(strConfigFile)
{
	//{{AFX_DATA_INIT(CVssreporterDlg)
	//}}AFX_DATA_INIT

	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_sCurVSSPrjPath.Empty();

	m_ilFolders.Create(IDB_FOLDERS, 18, 1, RGB(255, 0, 0));
	m_ilResults.Create(IDB_RESULTS, 16, 1, RGB(255, 0, 0));

	m_pConfig  = new CConfigsType;
	*m_pConfig = m_pConfigXML.Load(strConfigFile);
}

CVssreporterDlg::~CVssreporterDlg()
{
	delete m_pConfig;
}

void CVssreporterDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CVssreporterDlg)
	DDX_Control(pDX, IDC_CONFIGLIST, m_lcConfigs);
	DDX_Control(pDX, IDC_FILELIST, m_lcFiles);
	DDX_Control(pDX, IDC_VSSTREE, m_tcVSS);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CVssreporterDlg, CDialog)
	//{{AFX_MSG_MAP(CVssreporterDlg)
	ON_NOTIFY(TVN_SELCHANGED, IDC_VSSTREE, OnSelchangedVsstree)
	ON_WM_CLOSE()
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_ADDCONFIG, OnAddconfig)
	ON_BN_CLICKED(IDC_DELETECONFIG, OnDeleteconfig)
	ON_NOTIFY(HDN_ITEMCLICK, IDC_CONFIGLIST, OnItemclickConfiglist)
	ON_NOTIFY(HDN_ITEMCLICK, IDC_FILELIST, OnItemclickFilelist)
	ON_WM_CONTEXTMENU()
	ON_BN_CLICKED(IDC_EDIT, OnEdit)
	//}}AFX_MSG_MAP
	ON_WM_SIZE()
	ON_WM_GETMINMAXINFO()
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CVssreporterDlg message handlers

BOOL CVssreporterDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
    if (!IsVSSRegistered())
    {
		MessageBox("VSS not registration.", "Error", MB_OK | MB_ICONERROR);
		PostMessage(WM_CLOSE);
		return FALSE;
    }

	//Init vsstree
	m_tcVSS.SetImageList(&m_ilFolders, TVSIL_NORMAL);
	CVSSInfoType vssInfo = m_pConfig->GetVSSInfo();
	if (!m_tcVSS.OpenDatabase(CString(vssInfo.GetDataBasePath()), 
							  CString(vssInfo.GetUserName()),
							  CString(vssInfo.GetPassword())))
	{
		CString strMsg;
		strMsg.Format("Open vss database <%s> error!\nPlease check config xml file is valid?",
					   CString(vssInfo.GetDataBasePath()));
		MessageBox(strMsg, "Error", MB_OK | MB_ICONERROR);
		PostMessage(WM_CLOSE);
		return FALSE;
	}

	//Files list
	m_lcFiles.SetImageList(&m_ilResults, LVSIL_SMALL);
	m_lcFiles.InsertColumn(FILENAME, COLUMN[FILENAME], LVCFMT_LEFT, 100);
	m_lcFiles.InsertColumn(MODDATE, COLUMN[MODDATE], LVCFMT_LEFT, 130);
	m_lcFiles.SetExtendedStyle(m_lcFiles.GetExtendedStyle() | LVS_EX_FULLROWSELECT);

	// ensure vss is registered and if not allow user to navigate to it
	m_lcConfigs.SetImageList(&m_ilResults, LVSIL_SMALL);
	m_lcConfigs.InsertColumn(PROJECTNAME,	CONFIGCOLUMN[PROJECTNAME],	LVCFMT_LEFT, 100);
	m_lcConfigs.InsertColumn(VSSPATH,		CONFIGCOLUMN[VSSPATH],		LVCFMT_LEFT, 200);
	m_lcConfigs.InsertColumn(PROJECTFILE,	CONFIGCOLUMN[PROJECTFILE],	LVCFMT_LEFT, 100);
	m_lcConfigs.InsertColumn(BUILDTYPE,		CONFIGCOLUMN[BUILDTYPE],	LVCFMT_LEFT, 100);
	m_lcConfigs.InsertColumn(VCVERSION,		CONFIGCOLUMN[VCVERSION],	LVCFMT_LEFT, 100);
	m_lcConfigs.SetExtendedStyle(m_lcConfigs.GetExtendedStyle() | LVS_EX_FULLROWSELECT);
	FlashConfigsList();

	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	//	m_lcConfigs
	RegLoadSettings();

	// position resize icon as close to bottom left as pos
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CVssreporterDlg::FlashConfigsList()
{
	m_lcConfigs.DeleteAllItems();

	CTestProjectsType projects = m_pConfig->GetTestProjects();
	for (int i = 0; i < projects.GetTestProjectCount(); i++)
	{
		CTestProjectType  project  = projects.GetTestProjectAt(i);

		int nIndex = m_lcConfigs.InsertItem(m_lcConfigs.GetItemCount() == 0 ? 1 : m_lcConfigs.GetItemCount()
											, "", LABELLED);
		BOOL bOk = FALSE;
		bOk = m_lcConfigs.SetItemText(nIndex, PROJECTNAME	, CString(project.GetProjectName()));
		bOk = m_lcConfigs.SetItemText(nIndex, VSSPATH		, CString(project.GetVSSPath()));
		bOk = m_lcConfigs.SetItemText(nIndex, PROJECTFILE	, CString(project.GetProjectFile()));
		bOk = m_lcConfigs.SetItemText(nIndex, BUILDTYPE	, CString(project.GetBuildType()));
		bOk = m_lcConfigs.SetItemText(nIndex, VCVERSION	, CString(project.GetProjectVersion()));
	}
 
	UpdateData(FALSE);
}

void CVssreporterDlg::OnOK()
{
	CDialog::OnOK();
	RegSaveSettings();
}

void CVssreporterDlg::OnCancel()
{
	// do nothing else
}

void CVssreporterDlg::RegSaveSettings()
{
	// pos
	WINDOWPLACEMENT wp;
	GetWindowPlacement(&wp);

	AfxGetApp()->WriteProfileInt("Pos", "TopLeft", MAKELPARAM(wp.rcNormalPosition.left, wp.rcNormalPosition.top));
	AfxGetApp()->WriteProfileInt("Pos", "BottomRight", MAKELPARAM(wp.rcNormalPosition.right, wp.rcNormalPosition.bottom));
}

void CVssreporterDlg::RegLoadSettings()
{
	// pos
	WINDOWPLACEMENT wp;
	GetWindowPlacement(&wp);
	
	DWORD dwTopLeft     = (DWORD)AfxGetApp()->GetProfileInt("Pos", "TopLeft", -1);
	DWORD dwBottomRight = (DWORD)AfxGetApp()->GetProfileInt("Pos", "BottomRight", -1);
	
	if (dwTopLeft != -1 && dwBottomRight != -1)
	{
		CRect rect(LOWORD(dwTopLeft), HIWORD(dwTopLeft), LOWORD(dwBottomRight), HIWORD(dwBottomRight));
		
		// ensure this intersects with the desktop
		if (NULL != MonitorFromRect(rect, MONITOR_DEFAULTTONULL))
		{
			wp.rcNormalPosition = rect;
			wp.showCmd = SW_HIDE;
			
			SetWindowPlacement(&wp);
		}
	}
}

void CVssreporterDlg::OnSelchangedVsstree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;

	m_sCurVSSPrjPath = m_tcVSS.GetSelectedProject();

	UpdateFileList(m_sCurVSSPrjPath);

	*pResult = 0;
}

void CVssreporterDlg::UpdateFileList(const CString &strCurProject)
{
	ASSERT(!strCurProject.IsEmpty());
	if (strCurProject == "$/")
		return;

	IVSSItemPtr pItem = m_tcVSS.m_vssdb->GetVSSItem(_bstr_t(strCurProject.AllocSysString()), FALSE);
	ASSERT(pItem->GetType() == VSSITEM_PROJECT);	

	m_lcFiles.DeleteAllItems();

	IVSSItemsPtr  pItems = pItem->GetItems(FALSE);
	for (int i = 1; i <= pItems->GetCount(); i++)
	{
		IVSSItemPtr pSubItem = pItems->GetItem(CComVariant(i));
		ASSERT(pSubItem != NULL);

		if (pSubItem->GetType() == VSSITEM_PROJECT)
			continue;
		
		CString strSubItemName   = pSubItem->GetName().copy();
		if (!IsProjectFile(strSubItemName))
			continue;

		CString strData = GetVSSItemLastTime(pSubItem).Format();

		int nIndex = m_lcFiles.InsertItem(m_lcFiles.GetItemCount(), "", CREATED);
		m_lcFiles.SetItemText(nIndex, FILENAME, strSubItemName);
		m_lcFiles.SetItemText(nIndex, MODDATE, strData);
	}

	if (m_lcFiles.GetItemCount() > 0)
		m_lcFiles.SetItemState(0, LVIS_FOCUSED | LVIS_SELECTED, 0x000F);
}

BOOL		CVssreporterDlg::IsProjectFile(const CString &strFileName)
{
	const CString strExtName = GetFileExtName(strFileName);
	
	return		strExtName == ".sln" 
			||	strExtName == ".dsw"
			||	strExtName == ".dsp"
			;
}

COleDateTime  CVssreporterDlg::GetVSSItemLastTime(IVSSItemPtr pItem)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -