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

📄 gpexporter.cpp

📁 管理项目进度工具的原代码
💻 CPP
字号:
// GPExporter.cpp: implementation of the CGPExporter class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GPExport.h"
#include "GPExporter.h"

#include "..\shared\xmlfileex.h"
#include "..\todolist\tdlschemadef.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGPExporter::CGPExporter()
{

}

CGPExporter::~CGPExporter() 
{

}

bool CGPExporter::Export(const ITaskList* pSrcTaskFile, const char* szDestFilePath)
{
	CXmlFile fileDest("Tasks");

	// export first task
	ExportTask(pSrcTaskFile, pSrcTaskFile->GetFirstTask(), fileDest.Root());

	// save result
	VERIFY (fileDest.Save(szDestFilePath));

	return true;
}

void CGPExporter::ExportTask(const ITaskList* pSrcTaskFile, HTASKITEM hTask, CXmlItem* pXIDestParent)
{
	if (!hTask)
		return;

	// create a new item corresponding to pXITask at the dest
	CXmlItem* pXIDestItem = pXIDestParent->AddItem("task");

	// copy across the appropriate attributes
	pXIDestItem->AddItem("id", (int)pSrcTaskFile->GetTaskID(hTask));
	pXIDestItem->AddItem("name", pSrcTaskFile->GetTaskTitle(hTask));

	time_t tStart = pSrcTaskFile->GetTaskStartDate(hTask);

	if (tStart)
	{
		COleDateTime date(tStart);
		pXIDestItem->AddItem("start", date.Format("%d/%m/%Y"));

		time_t tDue = pSrcTaskFile->GetTaskDueDate(hTask);

		if (tDue > tStart)
			pXIDestItem->AddItem("duration", (int)((tDue - tStart) / (24 * 60 * 60)));
	}

	time_t tDone = pSrcTaskFile->GetTaskDoneDate(hTask);

	if (tDone)
	{
		pXIDestItem->AddItem("complete", "100");
		pXIDestItem->AddItem("priority", "-1");
	}
	else
	{
		pXIDestItem->AddItem("complete", pSrcTaskFile->GetTaskPercentDone(hTask, TRUE));

		int nPriority = pSrcTaskFile->GetTaskPriority(hTask, TRUE);
		
		if (nPriority <= 3)
			pXIDestItem->AddItem("priority", 0); // low
		else if (nPriority <= 6)
			pXIDestItem->AddItem("priority", 1); // medium
		else
			pXIDestItem->AddItem("priority", 2); // high
	}
	
	// dependency
	CString sDepends = pSrcTaskFile->GetTaskAttribute(hTask, TDL_TASKDEPENDENCY);

	if (!sDepends.IsEmpty())
	{
		int nDelim = sDepends.Find('?');

		if (nDelim == -1) // must be a dependency in the same tasklist
		{
			CXmlItem* pXIDepends = pXIDestItem->AddItem("depend");

			pXIDepends->AddItem("id", sDepends);
			pXIDepends->AddItem("type", "3");
		}
	}

	// file/weblink
	CString sFileRef = pSrcTaskFile->GetTaskFileReferencePath(hTask);
	sFileRef.TrimLeft();

	if (!sFileRef.IsEmpty())
	{
		// web or file link?
		if (sFileRef.Find(":\\") == 1 || sFileRef.Find("\\\\") == 0)
			sFileRef = "file://" + sFileRef;

		sFileRef.Replace(" ", "%20");

		pXIDestItem->AddItem("webLink", sFileRef);
	}

	// comments
	const char* szComments = pSrcTaskFile->GetTaskComments(hTask);

	if (szComments && *szComments)
		pXIDestItem->AddItem("notes", szComments, TRUE);
	
	// copy across first child
	ExportTask(pSrcTaskFile, pSrcTaskFile->GetFirstTask(hTask), pXIDestItem);

	// copy across first sibling
	ExportTask(pSrcTaskFile, pSrcTaskFile->GetNextTask(hTask), pXIDestParent);
}

⌨️ 快捷键说明

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